'===========================================================================
' Subject: TEXT VIEWER W/HYPERLINKS           Date: 06-30-98 (14:25)       
'  Author: The ABC Programmer                 Code: QB, PDS                
'  Origin: voxel@edmc.net                   Packet: TEXT.ABC
'===========================================================================
'--------------------------8<----CUT HERE---->8-------------------------------
Cut and save as test.txt or whatever name pleases you...
This is just a sample of the ^|14Colors ^|07man!

^$Exit To Main Menu^$

1.^$testlink Testlink will not show^$
2.^$notshown Move cursor here!!!^$

^|15H^|14ellow
^|28How dare you flash ^|31me!

Please visit my homepage ^$homepage http://www.edmc.net/~voxel/^$

This "text viewer/hyperlink program" was brought to you by William Yu.
No other person gives you more bugs or headaches, than with his programs.
Please use and distribute freely, because I know this doesn't work properly
and the whole world is just waiting to e-mail me about it!
'--------------------------8<----CUT HERE---->8-------------------------------

'*********************************************************************
' HYPERV.BAS by William Yu  (07-18-95)
' The not so BASIC text viewer... with hyperlinks (sort of).
' This text viewer runs as is, or with special markers (like in HTML)
' Only problem is, this viewer doesn't work properly, go figure ;-)
' Anyway, I haven't done anything with this thing in 3 years, so if
' you want to expand on it, by all means, it's public domain, do
' whatever you want with it.
'*********************************************************************
DEFINT A-Z
'$DYNAMIC
DECLARE SUB DrawBox (X%, Y%, XX%, YY%, C%, BC%, Solid%, CharSet%)
DECLARE SUB ViewText (FileName$, FOREGROUND, BACKGROUND)
DECLARE SUB PrintChar (CharValue)

TYPE RegType
        ax      AS INTEGER
        bx      AS INTEGER
        cx      AS INTEGER
        dx      AS INTEGER
        bp      AS INTEGER
        si      AS INTEGER
        di      AS INTEGER
        flags   AS INTEGER
END TYPE

DECLARE SUB INTERRUPT (IntNo AS INTEGER, InRegs AS RegType, OutRegs AS RegType)

CLS : SCREEN 0, 0, 0, 0

FOREGROUND = 7: BACKGROUND = 1

IF COMMAND$ = "" THEN
  PRINT "USAGE: HYPERV [FileName.Ext]"
  PRINT
  A$ = INPUT$(1)
  CALL ViewText("test.txt", FOREGROUND, BACKGROUND)
ELSE
  CALL ViewText(COMMAND$, FOREGROUND, BACKGROUND)
END IF

REM $STATIC
SUB DrawBox (X%, Y%, XX%, YY%, C%, BC%, Solid%, CharSet%)

'==================================
'     Available Character Sets
'----------------------------------
'  "É", "Í", "»", "º", "È", "¼"
'  "Ú", "Ä", "¿", "³", "À", "Ù"
'  "Õ", "Í", "¸", "³", "Ô", "¾"
'  "Ö", "Ä", "·", "º", "Ó", "½"
'  "Û", "ß", "Û", "Û", "ß", "ß"
'==================================

IF CharSet% = 1 THEN
  Char1$ = "Ú"
  CharHoz$ = "Ä"
  Char2$ = "¿"
  CharVert$ = "³"
  Char3$ = "À"
  Char4$ = "Ù"
END IF

COLOR C%, BC%
A = (XX% - X%) - 1
LOCATE Y%, X%: PRINT Char1$; STRING$(A, CharHoz$); Char2$
FOR I = Y% + 1 TO YY% - 1
  LOCATE I, X%: PRINT CharVert$;
  IF Solid% = 1 THEN PRINT SPACE$(A);
  LOCATE I, XX%: PRINT CharVert$;
NEXT I
LOCATE YY%, X%: PRINT Char3$; STRING$(A, CharHoz$); Char4$;

END SUB

SUB PrintChar (CharValue)

DIM InRegs AS RegType, OutRegs AS RegType

InRegs.ax = &H200
InRegs.dx = ASC(CHR$(CharValue))
CALL INTERRUPT(&H21, InRegs, OutRegs)

END SUB

SUB ViewText (FileName$, FOREGROUND, BACKGROUND)
DIM TEXT$(1525)

