Vic 20 .prg reader source By Lee Davison.

Download zipped .


' Vic 20 .prg file viewer Ver 1.46 - Quick BASIC 4.5 (c) L.Davison 2008

' Takes a raw .prg Vic 20 program file and outputs it to the screen and optionally to
' both text and html output files. The text file has special C= characters replaced by
' names in curly braces, e.g. [CTRL]1 which is Black is rendered as {BLK}. With the
' html output file there is the option to display these keys as small, 8 by 8 pixel,
' graphics resembling the actual characters that would be seen in a listing. If html
' graphics are selected then another potion is to add a path string to each image tag
' so that the output html file doesn't need to have the graphics in the same directory.

' All the standard BASIC 2.0 keywords, as well as the Super Expander keywords, are
' supported.

' comments, suggestions, additions, offers of monetary reward etc to ..
'
' leeedavison@googlemail.com


CONST false = 0, true = -1				' define these

DIM token%(255)						' token flags
DIM token$(255,1)					' token decoder
DIM symbol$(255,1)					' symbol decoder

esc$ = CHR$(27)						' define ESCAPE
quote$ = CHR$(34)					' " as a string
cr$ = CHR$(13)						' [CR] as a string

fe$ = "</FONT>"						' end of <FONT></FONT>
fl$ = "<FONT COLOR=blue>"				' line number font colour
fq$ = "<FONT COLOR=green>"				' quote string font colour
ft$ = "<FONT COLOR=red>"				' token font colour

text% = false						' default to no text output
html% = false						' default to no html output
imgs% = false						' default to no html graphics
ipath$ = ""						' default path for html graphics
istring$ = "<IMG SRC="					' html graphics ident string

ver$ = "1.46"						' version number string

SCREEN 12						' 640 x 480 x 16
CLS							' clear it

PRINT "Vic 20 .PRG file reader v"; ver$; ". (c) Lee Davison 2008."
PRINT

GOSUB Initialise					' set up arrays

INPUT "Enter .PRG file name "; filename$		' get the filename without the .prg
IF filename$ = "" THEN END				' no file then just quit

IF RIGHT$(UCASE$(filename$), 4) = ".PRG" THEN		' ensure no ".prg" end
  filename$ = LEFT$(filename$, LEN(filename$) - 4)
END IF

PRINT "Text output file   [Y]es/[n]o ?"			' prompt user
DO
  DO
    key$ = UCASE$(INKEY$)				' get key
  LOOP WHILE key$ = ""					' wait for press
  IF key$ = cr$ THEN					' user just hit [RETURN]
    key$ = "Y"						'  so default to yes
  END IF
  IF key$ = "Y" THEN					' if text wanted
    text% = true					' set the flag
  END IF
LOOP WHILE (key$ <> "N") AND (key$ <> "Y")		' loop until "N" or "Y"

PRINT "HTML output file   [Y]es/[n]o ?"			' prompt user
DO
  DO
    key$ = UCASE$(INKEY$)				' get key
  LOOP WHILE key$ = ""					' wait for press
  IF key$ = cr$ THEN					' user just hit [RETURN]
    key$ = "Y"						'  so default to yes
  END IF
  IF key$ = "Y" THEN					' if html wanted
    html% = true					' set the flag
  END IF
LOOP WHILE (key$ <> "N") AND (key$ <> "Y")		' loop until "N" or "Y"

IF html% THEN
  PRINT "HTML file graphics [y]es/[N]o ?"		' prompt user
  DO
    DO
      key$ = UCASE$(INKEY$)				' get key
    LOOP WHILE key$ = ""				' wait for press
    IF key$ = cr$ THEN					' user just hit [RETURN]
      key$ = "N"					'  so default to no
    END IF
    IF key$ = "Y" THEN					' if graphics
      imgs% = 1						' set the flag
    END IF
  LOOP WHILE (key$ <> "N") AND (key$ <> "Y")		' loop until "N" or "Y"
  IF imgs% THEN
    INPUT "HTML image path or [ENTER]    "; ipath$	' prompt the user
  END IF
END IF

GOSUB DoFile						' process the file

COLOR 15						' white

PRINT "Press any key to exit."				' prompt user
DO
LOOP WHILE INKEY$ = ""					' wait for press
END							' all done, bye.


' process file. open the input file and the output file(s), process the input
' file then close all files as needed

