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 / ZSYS / SIMTEL20 / ZCPR3 / TCMAKE.MAC < prev    next >
Text File  |  2000-06-30  |  19KB  |  1,085 lines

  1. ; ZCPR3 TCAP Facility (Z3TCAP)
  2. ; Program Name:  TCMAKE
  3. ; Author:  Richard Conn
  4. ; Version:  1.0
  5. ; Date:  10 Mar 84
  6. version    equ    10
  7.  
  8. ;
  9. ;    TCMAKE allows the user to create a Z3T file for his particular
  10. ; terminal.
  11. ;
  12.  
  13. ;
  14. ;  Basic Equates
  15. ;
  16. z3env    SET    0f400h    ;ZCPR3 Environment Descriptor
  17. qch    equ    '\'    ;quote char
  18. fcb    equ    5ch
  19. tbuff    equ    80h
  20. ctrlc    equ    'C'-'@'
  21. cr    equ    0dh
  22. lf    equ    0ah
  23.  
  24. ;
  25. ;  ZCPR3 and SYSLIB References
  26. ;
  27.     ext    z3init,qprint,z3log
  28.     ext    bbline,sksp,eval
  29.     ext    codend,moveb,fillb,hmovb
  30.     ext    print,pfn1,pstr,capine,cin,caps,crlf,cout,pafdc,pa2hc
  31.     ext    initfcb,f$make,f$write,f$close
  32.     ext    f$exist,gfa,f$delete
  33.  
  34. ;
  35. ; Environment Definition
  36. ;
  37.     if    z3env ne 0
  38. ;
  39. ; External ZCPR3 Environment Descriptor
  40. ;
  41.     jmp    start
  42.     db    'Z3ENV'    ;This is a ZCPR3 Utility
  43.     db    1    ;External Environment Descriptor
  44. z3eadr:
  45.     dw    z3env
  46. start:
  47.     lhld    z3eadr    ;pt to ZCPR3 environment
  48. ;
  49.     else
  50. ;
  51. ; Internal ZCPR3 Environment Descriptor
  52. ;
  53.     MACLIB    Z3BASE.LIB
  54.     MACLIB    SYSENV.LIB
  55. z3eadr:
  56.     jmp    start
  57.     SYSENV
  58. start:
  59.     lxi    h,z3eadr    ;pt to ZCPR3 environment
  60.     endif
  61.  
  62. ;
  63. ; Start of Program -- Initialize ZCPR3 Environment
  64. ;
  65.     call    z3init    ;initialize the ZCPR3 Env and the VLIB Env
  66.  
  67. ;
  68. ; Print Banner
  69. ;
  70.     call    qprint
  71.     db    'TCMAKE, Version '
  72.     db    (version/10)+'0','.',(version mod 10)+'0'
  73.     db    cr,lf,0
  74.  
  75. ;
  76. ; Check for Entry in FCB
  77. ;
  78.     lda    fcb+1    ;get first char
  79.     cpi    ' '    ;none if space
  80.     jz    help
  81.     cpi    '/'    ;none if slash
  82.     jnz    start1
  83. ;
  84. ; Print Help Info
  85. ;
  86. help:
  87.     call    print
  88.     db    'TCMAKE - Create a Z3T File'
  89.     db    cr,lf,'Syntax:'
  90.     db    cr,lf,'    TCMAKE outfile  -or-  TCMAKE outfile.typ'
  91.     db    cr,lf
  92.     db    cr,lf,'where "outfile" is the file to be generated by'
  93.     db    cr,lf,'the execution of TCMAKE.  If no file type is'
  94.     db    cr,lf,'given, a file type of Z3T is the default.'
  95.     db    0
  96.     ret
  97. ;
  98. ; Resume Processing
  99. ;
  100. start1:
  101. ;
  102. ; Set Default File Type if None
  103. ;
  104.     lxi    d,fcb+9        ;pt to file type
  105.     lxi    h,deftyp    ;pt to default file type
  106.     mvi    b,3        ;3 bytes
  107.     ldax    d        ;get first char
  108.     cpi    ' '        ;none if space
  109.     cz    moveb        ;set default file type
  110. ;
  111. ; Init the Buffers and Pointers
  112. ;
  113.     call    codend    ;pt to scratch area
  114.     shld    scratch    ;set ptr
  115.     lxi    d,100h    ;give space (overkill)
  116.     xra    a    ;init strings to empty
  117.     sta    rcfirst    ;clear flag
  118.     dad    d
  119.     shld    cladr    ;CL
  120.     mov    m,a    ;clear
  121.     dad    d
  122.     shld    cmadr    ;CM
  123.     mov    m,a    ;clear
  124.     dad    d
  125.     shld    ceadr    ;CE
  126.     mov    m,a    ;clear
  127.     dad    d
  128.     shld    soadr    ;SO
  129.     mov    m,a    ;clear
  130.     dad    d
  131.     shld    seadr    ;SE
  132.     mov    m,a    ;clear
  133.     dad    d
  134.     shld    tiadr    ;TI
  135.     mov    m,a    ;clear
  136.     dad    d
  137.     shld    teadr    ;TE
  138.     mov    m,a    ;clear
  139.     dad    d
  140.     shld    cmbadr    ;CM Beginning
  141.     mov    m,a    ;clear
  142.     dad    d
  143.     shld    cmmadr    ;CM Middle
  144.     mov    m,a    ;clear
  145.     dad    d
  146.     shld    cmeadr    ;CM Ending
  147.     mov    m,a    ;clear
  148.     dad    d
  149.     shld    reqn    ;Row Equation
  150.     mov    m,a
  151.     dad    d
  152.     shld    ceqn    ;Column Equation
  153.     mov    m,a
  154.     lxi    h,ku    ;clear 1-byte buffers
  155.     mvi    b,7    ;7 of them
  156.     xra    a    ;0 fill
  157.     call    fillb
  158. ;
  159. ; Create the Data Base
  160. ;
  161. menu1:
  162.     call    create        ;create entry
  163.     call    assemble    ;assemble the entry
  164.     jz    menu1        ;continue if buffer overflow
  165. ;
  166. ; Confirm Selection
  167. ;
  168.     call    print
  169.     db    cr,lf,'  Selected Terminal is: ',0
  170.     lhld    scratch        ;pt to buffer
  171.     call    prent        ;print name
  172.     call    print
  173.     db    ' -- Confirm (Y/N)? ',0
  174.     call    capine        ;get input
  175.     call    crlf
  176.     cpi    'Y'
  177.     jnz    menu1        ;continue
  178.     call    wrfile        ;write file
  179.     ret
  180. ;
  181. ; Assemble Data into Z3T Format
  182. ;    Return with Z if Buffer Overflow (more than 128 bytes)
  183. ;    Return with NZ if OK
  184. ;
  185. assemble:
  186.     mvi    c,128-23    ;128 bytes max with 23 bytes for header
  187.     mvi    b,23        ;copy 23 byte header
  188.     lhld    scratch        ;into scratch area
  189.     lxi    d,tname        ;from TNAME
  190.     xchg
  191.     call    hmovb
  192.     lhld    cladr        ;copy CL string
  193.     call    asmcopy
  194.     lxi    h,crcmd        ;reverse row/col to col/row?
  195.     lda    rcfirst        ;get flag
  196.     cpi    'C'        ;reverse if C
  197.     jnz    asmc0
  198.     call    asmcopy
  199.     dcx    d        ;don't let zero in
  200. asmc0:
  201.     lhld    cmbadr        ;CM Beginning
  202.     call    asmcopy
  203.     dcx    d
  204.     lhld    ceqn        ;prepare for col first
  205.     lda    rcfirst        ;get row/col flag
  206.     cpi    'C'        ;col/row?
  207.     jz    asmc1
  208.     lhld    reqn        ;row first, so store row
  209. asmc1:
  210.     call    asmcopy
  211.     dcx    d        ;skip 0
  212.     lhld    cmmadr        ;CM Middle
  213.     call    asmcopy
  214.     dcx    d        ;skip 0
  215.     lhld    reqn        ;prepare for row first
  216.     lda    rcfirst        ;get row/col flag
  217.     cpi    'C'        ;col/row?
  218.     jz    asmc2
  219.     lhld    ceqn        ;col first, so store col
  220. asmc2:
  221.     call    asmcopy
  222.     dcx    d        ;skip 0
  223.     lhld    cmeadr        ;CM Ending
  224.     call    asmcopy
  225.     lhld    ceadr        ;CE
  226.     call    asmcopy
  227.     lhld    soadr        ;SO
  228.     call    asmcopy
  229.     lhld    seadr        ;SE
  230.     call    asmcopy
  231.     lhld    tiadr        ;TI
  232.     call    asmcopy
  233.     lhld    teadr        ;TE
  234.     call    asmcopy
  235.     xra    a        ;zero rest
  236. asmzero:
  237.     stax    d        ;store 0
  238.     inx    d
  239.     dcr    c        ;count down
  240.     jnz    asmzero
  241.     dcr    c        ;return NZ for OK
  242.     ret
  243. ;
  244. ; Copy TCAP String from HL to DE
  245. ;    Check for SCRATCH Area Overflow by Counting C Down
  246. ;    Allow For Quotes
  247. ;
  248. asmcopy:
  249.     mov    a,m        ;get char
  250.     stax    d        ;store it
  251.     inx    h        ;pt to next
  252.     inx    d
  253.     ora    a        ;done?
  254.     rz
  255.     dcr    c        ;check for overflow
  256.     jz    asmovfl
  257.     cpi    qch        ;quote?
  258.     jnz    asmcopy
  259.     mov    a,m        ;get quoted byte
  260.     stax    d        ;store it
  261.     inx    h        ;pt to next
  262.     inx    d
  263.     dcr    c        ;check for overflow
  264.     jnz    asmcopy
  265. asmovfl:
  266.     pop    psw        ;clear stack
  267.     call    print
  268.     db    cr,lf,'** Buffer Overflow **',0
  269.     xra    a        ;error code
  270.     ret
  271.  
  272. ;
  273. ; Create Entries
  274. ;
  275. create:
  276.     call    print
  277.     db    cr,lf
  278.     db    cr,lf,'    ** Z3TCAP Main Menu',0
  279.     call    prfdata    ;print file data
  280.     call    print
  281.     db    cr,lf
  282.     db    cr,lf,'Define:    1. Clear Screen Sequence'
  283.     db    cr,lf,'    2. Cursor Motion Sequence'
  284.     db    cr,lf,'    3. Clear to End of Line Sequence'
  285.     db    cr,lf,'    4. Standout Mode Sequences'
  286.     db    cr,lf,'    5. Terminal Init/Deinit Sequences'
  287.     db    cr,lf,'    6. Arrow Keys'
  288.     db    cr,lf,'    7. Terminal Name'
  289.     db    cr,lf
  290.     db    cr,lf,'Status:    S. Print Status (Definitions so far)'
  291.     db    cr,lf
  292.     db    cr,lf,'Exit:    X. Exit and Write File'
  293.     db    cr,lf,'    Q. Quit and Abort Program without Writing File'
  294.     db    cr,lf
  295.     db    cr,lf,'Command? ',0
  296.     call    capine    ;get response
  297.     call    crlf
  298.     lxi    h,ctable    ;pt to command table
  299.     call    tscan    ;scan table
  300.     call    print
  301.     db    ' Invalid Command: ',0
  302.     call    cout    ;print char
  303.     jmp    create    ;resume
  304. ;
  305. ; Print File Data
  306. ;
  307. prfdata:
  308.     call    print
  309.     db    ' for File ',0
  310.     lxi    d,fcb+1
  311.     call    pfn1
  312.     call    print
  313.     db    ' **',0
  314.     ret
  315. ;
  316. ; Define Name of Terminal
  317. ;
  318. namedef:
  319.     lxi    h,tname    ;space fill terminal name buffer
  320.     mvi    a,' '
  321.     mvi    b,16
  322.     call    fillb
  323.     call    print
  324.     db    cr,lf,' Input Name of Terminal: ',0
  325.     xra    a    ;no caps
  326.     call    bbline    ;get line from user
  327.     call    sksp    ;skip over leading spaces
  328.     lxi    d,tname    ;save name in buffer
  329.     mvi    b,16    ;16 bytes max
  330. putname:
  331.     mov    a,m    ;get next char
  332.     ora    a    ;done?
  333.     jz    pn1
  334.     stax    d    ;put next char
  335.     inx    h    ;pt to next
  336.     inx    d
  337.     dcr    b    ;count down
  338.     jnz    putname
  339. pn1:
  340.     jmp    create
  341. ;
  342. ; Define Arrow Keys
  343. ;
  344. arrowdef:
  345.     call    print
  346.     db    'Arrow Key Definition'
  347.     db    cr,lf,' Your Terminal''s Arrow Keys may be defined ONLY'
  348.     db    cr,lf,' if they generate only one character each.  If they'
  349.     db    cr,lf,' do, type Y to continue.  If not, type anything else.'
  350.     db    cr,lf,'    Define Arrow Keys (Y/N)? ',0
  351.     call    capine
  352.     cpi    'Y'
  353.     jnz    create
  354.     call    print
  355.     db    cr,lf,' Strike the Appropriate Arrow Key'
  356.     db    cr,lf,' 1. Arrow UP?    ',0
  357.     lxi    h,ku    ;pt to first entry
  358.     call    cin
  359.     mov    m,a    ;store it
  360.     inx    h    ;pt to next
  361.     call    ccout
  362.     call    print
  363.     db    cr,lf,' 2. Arrow DOWN?  ',0
  364.     call    cin
  365.     mov    m,a
  366.     inx    h
  367.     call    ccout
  368.     call    print
  369.     db    cr,lf,' 3. Arrow RIGHT? ',0
  370.     call    cin
  371.     mov    m,a
  372.     inx    h
  373.     call    ccout
  374.     call    print
  375.     db    cr,lf,' 4. Arrow LEFT?  ',0
  376.     call    cin
  377.     mov    m,a
  378.     call    ccout
  379.     jmp    create
  380. ;
  381. ; Review Arrow Keys
  382. ;
  383. arrowrev:
  384.     call    print
  385.     db    cr,lf,'Review of Arrow Key Definitions'
  386.     db    cr,lf,' 1. Arrow UP =    ',0
  387.     lxi    h,ku    ;pt to first
  388.     mov    a,m
  389.     call    ccout
  390.     inx    h
  391.     call    print
  392.     db    cr,lf,' 2. Arrow DOWN =  ',0
  393.     mov    a,m
  394.     call    ccout
  395.     inx    h
  396.     call    print
  397.     db    cr,lf,' 3. Arrow RIGHT = ',0
  398.     mov    a,m
  399.     call    ccout
  400.     inx    h
  401.     call    print
  402.     db    cr,lf,' 4. Arrow LEFT =  ',0
  403.     mov    a,m
  404.     call    ccout
  405.     ret
  406.  
  407. ;
  408. ; Quit Create Mode and Program
  409. ;
  410. crquit:
  411.     call    print
  412.     db    'Do you really want to quit (Y/N)? ',0
  413.     call    capine    ;get input from user
  414.     cpi    'Y'    ;see if he typed a Y
  415.     jnz    create    ;resume if not
  416.     pop    psw    ;clear stack
  417. ;
  418. ; Exit Create Mode
  419. ;
  420. crexit:
  421.     ret
  422. ;
  423. ; CL Definition
  424. ;
  425. cldef:
  426.     call    print
  427.     db    'Clear Screen Definition',cr,lf
  428.     db    ' 1. Timing Delay',0
  429.     call    getdelay    ;get delay constant
  430.     sta    cld        ;save delay constant
  431.     call    print
  432.     db    cr,lf,' 2. Clear Screen Byte Sequence',0
  433.     lhld    cladr        ;pt to buffer
  434.     call    getstr
  435.     jmp    create
  436.  
  437. ;
  438. ; CL Review
  439. ;
  440. clreview:
  441.     call    print
  442.     db    cr,lf,'Review of Clear Screen Definition'
  443.     db    cr,lf,' 1. Timing Delay = ',0
  444.     lda    cld
  445.     call    pafdc
  446.     call    print
  447.     db    ' Milliseconds'
  448.     db    cr,lf,' 2. Clear Screen Sequence:',0
  449.     lhld    cladr
  450.     call    prtstr
  451.     ret
  452. ;
  453. ; CE Definition
  454. ;
  455. cedef:
  456.     call    print
  457.     db    'Clear to End of Line Definition',cr,lf
  458.     db    ' 1. Timing Delay',0
  459.     call    getdelay    ;get delay constant
  460.     sta    ced        ;save delay constant
  461.     call    print
  462.     db    cr,lf,' 2. Clear to End of Line Byte Sequence',0
  463.     lhld    ceadr        ;pt to buffer
  464.     call    getstr
  465.     jmp    create
  466. ;
  467. ; CE Review
  468. ;
  469. cereview:
  470.     call    print
  471.     db    cr,lf,'Review of Clear to End of Line Definition'
  472.     db    cr,lf,' 1. Timing Delay = ',0
  473.     lda    ced
  474.     call    pafdc
  475.     call    print
  476.     db    ' Milliseconds'
  477.     db    cr,lf,' 2. Clear to End of Line Sequence:',0
  478.     lhld    ceadr
  479.     call    prtstr
  480.     ret
  481. ;
  482. ; SO Definition
  483. ;
  484. sodef:
  485.     call    print
  486.     db    'Standout Mode Definition',cr,lf
  487.     db    ' 1. Begin Standout Mode Byte Sequence',0
  488.     lhld    soadr        ;pt to buffer
  489.     call    getstr
  490.     call    print
  491.     db    cr,lf,' 2. End Standout Mode Byte Sequence',0
  492.     lhld    seadr        ;pt to buffer
  493.     call    getstr
  494.     jmp    create
  495. ;
  496. ; SO Review
  497. ;
  498. soreview:
  499.     call    print
  500.     db    cr,lf,'Review of Standout Mode Definition'
  501.     db    cr,lf,' 1. Begin Standout Mode Sequence:',0
  502.     lhld    soadr
  503.     call    prtstr
  504.     call    print
  505.     db    cr,lf,' 2. End Standout Mode Sequence:',0
  506.     lhld    seadr
  507.     call    prtstr
  508.     ret
  509. ;
  510. ; TI Definition
  511. ;
  512. tidef:
  513.     call    print
  514.     db    'Terminal Init/Deinit Definition',cr,lf
  515.     db    ' 1. Terminal Initialization Byte Sequence',0
  516.     lhld    tiadr        ;pt to buffer
  517.     call    getstr
  518.     call    print
  519.     db    cr,lf,' 2. Terminal Deinitialization Byte Sequence',0
  520.     lhld    teadr        ;pt to buffer
  521.     call    getstr
  522.     jmp    create
  523. ;
  524. ; TI Review
  525. ;
  526. tireview:
  527.     call    print
  528.     db    cr,lf,'Review of Terminal Init/Deinit Definition'
  529.     db    cr,lf,' 1. Terminal Initialization Sequence: ',0
  530.     lhld    tiadr
  531.     call    prtstr
  532.     call    print
  533.     db    cr,lf,' 2. Terminal Deinitialization Sequence: ',0
  534.     lhld    teadr
  535.     call    prtstr
  536.     ret
  537. ;
  538. ; CM Definition
  539. ;
  540. cmdef:
  541.     call    print
  542.     db    'Cursor Motion Definition',cr,lf
  543.     db    ' 1. Timing Delay',0
  544.     call    getdelay    ;get delay
  545.     sta    cmd
  546. cmcrdef:
  547.     call    print
  548.     db    cr,lf,' 2. Enter R if Row/Column or C for Column/Row: ',0
  549.     call    capine
  550.     cpi    'C'    ;col/row
  551.     jz    cmdef1
  552.     cpi    'R'
  553.     jz    cmdef1
  554.     call    print
  555.     db    ' - Invalid',0
  556.     jmp    cmcrdef
  557. cmdef1:
  558.     sta    rcfirst    ;set flag
  559.     call    print
  560.     db    cr,lf,' 3. Enter Equation for Row:    ',0
  561.     xra    a    ;no caps
  562.     call    bbline    ;get input
  563.     call    sksp    ;skip spaces
  564.     xchg
  565.     lhld    reqn
  566.     xchg
  567.     call    copy0
  568.     call    print
  569.     db    cr,lf,' 4. Enter Equation for Column: ',0
  570.     xra    a    ;no caps
  571.     call    bbline    ;get input
  572.     call    sksp    ;skip spaces
  573.     xchg
  574.     lhld    ceqn
  575.     xchg
  576.     call    copy0
  577.     call    print
  578.     db    cr,lf,' 5. Enter Prefix Byte Sequence',0
  579.     lhld    cmbadr    ;beginning
  580.     call    getstr
  581.     call    print
  582.     db    cr,lf,' 6. Enter Middle Byte Sequence',0
  583.     lhld    cmmadr    ;middle
  584.     call    getstr
  585.     call    print
  586.     db    cr,lf,' 7. Enter Suffix Byte Sequence',0
  587.     lhld    cmeadr    ;ending
  588.     call    getstr
  589.     jmp    create
  590. ;
  591. ; Copy HL to DE until 0
  592. ;
  593. copy0:
  594.     mov    a,m    ;copy
  595.     stax    d
  596.     cpi    qch    ;quote?
  597.     jz    copyq
  598.     ora    a    ;done if 0
  599.     rz
  600.     inx    h    ;pt to next
  601.     inx    d
  602.     jmp    copy0
  603. copyq:
  604.     inx    h    ;copy quoted char
  605.     inx    d
  606.     mov    a,m    ;copy
  607.     stax    d
  608.     inx    h    ;advance
  609.     inx    d
  610.     jmp    copy0
  611. ;
  612. ; Review CM Data
  613. ;
  614. cmreview:
  615.     call    print
  616.     db    cr,lf,'Review of Cursor Motion Data'
  617.     db    cr,lf,' 1. Timing Delay = ',0
  618.     lda    cmd
  619.     call    pafdc
  620.     call    print
  621.     db    ' Milliseconds'
  622.     db    cr,lf,' 2. Row or Column First: ',0
  623.     lda    rcfirst
  624.     call    cout
  625.     call    print
  626.     db    cr,lf,' 3. Row Equation:    -->',0
  627.     lhld    reqn
  628.     call    pstr
  629.     call    print
  630.     db    '<--'
  631.     db    cr,lf,' 4. Column Equation: -->',0
  632.     lhld    ceqn
  633.     call    pstr
  634.     call    print
  635.     db    '<--'
  636.     db    cr,lf,' 5. Prefix Byte Sequence: ',0
  637.     lhld    cmbadr
  638.     call    prtstr
  639.     call    print
  640.     db    cr,lf,' 6. Middle Byte Sequence: ',0
  641.     lhld    cmmadr
  642.     call    prtstr
  643.     call    print
  644.     db    cr,lf,' 7. Suffix Byte Sequence: ',0
  645.     lhld    cmeadr
  646.     call    prtstr
  647.     ret
  648.  
  649. ;
  650. ; Status Display
  651. ;
  652. rstatus:
  653.     call    print
  654.     db    cr,lf,'    Strike Any Key to Continue - ',0
  655.     call    cin
  656. status:
  657.     call    print
  658.     db    cr,lf,'    ** Z3TCAP Status',0
  659.     call    prfdata    ;file data
  660.     call    print
  661.     db    cr,lf
  662.     db    cr,lf,'Review:    1. Clear Screen Definition'
  663.     db    cr,lf,'    2. Cursor Motion Definition'
  664.     db    cr,lf,'    3. Clear to End of Line Definition'
  665.     db    cr,lf,'    4. Standout Mode Definition'
  666.     db    cr,lf,'    5. Terminal Init/Deinit Definition'
  667.     db    cr,lf,'    6. Arrow Key Definition'
  668.     db    cr,lf,'    7. Terminal Name Definition'
  669.     db    cr,lf
  670.     db    cr,lf,'Exit:    X. Exit to Main Menu'
  671.     db    cr,lf
  672.     db    cr,lf,'Command? ',0
  673.     call    capine
  674.     lxi    h,rtable
  675.     call    tscan
  676.     call    print
  677.     db    cr,lf,' Invalid Command: ',0
  678.     call    cout
  679.     jmp    status
  680. ;
  681. ; Review Name
  682. ;
  683. rname:
  684.     call    print
  685.     db    cr,lf,'Terminal Name: ',0
  686.     lxi    h,tname
  687.     mvi    b,16
  688. rname1:
  689.     mov    a,m    ;get char
  690.     call    cout
  691.     inx    h    ;pt to next
  692.     dcr    b    ;count down
  693.     jnz    rname1
  694.     jmp    rstatus
  695. ;
  696. ; Review CL
  697. ;
  698. rcl:
  699.     call    clreview
  700.     jmp    rstatus
  701. ;
  702. ; Review CE
  703. ;
  704. rce:
  705.     call    cereview
  706.     jmp    rstatus
  707. ;
  708. ; Review CM
  709. ;
  710. rcm:
  711.     call    cmreview
  712.     jmp    rstatus
  713. ;
  714. ; Review SO
  715. ;
  716. rso:
  717.     call    soreview
  718.     jmp    rstatus
  719. ;
  720. ; Review TI
  721. ;
  722. rti:
  723.     call    tireview
  724.     jmp    rstatus
  725. ;
  726. ; Review Arrow Keys
  727. ;
  728. rarrow:
  729.     call    arrowrev
  730.     jmp    rstatus
  731. ;
  732. ; Status Review Commands
  733. ;
  734. rtable:
  735.     db    '1'
  736.     dw    rcl
  737.     db    '2'
  738.     dw    rcm
  739.     db    '3'
  740.     dw    rce
  741.     db    '4'
  742.     dw    rso
  743.     db    '5'
  744.     dw    rti
  745.     db    '6'
  746.     dw    rarrow
  747.     db    '7'
  748.     dw    rname
  749.     db    'X'
  750.     dw    create
  751.     db    0
  752.  
  753. ;
  754. ; Scan Command Table
  755. ;
  756. tscan:
  757.     mov    b,a    ;save char in B
  758. tscan1:
  759.     mov    a,m    ;get char
  760.     ora    a    ;end of table?
  761.     jz    tscanx    ;exit
  762.     cmp    b    ;compare
  763.     jz    tscanf    ;found
  764.     inx    h    ;skip to next
  765.     inx    h
  766.     inx    h
  767.     jmp    tscan1
  768. tscanx:
  769.     mov    a,b    ;restore char and exit - not found
  770.     ret
  771. tscanf:
  772.     inx    h    ;get address
  773.     mov    a,m
  774.     inx    h
  775.     mov    h,m
  776.     mov    l,a
  777.     pop    psw    ;clear stack
  778.     pchl        ;branch to routine
  779. ;
  780. ; Command Table
  781. ;
  782. ctable:
  783.     db    '1'    ;CL
  784.     dw    cldef
  785.     db    '2'    ;CM
  786.     dw    cmdef
  787.     db    '3'    ;CE
  788.     dw    cedef
  789.     db    '4'    ;SO
  790.     dw    sodef
  791.     db    '5'    ;TI
  792.     dw    tidef
  793.     db    '6'    ;arrows
  794.     dw    arrowdef
  795.     db    '7'    ;name
  796.     dw    namedef
  797.     db    'S'    ;status
  798.     dw    status
  799.     db    'Q'    ;quit
  800.     dw    crquit
  801.     db    'X'    ;exit
  802.     dw    crexit
  803.     db    0
  804. ;
  805. ; Routine to Input Delay Constant
  806. ;
  807. getdelay:
  808.     call    print
  809.     db    cr,lf,' Enter Delay Time in Milliseconds: ',0
  810.     mvi    a,0ffh    ;caps
  811.     call    bbline
  812.     call    sksp
  813.     call    eval    ;convert to binary
  814.     ret
  815. ;
  816. ; Routine to Define Text String
  817. ;
  818. getstr:
  819.     shld    firstch    ;set ptr to first char
  820. getfirst:
  821.     mvi    b,1    ;set count
  822.     lhld    firstch    ;set next char to first
  823.     shld    nxtchar
  824. getnext:
  825.     call    print
  826.     db    cr,lf,'  Char #',0
  827.     mov    a,b    ;get char number
  828.     call    pafdc    ;print it
  829.     inr    b    ;increment count
  830.     push    b    ;save it
  831. ;
  832. ; Prompt for Type of Input
  833. ;
  834.     call    print
  835.     db    ' - Type Char, .=Number, or <CR>=Done: ',0
  836.     call    cin    ;get response
  837.     cpi    cr    ;exit
  838.     jz    getx
  839.     cpi    '.'    ;number?
  840.     jz    getnum
  841. ;
  842. ; Input Character
  843. ;
  844.     call    print
  845.     db    'Char ',0
  846.     call    ccout    ;echo character
  847.     jmp    putch
  848. ;
  849. ; Input Number
  850. ;
  851. getnum:
  852.     call    print
  853.     db    'Enter Number: ',0
  854.     mvi    a,0ffh    ;caps
  855.     call    bbline    ;get input
  856.     call    sksp    ;skip spaces
  857.     call    eval    ;convert
  858. ;
  859. ; Save Character with Quoting
  860. ;
  861. putch:
  862.     lhld    nxtchar    ;pt to next char
  863.     ora    a    ;quote if null
  864.     jz    quote
  865.     cpi    qch    ;quote if quote
  866.     jz    quote
  867. putch1:
  868.     mov    m,a    ;store it
  869.     inx    h    ;pt to next
  870.     shld    nxtchar    ;set ptr
  871.     pop    b    ;get count
  872.     jmp    getnext    ;get next char
  873. ;
  874. ; Quote the Character
  875. ;
  876. quote:
  877.     mvi    m,qch    ;save quote char
  878.     inx    h
  879.     jmp    putch1
  880. ;
  881. ; Exit
  882. ;
  883. getx:
  884.     pop    psw    ;clear stack
  885.     lhld    nxtchar    ;store ending 0
  886.     mvi    m,0
  887.     ret
  888. ;
  889. ; Print String Pted to by HL
  890. ;
  891. prtstr:
  892.     mvi    b,0    ;set count
  893.     call    crlf    ;new line
  894.     mov    a,m    ;empty?
  895.     ora    a
  896.     jnz    prts0
  897.     call    print
  898.     db    '  -- Empty --',0
  899.     ret
  900. prts0:
  901.     mov    a,m    ;get next char
  902.     ora    a    ;done?
  903.     rz
  904.     call    print
  905.     db    '  (',0
  906.     mov    a,b    ;print count
  907.     inr    a
  908.     call    pafdc
  909.     call    print
  910.     db    ') ',0
  911.     mov    a,m    ;get next char
  912.     inx    h    ;pt to next
  913.     cpi    qch    ;check for quote
  914.     jnz    prts1
  915.     mov    a,m    ;get char that is quoted
  916.     inx    h    ;pt to next
  917. prts1:
  918.     call    ccout
  919.     call    print
  920.     db    '  ',0
  921.     call    pa2hc    ;print as 2 hex chars
  922.     call    print
  923.     db    'H  ',0
  924.     inr    b    ;increment count
  925.     mov    a,b    ;get count
  926.     ani    3
  927.     cz    crlf    ;new line
  928.     jmp    prts0
  929.  
  930. ;
  931. ; Create Target File
  932. ;
  933. wrfile:
  934.     lxi    d,fcb        ;pt to FCB
  935.     call    z3log        ;log into proper directory
  936.     call    f$exist        ;test of presence of file
  937.     jz    make2        ;create file
  938.     call    gfa        ;get file attributes
  939.     ani    1        ;R/O?
  940.     jz    make1
  941.     call    print
  942.     db    cr,lf,'File ',0
  943.     lxi    d,fcb+1
  944.     call    pfn1
  945.     call    print
  946.     db    ' is Read/Only - Saving as $$$.Z3T',0
  947.     lxi    h,tempfcb    ;set $$$.Z3T
  948.     lxi    d,fcb+1
  949.     mvi    b,11        ;11 chars
  950.     call    moveb
  951.     lxi    d,fcb        ;reinit
  952.     call    initfcb        ;resume
  953. make1:
  954.     call    f$delete    ;delete file
  955. make2:
  956.     call    f$make        ;create file
  957.     cpi    0ffh        ;error
  958.     jnz    writef
  959.     call    print
  960.     db    cr,lf,'File Create Error',0
  961.     ret
  962. ;
  963. ; Write Block to File
  964. ;
  965. writef:
  966.     lhld    scratch        ;pt to entry
  967.     lxi    d,tbuff        ;copy into buffer
  968.     mvi    b,128        ;128 bytes
  969.     call    moveb
  970.     lxi    d,fcb        ;pt to FCB
  971.     call    f$write        ;write block
  972.     jnz    werr
  973.     call    f$close        ;close file
  974.     call    print
  975.     db    cr,lf,'File ',0
  976.     lxi    d,fcb+1
  977.     call    pfn1
  978.     call    print
  979.     db    ' Created',0
  980.     ret
  981. ;
  982. ; Can't Write File
  983. ;
  984. werr:
  985.     call    print
  986.     db    cr,lf,'File Write Error',0
  987.     ret
  988. ;
  989. ; Print Entry Name Pted to by HL
  990. ;
  991. prent:
  992.     mvi    b,16    ;16 chars
  993. prtname:
  994.     mov    a,m    ;get char
  995.     call    cout
  996.     inx    h    ;advance
  997.     dcr    b    ;count down
  998.     jnz    prtname
  999.     ret
  1000. ;
  1001. ; Print Char in A with Control Char Processing
  1002. ;
  1003. ccout:
  1004.     push    psw    ;save char
  1005.     ani    7fh    ;mask MSB
  1006.     cpi    7fh    ;DEL?
  1007.     jz    ccout2
  1008.     cpi    ' '
  1009.     jnc    ccout1
  1010.     push    psw    ;save char
  1011.     mvi    a,'^'
  1012.     call    cout
  1013.     pop    psw
  1014.     adi    '@'    ;convert to char
  1015. ccout1:
  1016.     call    cout
  1017.     pop    psw
  1018.     ret
  1019. ccout2:
  1020.     call    print
  1021.     db    '<DEL>',0
  1022.     pop    psw
  1023.     ret
  1024.  
  1025. ;
  1026. ; Buffers
  1027. ;
  1028. crcmd:
  1029.     db    '%r',0
  1030. tempfcb:
  1031.     db    '$$$     '
  1032.     db    'Z3T'
  1033. tname:
  1034.     db    '** Empty Name **'    ;16 chars
  1035. ku:
  1036.     ds    1    ;cursor up
  1037. kd:
  1038.     ds    1    ;cursor down
  1039. kr:
  1040.     ds    1    ;cursor right
  1041. kl:
  1042.     ds    1    ;cursor left
  1043. cld:
  1044.     ds    1    ;CL delay
  1045. cmd:
  1046.     ds    1    ;CM delay
  1047. ced:
  1048.     ds    1    ;CE delay
  1049. cladr:
  1050.     ds    2    ;CL address
  1051. cmadr:
  1052.     ds    2    ;CM address
  1053. ceadr:
  1054.     ds    2    ;CE address
  1055. soadr:
  1056.     ds    2    ;SO address
  1057. seadr:
  1058.     ds    2    ;SE address
  1059. tiadr:
  1060.     ds    2    ;TI address
  1061. teadr:
  1062.     ds    2    ;TE address
  1063. cmbadr:
  1064.     ds    2    ;CM Beginning
  1065. cmmadr:
  1066.     ds    2    ;CM Middle
  1067. cmeadr:
  1068.     ds    2    ;CM Ending
  1069. reqn:
  1070.     ds    2    ;Row Equation
  1071. ceqn:
  1072.     ds    2    ;Column Equation
  1073. rcfirst:
  1074.     ds    1    ;R if Row First, C if Col First
  1075. deftyp:
  1076.     db    'Z3T'        ;default file type
  1077. firstch:
  1078.     ds    2    ;ptr to first char in string
  1079. nxtchar:
  1080.     ds    2    ;ptr to next char in string
  1081. scratch:
  1082.     ds    2    ;ptr to scratch area
  1083.  
  1084.     end
  1085.