CALL DrawBox(1, 2, 80, 25, 15, BACKGROUND, 1, 1)
LOCATE 1, 1, , 2, 4: COLOR 15, 7: PRINT STRING$(80, 0)
COLOR 0
LOCATE 1, 2: PRINT "<"; : COLOR 15: PRINT "ESC"; : COLOR 0: PRINT "> Menu"
LOCATE 1, 67: PRINT "³ Line:      ³"
LOCATE 3, 80: COLOR 0, 7: PRINT CHR$(24)
FOR X = 4 TO 23
  LOCATE X, 80: COLOR 7, 0: PRINT CHR$(178)
NEXT X
LOCATE 4, 80: COLOR 0: PRINT " "
LOCATE 24, 80: COLOR 0, 7: PRINT CHR$(25);

OPEN FileName$ FOR INPUT AS #1
THELENGTH& = LOF(1)
LONEBLOCK& = THELENGTH& / 77
ACULBLOCK& = LONEBLOCK&
WHOLELENGTH& = 0
B = 3
PCOPY 0, 3
CALL DrawBox(3, 11, 77, 14, 15, 3, 1, 1)
COLOR 15: LOCATE 11, 8: PRINT "Loading "; FileName$
COLOR 8: LOCATE 11, 44: PRINT " Blocks: "
COLOR 0
LOCATE 12, 4: PRINT "0%"
LOCATE 12, 6: PRINT STRING$(33, CHR$(250))
LOCATE 12, 73: PRINT "100%"
LOCATE 12, 42: PRINT STRING$(31, CHR$(250))
LOCATE 12, 39: PRINT "50%"
COLOR 7, 8: LOCATE 13, 4: PRINT STRING$(73, "²")
I = 1: LOCATE , , 0
DO
  LINE INPUT #1, TEXT$(I)
  LENGTHOFTEXT = LEN(TEXT$(I))
  Pb = INSTR(TEXT$(I), CHR$(12))
  IF Pb THEN
    TEXT$(I) = STRING$(78, "-")
  END IF
  Tb = INSTR(TEXT$(I), CHR$(9))
  IF Tb THEN
    DO
      TEXT$(I) = LEFT$(TEXT$(I), Tb - 1) + SPACE$(4) + MID$(TEXT$(I), Tb + 1)
      Tb = INSTR(TEXT$(I), CHR$(9))
    LOOP WHILE Tb
  END IF
  WHOLELENGTH& = WHOLELENGTH& + LENGTHOFTEXT
  IF WHOLELENGTH& >= ACULBLOCK& AND B <> 76 THEN
    DO
      B = B + 1
      LOCATE 13, B: COLOR 12: PRINT "Û"
      ACULBLOCK& = ACULBLOCK& + LONEBLOCK&
    LOOP UNTIL ACULBLOCK& > WHOLELENGTH&
  END IF
  LOCATE 11, 53: COLOR 0, 3: PRINT WHOLELENGTH&; : COLOR 8: PRINT "of"; : COLOR 0: PRINT THELENGTH&
  I = I + 1
LOOP UNTIL EOF(1) OR I = 1501
CLOSE #1

IF I = 1501 THEN
  CALL DrawBox(20, 6, 60, 9, 12, 4, 1, 1)
  LOCATE 7, 22: COLOR 10, 4: PRINT "ATTENTION: "; : COLOR 15: PRINT "About";
  COLOR 14: PRINT RTRIM$(STR$(INT((WHOLELENGTH& / THELENGTH&) * 100))); "%";
  COLOR 15: PRINT " of this file has"
  LOCATE 8, 33: PRINT "been successfully loaded."
  DO
  LOOP UNTIL INKEY$ <> ""
ELSE
  LOCATE 13, 4: COLOR 12: PRINT STRING$(73, "Û")
END IF
PCOPY 3, 0
MAX = I
BLOCK = INT(MAX / 20)
INITBLOCK = BLOCK + 1
BLOCKX = 4

DO
  TEXT$(I) = ""
  I = I + 1
LOOP UNTIL MAX + 22

COLOR FOREGROUND, BACKGROUND