DoFile:
  OPEN filename$ + ".prg" FOR BINARY ACCESS READ AS #1
							' open the .prg file
  IF text% THEN						' if the user wants text output
    OPEN filename$ + ".txt" FOR OUTPUT AS #2		' open the text write file
  END IF
  IF html% THEN						' if the user wants html output
    OPEN filename$ + ".htm" FOR OUTPUT AS #3		' open the html write file
  END IF

  i% = 0%						' clear the read index
  GOSUB DoStream					' process the byte stream

  IF html% THEN						' if the user wanted html output
    CLOSE #3						' close the html output file
  END IF
  IF text% THEN						' if the user wanted text output
    CLOSE #2						' close the text output file
  END IF
  CLOSE #1						' close the input file
RETURN


' process a stream of bytes until no input remains

DoStream:
  GOSUB HTMLHeader					' write the html header
  GOSUB GetWord						' get the LOAD address
  address$ = "LOAD address $" + RIGHT$("000" + HEX$(word&), 4)
  PRINT address$					' print load address to screen
  IF html% THEN						' if the user wants html output
    PRINT #3, "&nbsp;"; address$			' print load address to html file
    PRINT #3,
  END IF
  DO
    GOSUB DoLine					' do a program line
    IF INKEY$ = esc$ THEN				' check for user quit
      eoprog% = true					' flag exit if [ESCAPE] pressed
    END IF
  LOOP WHILE NOT eoprog%				' loop until program end or abort
  GOSUB HTMLFooter					' write the html footer
RETURN


' write the header to the html file

HTMLHeader:
  IF html% THEN						' if the user wants html output
    PRINT #3, "<HTML><HEAD><TITLE>"; filename$;
    PRINT #3, ".prg for the Vic 20</TITLE></HEAD>"
    PRINT #3, "<BODY>"
    PRINT #3, "Program listing of <TT><B>"; filename$;
    PRINT #3, ".prg</B></TT> for the Vic 20"
    PRINT #3, "<HR>"
    PRINT #3, "<PRE>"
  END IF
RETURN


' write the footer to the html file

HTMLFooter:
  IF html% THEN						' if the user wants html output
    PRINT #3, "</PRE>"
    PRINT #3, "<HR>"
    PRINT #3, "Converted to HTML using <TT><B>";
    PRINT #3, "prgread.exe v"; ver$; "</TT></B> by ";
    PRINT #3, "<A HREF="; quote$; "mailto:leeedavison";
    PRINT #3, "@googlemail.com"; quote$; ">Lee Davison</A>"
    PRINT #3, "</BODY></HTML>"
  END IF
RETURN


' set the token flag and font colour

HTMLToken:
  IF html% THEN						' if the user wants html output
    IF NOT oquote% THEN					' if we're not quoting a string
      IF token%(byte%) THEN				' if this is a token and ..
        IF NOT token% THEN				' .. we're not already doing tokens
          PRINT #3, ft$;				'  then set the token colour
          token% = true					'  and flag we're doing tokens
        END IF
      ELSE						' else if this isn't a token ..
        IF token% THEN					' .. and we were doing tokens
          PRINT #3, fe$;				'  then end the token colour
          token% = false				'  and flag we're not doing tokens
        END IF
      END IF
    END IF
  END IF
RETURN


' set the quote flag and font colour

HTMLQuote:
  IF html% THEN						' if the user wants html output
    IF oquote% THEN					' if this is a close quote
      PRINT #3,  byte$; fe$;				'  print the quote
    ELSE						' else it's an open quote
      PRINT #3, fq$; byte$;				'  print the quote
    END IF
  END IF
RETURN


' print the text quote

TEXTQuote:
  IF text% THEN						' if the user wants text output
    PRINT #2, byte$;					' print the quote
  END IF
RETURN


' print the html line number

HTMLLine:
  IF html% THEN						' if the user wants html output
    PRINT #3, fl$; " "; word$; fe$;			' print a space and the line number
  END IF
RETURN


' print the text line number

TEXTLine:
  IF text% THEN						' if the user wants text output
    PRINT #2, word$;					' print the line number
  END IF
RETURN


' print the html byte

HTMLByte:
  IF html% THEN						' if the user wants html output
    IF oquote% THEN					' if we're quoting a string
      html$ = symbol$(byte%, imgs%)			' set the symbol
    ELSE
      html$ = token$(byte%, imgs%)			' set the token
    END IF

    IF html$ = "&" THEN					' if it's an apersand
      html$ = "&amp;"					'  make it an html ampersand
    ELSEIF html$ = "<" THEN				' if it's less than
      html$ = "&lt;"					'  make it an html less than
    ELSEIF html$ = ">" THEN				' if it's greater than
      html$ = "&gt;"					'  make it an html greater than
    END IF

    IF (LEFT$(html$, 9) = istring$) AND (ipath$ <> "") THEN
							' if it's an image tag AND we have
							' a path to insert
       html$ = istring$ + ipath$ + RIGHT$(html$, LEN(html$) - 9)
							' insert the path
    END IF

    PRINT #3, html$;					' print the html
  END IF
