'===========================================================================
' Subject: ENGLISH CHARACTER SET VIEWER       Date: 06-28-00 (19:51)       
'  Author: Edward L. Blake                    Code: QB, QBasic, PDS        
'  Origin: blakee@cyanwerks.com             Packet: TEXT.ABC
'===========================================================================
' 1995-1996 Edward L. Blake
' Character Set Viewer (English Version)
' French version is included somewhere else
' Email: blakee@cyanwerks.com
'
DECLARE SUB PRINTER ()
DECLARE SUB MENU (A!)
DECLARE SUB CHANGEBAR (A$)
DECLARE SUB BCKGND ()
DECLARE SUB WIN (X1!, Y1!, X2!, Y2!, A$)
' $DYNAMIC
DIM C(255) AS STRING * 4
DIM D(255) AS STRING * 3
' $STATIC
DIM E$(50)
ON ERROR GOTO ERRAND

COLOR 5, 0
CLS
BCKGND
COLOR 7, 1
WIN 30, 9, 53, 13, ""
CHANGEBAR " ASCII character set viewer - 1996 Edward Blake                                 "
COLOR 7, 1

FOR I = 0 TO 255
  A$ = CHR$(I)
  IF A$ = CHR$(0) THEN C(I) = "NUL "
  IF A$ = CHR$(1) THEN C(I) = "SOH "
  IF A$ = CHR$(2) THEN C(I) = "STX "
  IF A$ = CHR$(3) THEN C(I) = "ETX "
  IF A$ = CHR$(4) THEN C(I) = "EOT "
  IF A$ = CHR$(5) THEN C(I) = "ENQ "
  IF A$ = CHR$(6) THEN C(I) = "ACK "
  IF A$ = CHR$(7) THEN C(I) = "BEL "
  IF A$ = CHR$(8) THEN C(I) = "BS  "
  IF A$ = CHR$(9) THEN C(I) = "HT  "
  IF A$ = CHR$(10) THEN C(I) = "LF  "
  IF A$ = CHR$(11) THEN C(I) = "VT  "
  IF A$ = CHR$(12) THEN C(I) = "FF  "
  IF A$ = CHR$(13) THEN C(I) = "CR  "
  IF A$ = CHR$(14) THEN C(I) = "SO  "
  IF A$ = CHR$(15) THEN C(I) = "SI  "
  IF A$ = CHR$(16) THEN C(I) = "DLE "
  IF A$ = CHR$(17) THEN C(I) = "DC1 "
  IF A$ = CHR$(18) THEN C(I) = "DC2 "
  IF A$ = CHR$(19) THEN C(I) = "DC3 "
  IF A$ = CHR$(20) THEN C(I) = "DC4 "
  IF A$ = CHR$(21) THEN C(I) = "NAK "
  IF A$ = CHR$(22) THEN C(I) = "SYN "
  IF A$ = CHR$(23) THEN C(I) = "ETB "
  IF A$ = CHR$(24) THEN C(I) = "CAN "
  IF A$ = CHR$(25) THEN C(I) = "EM  "
  IF A$ = CHR$(26) THEN C(I) = "SUB "
  IF A$ = CHR$(27) THEN C(I) = "ESC "
  IF A$ = CHR$(28) THEN C(I) = "FS  "
  IF A$ = CHR$(29) THEN C(I) = "GS  "
  IF A$ = CHR$(30) THEN C(I) = "RS  "
  IF A$ = CHR$(31) THEN C(I) = "US  "
  IF A$ = CHR$(32) THEN C(I) = "Spc "
  IF LEN(A$) = 1 AND A$ > CHR$(32) AND A$ <= CHR$(255) THEN C(I) = "" + A$ + "  "
  D(I) = "00" + LTRIM$(STR$(I))
  IF I > 9 THEN D(I) = "0" + LTRIM$(STR$(I))
  IF I > 99 THEN D(I) = LTRIM$(STR$(I))
  LOCATE 10, 31: PRINT "Proscession ...(" + STR$(INT((100 / 255) * I)) + "%)"
NEXT I
I = 0
FOR X = 0 TO 246 STEP 9
  FOR Y = 1 TO 9
    LOCATE 11, 31: PRINT "Formating   ...(" + STR$(INT((100 / 255) * X)) + "%)"
    E$(I) = E$(I) + D(Y + X) + " " + C(Y + X)
  NEXT Y
  I = I + 1
NEXT X
FOR X = 253 TO 255
  E$(I) = E$(I) + D(X) + " " + C(X)
NEXT X
LOCATE 11, 31: PRINT "Formating   ...(" + STR$(INT((100 / 255) * X)) + "%)"
LOCATE 12, 31: PRINT "push ENTER to continue"
DO UNTIL INKEY$ = "": LOOP
DO UNTIL INKEY$ = CHR$(13): LOOP
ERASE C, D
CHANGEBAR "³ File ³                                                     Menu - ALT + letter"
COLOR 7, 1
WIN 4, 2, 77, 23, "ASCII Codes"
X = 0