FOR I = 1 TO 22
  LOCATE I + 2, 2
  CL = INSTR(TEXT$(I), "^|")
  ENT = INSTR(TEXT$(I), "^$")
  IF INSTR(CL + 1, TEXT$(I), "^|") = 0 THEN CL = 0
  IF INSTR(ENT + 2, TEXT$(I), "^$") = 0 THEN ENT = 0
  IF CL THEN
      COLOR FOREGROUND, BACKGROUND
      PRINT LEFT$(TEXT$(I), CL - 1);
      COLR = VAL(MID$(TEXT$(I), CL + 2, 2))
      COLOR COLR
      CL2 = INSTR(CL + 1, TEXT$(I), "^|")
      PRINT MID$(TEXT$(I), CL + 4, CL2 - CL - 4);
      COLR = VAL(MID$(TEXT$(I), CL2 + 2, 2))
      IF UCASE$(MID$(TEXT$(I), CL2 + 2, 2)) = "BC" THEN COLR = FOREGROUND
      COLOR COLR
      PRINT MID$(TEXT$(I), CL2 + 4, 78 - CL2 + 5);
      COLOR FOREGROUND
  ELSEIF ENT THEN
    ENT2 = INSTR(ENT + 2, TEXT$(I), "^$")
    COLOR FOREGROUND
    PRINT LEFT$(TEXT$(I), ENT - 1);
    COLOR 15
    LENT = ENT2 - (ENT + 10)
    PRINT MID$(TEXT$(I), ENT + 10, LENT);
    COLOR FOREGROUND
    PRINT MID$(TEXT$(I), ENT2 + 2, 78 - ENT2 + 11);
  ELSE
    COLOR FOREGROUND
    IF TEXT$(I) <> STRING$(78, "-") THEN
      PRINT LEFT$(TEXT$(I), 78);
    ELSE
      CALL PrintChar(12)
      LOCATE , 3: PRINT SPACE$(76);
    END IF
  END IF
NEXT I
I = 2
LOCATE 1, 74: COLOR 15, 7: PRINT I - 1
LOCATE 3, 2, 1: TXTRIGHT = 1
POINTERX = 3: POINTERY = 2
COLOR 15, BACKGROUND

DO
  V$ = INKEY$
    IF V$ = CHR$(0) + "P" THEN GOSUB POINTERDOWN
    IF V$ = CHR$(0) + "H" THEN GOSUB POINTERUP
    IF V$ = CHR$(0) + "M" THEN GOSUB POINTERRIGHT
    IF V$ = CHR$(0) + "K" THEN GOSUB POINTERLEFT
    IF V$ = CHR$(0) + "Q" THEN GOSUB TEXTPAGEDOWN
    IF V$ = CHR$(0) + "I" THEN GOSUB TEXTPAGEUP
    IF V$ = CHR$(0) + "O" THEN
      I = MAX: GOSUB TEXTPAGEDOWN: LOCATE BLOCKX, 80: COLOR 7, 0: PRINT CHR$(178)
      LOCATE 23, 80: COLOR 0, 0: PRINT " "; : COLOR 15, 1
      BLOCKX = 23
      DO
      IF I >= BLOCK THEN
        BLOCK = BLOCK + INITBLOCK
      END IF
      LOOP UNTIL I < BLOCK
      LOCATE POINTERX, POINTERY, 1
    END IF
    IF V$ = CHR$(0) + "G" THEN
      TXTRIGHT = 1
      I = 1: BLOCK = INITBLOCK
      LOCATE 1, 74: COLOR 15, 7: PRINT " 1   "
      GOSUB TEXTPAGEUP
      LOCATE BLOCKX, 80: COLOR 7, 0: PRINT CHR$(178)
      BLOCKX = 4
      LOCATE BLOCKX, 80: COLOR 0, 0: PRINT " "
      LOCATE POINTERX, POINTERY, 1
    END IF
    IF V$ = CHR$(27) THEN GOSUB MENU
LOOP