RETURN


' print the text byte

TEXTByte:
  IF text% THEN						' if the user wants text output
    IF oquote% THEN					' if we're quoting a string
      PRINT #2, symbol$(byte%, 0);			'  print the symbol
    ELSE						' else
      PRINT #2, token$(byte%, 0);			'  print the token
    END IF
  END IF
RETURN


' print the html new line

HTMLNewline:
  IF html% THEN						' if the user wants html output
    IF oquote% or token% THEN				' if open quote or token is flagged
      PRINT #3, fe$;					'  close the font
    END IF
    PRINT #3,						' print the new line
  END IF
RETURN


' print the text new line

TEXTNewline:
  IF text% THEN						' if the user wants text output
    PRINT #2,						'  new line
  END IF
RETURN


' do a line from the program, return the EOF flag

DoLine:
  GOSUB GetWord						' get the next line pointer
  oquote% = false					' not quoting a string
  token% = false					' not listing tokens
  eoprog% = (word& = 0)					' flag if this is the last line
  IF NOT eoprog% THEN					' if not end
    isline% = true					' flag if there's a line to do 
    GOSUB GetWord					' get the line number
    word$ = STR$(word&)					' convert to string
    word$ = RIGHT$(word$, LEN(word$) - 1) + " "		' shift leading space to trailing
    COLOR 1 : PRINT word$; : COLOR 15			' print the line number
    GOSUB TEXTLine					' print text line number
    GOSUB HTMLLine					' print html line number
    DO
      GOSUB GetByte					' get program line byte
      GOSUB HTMLToken					' set the html token colour
      IF byte% = 0 THEN					' if it's the EOL marker
        isline% = false					' flag EOL
      ELSEIF byte% = 34 THEN				' if it's open or close quote
        COLOR 2						' blue for the line number
        PRINT byte$;					' print the quote
        GOSUB TEXTQuote					' do the text quote
        GOSUB HTMLQuote					' do the html quote and colour
        oquote% = NOT oquote%				' toggle quote flag
      ELSE
        IF oquote% THEN					' if we're quoting a string
          COLOR 2					' green for quotes
          PRINT symbol$(byte%, 0);			' print the symbol
        ELSE
          IF token%(byte%) THEN				' if it's a token
            COLOR 4					' red for tokens
          END IF
          PRINT token$(byte%, 0);			' print the token
        END IF
        GOSUB TEXTByte					' print the html byte
        GOSUB HTMLByte					' print the html byte
      END IF
      COLOR 15						' back to white
    LOOP WHILE isline%					' loop until [EOL]

    PRINT						' new line
    GOSUB TEXTNewline					' print the text new line
    GOSUB HTMLNewline					' print the html new line
  END IF
RETURN


' get a byte from the input stream. return the value as a string and a number

GetByte:
  byte$ = " "						' one byte long string
  GET #1, (i% + 1), byte$				' get LEN(byte$) bytes
  i% = i% + 1%						' increment the index
  byte% =  ASC(byte$)					' get numeric byte value
RETURN


' get a low byte high byte pair as a word

GetWord:
  GOSUB GetByte						' get address low byte
  word& = byte%						' copy it
  GOSUB GetByte						' get address high byte
  word& = word& + (byte% * 256&)			' convert and add it
RETURN


' set up the conversion and flag arrays

Initialise:
  RESTORE
							' for text or non graphic html
  FOR index% = 0 TO 255
    READ token$(index%,0)				' read in the token strings
  NEXT

  FOR index% = 0 TO 255
    READ symbol$(index%,0)				' read in the symbol strings
  NEXT
							' for graphic html
  FOR index% = 0 TO 255
    READ token$(index%,1)				' read in the token strings
  NEXT

  FOR index% = 0 TO 255
    READ symbol$(index%,1)				' read in the symbol strings
  NEXT

							' flags for valid token values
  FOR index% = 0 TO 255
    READ token%(index%)					' read in the token flags
  NEXT


' ** tokens **********************************************************************

'$00
  DATA "{SYM}","{SYM}","{SYM}","{STOP}","{SYM}","{WHT}","{SYM}","{SYM}"
  DATA "{DIS}","{ENA}","{SYM}","{SYM}","{SYM}","{SYM}","{LOWER}","{SYM}"
