home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / MBUG / MBUG172.ARC / BASCONV.LBR / BASCONV.MYC / BASCONV.MYC
Text File  |  1979-12-31  |  24KB  |  1,296 lines

  1. ;
  2. ;        Basic Conversion Program
  3. ;
  4. ;    Converts tokenised BASIC memory dumps to
  5. ;        ASCII source code
  6. ;
  7. ;    IBM version rjm 15/8/84        (original 6502 version)
  8. ;    Added more tokens rjm 26/3/88
  9. ;
  10. ;    Z80 version rjm 28/3/88
  11. ;    TRS80 & C64 added rjm 29/3/88
  12.  
  13. version    equ    20
  14.  
  15. false    equ    0
  16. true    equ    not false
  17.  
  18. ;Set one and only one of the equates below to true
  19.  
  20. ibm    equ    true        ;IBM PC BASIC
  21. trs80    equ    false        ;TRS80 Level II BASIC
  22. c64    equ    false        ;Commodore 64 BASIC 2.0
  23.  
  24.      if (ibm and trs80) or (ibm and c64) or (trs80 and c64)
  25.     One version at a time, please!
  26.      endif
  27.  
  28. ;Do not change these equates:
  29. notasc    equ    ibm or trs80    ;numbers are not in ASCII
  30. tabff    equ    ibm        ;second set of tokens
  31. tabfe    equ    ibm        ;third  "
  32. tabfd    equ    ibm        ;fourth "
  33.  
  34. exttab    equ    tabff or tabfe or tabfd
  35.  
  36.     .z80
  37.     cseg
  38.  
  39. ;        SYSLIB routines used:
  40.     ext    argv,print,ialloc,alloc,getud,logud,putud,retud
  41.     ext    bbline,crlf,f$exist,f$delete,fi0$open,fo0$open
  42.     ext    fi0$close,fo0$close,f0$get,f0$put,fname,initfcb
  43.     ext    pfn2,cout,cin,cst,mhlfdc,ma2hc
  44.  
  45.      if    notasc        ;only needed for numbers
  46.     ext    mafdc,mhl4hc
  47. ;        Routines from FLOAT.REL:
  48.     ext    ftoa,mtof
  49.      endif
  50.  
  51. eof    equ    1ah
  52. ctls    equ    13h
  53. cr    equ    0dh
  54. lf    equ    0ah
  55. ctlc    equ    3
  56.  
  57. bdos    equ    5
  58. wmboot    equ    0
  59. tbuff    equ    80h
  60.  
  61.      if    ibm
  62. maxt1    equ    0f4h
  63. maxff    equ    0a5h
  64. maxfe    equ    0a6h
  65. maxfd    equ    086h
  66. byte1    equ    0ffh
  67.      endif
  68.  
  69.      if    trs80
  70. maxt1    equ    0fbh
  71. byte1    equ    0ffh
  72.      endif
  73.  
  74.      if    c64
  75. maxt1    equ    0cbh
  76. byte1    equ    01h
  77.      endif
  78.  
  79. start:
  80.     ld    hl,tbuff+1    ;parse command line
  81.     ld    de,toktab
  82.     ld    a,0ffh        ;put null at end
  83.     call    argv
  84.     ld    a,(numtok)    ;get count
  85.     or    a
  86.     jr    z,dohelp    ;help if none
  87.     ld    ix,(tok1)    ;see if help wanted
  88.     ld    a,'/'
  89.     cp    (ix)
  90.     jp    nz,nohelp
  91.     cp    (ix+1)
  92.     jp    nz,nohelp
  93.  
  94. dohelp:
  95.     call    print
  96.     db    cr,lf
  97.  
  98.      if    ibm
  99.     db    'IBMCONV'
  100.      endif
  101.  
  102.      if    trs80
  103.     db    'TRSCONV'
  104.      endif
  105.  
  106.      if    c64
  107.     db    'C64CONV'
  108.      endif
  109.  
  110.     db    ' v',(version/10) + '0'
  111.     db    '.',(version mod 10) + '0',cr,lf
  112.     db    'Converts '
  113.  
  114.      if    ibm
  115.     db    'IBM PC'
  116.      endif
  117.  
  118.      if    trs80
  119.     db    'TRS-80 Level II'
  120.      endif
  121.  
  122.      if    c64
  123.     db    'Commodore 64'
  124.      endif
  125.  
  126.     db    ' BASIC files to ASCII',cr,lf
  127.     db    'Usage: '
  128.  
  129.      if    ibm
  130.     db    'IBMCONV'
  131.      endif
  132.  
  133.      if    trs80
  134.     db    'TRSCONV'
  135.      endif
  136.  
  137.      if    c64
  138.     db    'C64CONV'
  139.      endif
  140.  
  141.     db    ' [du:]infile [[du:]outfile]',cr,lf
  142.     db    'Default output file is <infile>.ASC',cr,lf,0
  143.  
  144.     ret
  145.  
  146. nohelp:
  147.     xor    a        ;request 100 byte stack
  148.     call    ialloc
  149.     ld    de,100
  150.     call    alloc
  151.     jr    nz,memok
  152.     call    print
  153.     db    cr,lf,'Insufficient memory.',cr,lf,0
  154.     ret
  155. memok:
  156.     add    hl,de        ;get top of it
  157.     dec    hl        ;-1
  158.     ld    sp,hl        ;set stack
  159.  
  160.     call    putud        ;save original du:
  161.     call    retud        ;get it
  162.     ld    a,b        ;save current
  163.     ld    (curdrv),a
  164.     ld    a,c
  165.     ld    (curusr),a
  166.     ld    hl,(tok1)    ;parse input filename
  167.     ld    de,infcb
  168.     call    fname
  169.     jr    nz,infok
  170. invfn:
  171.     call    print
  172.     db    cr,lf,'Invalid disk/user.',cr,lf,0
  173.     jp    wmboot
  174. infok:
  175.     call    setdu        ;calc source du:
  176.     ld    (indu),bc
  177.     ld    a,(numtok)    ;if second filename,
  178.     cp    2
  179.     jr    c,no2fn
  180.     ld    hl,(tok2)    ;parse it
  181.     ld    de,outfcb
  182.     call    fname
  183.     jr    z,invfn
  184.     call    setdu
  185.     ld    (outdu),bc
  186.     ld    a,(outfcb+1)    ;if no filename,
  187.     cp    ' '        ;either space or ?
  188.     jr    z,samefn
  189.     cp    '?'
  190.     jr    z,samefn    ;filename is same
  191.     jr    tstifn
  192. no2fn:
  193.     ld    bc,(indu)    ;same drive/user as input
  194.     ld    (outdu),bc
  195.     xor    a        ;clear drive ind
  196.     ld    (outfcb),a
  197. samefn:
  198.     ld    hl,infcb+1    ;filename is same
  199.     ld    de,outfcb+1
  200.     ld    bc,8
  201.     ldir
  202.     ld    hl,asctyp    ;type is .ASC
  203.     ld    bc,3
  204.     ldir
  205.     ld    de,outfcb    ;initialise it
  206.     call    initfcb
  207. tstifn:
  208.     ld    bc,(indu)
  209.     call    logud
  210.     ld    de,infcb    ;open input file
  211.     call    fi0$open
  212.     jr    z,opok
  213.     call    print
  214.     db    cr,lf,'Input file not found.',cr,lf,0
  215.     jp    done2
  216. opok:
  217.     ld    bc,(outdu)    ;see if o/p file exists
  218.     call    logud
  219.     ld    de,outfcb
  220.     call    f$exist
  221.     jr    z,outok
  222.     call    print
  223.     db    'Output file ',0
  224.     ld    de,outfcb+1
  225.     call    pfn2
  226.     call    print
  227.     db    ' exists: Delete? ',0
  228.     ld    a,0ffh        ;capitalise
  229.     call    bbline        ;get reply
  230.     call    crlf
  231.     ld    a,(hl)
  232.     cp    'Y'        ;must be Y
  233.     jp    nz,done1    ;else quit
  234.     ld    de,outfcb
  235.     call    f$delete    ;erase it
  236. outok:
  237.     call    fo0$open    ;open it
  238.     jr    z,oopok
  239.     call    print
  240.     db    cr,lf,'Error in opening output file.'
  241.     db    cr,lf,0
  242.     jp    done1
  243. oopok:
  244.     call    print
  245.     db    'Display result? ',0
  246.     ld    a,0ffh
  247.     call    bbline
  248.     call    crlf
  249.     ld    a,(hl)
  250.     cp    'Y'
  251.     ld    a,0
  252.     jr    nz,setdfl
  253.     ld    a,0ffh        ;set flag if Y
  254. setdfl:
  255.     ld    (disflg),a
  256.  
  257. ;Input and output files open. Start to look at file.
  258.     ld    bc,(indu)    ;log into source
  259.     call    logud
  260.     call    f0$get        ;get first byte
  261.     jp    nz,dskerr
  262.     cp    byte1        ;if not correct byte,
  263.     jp    nz,notbas    ;not a BASIC file
  264.  
  265.      if    c64
  266.     call    f0$get        ;ignore c64 load address
  267.     jp    nz,dskerr
  268.      endif
  269.  
  270. ;Main loop here
  271. loop:
  272.     call    cst        ;char at console?
  273.     jr    nz,cklink
  274.     call    cin        ;yes, get it
  275.     cp    ctls        ;if ctl-s,
  276.     jr    nz,cklink
  277.     call    cin        ;wait for another
  278.     cp    ctlc        ;if ctl-c,
  279.     jp    z,done        ;finish
  280. cklink:
  281.     ld    bc,(indu)    ;log into source
  282.     call    logud
  283.     call    f0$get        ;get linkage to next line
  284.     jp    nz,dskerr
  285.     or    a        ;if zero,
  286.     jr    nz,glb2
  287.     call    f0$get        ;get another
  288.     jp    nz,dskerr
  289.     or    a        ;if zero,
  290.     jp    z,done        ;done
  291.     jr    glnno
  292. glb2:
  293.     call    f0$get        ;get (and ignore) 2nd linkage byte
  294.     jp    nz,dskerr
  295. glnno:
  296.     call    f0$get        ;get 2-byte line #
  297.     jp    nz,dskerr
  298.     ld    l,a
  299.     call    f0$get
  300.     jp    nz,dskerr
  301.     ld    h,a
  302.     ld    de,numbuf    ;convert to decimal
  303.     call    mhlfdc
  304.     xor    a        ;put 0 at end
  305.     ld    (de),a
  306.     call    prnbuf        ;print
  307.     ld    a,' '        ;then space
  308.     call    chrout
  309.     xor    a        ;clear quote flag
  310.     ld    (quote),a
  311.  
  312. line_loop:
  313.     ld    bc,(indu)    ;get next character
  314.     call    logud
  315.     call    f0$get
  316.     jp    nz,dskerr
  317.     or    a        ;if 0,
  318.     jr    nz,tsttok
  319.     ld    bc,(outdu)
  320.     call    logud
  321.     ld    a,cr        ;do cr/lf
  322.     call    chrout
  323.     ld    a,lf
  324.     call    chrout
  325.     jp    loop        ;and process next line
  326. tsttok:
  327.     ld    e,a        ;save char
  328.     cp    '"'        ;toggle quote mode
  329.     jr    nz,notquote    ;if "
  330.     ld    a,(quote)
  331.     xor    0ffh
  332.     ld    (quote),a
  333.     ld    a,e
  334. notquote:
  335.     ld    a,(quote)    ;if in quote mode,
  336.     or    a
  337.     ld    a,e
  338.     jr    z,tsttok1
  339.  
  340.      if    c64
  341.     call    cbmconv        ;convert CBM --> real ASCII if C64
  342.      endif
  343.  
  344.     jr    ckctl        ;and no tokens allowed
  345. tsttok1:
  346.     or    a        ;test the byte
  347.     jp    m,proctok    ;token if bit 7 set
  348. ckctl:
  349.     cp    07fh        ;don't print delete
  350.     jr    c,ckctl1    ;or any above
  351. invchr:
  352.     call    dunno        ;see?
  353.     jp    line_loop
  354.  
  355. ckctl1:
  356.     cp    ' '        ;if printable,
  357.     jr    c,ctl_chr
  358.     ld    bc,(outdu)    ;do it
  359.     call    logud
  360.     call    chrout
  361.     jp    line_loop
  362. ctl_chr:
  363.  
  364.      if    notasc        ;if numbers are not in ASCII,
  365.     cp    11h        ;11 - 1a --> '0'-'9'
  366.     jr    c,nctldig
  367.     cp    1bh
  368.     jr    nc,nctldig
  369.     add    a,01fh        ;add ASCII
  370.     ld    bc,(outdu)
  371.     call    logud
  372.     call    chrout        ;output it
  373.     jp    line_loop
  374.  
  375. nctldig:
  376.     cp    0bh        ;01 - 0a are invalid
  377.     jr    c,invchr
  378.     ld    bc,(indu)    ;else need more
  379.     call    logud
  380.     cp    0fh        ;0f is 1-byte int
  381.     jr    nz,db2
  382.     call    f0$get
  383.     jp    nz,dskerr
  384.     ld    de,numbuf
  385.     call    mafdc        ;convert
  386.     xor    a
  387.     ld    (de),a
  388.     call    prnbuf        ;output
  389.     jp    line_loop
  390. db2:
  391.     cp    1eh        ;1b and 1e are illegal
  392.     jp    z,invchr
  393.     cp    1bh
  394.     jp    z,invchr
  395.     cp    1dh        ;1d, 1f are floating point
  396.     jr    z,fpnums
  397.     cp    1fh
  398.     jr    z,fpnumd
  399.     push    af        ;save type
  400.     call    f0$get        ;get 2 bytes in hl
  401.     jp    nz,dskerr
  402.     ld    l,a
  403.     call    f0$get
  404.     jp    nz,dskerr
  405.     ld    bc,(outdu)
  406.     call    logud
  407.     ld    h,a
  408.     pop    af        ;restore type
  409.     cp    0eh        ;0e and 1c are decimal
  410.     jr    z,decnum
  411.     cp    1ch
  412.     jr    z,decnum
  413.     cp    0dh        ;0d is decimal -1
  414.     jr    nz,hexoct
  415.     inc    hl
  416. decnum:
  417.     ld    de,numbuf    ;convert
  418.     call    mhlfdc
  419. opnum:
  420.     xor    a
  421.     ld    (de),a
  422.     call    prnbuf        ;print
  423.     jp    line_loop
  424. hexoct:
  425.     push    af        ;save
  426.     ld    a,'&'
  427.     call    chrout
  428.     pop    af
  429.     cp    0bh        ;0b is octal
  430.     jr    nz,hexnum
  431.     ld    a,'O'
  432.     call    chrout
  433.     ld    de,numbuf
  434.     call    mhl4oc        ;convert
  435.     jr    opnum
  436. hexnum:
  437.     ld    a,'H'
  438.     call    chrout
  439.     ld    de,numbuf
  440.     call    mhl4hc        ;convert
  441.     jr    opnum
  442. fpnums:
  443.     ld    c,4        ;single precision floating point
  444.     jr    fpnum
  445. fpnumd:
  446.     ld    c,8        ;double precision
  447. fpnum:
  448.     ld    b,c        ;count to b
  449.     ld    hl,fpacc    ;get accumulator address
  450. getfpn:
  451.     call    f0$get        ;get the number
  452.     jp    nz,dskerr
  453.     ld    (hl),a        ;store it
  454.     inc    hl
  455.     djnz    getfpn
  456.     ld    a,c        ;get size
  457.     cp    4
  458.     ld    a,0
  459.     jr    z,fpconv
  460.     ld    a,1        ;a=1 for doubles
  461. fpconv:
  462.     push    af        ;save id
  463.     ld    hl,fpacc    ;convert to our f/p format
  464.     call    mtof
  465.     pop    af        ;restore id
  466.     ld    hl,fpacc    ;convert to ascii
  467.     call    ftoa
  468.     ld    bc,(outdu)
  469.     call    logud        ;select o/p du
  470.     call    outstr        ;hl has address of string
  471.     jp    line_loop
  472.  
  473.      else
  474.     call    dunno        ;control characters illegal
  475.     jp    line_loop
  476.      endif        ;notasc
  477.  
  478. proctok:
  479.     ld    (curtok),a    ;save it
  480.  
  481.      if    tabff
  482.     cp    0ffh        ;fd, fe & ff
  483.     jp    z,cktkff
  484.      endif
  485.  
  486.      if    tabfe
  487.     cp    0feh        ;have separate tables
  488.     jp    z,cktkfe
  489.      endif
  490.  
  491.      if    tabfd
  492.     cp    0fdh
  493.     jp    z,cktkfd
  494.      endif
  495.  
  496.     cp    maxt1+1        ;if < max,
  497.     jp    nc,invchr
  498.     and    07fh        ;remove bit 7
  499.     sla    a        ;*2
  500.     ld    hl,ttab0    ;add to base
  501.     add    a,l
  502.     ld    l,a
  503.     ld    a,h
  504.     adc    a,0
  505.     ld    h,a
  506.     ld    e,(hl)        ;get address
  507.     inc    hl
  508.     ld    d,(hl)
  509.     ex    de,hl        ;in hl
  510.     ld    a,(hl)        ;if 0,
  511.     or    a
  512.     jp    z,invchr    ;invalid
  513.     call    outstr        ;else print it
  514.     jp    line_loop
  515.  
  516.      if    tabff
  517. cktkff:
  518.     call    f0$get        ;get next
  519.     jp    nz,dskerr
  520.     ld    (curtok2),a    ;save
  521.     or    a        ;test
  522.     jp    p,err2tok    ;must have bit 7 set
  523.     cp    maxff+1        ;and <max
  524.     jr    nc,err2tok
  525.     ld    hl,ttab1
  526. pr2tok:
  527.     and    07fh        ;mask
  528.     sla    a
  529.     add    a,l
  530.     ld    l,a
  531.     ld    a,h
  532.     adc    a,0
  533.     ld    h,a
  534.     ld    e,(hl)        ;get address
  535.     inc    hl
  536.     ld    d,(hl)
  537.     ex    de,hl        ;in hl
  538.     ld    a,(hl)        ;if 0,
  539.     or    a
  540.     jr    z,err2tok    ;not valid
  541.     call    outstr        ;otherwise print
  542.     jp    line_loop
  543. err2tok:
  544.     ld    a,(curtok)    ;print tokens
  545.     call    dunno
  546.     ld    a,(curtok2)
  547.     jp    invchr
  548.      endif        ;tabff
  549.  
  550.      if    tabfe
  551. cktkfe:
  552.     call    f0$get        ;get next
  553.     jp    nz,dskerr
  554.     ld    (curtok2),a    ;save
  555.     or    a        ;test
  556.     jp    p,err2tok    ;must have bit 7 set
  557.     cp    maxfe+1        ;and <max
  558.     jr    nc,err2tok
  559.     ld    hl,ttab2
  560.     jp    pr2tok
  561.      endif        ;tabfe
  562.  
  563.      if    tabfd
  564. cktkfd:
  565.     call    f0$get        ;get next
  566.     jp    nz,dskerr
  567.     ld    (curtok2),a    ;save
  568.     or    a        ;test
  569.     jp    p,err2tok    ;must have bit 7 set
  570.     cp    maxfd+1        ;and <max
  571.     jr    nc,err2tok
  572.     ld    hl,ttab3
  573.     jp    pr2tok
  574.      endif        ;tabfd
  575.  
  576. ;Incorrect byte 1, so not a BASIC file:
  577. notbas:
  578.     call    print
  579.     db    cr,lf,'Not a BASIC file...',cr,lf,0
  580.  
  581. done:
  582.     ld    bc,(outdu)    ;close i/p & o/p
  583.     call    logud
  584.     call    fo0$close
  585. done1:
  586.     ld    bc,(indu)
  587.     call    logud
  588.     call    fi0$close
  589. done2:
  590.     call    getud        ;restore original du:
  591.     jp    wmboot
  592.  
  593. ;Output null-terminated string in (hl)
  594. outstr:
  595.     push    af
  596.     push    bc
  597.     ld    bc,(outdu)
  598.     call    logud
  599. outstr1:
  600.     ld    a,(hl)        ;quit if 0
  601.     inc    hl        ;bump here
  602.     or    a
  603.     jr    z,outstrx
  604.     call    chrout        ;else output it
  605.     jr    outstr1
  606. outstrx:
  607.     pop    bc
  608.     pop    af
  609.     ret
  610.  
  611. ;Unknown character or furphy: print hex value
  612. dunno:
  613.     push    af
  614.     push    bc
  615.     push    de
  616.     ld    bc,(outdu)
  617.     call    logud
  618.     push    af        ;save value
  619.     ld    a,'('        ;print in brackets
  620.     call    chrout
  621.     ld    a,'$'
  622.     call    chrout
  623.     pop    af        ;restore character
  624.     ld    de,numbuf
  625.     call    ma2hc        ;convert to hex
  626.     xor    a        ;put 0 at end
  627.     ld    (de),a
  628.     call    prnbuf        ;output it
  629.     ld    a,')'
  630.     call    chrout
  631.     pop    de
  632.     pop    bc
  633.     pop    af
  634.     ret
  635.  
  636.      if    notasc
  637. ;Output HL as 6-character octal number to buffer in (de)
  638. mhl4oc:
  639.     push    hl        ;save hl
  640.     push    bc        ;bc
  641.     push    af        ;and af
  642.     sla    l        ;get first bit
  643.     rl    h
  644.     rla
  645.     and    1        ;1 bit
  646.     or    '0'
  647.     ld    (de),a        ;store it
  648.     inc    de
  649.     ld    b,5        ;do 5 more
  650. mhl4oc1:
  651.     ld    c,3        ;3 bits for each
  652. mhl4oc2:
  653.     sla    l        ;rotate left
  654.     rl    h
  655.     rla
  656.     dec    c        ;for each 3 bits
  657.     jr    nz,mhl4oc2
  658.     and    7        ;mask
  659.     or    '0'
  660.     ld    (de),a
  661.     inc    de        ;store
  662.     djnz    mhl4oc1
  663.     pop    af
  664.     pop    bc
  665.     pop    hl
  666.     ret
  667.      endif        ;notasc
  668.  
  669.  
  670. ;Send character in A to output file/display
  671. chrout:
  672.     push    bc
  673.     ld    c,a
  674.     call    f0$put
  675.     jp    nz,dskerr
  676.     ld    a,(disflg)    ;to console if required
  677.     or    a
  678.     jr    z,chrout1
  679.     ld    a,c
  680.     call    cout
  681. chrout1:
  682.     pop    bc
  683.     ret
  684.  
  685.  
  686. ;Output number in numbuf
  687. prnbuf:
  688.     push    hl
  689.     ld    hl,numbuf
  690.     call    outstr
  691.     pop    hl
  692.     ret
  693.  
  694. ;Disk error
  695. dskerr:
  696.     call    print
  697.     db    cr,lf,'Disk error.',cr,lf,0
  698.     jp    done
  699.  
  700. ;Set up du: in b,c from fname
  701. setdu:
  702.     dec    b        ;get in range
  703.     ld    a,b        ;test disk first
  704.     or    a        ;none specified if -ve
  705.     jp    p,setduu
  706.     ld    a,(curdrv)    ;so use current
  707.     ld    b,a
  708. setduu:
  709.     ld    a,c        ;now try user
  710.     cp    32        ;only 0-31
  711.     ret    c
  712.     ld    a,(curusr)    ;else current
  713.     ld    c,a
  714.     ret
  715.  
  716.      if    c64
  717. ;Convert CBM ASCII (PETASCII) to real ASCII
  718. ; if (value >= $40) and (value <= $5f):
  719. ;    value := value + 32
  720. ; if (value >= $c0) and (value <= $df):
  721. ;    value := value - 128
  722. cbmconv:
  723.     cp    '@'        ;upper case -> lower
  724.     ret    c
  725.     cp    '_'+1
  726.     jr    nc,cbmconv1
  727.     or    020h
  728.     ret
  729. cbmconv1:
  730.     cp    '@'+80h
  731.     ret    c
  732.     cp    '_'+80h+1
  733.     ret    nc
  734.     and    07fh
  735.     ret
  736.      endif        ;c64
  737.  
  738.  
  739. ;Tables of addresses for each token
  740. ;TTAB1 is tokens prefixed by 'FF'
  741. ;TTAB2 is tokens preceded by 'FE'
  742. ;TTAB3 is tokens preceded by 'FD'
  743.  
  744. ;***********************************************************************
  745. ;
  746. ;            IBM-PC Token tables
  747. ;
  748. ;***********************************************************************
  749.  
  750.      if    ibm
  751. ttab0:    dw    t80,t81,t82,t83,t84,t85,t86,t87
  752.     dw    t88,t89,t8a,t8b,t8c,t8d,t8e,t8f
  753.     dw    t90,t91,t92,t93,t94,t95,t96,t97
  754.     dw    t98,t99,t9a,t9b,t9c,t9d,t9e,t9f
  755.     dw    ta0,ta1,ta2,ta3,ta4,ta5,ta6,ta7
  756.     dw    ta8,ta9,taa,tab,tac,tad,tae,taf
  757.     dw    tb0,tb1,tb2,tb3,tb4,tb5,tb6,tb7
  758.     dw    tb8,tb9,tba,tbb,tbc,tbd,tbe,tbf
  759.     dw    tc0,tc1,tc2,tc3,tc4,tc5,tc6,tc7
  760.     dw    tc8,tc9,tca,tcb,tcc,tcd,tce,tcf
  761.     dw    td0,td1,td2,td3,td4,td5,td6,td7
  762.     dw    td8,td9,tda,tdb,tdc,tdd,tde,tdf
  763.     dw    te0,te1,te2,te3,te4,te5,te6,te7
  764.     dw    te8,te9,tea,teb,tec,ted,tee,tef
  765.     dw    tf0,tf1,tf2,tf3,tf4,tf5,tf6,tf7
  766.     dw    tf8,tf9,tfa,tfb,tfc,tfd,tfe
  767. ;
  768. ttab1:    dw    t180,t181,t182,t183,t184,t185,t186,t187
  769.     dw    t188,t189,t18a,t18b,t18c,t18d,t18e,t18f
  770.     dw    t190,t191,t192,t193,t194,t195,t196,t197
  771.     dw    t198,t199,t19a,t19b,t19c,t19d,t19e,t19f
  772.     dw    t1a0,t1a1,t1a2,t1a3,t1a4,t1a5
  773. ;
  774. ;The following tokens are not used yet
  775. ;    dw    t1a6,t1a7
  776. ;    dw    t1a8,t1a9,t1aa,t1ab,t1ac,t1ad,t1ae,t1af
  777. ;    dw    t1b0,t1b1,t1b2,t1b3,t1b4,t1b5,t1b6,t1b7
  778. ;    dw    t1b8,t1b9,t1ba,t1bb,t1bc,t1bd,t1be,t1bf
  779. ;    dw    t1c0,t1c1,t1c2,t1c3,t1c4,t1c5,t1c6,t1c7
  780. ;    dw    t1c8,t1c9,t1ca,t1cb,t1cc,t1cd,t1ce,t1cf
  781. ;    dw    t1d0,t1d1,t1d2,t1d3,t1d4,t1d5,t1d6,t1d7
  782. ;    dw    t1d8,t1d9,t1da,t1db,t1dc,t1dd,t1de,t1df
  783. ;    dw    t1e0,t1e1,t1e2,t1e3,t1e4,t1e5,t1e6,t1e7
  784. ;    dw    t1e8,t1e9,t1ea,t1eb,t1ec,t1ed,t1ee,t1ef
  785. ;    dw    t1f0,t1f1,t1f2,t1f3,t1f4,t1f5,t1f6,t1f7
  786. ;    dw    t1f8,t1f9,t1fa,t1fb,t1fc,t1fd,t1fe,t1ff
  787. ;
  788. ttab2:    dw    t280,t281,t282,t283,t284,t285,t286,t287
  789.     dw    t288,t289,t28a,t28b,t28c,t28d,t28e,t28f
  790.     dw    t290,t291,t292,t293,t294,t295,t296,t297
  791.     dw    t298,t299,t29a,t29b,t29c,t29d,t29e,t29f
  792.     dw    t2a0,t2a1,t2a2,t2a3,t2a4,t2a5,t2a6
  793.  
  794. ttab3:    dw    t380,t381,t382,t383,t384,t385,t386
  795.  
  796. ;Names for each token:-
  797. ;Unknown or unused tokens have zero as the only value.
  798.  
  799. t80:    db    0
  800. t81:    db    'END',0
  801. t82:    db    'FOR',0
  802. t83:    db    'NEXT',0
  803. t84:    db    'DATA',0
  804. t85:    db    'INPUT',0
  805. t86:    db    'DIM',0
  806. t87:    db    'READ',0
  807. t88:    db    'LET',0
  808. t89:    db    'GOTO',0
  809. t8a:    db    'RUN',0
  810. t8b:    db    'IF',0
  811. t8c:    db    'RESTORE',0
  812. t8d:    db    'GOSUB',0
  813. t8e:    db    'RETURN',0
  814. t8f:    db    'REM',0
  815. t90:    db    'STOP',0
  816. t91:    db    'PRINT',0
  817. t92:    db    'CLEAR',0
  818. t93:    db    'LIST',0
  819. t94:    db    'NEW',0
  820. t95:    db    'ON',0
  821. t96:    db    'WAIT',0
  822. t97:    db    'DEF',0
  823. t98:    db    'POKE',0
  824. t99:    db    'CONT',0
  825. t9a:    db    0
  826. t9b:    db    0
  827. t9c:    db    'OUT',0
  828. t9d:    db    'LPRINT',0
  829. t9e:    db    'LLIST',0
  830. t9f:    db    0
  831. ta0:    db    'WIDTH',0
  832. ta1:    db    'ELSE',0
  833. ta2:    db    'TRON',0
  834. ta3:    db    'TROFF',0
  835. ta4:    db    'SWAP',0
  836. ta5:    db    'ERASE',0
  837. ta6:    db    'EDIT',0
  838. ta7:    db    'ERROR',0
  839. ta8:    db    'RESUME',0
  840. ta9:    db    'DELETE',0
  841. taa:    db    'AUTO',0
  842. tab:    db    'RENUM',0
  843. tac:    db    'DEFSTR',0
  844. tad:    db    'DEFINT',0
  845. tae:    db    'DEFSNG',0
  846. taf:    db    'DEFDBL',0
  847. tb0:    db    'LINE',0
  848. tb1:    db    'WHILE',0
  849. tb2:    db    'WEND',0
  850. tb3:    db    'CALL',0
  851. tb4:    db    0
  852. tb5:    db    0
  853. tb6:    db    0
  854. tb7:    db    'WRITE',0
  855. tb8:    db    'OPTION',0
  856. tb9:    db    'RANDOMIZE',0
  857. tba:    db    'OPEN',0
  858. tbb:    db    'CLOSE',0
  859. tbc:    db    'LOAD',0
  860. tbd:    db    'MERGE',0
  861. tbe:    db    'SAVE',0
  862. tbf:    db    'COLOR',0
  863. tc0:    db    'CLS',0
  864. tc1:    db    'MOTOR',0
  865. tc2:    db    'BSAVE',0
  866. tc3:    db    'BLOAD',0
  867. tc4:    db    'SOUND',0
  868. tc5:    db    'BEEP',0
  869. tc6:    db    'PSET',0
  870. tc7:    db    'PRESET',0
  871. tc8:    db    'SCREEN',0
  872. tc9:    db    'KEY',0
  873. tca:    db    'LOCATE',0
  874. tcb:    db    0
  875. tcc:    db    'TO',0
  876. tcd:    db    'THEN',0
  877. tce:    db    'TAB(',0
  878. tcf:    db    'STEP',0
  879. td0:    db    'USR',0
  880. td1:    db    'FN',0
  881. td2:    db    'SPC(',0
  882. td3:    db    'NOT',0
  883. td4:    db    'ERL',0
  884. td5:    db    'ERR',0
  885. td6:    db    'STRING$',0
  886. td7:    db    'USING',0
  887. td8:    db    'INSTR',0
  888. td9:    db    '''',0
  889. tda:    db    'VARPTR',0
  890. tdb:    db    'CSRLIN',0
  891. tdc:    db    'POINT',0
  892. tdd:    db    'OFF',0
  893. tde:    db    'INKEY$',0
  894. tdf:    db    0
  895. te0:    db    0
  896. te1:    db    0
  897. te2:    db    0
  898. te3:    db    0
  899. te4:    db    0
  900. te5:    db    0
  901. te6:    db    '>',0
  902. te7:    db    '=',0
  903. te8:    db    '<',0
  904. te9:    db    '+',0
  905. tea:    db    '-',0
  906. teb:    db    '*',0
  907. tec:    db    '/',0
  908. ted:    db    '^',0
  909. tee:    db    'AND',0
  910. tef:    db    'OR',0
  911. tf0:    db    'XOR',0
  912. tf1:    db    'EQV',0
  913. tf2:    db    'IMP',0
  914. tf3:    db    'MOD',0
  915. tf4:    db    '\',0
  916. tf5:    db    0
  917. tf6:    db    0
  918. tf7:    db    0
  919. tf8:    db    0
  920. tf9:    db    0
  921. tfa:    db    0
  922. tfb:    db    0
  923. tfc:    db    0
  924. tfd:    db    0
  925. tfe:    db    0
  926. ;
  927. t180:    db    0
  928. t181:    db    'LEFT$',0
  929. t182:    db    'RIGHT$',0
  930. t183:    db    'MID$',0
  931. t184:    db    'SGN',0
  932. t185:    db    'INT',0
  933. t186:    db    'ABS',0
  934. t187:    db    'SQR',0
  935. t188:    db    'RND',0
  936. t189:    db    'SIN',0
  937. t18a:    db    'LOG',0
  938. t18b:    db    'EXP',0
  939. t18c:    db    'COS',0
  940. t18d:    db    'TAN',0
  941. t18e:    db    'ATN',0
  942. t18f:    db    'FRE',0
  943. t190:    db    'INP',0
  944. t191:    db    'POS',0
  945. t192:    db    'LEN',0
  946. t193:    db    'STR$',0
  947. t194:    db    'VAL',0
  948. t195:    db    'ASC',0
  949. t196:    db    'CHR$',0
  950. t197:    db    'PEEK',0
  951. t198:    db    'SPACE$',0
  952. t199:    db    'OCT$',0
  953. t19a:    db    'HEX$',0
  954. t19b:    db    'LPOS',0
  955. t19c:    db    'CINT',0
  956. t19d:    db    'CSNG',0
  957. t19e:    db    'CDBL',0
  958. t19f:    db    'FIX',0
  959. t1a0:    db    'PEN',0
  960. t1a1:    db    'STICK',0
  961. t1a2:    db    'STRIG',0
  962. t1a3:    db    'EOF',0
  963. t1a4:    db    'LOC',0
  964. t1a5:    db    'LOF',0
  965. ;
  966. t280:    db    0
  967. t281:    db    'FILES',0
  968. t282:    db    'FIELD',0
  969. t283:    db    'SYSTEM',0
  970. t284:    db    'NAME',0
  971. t285:    db    'LSET',0
  972. t286:    db    'RSET',0
  973. t287:    db    'KILL',0
  974. t288:    db    'PUT',0
  975. t289:    db    'GET',0
  976. t28a:    db    'RESET',0
  977. t28b:    db    'COMMON',0
  978. t28c:    db    'CHAIN',0
  979. t28d:    db    'DATE$',0
  980. t28e:    db    'TIME$',0
  981. t28f:    db    'PAINT',0
  982. t290:    db    'COM',0
  983. t291:    db    'CIRCLE',0
  984. t292:    db    'DRAW',0
  985. t293:    db    'PLAY',0
  986. t294:    db    'TIMER',0
  987. t295:    db    'IOCTL',0
  988. t296:    db    'MKDIR',0
  989. t297:    db    'SHELL',0
  990. t298:    db    'VIEW',0
  991. t299:    db    'PMAP',0
  992. t29a:    db    'ERDEV',0
  993. t29b:    db    'CHDIR',0
  994. t29c:    db    'RMDIR',0
  995. t29d:    db    'ENVIRON',0
  996. t29e:    db    'WINDOW',0
  997. t29f:    db    'PALETTE',0
  998. t2a0:    db    0
  999. t2a1:    db    0
  1000. t2a2:    db    0
  1001. t2a3:    db    0
  1002. t2a4:    db    'NOISE',0
  1003. t2a5:    db    'PCOPY',0
  1004. t2a6:    db    'TERM',0
  1005. ;
  1006. t380:    db    0
  1007. t381:    db    'CVI',0
  1008. t382:    db    'CVS',0
  1009. t383:    db    'CVD',0
  1010. t384:    db    'MKI$',0
  1011. t385:    db    'MKS$',0
  1012. t386:    db    'MKD$',0
  1013.  
  1014.      endif        ;ibm
  1015. ;***********************************************************************
  1016. ;
  1017. ;        TRS-80 Level II Token tables
  1018. ;
  1019. ;***********************************************************************
  1020.  
  1021.      if    trs80
  1022.  
  1023. ttab0:    dw    t80,t81,t82,t83,t84,t85,t86,t87
  1024.     dw    t88,t89,t8a,t8b,t8c,t8d,t8e,t8f
  1025.     dw    t90,t91,t92,t93,t94,t95,t96,t97
  1026.     dw    t98,t99,t9a,t9b,t9c,t9d,t9e,t9f
  1027.     dw    ta0,ta1,ta2,ta3,ta4,ta5,ta6,ta7
  1028.     dw    ta8,ta9,taa,tab,tac,tad,tae,taf
  1029.     dw    tb0,tb1,tb2,tb3,tb4,tb5,tb6,tb7
  1030.     dw    tb8,tb9,tba,tbb,tbc,tbd,tbe,tbf
  1031.     dw    tc0,tc1,tc2,tc3,tc4,tc5,tc6,tc7
  1032.     dw    tc8,tc9,tca,tcb,tcc,tcd,tce,tcf
  1033.     dw    td0,td1,td2,td3,td4,td5,td6,td7
  1034.     dw    td8,td9,tda,tdb,tdc,tdd,tde,tdf
  1035.     dw    te0,te1,te2,te3,te4,te5,te6,te7
  1036.     dw    te8,te9,tea,teb,tec,ted,tee,tef
  1037.     dw    tf0,tf1,tf2,tf3,tf4,tf5,tf6,tf7
  1038.     dw    tf8,tf9,tfa,tfb
  1039. ;
  1040. t80:    db    ' END ',0
  1041. t81:    db    ' FOR ',0
  1042. t82:    db    ' RESET ',0
  1043. t83:    db    ' SET ',0
  1044. t84:    db    ' CLS ',0
  1045. t85:    db    ' CMD ',0
  1046. t86:    db    ' RANDOM ',0
  1047. t87:    db    ' NEXT ',0
  1048. t88:    db    ' DATA ',0
  1049. t89:    db    ' INPUT ',0
  1050. t8a:    db    ' DIM ',0
  1051. t8b:    db    ' READ ',0
  1052. t8c:    db    ' LET ',0
  1053. t8d:    db    ' GOTO ',0
  1054. t8e:    db    ' RUN ',0
  1055. t8f:    db    ' IF ',0
  1056. t90:    db    ' RESTORE ',0
  1057. t91:    db    ' GOSUB ',0
  1058. t92:    db    ' RETURN ',0
  1059. t93:    db    ' REM ',0
  1060. t94:    db    ' STOP ',0
  1061. t95:    db    ' ELSE ',0
  1062. t96:    db    ' TRON ',0
  1063. t97:    db    ' TROFF ',0
  1064. t98:    db    ' DEFSTR ',0
  1065. t99:    db    ' DEFINT ',0
  1066. t9a:    db    ' DEFSNG ',0
  1067. t9b:    db    ' DEFDBL ',0
  1068. t9c:    db    ' LINE ',0
  1069. t9d:    db    ' EDIT ',0
  1070. t9e:    db    ' ERROR ',0
  1071. t9f:    db    ' RESUME ',0
  1072. ta0:    db    ' OUT ',0
  1073. ta1:    db    ' ON ',0
  1074. ta2:    db    ' OPEN ',0
  1075. ta3:    db    ' FIELD ',0
  1076. ta4:    db    ' GET ',0
  1077. ta5:    db    ' PUT ',0
  1078. ta6:    db    ' CLOSE ',0
  1079. ta7:    db    ' LOAD ',0
  1080. ta8:    db    ' MERGE ',0
  1081. ta9:    db    ' NAME ',0
  1082. taa:    db    ' KILL ',0
  1083. tab:    db    ' LSET ',0
  1084. tac:    db    ' RSET ',0
  1085. tad:    db    ' SAVE ',0
  1086. tae:    db    ' SYSTEM ',0
  1087. taf:    db    ' LPRINT ',0
  1088. tb0:    db    ' DEF ',0
  1089. tb1:    db    ' POKE ',0
  1090. tb2:    db    ' PRINT ',0
  1091. tb3:    db    ' CONT ',0
  1092. tb4:    db    ' LIST ',0
  1093. tb5:    db    ' LLIST ',0
  1094. tb6:    db    ' DELETE ',0
  1095. tb7:    db    ' AUTO ',0
  1096. tb8:    db    ' CLEAR ',0
  1097. tb9:    db    ' CLOAD ',0
  1098. tba:    db    ' CSAVE ',0
  1099. tbb:    db    ' NEW ',0
  1100. tbc:    db    ' TAB( ',0
  1101. tbd:    db    ' TO ',0
  1102. tbe:    db    ' FN ',0
  1103. tbf:    db    ' USING ',0
  1104. tc0:    db    ' VARPTR ',0
  1105. tc1:    db    ' USR ',0
  1106. tc2:    db    ' ERL ',0
  1107. tc3:    db    ' ERR ',0
  1108. tc4:    db    ' STRING$ ',0
  1109. tc5:    db    ' INSTR ',0
  1110. tc6:    db    ' POINT ',0
  1111. tc7:    db    ' TIME$ ',0
  1112. tc8:    db    ' MEM ',0
  1113. tc9:    db    ' INKEY$ ',0
  1114. tca:    db    ' THEN ',0
  1115. tcb:    db    ' NOT ',0
  1116. tcc:    db    ' STEP ',0
  1117. tcd:    db    '+',0
  1118. tce:    db    '-',0
  1119. tcf:    db    '*',0
  1120. td0:    db    '/',0
  1121. td1:    db    '^',0
  1122. td2:    db    ' AND ',0
  1123. td3:    db    ' OR ',0
  1124. td4:    db    '>',0
  1125. td5:    db    '=',0
  1126. td6:    db    '<',0
  1127. td7:    db    ' SGN ',0
  1128. td8:    db    ' INT ',0
  1129. td9:    db    ' ABS ',0
  1130. tda:    db    ' FRE ',0
  1131. tdb:    db    ' INP ',0
  1132. tdc:    db    ' POS ',0
  1133. tdd:    db    ' SQR ',0
  1134. tde:    db    ' RND ',0
  1135. tdf:    db    ' LOG ',0
  1136. te0:    db    ' EXP ',0
  1137. te1:    db    ' COS ',0
  1138. te2:    db    ' SIN ',0
  1139. te3:    db    ' TAN ',0
  1140. te4:    db    ' ATN ',0
  1141. te5:    db    ' PEEK ',0
  1142. te6:    db    ' CVI ',0
  1143. te7:    db    ' CVS ',0
  1144. te8:    db    ' CVD ',0
  1145. te9:    db    ' EOF ',0
  1146. tea:    db    ' LOC ',0
  1147. teb:    db    ' LOF ',0
  1148. tec:    db    ' MKI$ ',0
  1149. ted:    db    ' MKS$ ',0
  1150. tee:    db    ' MKD$ ',0
  1151. tef:    db    ' CINT ',0
  1152. tf0:    db    ' CSNG ',0
  1153. tf1:    db    ' CDBL ',0
  1154. tf2:    db    ' FIX ',0
  1155. tf3:    db    ' LEN ',0
  1156. tf4:    db    ' STR$ ',0
  1157. tf5:    db    ' VAL ',0
  1158. tf6:    db    ' ASC ',0
  1159. tf7:    db    ' CHR$ ',0
  1160. tf8:    db    ' LEFT$ ',0
  1161. tf9:    db    ' RIGHT$ ',0
  1162. tfa:    db    ' MID$ ',0
  1163. tfb:    db    '''',0
  1164.      endif        ;trs80
  1165.  
  1166. ;***********************************************************************
  1167. ;
  1168. ;            Commodore 64 Token tables
  1169. ;
  1170. ;***********************************************************************
  1171.  
  1172.      if    c64
  1173.  
  1174. ttab0:    dw    t80,t81,t82,t83,t84,t85,t86,t87
  1175.     dw    t88,t89,t8a,t8b,t8c,t8d,t8e,t8f
  1176.     dw    t90,t91,t92,t93,t94,t95,t96,t97
  1177.     dw    t98,t99,t9a,t9b,t9c,t9d,t9e,t9f
  1178.     dw    ta0,ta1,ta2,ta3,ta4,ta5,ta6,ta7
  1179.     dw    ta8,ta9,taa,tab,tac,tad,tae,taf
  1180.     dw    tb0,tb1,tb2,tb3,tb4,tb5,tb6,tb7
  1181.     dw    tb8,tb9,tba,tbb,tbc,tbd,tbe,tbf
  1182.     dw    tc0,tc1,tc2,tc3,tc4,tc5,tc6,tc7
  1183.     dw    tc8,tc9,tca,tcb
  1184. ;
  1185. t80:    db    'END',0
  1186. t81:    db    'FOR',0
  1187. t82:    db    'NEXT',0
  1188. t83:    db    'DATA',0
  1189. t84:    db    'INPUT#',0
  1190. t85:    db    'INPUT',0
  1191. t86:    db    'DIM',0
  1192. t87:    db    'READ',0
  1193. t88:    db    'LET',0
  1194. t89:    db    'GOTO',0
  1195. t8a:    db    'RUN',0
  1196. t8b:    db    'IF',0
  1197. t8c:    db    'RESTORE',0
  1198. t8d:    db    'GOSUB',0
  1199. t8e:    db    'RETURN',0
  1200. t8f:    db    'REM',0
  1201. t90:    db    'STOP',0
  1202. t91:    db    'ON',0
  1203. t92:    db    'WAIT',0
  1204. t93:    db    'LOAD',0
  1205. t94:    db    'SAVE',0
  1206. t95:    db    'VERIFY',0
  1207. t96:    db    'DEF',0
  1208. t97:    db    'POKE',0
  1209. t98:    db    'PRINT#',0
  1210. t99:    db    'PRINT',0
  1211. t9a:    db    'CONT',0
  1212. t9b:    db    'LIST',0
  1213. t9c:    db    'CLR',0
  1214. t9d:    db    'CMD',0
  1215. t9e:    db    'SYS',0
  1216. t9f:    db    'OPEN',0
  1217. ta0:    db    'CLOSE',0
  1218. ta1:    db    'GET',0
  1219. ta2:    db    'NEW',0
  1220. ta3:    db    'TAB(',0
  1221. ta4:    db    'TO',0
  1222. ta5:    db    'FN',0
  1223. ta6:    db    'SPC(',0
  1224. ta7:    db    'THEN',0
  1225. ta8:    db    'NOT',0
  1226. ta9:    db    'STEP',0
  1227. taa:    db    '+',0
  1228. tab:    db    '-',0
  1229. tac:    db    '*',0
  1230. tad:    db    '/',0
  1231. tae:    db    '^',0
  1232. taf:    db    'AND',0
  1233. tb0:    db    'OR',0
  1234. tb1:    db    '>',0
  1235. tb2:    db    '=',0
  1236. tb3:    db    '<',0
  1237. tb4:    db    'SGN',0
  1238. tb5:    db    'INT',0
  1239. tb6:    db    'ABS',0
  1240. tb7:    db    'USR',0
  1241. tb8:    db    'FRE',0
  1242. tb9:    db    'POS',0
  1243. tba:    db    'SQR',0
  1244. tbb:    db    'RND',0
  1245. tbc:    db    'LOG',0
  1246. tbd:    db    'EXP',0
  1247. tbe:    db    'COS',0
  1248. tbf:    db    'SIN',0
  1249. tc0:    db    'TAN',0
  1250. tc1:    db    'ATN',0
  1251. tc2:    db    'PEEK',0
  1252. tc3:    db    'LEN',0
  1253. tc4:    db    'STR$',0
  1254. tc5:    db    'VAL',0
  1255. tc6:    db    'ASC',0
  1256. tc7:    db    'CHR$',0
  1257. tc8:    db    'LEFT$',0
  1258. tc9:    db    'RIGHT$',0
  1259. tca:    db    'MID$',0
  1260. tcb:    db    'GO',0
  1261.  
  1262.      endif        ;c64
  1263. ;
  1264. asctyp:    db    'ASC'
  1265.  
  1266. indu:    ds    2
  1267. outdu:    ds    2
  1268. curdrv:    ds    1
  1269. curusr:    ds    1
  1270. disflg:    ds    1        ;flag: display result
  1271. curtok:    ds    1        ;current token
  1272.  
  1273.      if    exttab
  1274. curtok2:
  1275.     ds    1        ;2nd token if any
  1276.      endif
  1277.  
  1278. quote:    ds    1        ;quote mode flag
  1279. numbuf:    ds    7        ;number conversion buffer
  1280. ;
  1281. ;Token pointer table for argv
  1282. toktab:
  1283.     db    2        ;2 tokens only
  1284. numtok:    ds    1
  1285. tok1:    ds    2
  1286. tok2:    ds    2
  1287.  
  1288.      if    notasc
  1289. fpacc:    ds    8        ;temp f/p accumulator
  1290.      endif
  1291.  
  1292. infcb:    ds    36
  1293. outfcb:    ds    36
  1294.  
  1295.     end    start
  1296.