POINTERDOWN:
  I = I + 1
  LOCATE 1, 74, 0: COLOR 15, 7: PRINT I - 1
  LOCATE POINTERX, POINTERY, 1
  IF I >= BLOCK AND BLOCKX <> 23 THEN
    LOCATE BLOCKX, 80, 0: COLOR 7, 0: PRINT CHR$(178); : BLOCKX = BLOCKX + 1
    LOCATE BLOCKX, 80, 0: COLOR , 0: PRINT " "; : COLOR , 1
    LOCATE POINTERX, POINTERY, 1
    BLOCK = BLOCK + INITBLOCK
  END IF
  ALMO = INSTR(TEXT$(I - 2), "^$")
  IF INSTR(ALMO + 2, TEXT$(I - 2), "^$") = 0 THEN ALMO = 0
  IF ALMO THEN
    ALMO2 = INSTR(ALMO + 2, TEXT$(I - 2), "^$")
    LOCATE , 2, 0
    COLOR FOREGROUND, BACKGROUND
    PRINT LEFT$(TEXT$(I - 2), ALMO - 1);
    COLOR 15, BACKGROUND
    LENT = ALMO2 - (ALMO + 10)
    PRINT MID$(TEXT$(I - 2), ALMO + 10, LENT);
    COLOR FOREGROUND, BACKGROUND
    PRINT MID$(TEXT$(I - 2), ALMO2 + 2, 78 - ALMO2 + 11);
    LL = LEN(TEXT$(I - 2))
    IF LL < 90 THEN PRINT SPACE$(78 - (LEN(TEXT$(I - 2)) - 12));
  END IF
  IF POINTERX = 24 THEN GOSUB TEXTDOWN ELSE POINTERX = POINTERX + 1
  ALMO = INSTR(TEXT$(I - 1), "^$")
  IF INSTR(ALMO + 2, TEXT$(I - 1), "^$") = 0 THEN ALMO = 0
  IF ALMO THEN
    ALMO2 = INSTR(ALMO + 2, TEXT$(I - 1), "^$")
    LOCATE POINTERX, 2, 0
    COLOR FOREGROUND, BACKGROUND
    PRINT LEFT$(TEXT$(I - 1), ALMO - 1);
    L = 2 + (ALMO - 1)
    DO
      CHAR$ = MID$(TEXT$(I - 1), ALMO + 10, 1)
      ALMO = ALMO + 1
      L = L + 1
    LOOP UNTIL CHAR$ <> " "
    LOCATE , L - 1
    COLOR 15, 4
    LENT = ALMO2 - (ALMO + 9)
    PRINT MID$(TEXT$(I - 1), ALMO + 9, LENT);
    COLOR FOREGROUND, BACKGROUND
    PRINT MID$(TEXT$(I - 1), ALMO2 + 2, 78 - ALMO2 + 11);
    LL = LEN(TEXT$(I - 1))
    IF LL < 90 THEN PRINT SPACE$(78 - (LL - 12));
  END IF
  COLOR 7: LOCATE POINTERX, POINTERY, 1
RETURN

POINTERUP:
  I = I - 1
  LOCATE 1, 74, 0: COLOR 15, 7: IF I <> 1 THEN PRINT I - 1 ELSE PRINT I
  LOCATE POINTERX, POINTERY, 1
  IF I <= BLOCK - INITBLOCK AND BLOCKX <> 4 THEN
    LOCATE BLOCKX, 80, 0: COLOR 7, 0: PRINT CHR$(178); : BLOCKX = BLOCKX - 1
    LOCATE BLOCKX, 80, 0: COLOR , 0: PRINT " "; : COLOR , 1
    LOCATE POINTERX, POINTERY, 1
    BLOCK = BLOCK - INITBLOCK
  END IF
  LOCATE , 2, 0
  ALMO = INSTR(TEXT$(I), "^$")
  IF INSTR(ALMO + 2, TEXT$(I), "^$") = 0 THEN ALMO = 0
  IF ALMO THEN
    ALMO2 = INSTR(ALMO + 2, TEXT$(I), "^$")
    COLOR FOREGROUND, BACKGROUND
    PRINT LEFT$(TEXT$(I), ALMO - 1);
    COLOR 15, BACKGROUND
    LENT = ALMO2 - (ALMO + 10)
    PRINT MID$(TEXT$(I), ALMO + 10, LENT);
    COLOR FOREGROUND, BACKGROUND
    PRINT MID$(TEXT$(I), ALMO2 + 2, 78 - ALMO2 + 11);
    LL = LEN(TEXT$(I))
    IF LL < 90 THEN PRINT SPACE$(78 - (LEN(TEXT$(I)) - 12));
  END IF
  IF POINTERX = 3 THEN GOSUB TEXTUP ELSE POINTERX = POINTERX - 1
  LOCATE POINTERX, 2, 0
  ALMO = INSTR(TEXT$(I - 1), "^$")
  IF INSTR(ALMO + 2, TEXT$(I - 1), "^$") = 0 THEN ALMO = 0
  IF ALMO THEN
    ALMO2 = INSTR(ALMO + 2, TEXT$(I - 1), "^$")
    COLOR FOREGROUND, BACKGROUND
    PRINT LEFT$(TEXT$(I - 1), ALMO - 1);
    L = 2 + (ALMO - 1)
    DO
      CHAR$ = MID$(TEXT$(I - 1), ALMO + 10, 1)
      ALMO = ALMO + 1
      L = L + 1
    LOOP UNTIL CHAR$ <> " "
    LOCATE , L - 1
    COLOR 15, 4
    LENT = ALMO2 - (ALMO + 9)
    PRINT MID$(TEXT$(I - 1), ALMO + 9, LENT);
    COLOR FOREGROUND, BACKGROUND
    PRINT MID$(TEXT$(I - 1), ALMO2 + 2, 78 - ALMO2 + 11);
    LL = LEN(TEXT$(I - 1))
    IF LL < 90 THEN PRINT SPACE$(78 - (LEN(TEXT$(I - 1)) - 12));
  END IF
  COLOR 7: LOCATE POINTERX, POINTERY, 1