DO
  I$ = INKEY$
  IF I$ = CHR$(0) + CHR$(80) THEN X = X + 1
  IF I$ = CHR$(0) + CHR$(72) THEN X = X - 1
  IF X < 0 THEN X = 0
  IF X > 10 THEN X = 10
  IF I$ = CHR$(27) THEN
  COLOR 7, 0
  CLS
  SYSTEM
  END IF
  IF I$ = CHR$(0) + CHR$(33) THEN
  COLOR 15, 1
  LOCATE 25, 1: PRINT "³ File ³";
  COLOR 7, 1
  MENU 1
  END IF
  FOR I = 0 TO 19
    LOCATE I + 3, 5: PRINT E$(X + I) + STRING$(72 - LEN(E$(X + I)), " ")
  NEXT I
LOOP
ERRAND:
IF ERR THEN
BEEP
ERRV = 1
RESUME NEXT
END IF

SUB BCKGND
FOR I = 1 TO 24
LOCATE I, 1: PRINT STRING$(80, 177);
NEXT I
LOCATE 25, 1: PRINT STRING$(80, 177);
END SUB

SUB CHANGEBAR (A$)
COLOR 0, 7
LOCATE 25, 1: PRINT A$;
COLOR 15, 0
END SUB

SUB MENU (A)
SELECT CASE A
CASE 1
COLOR 0, 7
LOCATE 20, 1: PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿";
LOCATE 21, 1: PRINT "³Printer      ³";
LOCATE 22, 1: PRINT "³ÄÄÄÄÄÄÄÄÄÄÄÄÄ³";
LOCATE 23, 1: PRINT "³Close        ³";
LOCATE 24, 1: PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ";
COLOR 15, 1
LOCATE 21, 2: PRINT "Printer      ";
COLOR 0, 7
LOCATE 23, 2: PRINT "Close        ";

DO
I$ = INKEY$
IF I$ = CHR$(27) THEN
COLOR 5, 0
BCKGND
CHANGEBAR "³ File ³                                                     Menu - ALT + Lettre"
COLOR 7, 1
WIN 4, 2, 77, 23, "ASCII Codes"
EXIT SUB
END IF

IF I$ = CHR$(0) + CHR$(80) THEN Z = Z + 1
IF I$ = CHR$(0) + CHR$(72) THEN Z = Z - 1
IF Z >= 2 THEN Z = 0
IF Z = 0 THEN
COLOR 15, 1
LOCATE 21, 2: PRINT "Printer      ";
COLOR 0, 7
LOCATE 23, 2: PRINT "Close        ";
END IF
IF Z = 1 THEN
COLOR 15, 1
LOCATE 23, 2: PRINT "Close        ";
COLOR 0, 7
LOCATE 21, 2: PRINT "Printer      ";
END IF
IF I$ = CHR$(13) THEN
IF Z = 1 THEN
  COLOR 7, 0
  CLS
  SYSTEM
END IF
IF Z = 0 THEN PRINTER
END IF
LOOP
END SELECT

END SUB

SUB PRINTER
SHARED E$(), ERRV
COLOR 15, 1
WIN 1, 1, 80, 3, ""
LOCATE 2, 20: PRINT "Printing in proscesing ³           ³";
OPEN "LPT1:" FOR OUTPUT AS #1
IF ERRV THEN
COLOR 31, 4
WIN 1, 1, 80, 3, "ERROR!!"
LOCATE 2, 20: PRINT "Printer error!";
CLOSE #1
EXIT SUB
END IF
FOR I = 0 TO 35
PRINT #1, E$(I)
LOCATE 2, 20: PRINT "Printing in proscesing ³" + STRING$(I + 1, 219);
IF ERRV THEN
COLOR 31, 4
WIN 1, 1, 80, 3, "ERROR!!"
LOCATE 2, 20: PRINT "Printer error!";
CLOSE #1
EXIT SUB
END IF
NEXT I
CLOSE #1
COLOR 0, 5
FOR I = 1 TO 2
LOCATE I, 1: PRINT STRING$(80, 177);
NEXT I
COLOR 7, 1
WIN 4, 2, 77, 23, "ASCII Codes"

END SUB

SUB WIN (X1, Y1, X2, Y2, A$)
FOR I = Y1 TO Y2
LOCATE I, X1: PRINT STRING$(X2 - X1, 32);
NEXT I
LOCATE Y1, X1 + 1: PRINT STRING$(X2 - X1 - 1, 196);
LOCATE Y2, X1 + 1: PRINT STRING$(X2 - X1 - 1, 196);
FOR I = Y1 + 1 TO Y2 - 1
LOCATE I, X1: PRINT CHR$(179);
LOCATE I, X2: PRINT CHR$(179);
NEXT I
LOCATE Y1, X1: PRINT CHR$(218);
LOCATE Y1, X2: PRINT CHR$(191);
LOCATE Y2, X1: PRINT CHR$(192);
LOCATE Y2, X2: PRINT CHR$(217);
IF A$ <> "" THEN
LOCATE Y1, INT((X2 + X1) / 2) - ((LEN(A$) + 2) / 2): PRINT "[" + A$ + "]"
END IF
END SUB