'$10
  DATA "{SYM}","{DOWN}","{RVS ON}","{HOME}","{DEL}","{SYM}","{SYM}","{SYM}"
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{RED}","{RIGHT}","{GRN}","{BLU}"
'$20
  DATA " ","!","","#","$","%","&","'"
  DATA "(",")","*","+",",","-",".","/"
'$30
  DATA "0","1","2","3","4","5","6","7"
  DATA "8","9",":",";","<","=",">","?"
'$40
  DATA "@","A","B","C","D","E","F","G"
  DATA "H","I","J","K","L","M","N","O"
'$50
  DATA "P","Q","R","S","T","U","V","W"
  DATA "X","Y","Z","[","{POUND}","]","^","{L ARROW}"
'$60
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
'$70
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
'$80
  DATA "END","FOR","NEXT","DATA","INPUT#","INPUT","DIM","READ"
  DATA "LET","GOTO","RUN","IF","RESTORE","GOSUB","RETURN","REM"
'$90
  DATA "STOP","ON","WAIT","LOAD","SAVE","VERIFY","DEF","POKE"
  DATA "PRINT#","PRINT","CONT","LIST","CLR","CMD","SYS","OPEN"
'$A0
  DATA "CLOSE","GET","NEW","TAB(","TO","FN","SPC(","THEN"
  DATA "NOT","STEP","+","-","*","/","^","AND"
'$B0
  DATA "OR",">","=","<","SGN","INT","ABS","USR"
  DATA "FRE","POS","SQR","RND","LOG","EXP","COS","SIN"
'$C0
  DATA "TAN","ATN","PEEK","LEN","STR$","VAL","ASC","CHR$"
  DATA "LEFT$","RIGHT$","MID$","GO","KEY","GRAPHIC","SCNCLR","CIRCLE"
'$D0
  DATA "DRAW","REGION","COLOR","POINT","SOUND","CHAR","PAINT","RPOT"
  DATA "RPEN","RSND","RCOLR","RGR","RJOY","RDOT","{SYM}","{SYM}"
'$E0
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
'$F0
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{PI}"


' ** symbol **********************************************************************

'$00
  DATA "{SYM}","{SYM}","{SYM}","{STOP}","{SYM}","{WHT}","{SYM}","{SYM}"
  DATA "{DIS}","{ENA}","{SYM}","{SYM}","{SYM}","{SYM}","{LOWER}","{SYM}"
'$10
  DATA "{SYM}","{DOWN}","{RVS ON}","{HOME}","{DEL}","{SYM}","{SYM}","{SYM}"
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{RED}","{RIGHT}","{GRN}","{BLU}"
'$20
  DATA " ","!","","#","$","%","&","'"
  DATA "(",")","*","+",",","-",".","/"
'$30
  DATA "0","1","2","3","4","5","6","7"
  DATA "8","9",":",";","<","=",">","?"
'$40
  DATA "@","A","B","C","D","E","F","G"
  DATA "H","I","J","K","L","M","N","O"
'$50
  DATA "P","Q","R","S","T","U","V","W"
  DATA "X","Y","Z","[","{POUND}","]","{U ARROW}","{L ARROW}"
'$60
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
'$70
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
'$80
  DATA "{SYM}","{C=1}","{SYM}","{RUN}","{SYM}","{F1}","{F3}","{F5}"
  DATA "{F7}","{F2}","{F4}","{F6}","{F8}","{SYM}","{UPPER}","{SYM}"
'$90
  DATA "{BLK}","{UP}","{RVS OFF}","{CLR}","{INST}","{C=2}","{C=3}","{C=4}"
  DATA "{C=5}","{C=6}","{C=7}","{C=8}","{PUR}","{LEFT}","{YEL}","{CYN}"
'$A0
  DATA "{^SPC}","{C=K}","{C=I}","{C=T}","{C=@}","{C=G}","{C=+}","{C=M}"
  DATA "{C=POUND}","{^POUND}","{C=N}","{C=Q}","{C=D}","{C=Z}","{C=S}","{C=P}"
'$B0
  DATA "{C=A}","{C=E}","{C=R}","{C=W}","{C=H}","{C=J}","{C=L}","{C=Y}"
  DATA "{C=U}","{C=O}","{^@}","{C=F}","{C=C}","{C=X}","{C=V}","{C=B}"
'$C0
  DATA "{^*}","{^A}","{^B}","{^C}","{^D}","{^E}","{^F}","{^G}"
  DATA "{^H}","{^I}","{^J}","{^K}","{^L}","{^M}","{^N}","{^O}"