RETURN

POINTERRIGHT:
  IF POINTERY = 79 THEN
    TXTRIGHT = TXTRIGHT + 1
    GOSUB TEXTRIGHT
  ELSE
    POINTERY = POINTERY + 1
  END IF
  COLOR 7: LOCATE POINTERX, POINTERY, 1
RETURN

POINTERLEFT:
  IF POINTERY = 2 AND TXTRIGHT = 1 THEN RETURN
  IF POINTERY = 2 THEN
    TXTRIGHT = TXTRIGHT - 1: GOSUB TEXTRIGHT
  ELSE
    POINTERY = POINTERY - 1
  END IF
  COLOR 7: LOCATE POINTERX, POINTERY, 1
RETURN

TEXTRIGHT:
  I = I - (POINTERX - 2)
  X = 3
  COLOR FOREGROUND, BACKGROUND: LOCATE , , 0
  DO
    SP = 0
    A = LEN(TEXT$(I)) - (TXTRIGHT - 1)
    IF A < 78 THEN SP = 78 - A
    IF A <= 0 THEN SP = 78
    LOCATE X, 2
  CL = INSTR(TEXT$(I), "^|")
  IF INSTR(CL + 1, TEXT$(I), "^|") = 0 THEN CL = 0
  ENT = INSTR(TEXT$(I), "^$")
  IF INSTR(ENT + 2, TEXT$(I), "^$") = 0 THEN ENT = 0
  IF CL OR ENT THEN
  ELSE
    IF TEXT$(I) <> STRING$(78, "-") THEN
      PRINT MID$(TEXT$(I), TXTRIGHT, 78); SPACE$(SP);
    ELSE
      IF TXTRIGHT = 1 THEN CALL PrintChar(12) ELSE PRINT " ";
    END IF
  END IF
    X = X + 1
    I = I + 1
  LOOP UNTIL X = 25
  I = I - (24 - POINTERX)
RETURN

TEXTDOWN:
  IF I > MAX + 1 THEN I = I - 1: RETURN
  I = I - 22
  X = 3
  COLOR FOREGROUND, BACKGROUND: LOCATE , , 0
  DO
    SP = 0
    A = LEN(TEXT$(I)) - (TXTRIGHT - 1)
    IF A < 78 THEN SP = 78 - A
    IF A <= 0 THEN SP = 78
    LOCATE X, 2
  CL = INSTR(TEXT$(I), "^|")
  ENT = INSTR(TEXT$(I), "^$")
  IF INSTR(CL + 1, TEXT$(I), "^|") = 0 THEN CL = 0
  IF INSTR(ENT + 2, TEXT$(I), "^$") = 0 THEN ENT = 0
  IF CL THEN
      COLOR FOREGROUND, BACKGROUND
      PRINT LEFT$(TEXT$(I), CL - 1);
      COLR = VAL(MID$(TEXT$(I), CL + 2, 2))
      COLOR COLR
      CL2 = INSTR(CL + 1, TEXT$(I), "^|")
      PRINT MID$(TEXT$(I), CL + 4, CL2 - CL - 4);
      COLR = VAL(MID$(TEXT$(I), CL2 + 2, 2))
      IF UCASE$(MID$(TEXT$(I), CL2 + 2, 2)) = "BC" THEN COLR = FOREGROUND
      COLOR COLR
      PRINT MID$(TEXT$(I), CL2 + 4, 78 - CL2 + 5);
      LL = LEN(TEXT$(I))
      IF LL < 82 THEN PRINT SPACE$(78 - (LEN(TEXT$(I)) - 8));
      COLOR FOREGROUND
  ELSEIF ENT THEN
    ENT2 = INSTR(ENT + 2, TEXT$(I), "^$")
    COLOR FOREGROUND
    PRINT LEFT$(TEXT$(I), ENT - 1);
    COLOR 15
    LENT = ENT2 - (ENT + 10)
    PRINT MID$(TEXT$(I), ENT + 10, LENT);
    COLOR FOREGROUND
    PRINT MID$(TEXT$(I), ENT2 + 2, 78 - ENT2 + 11);
    LL = LEN(TEXT$(I))
    IF LL < 90 THEN PRINT SPACE$(78 - (LEN(TEXT$(I)) - 12));
  ELSE
    IF TEXT$(I) <> STRING$(78, "-") THEN
      PRINT MID$(TEXT$(I), TXTRIGHT, 78); SPACE$(SP);
    ELSE
      IF TXTRIGHT = 1 THEN
        CALL PrintChar(12): LOCATE , 3: PRINT SPACE$(76);
      ELSE
        PRINT SPACE$(78);
      END IF
    END IF
  END IF
    X = X + 1
    I = I + 1
  LOOP UNTIL X = 25
RETURN

TEXTUP:
  IF I = 1 THEN I = I + 1: RETURN
  I = I - 1
  X = 3
  COLOR FOREGROUND, BACKGROUND: LOCATE , , 0
  DO
    SP = 0
    A = LEN(TEXT$(I)) - (TXTRIGHT - 1)
    IF A < 78 THEN SP = 78 - A
    IF A <= 0 THEN SP = 78
    LOCATE X, 2
  CL = INSTR(TEXT$(I), "^|")
  ENT = INSTR(TEXT$(I), "^$")
  IF INSTR(CL + 1, TEXT$(I), "^|") = 0 THEN CL = 0
  IF INSTR(ENT + 2, TEXT$(I), "^$") = 0 THEN ENT = 0
  IF CL THEN
      COLOR FOREGROUND, BACKGROUND
      PRINT LEFT$(TEXT$(I), CL - 1);
      COLR = VAL(MID$(TEXT$(I), CL + 2, 2))
      COLOR COLR
      CL2 = INSTR(CL + 1, TEXT$(I), "^|")
      PRINT MID$(TEXT$(I), CL + 4, CL2 - CL - 4);
      COLR = VAL(MID$(TEXT$(I), CL2 + 2, 2))
      IF UCASE$(MID$(TEXT$(I), CL2 + 2, 2)) = "BC" THEN COLR = FOREGROUND
      COLOR COLR
      PRINT MID$(TEXT$(I), CL2 + 4, 78 - CL2 + 5);
      LL = LEN(TEXT$(I))
      IF LL < 82 THEN PRINT SPACE$(78 - (LEN(TEXT$(I)) - 8));
      COLOR FOREGROUND
  ELSEIF ENT THEN
    ENT2 = INSTR(ENT + 2, TEXT$(I), "^$")
    COLOR FOREGROUND
    PRINT LEFT$(TEXT$(I), ENT - 1);
    COLOR 15
    LENT = ENT2 - (ENT + 10)
    PRINT MID$(TEXT$(I), ENT + 10, LENT);
    COLOR FOREGROUND
    PRINT MID$(TEXT$(I), ENT2 + 2, 78 - ENT2 + 11);
    LL = LEN(TEXT$(I))
    IF LL < 90 THEN PRINT SPACE$(78 - (LEN(TEXT$(I)) - 12));
  ELSE
    IF TEXT$(I) <> STRING$(78, "-") THEN
      PRINT MID$(TEXT$(I), TXTRIGHT, 78); SPACE$(SP);
    ELSE
      IF TXTRIGHT = 1 THEN
        CALL PrintChar(12): LOCATE , 3: PRINT SPACE$(76);
      ELSE
        PRINT SPACE$(78);
      END IF
    END IF
  END IF
    X = X + 1
    I = I + 1
  LOOP UNTIL X = 25
  I = I - 21
RETURN