'$D0
  DATA "{^P}","{^Q}","{^R}","{^S}","{^T}","{^U}","{^V}","{^W}"
  DATA "{^X}","{^Y}","{^Z}","{^+}","{C=-}","{^-}","{^RET}","{C=*}"
'$E0
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
'$F0
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}"
  DATA "{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{SYM}","{PI}"


' ** tokens **********************************************************************

'$00
  DATA " ","<IMG SRC=81.bmp>"
  DATA "<IMG SRC=82.bmp>","<IMG SRC=83.bmp ALT={STOP}>"
  DATA "<IMG SRC=84.bmp>","<IMG SRC=85.bmp ALT={WHT}>"
  DATA "<IMG SRC=86.bmp>","<IMG SRC=87.bmp>"
  DATA "<IMG SRC=88.bmp ALT={DIS}>","<IMG SRC=89.bmp ALT={ENA}>"
  DATA "<IMG SRC=8a.bmp>","<IMG SRC=8b.bmp>"
  DATA "<IMG SRC=8c.bmp>","<IMG SRC=8d.bmp>"
  DATA "<IMG SRC=8e.bmp ALT={LOWER}>","<IMG SRC=8f.bmp>"
'$10
  DATA "<IMG SRC=90.bmp>","<IMG SRC=91.bmp ALT={DOWN}>"
  DATA "<IMG SRC=92.bmp ALT={RVSON}>","<IMG SRC=93.bmp ALT={HOME}>"
  DATA "<IMG SRC=94.bmp ALT={DEL}>","<IMG SRC=95.bmp>"
  DATA "<IMG SRC=96.bmp>","<IMG SRC=97.bmp>"
  DATA "<IMG SRC=98.bmp>","<IMG SRC=99.bmp>"
  DATA "<IMG SRC=9a.bmp>","<IMG SRC=9b.bmp>"
  DATA "<IMG SRC=9c.bmp ALT={RED}>","<IMG SRC=9d.bmp ALT={RIGHT}>"
  DATA "<IMG SRC=9e.bmp ALT={GRN}>","<IMG SRC=9f.bmp ALT={BLU}>"
'$20
  DATA " ","!","","#","$","%","&","'"
  DATA "(",")","*","+",",","-",".","/"
'$30
  DATA "0","1","2","3","4","5","6","7"
  DATA "8","9",":",";","<","=",">","?"
'$40
  DATA "@","A","B","C","D","E","F","G"
  DATA "H","I","J","K","L","M","N","O"
'$50
  DATA "P","Q","R","S","T","U","V","W"
  DATA "X","Y","Z","["
  DATA "<IMG SRC=2c.bmp ALT={POUND}>","]"
  DATA "<IMG SRC=2e.bmp>","<IMG SRC=2f.bmp ALT={LARROW}>"
'$60
  DATA "<IMG SRC=40.bmp>","<IMG SRC=41.bmp>","<IMG SRC=42.bmp>","<IMG SRC=43.bmp>"
  DATA "<IMG SRC=44.bmp>","<IMG SRC=45.bmp>","<IMG SRC=46.bmp>","<IMG SRC=47.bmp>"
  DATA "<IMG SRC=48.bmp>","<IMG SRC=49.bmp>","<IMG SRC=4a.bmp>","<IMG SRC=4b.bmp>"
  DATA "<IMG SRC=4c.bmp>","<IMG SRC=4d.bmp>","<IMG SRC=4e.bmp>","<IMG SRC=4f.bmp>"
'$70
  DATA "<IMG SRC=50.bmp>","<IMG SRC=51.bmp>","<IMG SRC=52.bmp>","<IMG SRC=53.bmp>"
  DATA "<IMG SRC=54.bmp>","<IMG SRC=55.bmp>","<IMG SRC=56.bmp>","<IMG SRC=57.bmp>"
  DATA "<IMG SRC=58.bmp>","<IMG SRC=59.bmp>","<IMG SRC=5a.bmp>","<IMG SRC=5b.bmp>"
  DATA "<IMG SRC=5c.bmp>","<IMG SRC=5d.bmp>","<IMG SRC=5e.bmp>","<IMG SRC=5f.bmp>"
'$80
  DATA "END","FOR","NEXT","DATA","INPUT#","INPUT","DIM","READ"
  DATA "LET","GOTO","RUN","IF","RESTORE","GOSUB","RETURN","REM"
'$90
  DATA "STOP","ON","WAIT","LOAD","SAVE","VERIFY","DEF","POKE"
  DATA "PRINT#","PRINT","CONT","LIST","CLR","CMD","SYS","OPEN"
'$A0
  DATA "CLOSE","GET","NEW","TAB(","TO","FN","SPC(","THEN"
  DATA "NOT","STEP","+","-","*","/","^","AND"