TEXTPAGEDOWN:
  IF MAX < 23 THEN RETURN
  IF I >= MAX - 22 THEN
    I = MAX - 22: POINTERX = 24
  ELSE
    I = I + (24 - POINTERX)
  END IF
  X = 3
  COLOR FOREGROUND, BACKGROUND: LOCATE , , 0
  DO
    SP = 0
    A = LEN(TEXT$(I)) - (TXTRIGHT - 1)
    IF A < 78 THEN SP = 78 - A
    IF A <= 0 THEN SP = 78
    LOCATE X, 2
  CL = INSTR(TEXT$(I), "^|")
  ENT = INSTR(TEXT$(I), "^$")
  IF INSTR(CL + 1, TEXT$(I), "^|") = 0 THEN CL = 0
  IF INSTR(ENT + 2, TEXT$(I), "^$") = 0 THEN ENT = 0
  IF CL THEN
      COLOR FOREGROUND, BACKGROUND
      PRINT LEFT$(TEXT$(I), CL - 1);
      COLR = VAL(MID$(TEXT$(I), CL + 2, 2))
      COLOR COLR
      CL2 = INSTR(CL + 1, TEXT$(I), "^|")
      PRINT MID$(TEXT$(I), CL + 4, CL2 - CL - 4);
      COLR = VAL(MID$(TEXT$(I), CL2 + 2, 2))
      IF UCASE$(MID$(TEXT$(I), CL2 + 2, 2)) = "BC" THEN COLR = FOREGROUND
      COLOR COLR
      PRINT MID$(TEXT$(I), CL2 + 4, 78 - CL2 + 5);
      LL = LEN(TEXT$(I))
      IF LL < 82 THEN PRINT SPACE$(78 - (LEN(TEXT$(I)) - 8));
      COLOR FOREGROUND
  ELSEIF ENT THEN
    ENT2 = INSTR(ENT + 2, TEXT$(I), "^$")
    COLOR FOREGROUND
    PRINT LEFT$(TEXT$(I), ENT - 1);
    COLOR 15
    LENT = ENT2 - (ENT + 10)
    PRINT MID$(TEXT$(I), ENT + 10, LENT);
    COLOR FOREGROUND
    PRINT MID$(TEXT$(I), ENT2 + 2, 78 - ENT2 + 11);
    LL = LEN(TEXT$(I))
    IF LL < 90 THEN PRINT SPACE$(78 - (LEN(TEXT$(I)) - 12));
  ELSE
    IF TEXT$(I) <> STRING$(78, "-") THEN
      PRINT MID$(TEXT$(I), TXTRIGHT, 78); SPACE$(SP);
    ELSE
      IF TXTRIGHT = 1 THEN
        CALL PrintChar(12): LOCATE , 3: PRINT SPACE$(76);
      ELSE
        PRINT SPACE$(78);
      END IF
    END IF
  END IF
    X = X + 1
    I = I + 1
  LOOP UNTIL X = 25
  I = I - (24 - POINTERX)
  IF I <> MAX THEN
  DO
  IF I >= BLOCK AND BLOCKX <> 23 THEN
    LOCATE BLOCKX, 80, 0: COLOR 7, 0: PRINT CHR$(178); : BLOCKX = BLOCKX + 1
    LOCATE BLOCKX, 80, 0: COLOR , 0: PRINT " "; : COLOR , 1
    LOCATE POINTERX, POINTERY, 1
    BLOCK = BLOCK + INITBLOCK
  END IF
  LOOP UNTIL I < BLOCK + INITBLOCK
  END IF
  ALMO = INSTR(TEXT$(I - 1), "^$")
  IF INSTR(ALMO + 2, TEXT$(I - 1), "^$") = 0 THEN ALMO = 0
  IF ALMO THEN
    ALMO2 = INSTR(ALMO + 2, TEXT$(I - 1), "^$")
    LOCATE POINTERX, 2, 0
    COLOR FOREGROUND, BACKGROUND
    PRINT LEFT$(TEXT$(I - 1), ALMO - 1);
    L = 2 + (ALMO - 1)
    DO
      CHAR$ = MID$(TEXT$(I - 1), ALMO + 10, 1)
      ALMO = ALMO + 1
      L = L + 1
    LOOP UNTIL CHAR$ <> " "
    LOCATE , L - 1
    COLOR 15, 4
    LENT = ALMO2 - (ALMO + 9)
    PRINT MID$(TEXT$(I - 1), ALMO + 9, LENT);
    COLOR FOREGROUND, BACKGROUND
    PRINT MID$(TEXT$(I - 1), ALMO2 + 2, 78 - ALMO2 + 11);
    LL = LEN(TEXT$(I - 1))
    IF LL < 90 THEN PRINT SPACE$(78 - (LEN(TEXT$(I - 1)) - 12));
  END IF
  LOCATE 1, 74, 0: COLOR 15, 7: PRINT I - 1
  LOCATE POINTERX, POINTERY, 1
RETURN