'$B0
  DATA "OR",">","=","<","SGN","INT","ABS","USR"
  DATA "FRE","POS","SQR","RND","LOG","EXP","COS","SIN"
'$C0
  DATA "TAN","ATN","PEEK","LEN","STR$","VAL","ASC","CHR$"
  DATA "LEFT$","RIGHT$","MID$","GO","KEY","GRAPHIC","SCNCLR","CIRCLE"
'$D0
  DATA "DRAW","REGION","COLOR","POINT","SOUND","CHAR","PAINT","RPOT"
  DATA "RPEN","RSND","RCOLR","RGR","RJOY","RDOT","<IMG SRC=5e.bmp>","<IMG SRC=5f.bmp>"
'$E0
  DATA " ","<IMG SRC=61.bmp>","<IMG SRC=62.bmp>","<IMG SRC=63.bmp>"
  DATA "<IMG SRC=64.bmp>","<IMG SRC=65.bmp>","<IMG SRC=66.bmp>","<IMG SRC=67.bmp>"
  DATA "<IMG SRC=68.bmp>","<IMG SRC=69.bmp>","<IMG SRC=6a.bmp>","<IMG SRC=6b.bmp>"
  DATA "<IMG SRC=6c.bmp>","<IMG SRC=6d.bmp>","<IMG SRC=6e.bmp>","<IMG SRC=6f.bmp>"
'$F0
  DATA "<IMG SRC=70.bmp>","<IMG SRC=71.bmp>","<IMG SRC=72.bmp>","<IMG SRC=73.bmp>"
  DATA "<IMG SRC=74.bmp>","<IMG SRC=75.bmp>","<IMG SRC=76.bmp>","<IMG SRC=77.bmp>"
  DATA "<IMG SRC=78.bmp>","<IMG SRC=79.bmp>","<IMG SRC=7a.bmp>","<IMG SRC=7b.bmp>"
  DATA "<IMG SRC=7c.bmp>","<IMG SRC=7d.bmp>"
  DATA "<IMG SRC=7e.bmp>","<IMG SRC=5e.bmp ALT={PI}>"


' ** symbol **********************************************************************

'$00
  DATA " ","<IMG SRC=81.bmp>"
  DATA "<IMG SRC=82.bmp>","<IMG SRC=83.bmp ALT={STOP}>"
  DATA "<IMG SRC=84.bmp>","<IMG SRC=85.bmp ALT={WHT}>"
  DATA "<IMG SRC=86.bmp>","<IMG SRC=87.bmp>"
  DATA "<IMG SRC=88.bmp ALT={DIS}>","<IMG SRC=89.bmp ALT={ENA}>"
  DATA "<IMG SRC=8a.bmp>","<IMG SRC=8b.bmp>"
  DATA "<IMG SRC=8c.bmp>","<IMG SRC=8d.bmp>"
  DATA "<IMG SRC=8e.bmp ALT={LOWER}>","<IMG SRC=8f.bmp>"
'$10
  DATA "<IMG SRC=90.bmp>","<IMG SRC=91.bmp ALT={DOWN}>"
  DATA "<IMG SRC=92.bmp ALT={RVSON}>","<IMG SRC=93.bmp ALT={HOME}>"
  DATA "<IMG SRC=94.bmp ALT={DEL}>","<IMG SRC=95.bmp>"
  DATA "<IMG SRC=96.bmp>","<IMG SRC=97.bmp>"
  DATA "<IMG SRC=98.bmp>","<IMG SRC=99.bmp>"
  DATA "<IMG SRC=9a.bmp>","<IMG SRC=9b.bmp>"
  DATA "<IMG SRC=9c.bmp ALT={RED}>","<IMG SRC=9d.bmp ALT={RIGHT}>"
  DATA "<IMG SRC=9e.bmp ALT={GRN}>","<IMG SRC=9f.bmp ALT={BLU}>"
'$20
  DATA " ","!","","#","$","%","&","'"
  DATA "(",")","*","+",",","-",".","/"
'$30
  DATA "0","1","2","3","4","5","6","7"
  DATA "8","9",":",";","<","=",">","?"
'$40
  DATA "@","A","B","C","D","E","F","G"
  DATA "H","I","J","K","L","M","N","O"
'$50
  DATA "P","Q","R","S","T","U","V","W"
  DATA "X","Y","Z","["
  DATA "<IMG SRC=2c.bmp ALT={POUND}>","]"
  DATA "<IMG SRC=2e.bmp ALT={UARROW}>","<IMG SRC=2f.bmp ALT={LARROW}>"
'$60
  DATA "<IMG SRC=40.bmp>","<IMG SRC=41.bmp>","<IMG SRC=42.bmp>","<IMG SRC=43.bmp>"
  DATA "<IMG SRC=44.bmp>","<IMG SRC=45.bmp>","<IMG SRC=46.bmp>","<IMG SRC=47.bmp>"
  DATA "<IMG SRC=48.bmp>","<IMG SRC=49.bmp>","<IMG SRC=4a.bmp>","<IMG SRC=4b.bmp>"
  DATA "<IMG SRC=4c.bmp>","<IMG SRC=4d.bmp>","<IMG SRC=4e.bmp>","<IMG SRC=4f.bmp>"
'$70
  DATA "<IMG SRC=50.bmp>","<IMG SRC=51.bmp>","<IMG SRC=52.bmp>","<IMG SRC=53.bmp>"
  DATA "<IMG SRC=54.bmp>","<IMG SRC=55.bmp>","<IMG SRC=56.bmp>","<IMG SRC=57.bmp>"
  DATA "<IMG SRC=58.bmp>","<IMG SRC=59.bmp>","<IMG SRC=5a.bmp>","<IMG SRC=5b.bmp>"
  DATA "<IMG SRC=5c.bmp>","<IMG SRC=5d.bmp>","<IMG SRC=5e.bmp>","<IMG SRC=5f.bmp>"
'$80
  DATA "<IMG SRC=c0.bmp>","<IMG SRC=c1.bmp ALT={C=1}>"
  DATA "<IMG SRC=c2.bmp>","<IMG SRC=c3.bmp ALT={RUN}>"
  DATA "<IMG SRC=c4.bmp>","<IMG SRC=c5.bmp ALT={F1}>"
  DATA "<IMG SRC=c6.bmp ALT={F3}>","<IMG SRC=c7.bmp ALT={F5}>"
  DATA "<IMG SRC=c8.bmp ALT={F7}>","<IMG SRC=c9.bmp ALT={F2}>"
  DATA "<IMG SRC=ca.bmp ALT={F4}>","<IMG SRC=cb.bmp ALT={F6}>"
  DATA "<IMG SRC=cc.bmp ALT={F8}>","<IMG SRC=cd.bmp>"
  DATA "<IMG SRC=ce.bmp ALT={UPPER}>","<IMG SRC=cf.bmp>"
'$90
  DATA "<IMG SRC=d0.bmp ALT={BLK}>","<IMG SRC=d1.bmp ALT={UP}>"
  DATA "<IMG SRC=d2.bmp ALT={RVSOFF}>","<IMG SRC=d3.bmp ALT={CLR}>"
  DATA "<IMG SRC=d4.bmp ALT={INST}>","<IMG SRC=d5.bmp ALT={C=2}>"
  DATA "<IMG SRC=d6.bmp ALT={C=3}>","<IMG SRC=d7.bmp ALT={C=4}>"
  DATA "<IMG SRC=d8.bmp ALT={C=5}>","<IMG SRC=d9.bmp ALT={C=6}>"
  DATA "<IMG SRC=da.bmp ALT={C=7}>","<IMG SRC=db.bmp ALT={C=8}>"
  DATA "<IMG SRC=dc.bmp ALT={PUR}>","<IMG SRC=dd.bmp ALT={LEFT}>"
  DATA "<IMG SRC=de.bmp ALT={YEL}>","<IMG SRC=df.bmp ALT={CYN}>"
'$A0
  DATA " ","<IMG SRC=61.bmp ALT={C=K}>"
  DATA "<IMG SRC=62.bmp ALT={C=I}>","<IMG SRC=63.bmp ALT={C=T}>"
  DATA "<IMG SRC=64.bmp ALT={C=@}>","<IMG SRC=65.bmp ALT={C=G}>"
  DATA "<IMG SRC=66.bmp ALT={C=+}>","<IMG SRC=67.bmp ALT={C=M}>"
  DATA "<IMG SRC=68.bmp ALT={C=POUND}>","<IMG SRC=69.bmp ALT={^POUND}>"
  DATA "<IMG SRC=6a.bmp ALT={C=N}>","<IMG SRC=6b.bmp ALT={C=Q}>"
  DATA "<IMG SRC=6c.bmp ALT={C=D}>","<IMG SRC=6d.bmp ALT={C=Z}>"
  DATA "<IMG SRC=6e.bmp ALT={C=S}>","<IMG SRC=6f.bmp ALT={C=P}>"