TEXTPAGEUP:
  IF I <= 45 THEN
    POINTERX = 3: I = 1
  ELSE
    I = I - (20 + POINTERX)
  END IF
  X = 3
  COLOR FOREGROUND, BACKGROUND: LOCATE , , 0
  DO
    SP = 0
    A = LEN(TEXT$(I)) - (TXTRIGHT - 1)
    IF A < 78 THEN SP = 78 - A
    IF A <= 0 THEN SP = 78
    LOCATE X, 2
  CL = INSTR(TEXT$(I), "^|")
  ENT = INSTR(TEXT$(I), "^$")
  IF INSTR(CL + 1, TEXT$(I), "^|") = 0 THEN CL = 0
  IF INSTR(ENT + 2, TEXT$(I), "^$") = 0 THEN ENT = 0
  IF CL THEN
      COLOR FOREGROUND
      PRINT LEFT$(TEXT$(I), CL - 1);
      COLR = VAL(MID$(TEXT$(I), CL + 2, 2))
      COLOR COLR
      CL2 = INSTR(CL + 1, TEXT$(I), "^|")
      PRINT MID$(TEXT$(I), CL + 4, CL2 - CL - 4);
      COLR = VAL(MID$(TEXT$(I), CL2 + 2, 2))
      IF UCASE$(MID$(TEXT$(I), CL2 + 2, 2)) = "BC" THEN COLR = FOREGROUND
      COLOR COLR
      PRINT MID$(TEXT$(I), CL2 + 4, 78 - CL2 + 5);
      LL = LEN(TEXT$(I))
      IF LL < 82 THEN PRINT SPACE$(78 - (LEN(TEXT$(I)) - 8));
      COLOR FOREGROUND
  ELSEIF ENT THEN
    ENT2 = INSTR(ENT + 2, TEXT$(I), "^$")
    COLOR FOREGROUND
    PRINT LEFT$(TEXT$(I), ENT - 1);
    COLOR 15
    LENT = ENT2 - (ENT + 10)
    PRINT MID$(TEXT$(I), ENT + 10, LENT);
    COLOR FOREGROUND
    PRINT MID$(TEXT$(I), ENT2 + 2, 78 - ENT2 + 11);
    LL = LEN(TEXT$(I))
    IF LL < 90 THEN PRINT SPACE$(78 - (LEN(TEXT$(I)) - 12));
  ELSE
    IF TEXT$(I) <> STRING$(78, "-") THEN
      PRINT MID$(TEXT$(I), TXTRIGHT, 78); SPACE$(SP);
    ELSE
      IF TXTRIGHT = 1 THEN
        CALL PrintChar(12): LOCATE , 3: PRINT SPACE$(76);
      ELSE
        PRINT SPACE$(78);
      END IF
    END IF
  END IF
    X = X + 1
    I = I + 1
  LOOP UNTIL X = 25
  I = I - (24 - POINTERX)
  DO
  IF I <= BLOCK - INITBLOCK AND BLOCKX <> 4 THEN
    LOCATE BLOCKX, 80, 0: COLOR 7, 0: PRINT CHR$(178); : BLOCKX = BLOCKX - 1
    LOCATE BLOCKX, 80, 0: COLOR , 0: PRINT " "; : COLOR , 1
    LOCATE POINTERX, POINTERY, 1
    BLOCK = BLOCK - INITBLOCK
  END IF
  LOOP UNTIL I > BLOCK - INITBLOCK
  ALMO = INSTR(TEXT$(I - 1), "^$")
  IF INSTR(ALMO + 2, TEXT$(I - 1), "^$") = 0 THEN ALMO = 0
  IF ALMO THEN
    ALMO2 = INSTR(ALMO + 2, TEXT$(I - 1), "^$")
    LOCATE POINTERX, 2, 0
    COLOR FOREGROUND, BACKGROUND
    PRINT LEFT$(TEXT$(I - 1), ALMO - 1);
    L = 2 + (ALMO - 1)
    DO
      CHAR$ = MID$(TEXT$(I - 1), ALMO + 10, 1)
      ALMO = ALMO + 1
      L = L + 1
    LOOP UNTIL CHAR$ <> " "
    LOCATE , L - 1
    COLOR 15, 4
    LENT = ALMO2 - (ALMO + 9)
    PRINT MID$(TEXT$(I - 1), ALMO + 9, LENT);
    COLOR FOREGROUND, BACKGROUND
    PRINT MID$(TEXT$(I - 1), ALMO2 + 2, 78 - ALMO2 + 11);
    LL = LEN(TEXT$(I - 1))
    IF LL < 90 THEN PRINT SPACE$(78 - (LEN(TEXT$(I - 1)) - 12));
  END IF
  LOCATE 1, 74, 0: COLOR 15, 7: PRINT I - 1
  LOCATE POINTERX, POINTERY, 1
RETURN

MENU:
CALL DrawBox(1, 2, 80, 4, 15, 3, 1, 1)
END
RETURN

END SUB