'$B0
  DATA "<IMG SRC=70.bmp ALT={C=A}>","<IMG SRC=71.bmp ALT={C=E}>"
  DATA "<IMG SRC=72.bmp ALT={C=R}>","<IMG SRC=73.bmp ALT={C=W}>"
  DATA "<IMG SRC=74.bmp ALT={C=H}>","<IMG SRC=75.bmp ALT={C=J}>"
  DATA "<IMG SRC=76.bmp ALT={C=L}>","<IMG SRC=77.bmp ALT={C=Y}>"
  DATA "<IMG SRC=78.bmp ALT={C=U}>","<IMG SRC=79.bmp ALT={C=O}>"
  DATA "<IMG SRC=7a.bmp ALT={^@}>","<IMG SRC=7b.bmp ALT={C=F}>"
  DATA "<IMG SRC=7c.bmp ALT={C=C}>","<IMG SRC=7d.bmp ALT={C=X}>"
  DATA "<IMG SRC=7e.bmp ALT={C=V}>","<IMG SRC=7f.bmp ALT={C=B}>"
'$C0
  DATA "<IMG SRC=40.bmp ALT={^*}>","<IMG SRC=41.bmp ALT={^A}>"
  DATA "<IMG SRC=42.bmp ALT={^B}>","<IMG SRC=43.bmp ALT={^C}>"
  DATA "<IMG SRC=44.bmp ALT={^D}>","<IMG SRC=45.bmp ALT={^E}>"
  DATA "<IMG SRC=46.bmp ALT={^F}>","<IMG SRC=47.bmp ALT={^G}>"
  DATA "<IMG SRC=48.bmp ALT={^H}>","<IMG SRC=49.bmp ALT={^I}>"
  DATA "<IMG SRC=4a.bmp ALT={^J}>","<IMG SRC=4b.bmp ALT={^K}>"
  DATA "<IMG SRC=4c.bmp ALT={^L}>","<IMG SRC=4d.bmp ALT={^M}>"
  DATA "<IMG SRC=4e.bmp ALT={^N}>","<IMG SRC=4f.bmp ALT={^O}>"
'$D0
  DATA "<IMG SRC=50.bmp ALT={^P}>","<IMG SRC=51.bmp ALT={^Q}>"
  DATA "<IMG SRC=52.bmp ALT={^R}>","<IMG SRC=53.bmp ALT={^S}>"
  DATA "<IMG SRC=54.bmp ALT={^T}>","<IMG SRC=55.bmp ALT={^U}>"
  DATA "<IMG SRC=56.bmp ALT={^V}>","<IMG SRC=57.bmp ALT={^W}>"
  DATA "<IMG SRC=58.bmp ALT={^X}>","<IMG SRC=59.bmp ALT={^Y}>"
  DATA "<IMG SRC=5a.bmp ALT={^Z}>","<IMG SRC=5b.bmp ALT={^+}>"
  DATA "<IMG SRC=5c.bmp ALT={C=-}>","<IMG SRC=5d.bmp ALT={^-}>"
  DATA "<IMG SRC=5e.bmp ALT={^RET}>","<IMG SRC=5f.bmp ALT={C=*}>"
'$E0
  DATA " ","<IMG SRC=61.bmp>","<IMG SRC=62.bmp>","<IMG SRC=63.bmp>"
  DATA "<IMG SRC=64.bmp>","<IMG SRC=65.bmp>","<IMG SRC=66.bmp>","<IMG SRC=67.bmp>"
  DATA "<IMG SRC=68.bmp>","<IMG SRC=69.bmp>","<IMG SRC=6a.bmp>","<IMG SRC=6b.bmp>"
  DATA "<IMG SRC=6c.bmp>","<IMG SRC=6d.bmp>","<IMG SRC=6e.bmp>","<IMG SRC=6f.bmp>"
'$F0
  DATA "<IMG SRC=70.bmp>","<IMG SRC=71.bmp>","<IMG SRC=72.bmp>","<IMG SRC=73.bmp>"
  DATA "<IMG SRC=74.bmp>","<IMG SRC=75.bmp>","<IMG SRC=76.bmp>","<IMG SRC=77.bmp>"
  DATA "<IMG SRC=78.bmp>","<IMG SRC=79.bmp>","<IMG SRC=7a.bmp>","<IMG SRC=7b.bmp>"
  DATA "<IMG SRC=7c.bmp>","<IMG SRC=7d.bmp>"
  DATA "<IMG SRC=7e.bmp>","<IMG SRC=5e.bmp ALT={PI}>"

' ** token flags *****************************************************************

  DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  DATA -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0
  DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1

RETURN


Last page update: 19th December, 2010. e-mail me