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 / SIMTEL / CPMUG / CPMUG092.ARK / NSSEC.ASM < prev    next >
Assembly Source File  |  1986-10-18  |  64KB  |  5,523 lines

  1.     TITLE  'NORTH STAR SECRTARY AS OF 0308A'
  2.  
  3. ;COPYRIGHT 1979, G. YOUNG, PO BOX 3218, NORTH HOLLYWOOD, CA 91609
  4. ;PERMISSION GRANTED TO COPY FOR ANY NON-COMMERCIAL USE ONLY.
  5.  
  6.  
  7.  
  8. NS    EQU    2000H        ;NORTH STAR SYSTEM BEGINS AT 2000
  9. DCOM    EQU    NS+22H
  10. COUT    EQU    NS+0DH
  11. CIN    EQU    NS+10H
  12. CONTC    EQU    NS+16H
  13. DOS    EQU    NS+28H
  14. DLOOK    EQU    NS+1CH
  15. DLIST    EQU    NS+25H
  16. DOSER    EQU    NS+2DH
  17. RWCHK    EQU    NS+2BH
  18. DBYTE    EQU    NS+2FH
  19. DWRIT    EQU    NS+1FH
  20. PART1    EQU    NS+0D00H
  21.     ORG    PART1
  22.     JMP    INITA
  23.     DB    0
  24.     JMP    EOR        ;RESTART WITHOUT RESETTING
  25. ASSMB    DB    '  0308A',13
  26.     DB    'COPYRIGHT 1979, G. YOUNG, INC'
  27. DENTY    DB    'S'
  28. BSPCH    DB    08
  29. STOP    DB    0
  30. SRCNT    DB    23
  31. FLG1    DB    'N'
  32. HTOT    DB    0
  33. DATA0    DW    MEMRY
  34. BSCR    DB    'C'
  35. LNSIZ    DB    78
  36. WRAP    DB    'Y'
  37. MEMTP    DW    07FFFH
  38. CLEAN    LXI    H,BOFP
  39.     MVI    C,255
  40.     XRA    A
  41. CLRM    MOV    M,A
  42.     INX    H
  43.     DCR    C
  44.     JNZ    CLRM
  45.     LHLD    DATA0
  46.     SHLD    BOFP
  47.     SHLD    EOFP
  48.     LHLD    MEMTP
  49.     SHLD    TOP
  50.     MVI    A,70
  51.     STA    LINES
  52.     MVI    A,0FFH
  53.     STA    PNO
  54.     MVI    A,1
  55.     LHLD    BOFP
  56.     MOV    M,A
  57.     MVI    A,66
  58.     STA    PAGE1
  59.     MVI    A,54
  60.     STA    PAGE2
  61.     MVI    A,7
  62.     STA    PAGE3
  63.     LDA    BSPCH
  64.     STA    X5F2+1
  65.     STA    X5F1+1
  66.     STA    X5F3+1
  67.     LDA    LNSIZ
  68.     STA    CPI80+1
  69.     SUI    7
  70.     STA    CPI74+1
  71.     RET
  72. INITA    LXI    SP,AREA+50
  73.     LXI    SP,AREA+50
  74.     CALL    CLEAN
  75.     CALL    CRLF
  76.     LXI    SP,AREA+50
  77.     LXI    H,SMESS
  78.     CALL    SCRN
  79.     LXI    H,ASSMB
  80.     CALL    SCRN
  81.     LXI    SP,AREA+50
  82.     CALL    FREE1
  83.     LDA    FLG1
  84.     CPI    'Y'
  85. CNG2    JNZ    CONFIGURE
  86. EOR    LXI    SP,AREA+50
  87.     CALL    CRLF
  88.     MVI    B,'#'
  89.     CALL    OUT8
  90.     CALL    READ
  91.     LXI    H,IBUF
  92.     MOV    A,M
  93.     CPI    '0'
  94.     CC    CMPCT
  95.     CPI    '9'+1
  96.     JC    LINER
  97.     XRA    A
  98.     STA    AUTO
  99.     CALL    VALC
  100.     CALL    COMM1
  101.     JMP    EOR
  102. CMPCT    LDA    DBFLG
  103.     ORA    A
  104.     JNZ    DUMP
  105.     LXI    D,IBUF+1
  106. L1X    LDAX    D
  107.     MOV    M,A
  108.     CPI    13
  109.     JZ    L2X
  110.     INX    D
  111.     INX    H
  112.     JMP    L1X
  113. L2X    LXI    H,IBUF
  114.     LDA    IBUF-1
  115.     DCR    A
  116.     STA    IBUF-1
  117.     MOV    A,M
  118.     RET
  119. READ    LXI    H,IBUF
  120.     LXI    D,TBUF
  121.     XRA    A
  122.     STA    HALT
  123.     STA    TEMP
  124.     LDA    AUTO
  125.     ORA    A
  126.     JZ    BACKN
  127.     CALL    LNGEN
  128.     MVI    C,6
  129.     LXI    D,TBUF+4
  130.     JMP    INPUT
  131. RESTR    LXI    H,IBUF
  132. RESCN    LXI    D,TBUF
  133.     XRA    A
  134.     STA    TEMP
  135. BACKN    MVI    C,2
  136. INPUT    CALL    IN8
  137.     CPI    0
  138.     JZ    INPUT
  139.     CPI    02
  140.     JZ    INPUT
  141.     CPI    0AH
  142.     JZ    INPUT
  143.     CPI    07
  144.     JZ    CPYLN
  145.     CPI    18H    ;CNTLX
  146.     JZ    EOR
  147. X5F1    CPI    08H
  148.     JZ    BACKS
  149.     CPI    011H
  150.     JZ    BACKS
  151.     CPI    0FH
  152.     JZ    BACKS
  153.     CPI    01H
  154.     JZ    CPYCH
  155.     CPI    04
  156.     JZ    FNDCH
  157.     CPI    19H
  158.     JZ    PUTIN
  159.     CPI    13
  160.     JZ    EDONE
  161.     CPI    0EH
  162.     JZ    CNTLN
  163.     CPI    010H
  164.     JZ    RESTR
  165.     CPI    1AH
  166.     JZ    DELCH
  167.     CPI    03H
  168.     JZ    CLRX
  169.     JMP    CHAR
  170. CLRX    XRA    A
  171.     STA    AUTO
  172.     JMP    EOR
  173. BACKS    MOV    A,C
  174.     CPI    2
  175.     JC    INPUT
  176.     JZ    INPUT
  177.     DCR    C
  178.     DCX    H
  179.     DCX    D
  180. X5F2    MVI    B,08
  181.     CALL    OUT8
  182.     JMP    INPUT
  183. DELCH    LDAX    D
  184.     CPI    13
  185.     JZ    INPUT
  186.     INX    D
  187.     MVI    B,'%'
  188.     CALL    OUT8
  189.     JMP    INPUT
  190. CPYCH    LDAX    D
  191.     CPI    13
  192.     JZ    INPUT
  193.     MOV    A,C
  194.     CPI    139
  195.     JZ    BELL
  196.     LDAX    D
  197.     MOV    M,A
  198.     MOV    B,A
  199.     CALL    OUT8
  200.     INR    C
  201.     INX    H
  202.     INX    D
  203.     JMP    INPUT
  204. CPYLN    LDAX    D
  205.     CPI    13
  206.     JZ    INPUT
  207.     MOV    A,C
  208.     CPI    139
  209.     JZ    BELL
  210.     LDAX    D
  211.     MOV    B,A
  212.     MOV    M,A
  213.     CALL    OUT8
  214.     INX    D
  215.     INX    H
  216.     INR    C
  217.     JMP    CPYLN
  218. BELL    MVI    B,07
  219.     CALL    OUT8
  220.     JMP    INPUT
  221. PUTIN    LDA    TEMP
  222.     ORA    A
  223.     JZ    SETON
  224.     MVI    B,'>'
  225.     CALL    OUT8
  226.     XRA    A
  227.     STA    TEMP
  228.     JMP    INPUT
  229. SETON    MVI    B,'<'
  230.     CALL    OUT8
  231.     MVI    A,1
  232.     STA    TEMP
  233.     JMP    INPUT
  234. FNDCH    CALL    IN8
  235.     CPI    03
  236.     JZ    EOR
  237.     PUSH    D
  238.     INX    D
  239.     MOV    B,A
  240. FND2    LDAX    D
  241.     CMP    B
  242.     JZ    FND3
  243.     CPI    13
  244.     JZ    FND5
  245.     INX    D
  246.     JMP    FND2
  247. FND3    POP    D
  248.     MOV    B,A
  249.     CALL    DUP1
  250. FND4    LDAX    D
  251.     CMP    B
  252.     JZ    INPUT
  253.     MOV    A,C
  254.     CPI    139
  255.     JZ    INPUT
  256.     CALL    DUP1
  257.     JMP    FND4
  258. DUP1    LDAX    D
  259.     MOV    M,A
  260.     PUSH    B
  261.     MOV    B,A
  262.     CALL    OUT8
  263.     POP    B
  264.     INR    C
  265.     INX    H
  266.     INX    D
  267.     RET
  268. FND5    POP    D
  269.     MVI    B,07
  270.     CALL    OUT8
  271.     JMP    FNDCH
  272. CNTLN    MVI    B,'@'
  273.     CALL    OUT8
  274.     MVI    A,13
  275.     MOV    M,A
  276.     CALL    CRLF
  277.     CALL    COPYLINE
  278.     JMP    RESTR
  279. COPYLINE    PUSH    D
  280.     PUSH    H
  281.     LXI    D,IBUF
  282.     LXI    H,TBUF
  283. CPYN    LDAX    D
  284.     MOV    M,A
  285.     CPI    13
  286.     JZ    CPYX
  287.     INX    D
  288.     INX    H
  289.     JMP    CPYN
  290. CPYX    POP    H
  291.     POP    D
  292.     RET
  293. EDONE    MOV    A,C
  294.     CPI    2
  295.     JZ    READ
  296.     CPI    10
  297.     JC    NOBACKUP
  298. BACKUP    DCX    H
  299.     DCR    C
  300.     MOV    A,M
  301.     CPI    ' '
  302.     JZ    BACKUP
  303.     INX    H
  304.     INR    C
  305. NOBACKUP    MVI    M,13
  306.     INX    H
  307.     MVI    M,1
  308.     LXI    H,IBUF-1
  309.     MOV    M,C
  310.     CALL    COPYLINE
  311.     LDA    HALT
  312.     ORA    A
  313.     RZ
  314.     CALL    LINE
  315.     JMP    EOR
  316. CHAR    MOV    B,A
  317.     LDA    TEMP
  318.     ORA    A
  319.     JNZ    CHAR1     ;SKIP IF INSERT MODE
  320.     MOV    A,C
  321. CPI80    CPI    66
  322.     JNZ    CHAR1
  323.     MOV    A,B
  324.     STA    TEMP3
  325.     LDA    WRAP
  326.     CPI    'N'
  327.     JZ    WRAP1
  328.     LDA    AUTO
  329.     ORA    A
  330.     JNZ    WRAP2
  331. WRAP1    MVI    B,07
  332.     CALL    OUT8
  333.     JMP    INPUT
  334. WRAP2    MVI    M,13
  335.     DCX    H
  336. WRAP3    DCX    H
  337.     MOV    A,M
  338.     CPI    ' '
  339.     JNZ    WRAP3
  340. WRAP6    DCX    H
  341.     MOV    A,M
  342.     CPI    ' '
  343.     JZ    WRAP6
  344.     INX    H
  345.     SHLD    ADDR1
  346.     MVI    A,13
  347.     MOV    M,A
  348.     INX    H
  349.     MOV    A,M
  350.     STA    TEMP2+1
  351.     MVI    A,1
  352.     MOV    M,A
  353.     LXI    H,IBUF
  354.     MVI    C,2
  355. WRAP7    MOV    A,M
  356.     CPI    13
  357.     JZ    WRAP8
  358.     INR    C
  359.     INX    H
  360.     JMP    WRAP7
  361. WRAP8    MOV    A,C
  362.     STA    IBUF-1
  363.     CALL    COPYLINE
  364.     CALL    LINE
  365.     CALL    CRLF
  366.     LXI    H,IBUF
  367.     MVI    B,'#'
  368.     CALL    OUT8
  369.     CALL    LNGEN
  370.     MVI    C,6
  371.     XCHG
  372.     LHLD    ADDR1
  373.     XCHG
  374.     INX    D
  375.     LDA    TEMP2+1
  376.     CPI    ' '
  377.     JZ    WRAP4
  378.     MOV    M,A
  379.     MOV    B,A
  380.     INR    C
  381.     CALL    OUT8
  382.     INX    H
  383. WRAP4    INX    D
  384.     LDAX    D
  385.     CPI    13
  386.     JZ    WRAP5
  387.     MOV    M,A
  388.     INX    H
  389.     INR    C
  390.     MOV    B,A
  391.     CALL    OUT8
  392.     JMP    WRAP4
  393. WRAP5    LXI    D,TBUF-2
  394.     PUSH    H
  395.     MVI    H,0
  396.     MOV    L,C
  397.     DAD    D
  398.     XCHG
  399.     POP    H
  400.     LDA    TEMP3
  401.     MOV    B,A
  402. CHAR1    MOV    M,B
  403.     INR    C
  404.     CALL    OUT8
  405.     MOV    A,C
  406. CPI74    CPI    59
  407.     JNZ    NOBEL
  408.     MVI    B,07
  409.     CALL    OUT8
  410. NOBEL    INX    H
  411.     LDA    TEMP
  412.     ORA    A
  413.     JNZ    INPUT
  414.     INX    D
  415.     JMP    INPUT
  416. COMM1    LXI    D,IBUF
  417.     MVI    B,4
  418. UPPER1    LDAX    D
  419.     CPI    60H
  420.     JC    LOWER1
  421.     SBI    20H
  422.     STAX    D
  423. LOWER1    INX    D
  424.     DCR    B
  425.     JNZ    UPPER1
  426.     LXI    D,CTAB
  427.     MVI    B,NCOM
  428.     MVI    A,4
  429.     STA    NCHR
  430.     CALL    COMS
  431.     JNZ    ERR1
  432.     PCHL
  433. COMS    LXI    H,IBUF
  434.     LDA    NCHR
  435.     MOV    C,A
  436.     CALL    SEAR
  437.     LDAX    D
  438.     MOV    L,A
  439.     INX    D
  440.     LDAX    D
  441.     MOV    H,A
  442.     RZ
  443.     INX    D
  444.     DCR    B
  445.     JNZ    COMS
  446.     INR    B
  447.     RET
  448. SEAR    LDAX    D
  449.     CMP    M
  450.     JNZ    INCA
  451.     INX    H
  452.     INX    D
  453.     DCR    C
  454.     JNZ    SEAR
  455.     RET
  456. INCA    INX    D
  457.     DCR    C
  458.     JNZ    INCA
  459.     INR    C
  460.     RET
  461. ZBUF    XRA    A
  462.     LXI    D,ABUF+12
  463.     MVI    B,12
  464. ZBU1    DCX    D
  465.     STAX    D
  466.     DCR    B
  467.     JNZ    ZBU1
  468.     RET
  469. VALC    EQU    $
  470. ETRA    LXI    H,0
  471.     SHLD    BBUF+2
  472.     SHLD    FBUF
  473.     CALL    ZBUF
  474.     LXI    H,IBUF-1
  475. VAL1    INX    H
  476.     MOV    A,M
  477.     CPI    ' '
  478.     CMC
  479.     RNC
  480.     JNZ    VAL1
  481.     SHLD    PNTR
  482.     CALL    SBLK
  483.     CMC
  484.     RNC
  485. VAL5    LXI    D,ABUF
  486.     CALL    ALPS
  487.     MOV    A,B
  488.     CPI    5
  489.     CMC
  490.     RC
  491.     LXI    B,ABUF
  492.     CALL    AHEX
  493.     RC
  494.     SHLD    BBUF
  495.     LXI    H,ABUF
  496.     CALL    NORM
  497.     CALL    SBLK
  498.     CMC
  499.     RNC
  500.     LXI    D,ABUF+4
  501.     CALL    ALPS
  502.     MOV    A,B
  503.     CPI    5
  504.     CMC
  505.     RC
  506.     LXI    B,ABUF+4
  507.     CALL    AHEX
  508.     RC
  509.     SHLD    BBUF+2
  510.     LXI    H,ABUF+4
  511.     CALL    NORM
  512.     CALL    SBLK
  513.     CMC
  514.     RNC
  515.     LXI    D,ABUF+8
  516.     CALL    ALPS
  517.     MOV    A,B
  518.     CPI    5
  519.     CMC
  520.     RC
  521.     LXI    H,ABUF+8
  522.     CALL    NORM
  523.     ORA    A
  524.     RET
  525. RANGE    PUSH    H
  526.     PUSH    D
  527.     LDA    ABUF+4
  528.     ORA    A
  529.     JZ    OK
  530.     MVI    B,4
  531.     LXI    H,ABUF
  532.     LXI    D,ABUF+4
  533. CKIT    LDAX    D
  534.     CMP    M
  535.     JC    ERR2
  536.     JNZ    OK
  537.     INX    H
  538.     INX    D
  539.     DCR    B
  540.     JZ    OK
  541.     JMP    CKIT
  542. OK    POP    D
  543.     POP    H
  544.     RET
  545. AHEX    LXI    H,0
  546. AHE1    LDAX    B
  547.     ORA    A
  548.     RZ
  549.     DAD    H
  550.     DAD    H
  551.     DAD    H
  552.     DAD    H
  553.     CALL    AHS1
  554.     CPI    10H
  555.     CMC
  556.     RC
  557.     ADD    L
  558.     MOV    L,A
  559.     INX    B
  560.     JMP    AHE1
  561. AHS1    SUI    48
  562.     CPI    10
  563.     RC
  564.     SUI    7
  565.     RET
  566. ADEC    LXI    H,0
  567. ADE11    LDAX    B
  568.     ORA    A
  569.     RZ
  570.     MOV    D,H
  571.     MOV    E,L
  572.     DAD    H
  573.     DAD    H
  574.     DAD    D
  575.     DAD    H
  576.     SUI    48
  577.     CPI    10
  578.     CMC    
  579.     RC
  580.     MOV    E,A
  581.     MVI    D,0
  582.     DAD    D
  583.     INX    B
  584.     JMP    ADE11
  585. BLK1    MVI    B,' '
  586.     CALL    OUT8
  587.     RET
  588. ACHK    LHLD    BBUF
  589.     LDA    BBUF+3
  590.     CMP    H
  591.     JNZ    ACH1
  592.     LDA    BBUF+2
  593.     CMP    L
  594.     JNZ    ACH1
  595.     STC
  596. ACH1    INX    H
  597.     SHLD    BBUF
  598.     RET
  599. NCOM    EQU    47
  600. CTAB    DB    'APPE'
  601.     DW    APPND
  602.     DB    'AUTO'
  603.     DW    AUTOL
  604.     DB    'BLOA'
  605. BLOAD    DW    BLOADCMND
  606.     DB    'BOOT'
  607.     DW    0E800H
  608.     DB    'BSAV'
  609. BSAVE    DW    BSAVECMND
  610.     DB    'CALL'
  611.     DW    CALLA
  612.     DB    'CHAI'
  613.     DW    CHAINCMND
  614.     DB    'CHAL'
  615.     DW    CHNGA
  616.     DB    'CHNG'
  617.     DW    CHNG
  618.     DB    'CONF'
  619. CONFG    DW    CNFG2
  620.     DB    'COPY'
  621.     DW    COPYCMND
  622.     DB    'DELE'
  623.     DW    DELL
  624.     DB    'DELT'
  625.     DW    DELL
  626.     DB    'DEST'
  627.     DW    DESTR
  628.     DB    'DIRE'
  629.     DW    DIRECTORY
  630.     DB    'DUMP'
  631.     DW    DUMP1
  632.     DB    'EDIT'
  633.     DW    EDIT
  634.     DB    'EXPA'
  635.     DW    EXPAND
  636.     DB    'FIND'
  637.     DW    FINDCMND
  638.     DB    'FREE'
  639.     DW    FREE
  640.     DB    'HELP'
  641.     DW    HELP
  642.     DB    'JUST'
  643.     DW    JUSTCMND
  644.     DB    'LINE'
  645.     DW    LINECMND
  646.     DB    'LIST'
  647.     DW    LIST
  648.     DB    'LOAD'
  649.     DW    LOAD
  650.     DB    'MARG'
  651.     DW    MARGINCMND
  652.     DB    'MERG'
  653.     DW    MERGECMND
  654.     DB    'MOVE'
  655.     DW    MOVECMND
  656.     DB    'NSAV'
  657.     DW    NSAVE
  658.     DB    'NULL'
  659.     DW    NULLCMND
  660.     DB    'OFFS'
  661.     DW    OFFSETCMND
  662.     DB    'OPEN'
  663.     DW    OPENCMND
  664.     DB    'PAGE'
  665.     DW    PAGECMND
  666.     DB    'PNUM'
  667.     DW    PNUMCMND
  668.     DB    'PRIN'
  669.     DW    PRINT
  670.     DB    'QUIT'
  671.     DW    QUIT
  672.     DB    'RECO'
  673.     DW    RECOVER
  674.     DB    'RENU'
  675.     DW    RENUMBER
  676.     DB    'REPE'
  677.     DW    REPEATCMND
  678.     DB    'SAVE'
  679.     DW    SAVECMND
  680.     DB    'SCRA'
  681.     DW    SCRAT
  682.     DB    'SPAC'
  683.     DW    SPACECMND
  684.     DB    'STAT'
  685. STATUS    DW    STATCMND
  686.     DB    'TABS'
  687.     DW    TABSCMND
  688.     DB    'TITL'
  689.     DW    TITLECMND
  690.     DB    'UNIT'
  691.     DW    UNITCMND
  692.     DB    'DEBU'
  693.     DW    DEBUG
  694. QUIT    CALL    CRLF
  695.     LXI    H,QUITM
  696.     CALL    SCRN
  697.     CALL    CRLF
  698.     JMP    DOS
  699. EXPAND    LXI    H,DATA
  700.     SHLD    DATA0
  701.     LXI    H,EOR
  702.     SHLD    BLOAD
  703.     SHLD    BSAVE
  704.     SHLD    STATUS
  705.     SHLD    CONFG
  706.     SHLD    CNG2+1
  707.     CALL    CLEAN
  708.     CALL    FREE1
  709.     JMP    EOR
  710. CALLA    CALL    ETRA
  711.     JC    ERR3
  712.     LHLD    BBUF
  713.     SHLD    CALLD
  714.     LDA    BBUF+2
  715.     STA    CALLC
  716.     LXI    H,CALLP
  717.     JMP    REPLY
  718. CALLT    LXI    D,CALLM
  719.     RET
  720. CALLM    DB    'CALL COMMAND TEST'
  721.     DB    13
  722. CALLP    DB    'CALL COMMAND ACCEPTED'
  723.     DB    13
  724. BHEAD    DB    '  BLOCKS: '
  725.     DB    13
  726. CHEAD    DB    '  AVAILABLE: '
  727.     DB    13
  728. DHEAD    DB    '  LAST LINE: '
  729.     DB    13
  730. VCHK    LDA    ABUF
  731.     ORA    A
  732.     JZ    ERR2
  733.     RET
  734. FREE    EQU    $
  735. FREER    CALL    FREE1
  736.     CALL    FREE2
  737.     LXI    H,BHEAD
  738.     CALL    SCRN
  739.     LHLD    EOFP
  740.     SHLD    MPTY
  741.     MVI    E,2
  742.     LXI    B,MPTY
  743.     LXI    H,BOFP
  744.     XRA    A
  745.     CALL    ADSB1
  746.     LHLD    MPTY
  747.     INR    H
  748.     MOV    L,H
  749.     MVI    H,0
  750.     SHLD    MPTY
  751.     CALL    DECPT
  752.     RET
  753. FREE1    CALL    CRLF
  754.     LXI    H,HEAD
  755.     CALL    SCRN
  756.     LHLD    EOFP
  757.     SHLD    MPTY
  758.     MVI    E,2
  759.     LXI    B,MPTY
  760.     LXI    H,BOFP
  761.     XRA    A
  762.     CALL    ADSB1
  763.     CALL    DECPT
  764.     LXI    H,CHEAD
  765.     CALL    SCRN
  766.     CALL    ADSUB
  767.     CALL    DECPT
  768.     RET
  769. FREE2    LXI    H,DHEAD
  770.     CALL    SCRN
  771.     CALL    LABPT
  772.     RET
  773. ADDRC    EQU    $
  774.     LHLD    ADDR2
  775.     SHLD    ADDR3
  776.     LXI    B,ADDR3
  777.     LXI    H,ADDR1
  778.     JMP    ADDRC1
  779. ADSUB    LHLD    TOP
  780.     SHLD    MPTY
  781.     LXI    B,MPTY
  782.     LXI    H,EOFP
  783. ADDRC1    MVI    E,2
  784.     XRA    A
  785. ADSB1    LDAX    B
  786.     SBB    M
  787.     STAX    B
  788.     DCR    E
  789.     RZ
  790.     INX    B
  791.     INX    H
  792.     JMP    ADSB1
  793. LABPT    CALL    BLK1
  794.     MVI    E,4
  795.     LXI    H,MAXL
  796. LABP2    MOV    B,M
  797.     CALL    OUT8
  798.     DCR    E
  799.     RZ
  800.     INX    H
  801.     JMP    LABP2
  802. SCRAT    CALL    CRLF
  803.     CALL    CLEAN
  804.     CALL    FREE1
  805.     JMP    EOR
  806. ERR1    CALL    CRLF
  807.     LXI    H,MESS1
  808.     CALL    SCRN
  809.     JMP    HELP
  810. MESS1    DB    'INVALID COMMAND'
  811.     DB    13
  812. ERR2    LXI    H,MESS2
  813.     JMP    REPLY
  814. MESS2    DB    'INVALID PARAMETER'
  815.     DB    13
  816. ERR3    CALL    CRLF
  817.     LXI    H,MESS3P1
  818.     CALL    SCRN
  819.     CALL    CRLF
  820.     LXI    H,IBUF
  821.     CALL    SCRN
  822.     JMP    DUMP
  823. MESS3P1    DB    'INVALID CHARACTER IN PARAMETER'
  824.     DB    13
  825. SMESS    DB    'SECRTARY REL '
  826.     DB    '9.76'
  827.     DB    13
  828. HEAD    DB    'USED: '
  829.     DB    13
  830. QUITM    DB    'FINISHED'
  831.     DB    13
  832. HELP    LXI    H,CTAB
  833.     MVI    E,NCOM-1
  834. HELP1    CALL    CRLF
  835.     MVI    D,12
  836. HELP2    MVI    C,4
  837. HELP3    MOV    B,M
  838.     CALL    OUT8
  839.     INX    H
  840.     DCR    C
  841.     JNZ    HELP3
  842.     INX    H
  843.     INX    H
  844.     MVI    B,' '
  845.     CALL    OUT8
  846.     CALL    CONTC
  847.     JZ    EOR
  848.     DCR    E
  849.     JZ    EOR
  850.     DCR    D
  851.     JNZ    HELP2
  852.     JMP    HELP1
  853. LINER    CALL    LINE
  854.     JMP    EOR
  855. LINE    CALL    FILLN2
  856.     CALL    DELCK
  857.     CALL    ADSUB
  858.     LDA    MPTY+1
  859.     ORA    A
  860.     JNZ    OK2AD
  861.     LDA    MPTY
  862.     MOV    B,A
  863.     LDA    IBUF-1
  864.     SUB    B
  865.     JC    OK2AD
  866.     LXI    H,ERR4P1
  867.     JMP    REPLY
  868. ERR4P1    DB    'FILE FULL ERROR'
  869.     DB    13
  870. OK2AD    EQU    $
  871.     MVI    C,4
  872.     LXI    H,IBUF-1
  873. LICK    INX    H
  874.     MOV    A,M
  875.     CPI    '0'
  876.     JC    ERR3
  877.     CPI    '9'+1
  878.     JNC    ERR3
  879.     DCR    C
  880.     JNZ    LICK
  881.     SHLD    HCON
  882.     LXI    D,MAXL+3
  883.     CALL    COM0
  884.     JNC    INSR
  885.     INX    H
  886.     CALL    LODM
  887.     LXI    H,MAXL+3
  888.     CALL    STOM
  889.     LXI    D,IBUF-1
  890.     LHLD    EOFP
  891.     MVI    C,1
  892.     CALL    LMOV
  893. SEOF    MVI    M,1
  894.     SHLD    EOFP
  895.     RET
  896. INSR    CALL    FIN1
  897.     MVI    C,2
  898.     JZ    EQUL
  899.     DCR    C
  900. EQUL    MOV    B,M
  901.     DCX    H
  902.     MVI    M,2
  903.     SHLD    INSP
  904.     LDA    IBUF-1
  905.     DCR    C
  906.     JZ    LTX
  907.     SUB    B
  908.     JZ    ZEROX
  909.     JC    GTX
  910. LTX    LHLD    EOFP
  911.     MOV    D,H
  912.     MOV    E,L
  913.     CALL    ADR
  914.     SHLD    EOFP
  915.     MVI    C,2
  916.     CALL    RMOV
  917.     JMP    ZEROX
  918. GTX    CMA
  919.     INR    A
  920.     MOV    D,H
  921.     MOV    E,L
  922.     CALL    ADR
  923.     XCHG
  924.     CALL    LMOV
  925.     MVI    M,1
  926.     SHLD    EOFP
  927. ZEROX    LHLD    INSP
  928.     MVI    M,13
  929.     INX    H
  930.     LXI    D,IBUF-1
  931.     MVI    C,1
  932.     CALL    LMOV
  933.     RET
  934. FIND    LXI    H,ABUF+3
  935.     SHLD    HCON
  936. FIN1    LHLD    BOFP
  937.     MOV    A,H
  938.     ORA    L
  939.     JZ    EOR
  940. FI1    CALL    EO1
  941.     XCHG
  942.     LHLD    HCON
  943.     XCHG
  944.     MVI    A,4
  945.     CALL    ADR
  946.     CALL    COM0
  947.     RC
  948.     RZ
  949. FI2    MOV    A,M
  950.     CALL    ADR
  951.     JMP    FI1
  952. EOF    INX    H
  953. EO1    MVI    A,1
  954.     CMP    M
  955.     RNZ
  956.     XRA    A
  957.     STA    UNIT
  958.     JMP    EOR
  959. ADR    ADD    L
  960.     MOV    L,A
  961.     RNC
  962.     INR    H
  963.     RET
  964. LMOV    LDAX    D
  965.     INX    D
  966.     CMP    C
  967.     RZ
  968.     MOV    M,A
  969.     INX    H
  970.     JMP    LMOV
  971. RMOV    LDAX    D
  972.     DCX    D
  973.     CMP    C
  974.     RZ
  975.     MOV    M,A
  976.     DCX    H
  977.     JMP    RMOV
  978. LODM    MOV    B,M
  979.     INX    H
  980.     MOV    C,M
  981.     INX    H
  982.     MOV    D,M
  983.     INX    H
  984.     MOV    E,M
  985.     RET
  986. STOM    MOV    M,E
  987.     DCX    H
  988.     MOV    M,D
  989.     DCX    H
  990.     MOV    M,C
  991.     DCX    H
  992.     MOV    M,B
  993.     RET
  994. COM0    MVI    B,1
  995.     MVI    C,4
  996.     ORA    A
  997. CO1    LDAX    D
  998.     SBB    M
  999.     JZ    CO2
  1000.     INR    B
  1001. CO2    DCX    D
  1002.     DCX    H
  1003.     DCR    C
  1004.     JNZ    CO1
  1005.     DCR    B
  1006.     RET
  1007. COM1    MVI    C,4
  1008.     LDAX    D
  1009.     SUI    1
  1010.     JMP    CO1+1
  1011. NORM    CALL    LODM
  1012.     XRA    A
  1013.     CMP    B
  1014.     RZ
  1015. NOR1    CMP    E
  1016.     CNZ    STOM
  1017.     RNZ
  1018.     MOV    E,D
  1019.     MOV    D,C
  1020.     MOV    C,B
  1021.     MVI    B,'0'
  1022.     JMP    NOR1
  1023. DELCK    LXI    H,IBUF-1
  1024.     MOV    A,M
  1025.     CPI    6
  1026.     RNZ
  1027.     XRA    A
  1028.     STA    AUTO
  1029.     LXI    H,0
  1030.     SHLD    BBUF+2
  1031.     SHLD    FBUF
  1032.     CALL    ZBUF
  1033.     LXI    H,IBUF
  1034.     LXI    D,ABUF
  1035.     MVI    B,5
  1036. LOOP    DCR    B
  1037.     JZ    DEL6
  1038.     MOV    A,M
  1039.     STAX    D
  1040.     INX    D
  1041.     INX    H
  1042.     JMP    LOOP
  1043. DEL6    CALL    DEL0
  1044.     JMP    EOR
  1045. FILLN2    LXI    H,IBUF
  1046.     MVI    C,4
  1047. FILL32    INX    H
  1048.     DCR    C
  1049.     RZ
  1050. FILL12    MOV    A,M
  1051.     CPI    '0'
  1052.     JC    FILL22
  1053.     CPI    '9'+1
  1054.     JNC    FILL22
  1055.     JMP    FILL32
  1056. FILL22    PUSH    D
  1057.     PUSH    H
  1058.     PUSH    B
  1059.     MVI    C,139
  1060.     LXI    D,IBUF+138
  1061.     LXI    H,IBUF+139
  1062. SHIFT2    LDAX    D
  1063.     MOV    M,A
  1064.     DCX    D
  1065.     DCX    H
  1066.     DCR    C
  1067.     JNZ    SHIFT2
  1068.     MVI    A,'0'
  1069.     STA    IBUF
  1070.     LDA    IBUF-1
  1071.     INR    A
  1072.     STA    IBUF-1
  1073.     POP    B
  1074.     POP    H
  1075.     POP    D
  1076.     JMP    FILL32
  1077. LIST    CALL    CRLF
  1078.     CALL    RANGE
  1079.     CALL    FIND
  1080. LIST2    XRA    A
  1081.     STA    CNTR
  1082. LIST0    INX    H
  1083.     CALL    OUTPT
  1084.     CALL    EOF
  1085.     CALL    STOPL
  1086.     CALL    CONTC
  1087.     JZ    LIST3
  1088.     LDA    UNIT
  1089.     ORA    A
  1090.     JNZ    LIST0
  1091.     LDA    SRCNT
  1092.     ORA    A
  1093.     JZ    LIST0
  1094.     MOV    B,A
  1095.     LDA    CNTR
  1096.     INR    A
  1097.     STA    CNTR
  1098.     CMP    B
  1099.     JC    LIST0
  1100.     PUSH    H
  1101.     LXI    H,M1
  1102.     CALL    SCRN
  1103. LIST1    CALL    IN8
  1104.     CPI    03
  1105.     JZ    LIST3
  1106.     CPI    13
  1107.     JNZ    LIST1
  1108.     CALL    CRLF
  1109.     POP    H
  1110.     JMP    LIST2
  1111. LIST3    XRA    A
  1112.     STA    UNIT
  1113.     JMP    EOR
  1114. STOPL    LXI    D,ABUF+4
  1115.     MVI    B,4
  1116. STOP1    LDAX    D
  1117.     ORA    A
  1118.     JNZ    STOP2
  1119.     INX    D
  1120.     DCR    B
  1121.     JNZ    STOP1
  1122.     RET
  1123. STOP2    PUSH    H
  1124.     INX    H
  1125.     LXI    D,ABUF+4
  1126.     MVI    B,4
  1127. STOP4    LDAX    D
  1128.     CMP    M
  1129.     JZ    STOP3
  1130.     JC    EOR
  1131.     POP    H
  1132.     RET
  1133. STOP3    INX    H
  1134.     INX    D
  1135.     DCR    B
  1136.     JNZ    STOP4
  1137.     POP    H
  1138.     RET
  1139. DELL    CALL    VCHK
  1140.     CALL    RANGE
  1141. DEL0    CALL    FIND
  1142.     SHLD    INSP
  1143.     LXI    H,ABUF+7
  1144.     MOV    A,M
  1145.     ORA    A
  1146.     JNZ    DEL1
  1147.     LXI    H,ABUF+3
  1148. DEL1    SHLD    HCON
  1149.     XCHG
  1150.     LXI    H,MAXL+3
  1151.     CALL    COM0
  1152.     LHLD    INSP
  1153.     JC    NOVR
  1154.     SHLD    EOFP
  1155.     MVI    M,1
  1156.     XCHG
  1157.     LHLD    BOFP
  1158.     XCHG
  1159.     MVI    B,13
  1160.     DCX    H
  1161. DEL2    MOV    A,L
  1162.     SUB    E
  1163.     MOV    A,H
  1164.     SBB    D
  1165.     MVI    A,13
  1166.     JC    DEL4
  1167.     DCR    B
  1168.     DCX    H
  1169.     CMP    M
  1170.     JNZ    DEL2
  1171.     DCX    H
  1172.     MOV    A,L
  1173.     SUB    E
  1174.     MOV    A,H
  1175.     SBB    D
  1176.     JC    DEL5
  1177.     CMP    M
  1178.     INX    H
  1179.     INX    H
  1180.     JZ    DEL3
  1181.     INX    H
  1182. DEL3    CALL    LODM
  1183.     LXI    H,MAXL+3
  1184.     CALL    STOM
  1185.     RET
  1186. DEL4    CMP    B
  1187. DEL5    XCHG
  1188.     JNZ    DEL3-1
  1189.     STA    MAXL
  1190.     RET
  1191. NOVR    CALL    FI1
  1192.     CZ    FI2
  1193. NOV1    XCHG
  1194.     LHLD    INSP
  1195.     MVI    C,1
  1196.     CALL    LMOV
  1197.     SHLD    EOFP
  1198.     MVI    M,1
  1199.     RET
  1200. SBLK    LHLD    PNTR
  1201. SBL1    MOV    A,M
  1202.     CPI    ','
  1203.     JZ    SBL2
  1204.     CPI    ' '
  1205.     RNZ
  1206. SBL2    INX    H
  1207.     SHLD    PNTR
  1208.     JMP    SBL1
  1209. ALPS    MVI    B,0
  1210. ALP1    STAX    D
  1211.     INR    B
  1212.     MOV    A,B
  1213.     CPI    11
  1214.     RNC
  1215.     INX    D
  1216.     INX    H
  1217.     SHLD    PNTR
  1218.     MOV    A,M
  1219.     CPI    '0'
  1220.     RC
  1221.     CPI    '9'+1
  1222.     JC    ALP1
  1223.     CPI    'A'
  1224.     RC
  1225.     CPI    'Z'+1
  1226.     JC    ALP1
  1227.     RET
  1228. DECPT    XRA    A
  1229.     STA    LAST
  1230.     LXI    H,2710H
  1231.     SHLD    TEMP2
  1232.     CALL    DIVID2
  1233.     LXI    H,03E8H
  1234.     SHLD    TEMP2
  1235.     CALL    DIVID2
  1236.     LXI    H,64H
  1237.     SHLD    TEMP2
  1238.     CALL    DIVID2
  1239.     LXI    H,0AH
  1240.     SHLD    TEMP2
  1241.     CALL    DIVID2
  1242.     LDA    MPTY
  1243.     ADI    '0'
  1244.     MOV    B,A
  1245.     CALL    OUT8
  1246.     RET
  1247. DIVID2    MVI    E,0
  1248.     LHLD    MPTY
  1249.     SHLD    TEMP
  1250. SB22    LXI    B,TEMP
  1251.     LXI    H,TEMP2
  1252.     XRA    A
  1253.     LDAX    B
  1254.     SBB    M
  1255.     STAX    B
  1256.     INX    B
  1257.     INX    H
  1258.     LDAX    B
  1259.     SBB    M
  1260.     STAX    B
  1261.     JC    NEG2
  1262.     INR    E
  1263.     PUSH    H
  1264.     LHLD    TEMP
  1265.     SHLD    MPTY
  1266.     POP    H
  1267.     JMP    SB22
  1268. NEG2    MOV    A,E
  1269. DIV2    ADI    '0'
  1270.     MOV    B,A
  1271.     LDA    LAST
  1272.     ORA    A
  1273.     JNZ    DIV4
  1274.     MOV    A,B
  1275.     CPI    '0'
  1276.     RZ
  1277.     STA    LAST
  1278. DIV4    CALL    OUT8
  1279.     RET
  1280. LNGEN    PUSH    B
  1281.     PUSH    D
  1282.     PUSH    H
  1283.     MVI    C,2
  1284.     LXI    H,NUMBR
  1285.     LXI    D,LINE1
  1286. CONVT    LDAX    D
  1287.     RRC
  1288.     RRC
  1289.     RRC
  1290.     RRC
  1291.     CALL    UNPAK
  1292.     LDAX    D
  1293.     CALL    UNPAK
  1294.     INX    D
  1295.     DCR    C
  1296.     JNZ    CONVT
  1297.     POP    H
  1298.     MVI    C,4
  1299.     LXI    D,NUMBR
  1300. LOOP2    LDAX    D
  1301.     MOV    M,A
  1302.     INX    D
  1303.     INX    H
  1304.     DCR    C
  1305.     JNZ    LOOP2
  1306.     PUSH    H
  1307.     MVI    C,2
  1308.     LXI    D,LINE1+1
  1309.     LXI    H,INCR+1
  1310.     XRA    A
  1311. LOOP1    LDAX    D
  1312.     ADC    M
  1313.     DAA
  1314.     STAX    D
  1315.     DCR    C
  1316.     DCX    D
  1317.     DCX    H
  1318.     JNZ    LOOP1
  1319.     POP    H
  1320.     POP    D
  1321.     POP    B
  1322.     RET
  1323. AUTOL    LXI    H,0500H
  1324.     SHLD    INCR
  1325.     CALL    VCHK
  1326.     LXI    H,LINE1
  1327.     LXI    D,ABUF
  1328.     CALL    PACK
  1329.     LXI    H,INCR
  1330.     LDAX    D
  1331.     CPI    0
  1332.     JZ    SWITH
  1333.     CALL    PACK
  1334. SWITH    MVI    A,1
  1335.     STA    AUTO
  1336.     JMP    EOR
  1337. PACK    CALL    TWICE
  1338. TWICE    CALL    TEST
  1339.     RLC
  1340.     RLC
  1341.     RLC
  1342.     RLC
  1343.     MOV    B,A
  1344.     INX    D
  1345.     CALL    TEST
  1346.     ADD    B
  1347.     MOV    M,A
  1348.     INX    D
  1349.     INX    H
  1350.     RET
  1351. TEST    LDAX    D
  1352.     CPI    '0'
  1353.     JC    ERR3
  1354.     CPI    '9'+1
  1355.     JNC    ERR3
  1356.     ANI    0FH
  1357.     RET
  1358. UNPAK    ANI    0FH
  1359.     ADI    '0'
  1360.     MOV    M,A
  1361.     MOV    B,A
  1362.     LDA    AUTO
  1363.     ORA    A
  1364.     CNZ    OUT8
  1365.     INX    H
  1366.     RET
  1367. EDIT    CALL    CRLF
  1368.     MVI    B,'>'
  1369.     CALL    OUT8
  1370.     MVI    A,1
  1371.     STA    HALT
  1372.     LDA    ABUF
  1373.     ORA    A
  1374.     JZ    ERR9
  1375.     XRA    A
  1376.     STA    TEMP
  1377.     CALL    FIND
  1378.     INX    H
  1379.     LXI    D,TBUF
  1380. CPYLOOP    MOV    A,M
  1381.     STAX    D
  1382.     MOV    B,A
  1383.     CALL    OUT8
  1384.     MOV    A,B
  1385.     CPI    13
  1386.     JZ    DPLAY
  1387.     INX    H
  1388.     INX    D
  1389.     JMP    CPYLOOP
  1390. DPLAY    CALL    CRLF
  1391.     MVI    B,'>'
  1392.     CALL    OUT8
  1393.     JMP    RESTR
  1394. ERR9    LXI    H,ERRM9
  1395.     JMP    REPLY
  1396. ERRM9    DB    'MISSING LINE NO.'
  1397.     DB    13
  1398. SAVME    CALL    CRLF
  1399.     LXI    H,DUMMY
  1400.     CALL    SCRN
  1401.     CALL    IN8
  1402.     MOV    B,A
  1403.     CALL    OUT8
  1404.     MOV    E,B
  1405.     CALL    CRLF
  1406.     MOV    A,E
  1407.     CPI    'Y'
  1408.     JZ    SAVM1
  1409.     LXI    H,SORRY
  1410.     CALL    SCRN
  1411.     CALL    CRLF
  1412.     JMP    DOS
  1413. DUMMY    DB    'DO YOU HAVE A BACKUP OF '
  1414.     DB    'THIS DISK (Y/N)? '
  1415.     DB    13
  1416. SORRY    DB    'BACKUP    THIS DISK NOW!!!'
  1417.     DB    13
  1418. SAVM1    MVI    A,1
  1419.     STA    DISK
  1420.     LXI    H,RITER
  1421.     CALL    DLOOK
  1422.     JNC    SAVM2
  1423.     LXI    H,RITER
  1424.     JMP    REPLY
  1425. RITER    DB    'SECRTARY '
  1426.     DB    'NOT FOUND ON DRIVE 1'
  1427.     DB    13
  1428. SAVM2    LDA    RWCHK
  1429.     STA    TEMP
  1430.     XRA    A
  1431.     STA    RWCHK
  1432.     CALL    SETDN
  1433.     MOV    E,M
  1434.     INX    H
  1435.     MOV    D,M
  1436.     XCHG
  1437.     LDA    DISK
  1438.     MOV    C,A
  1439.     LDA    DISK
  1440.     ANI    80H
  1441.     JZ    L4
  1442.     MVI    A,26
  1443.     JMP    L5
  1444. L4    MVI    A,52
  1445. L5    EQU    $
  1446.     MVI    B,0
  1447.     LXI    D,PART1
  1448.     CALL    DCOM
  1449.     JC    IOERR2
  1450.     LDA    TEMP
  1451.     STA    RWCHK
  1452.     RET
  1453. SETDN    LDA    DENTY
  1454.     CPI    'S'
  1455.     JZ    SETS
  1456.     LDA    DBYTE
  1457.     ORA    A
  1458.     JZ    SETS
  1459. SETD    MVI    A,87H
  1460.     STA    FTYPE
  1461.     LDA    DISK
  1462.     ORI    80H
  1463.     JMP    SETE
  1464. SETS    MVI    A,7
  1465.     STA    FTYPE
  1466.     LDA    DISK
  1467.     ANI    07
  1468. SETE    STA    DISK
  1469.     RET
  1470. ;FILE    LOAD    ROUTINE
  1471. LOAD    CALL    CRLF
  1472.     CALL    LOADR
  1473.     CALL    FREE
  1474.     JMP    EOR
  1475. CHAINCMND    CALL    LOADR
  1476.     LXI    H,000
  1477.     SHLD    ABUF
  1478.     SHLD    ABUF+2
  1479.     JMP    PRINT
  1480. LOADR    CALL    SETUP
  1481.     CALL    GFILE
  1482.     CALL    DIREC
  1483.     CALL    SETDN
  1484.     MVI    A,1
  1485.     CALL    SIZE
  1486.     MOV    E,M
  1487.     INX    H
  1488.     MOV    D,M
  1489.     XCHG
  1490.     LDA    DISK
  1491.     MOV    C,A
  1492.     LDA    BLOCK
  1493.     PUSH    PSW
  1494.     LDA    DISK
  1495.     ANI    80H
  1496.     JZ    LOADSNGL
  1497.     POP    PSW
  1498.     RRC
  1499.     JMP    LOADBLK
  1500. LOADSNGL POP    PSW
  1501. LOADBLK    EQU    $
  1502.     MVI    B,1
  1503.     XCHG
  1504.     LHLD    BOFP
  1505.     XCHG
  1506. DOIT    CALL    DCOM
  1507.     JNC    IOGD
  1508. IOERR2    LXI    H,ERR31
  1509.     JMP    REPLY
  1510. ERR31    DB    'DISK FULL ERROR'
  1511.     DB    07
  1512.     DB    07
  1513.     DB    07
  1514.     DB    13
  1515. IOGD    LHLD    BOFP
  1516. LOAD2    LXI    D,MAXL
  1517.     MVI    C,4
  1518. LOAD14    INX    H
  1519.     MOV    A,M
  1520.     STAX    D
  1521.     INX    D
  1522.     DCR    C
  1523.     JNZ    LOAD14
  1524. LOAD3    INX    H
  1525.     MVI    A,0DH
  1526.     CMP    M
  1527.     JNZ    LOAD3
  1528.     INX    H
  1529.     MVI    A,1
  1530.     CMP    M
  1531.     JNZ    LOAD2
  1532. LOAD4    SHLD    EOFP
  1533. LOAD5    RET
  1534.     DB    3AH
  1535. ;NEW    FILE    SAVE    ROUTINE
  1536. NSAVE    CALL    CRLF
  1537.     CALL    SETUP
  1538.     CALL    GFILE
  1539.     CALL    GPARM
  1540.     STA    BLOCK
  1541.     LDA    DISK
  1542.     ANI    7FH
  1543.     LXI    H,FILE
  1544.     CALL    DLOOK
  1545.     JNC    NSERR
  1546.     SHLD    TEMP
  1547.     MVI    B,10
  1548.     LXI    H,TBUF
  1549. NSAV4    MVI    A,20H
  1550.     MOV    M,A
  1551.     INX    H
  1552.     DCR    B
  1553.     JNZ    NSAV4
  1554.     LDA    DISK
  1555.     LXI    H,TBUF
  1556.     CALL    DLOOK
  1557.     JC    IOERR2
  1558.     CALL    SETDN
  1559.     MVI    B,8
  1560. NSAV5    DCX    H
  1561.     DCR    B
  1562.     JNZ    NSAV5
  1563.     LXI    D,FILE
  1564.     MVI    B,8
  1565. NSAV2    LDAX    D
  1566.     MOV    M,A
  1567.     INX    H
  1568.     INX    D
  1569.     DCR    B
  1570.     JNZ    NSAV2
  1571. NSAV3    SHLD    TEMP2
  1572.     LDA    TEMP
  1573.     MOV    M,A
  1574.     INX    H
  1575.     LDA    TEMP+1
  1576.     MOV    M,A
  1577.     INX    H
  1578.     LDA    BLOCK
  1579.     ORA    A
  1580.     JNZ    NSAV6
  1581.     CALL    SIZEB
  1582.     LDA    BLOCK
  1583.     INR    A
  1584.     INR    A
  1585.     INR    A
  1586.     INR    A
  1587.     STA    BLOCK
  1588. NSAV6    PUSH    PSW
  1589.     LDA    DISK
  1590.     ANI    80H
  1591.     JZ    SDBLK
  1592.     POP    PSW
  1593.     RRC
  1594.     JNC    NOINR
  1595.     INR    A
  1596. NOINR    ANI    7FH
  1597.     JMP    L1
  1598. SDBLK    POP    PSW
  1599. L1    STA    BLOCK
  1600.     MOV    M,A
  1601.     INX    H
  1602.     XRA    A
  1603.     MOV    M,A
  1604.     INX    H
  1605.     LDA    FTYPE
  1606.     MOV    M,A
  1607.     CALL    DWRIT
  1608.     CALL    DIREC
  1609.     CALL    SETDN
  1610.     JMP    SAVE1
  1611. NSERR    LXI    H,MESSD2
  1612.     JMP    REPLY
  1613. MESSD2    DB    'FILE ALREADY EXISTS'
  1614.     DB    13
  1615. ;FILE    SAVE    ROUTINE
  1616. SAVECMND    CALL    CRLF
  1617.     CALL    SETUP
  1618.     CALL    GFILE
  1619.     CALL    DIREC
  1620.     CALL    SETDN
  1621.     XRA    A
  1622.     CALL    SIZE
  1623.     LDA    DBYTE
  1624.     ORA    A
  1625.     JZ    SAVE1
  1626.     LDA    BLOCK
  1627.     RRC
  1628.     INR    A
  1629. SAVE2    ANI    7FH
  1630.     STA    BLOCK
  1631. SAVE1    MOV    E,M
  1632.     INX    H
  1633.     MOV    D,M
  1634.     XCHG
  1635.     LDA    DISK
  1636.     MOV    C,A
  1637.     LDA    BLOCK
  1638.     MVI    B,0
  1639.     XCHG
  1640.     LHLD    BOFP
  1641.     XCHG
  1642.     CALL    DCOM
  1643.     JC    IOERR2
  1644.     LXI    H,MESSB
  1645.     JMP    REPLY
  1646. MESSB    DB    'SAVED'
  1647.         DB    13
  1648. DESTR    CALL    CRLF
  1649.     CALL    SETUP
  1650.     CALL    GFILE
  1651.     CALL    DIREC
  1652.     MVI    B,8
  1653. KILL2    DCX    H
  1654.     DCR    B
  1655.     JNZ    KILL2
  1656.     MVI    B,8
  1657.     MVI    A,' '
  1658. KILL3    MOV    M,A
  1659.     INX    H
  1660.     DCR    B
  1661.     JNZ    KILL3
  1662. KILL4    LXI    H,CHK
  1663.     CALL    SCRN
  1664.     CALL    IN8
  1665.     MOV    B,A
  1666.     CALL    OUT8
  1667.     MOV    E,B
  1668.     CALL    CRLF
  1669.     MOV    A,E
  1670.     CPI    'N'
  1671.     JZ    EOR
  1672.     CPI    'Y'
  1673.     JNZ    KILL4
  1674.     CALL    DWRIT
  1675.     LXI    H,MSGK
  1676.     JMP    REPLY
  1677. MSGK    DB    'FILE DELETED',13
  1678. CHK    DB    'ARE YOU SURE (Y/N)? ',13
  1679. APPND    CALL    APPNDR            ;APPEND COMMAND
  1680.     CALL    FREE
  1681.     JMP    EOR
  1682. APPNDR    CALL    CRLF
  1683.     CALL    SETUP
  1684.     CALL    GFILE
  1685.     CALL    DIREC
  1686.     CALL    SETDN
  1687.     CALL    SIZEA
  1688.     MOV    E,M
  1689.     INX    H
  1690.     MOV    D,M
  1691.     LDA    DISK
  1692.     MOV    C,A
  1693.     LDA    BLOCK
  1694.     MVI    B,1
  1695.     LHLD    EOFP
  1696.     XCHG
  1697.     JMP    DOIT
  1698. SIZEA    PUSH    H
  1699.     INX    H
  1700.     INX    H
  1701.     MOV    A,M
  1702.     STA    BLOCK
  1703.     LDA    DISK
  1704.     ANI    80H
  1705.     JZ    L2
  1706.     LDA    BLOCK
  1707.     ANI    7FH
  1708.     RLC
  1709.     STA    BLOCK
  1710. L2    LHLD    EOFP
  1711.     JMP    INSZ2
  1712. SIZEB    PUSH    H
  1713.     LHLD    BOFP
  1714.     SHLD    ADDR1
  1715.     LHLD    EOFP
  1716.     SHLD    ADDR2
  1717.     CALL    ADDRC
  1718.     LDA    ADDR3+1
  1719.     INR    A
  1720.     STA    BLOCK
  1721.     POP    H
  1722.     RET
  1723. SIZE    PUSH    H
  1724.     STA    TEMP
  1725.     INX    H
  1726.     INX    H
  1727.     MOV    A,M
  1728.     STA    BLOCK
  1729.     LDA    DISK
  1730.     ANI    80H
  1731.     JZ    L3
  1732.     LDA    BLOCK
  1733.     ANI    7FH
  1734.     RLC
  1735.     STA    BLOCK
  1736. L3    LDA    TEMP
  1737.     ORA    A
  1738.     JZ    OUTSZ
  1739. ;    SIZE    ON    LOAD
  1740. INSZ    LHLD    BOFP
  1741. INSZ2    SHLD    ADDR1
  1742.     LHLD    TOP
  1743.     SHLD    ADDR2
  1744.     CALL    ADDRC
  1745.     LDA    ADDR3+1
  1746.     INR    A
  1747.     LXI    H,BLOCK
  1748.     CMP    M
  1749.     JZ    SIZE9
  1750.     JC    ERR6
  1751.     MOV    A,M
  1752.     JMP    SIZE9
  1753. ;    SIZE    ON    SAVE
  1754. OUTSZ    LHLD    BOFP
  1755.     SHLD    ADDR1
  1756.     LHLD    EOFP
  1757.     SHLD    ADDR2
  1758.     CALL    ADDRC
  1759.     LDA    ADDR3+1
  1760.     INR    A
  1761.     LXI    H,BLOCK
  1762.     CMP    M
  1763.     JZ    SIZE9
  1764.     JNC    ERR5
  1765. SIZE9    STA    BLOCK
  1766.     POP    H
  1767.     RET
  1768. ERR5    CALL    CRLF
  1769.     LXI    H,ERRM5
  1770.     CALL    SCRN
  1771.     JMP    EOR
  1772. RPLY    CALL    CRLF
  1773.     CALL    SCRN
  1774.     POP    H
  1775.     RET
  1776. ERRM5    DB    'FILE TOO SMALL...NOT SAVED'
  1777.     DB    13
  1778. ERR6    LXI    H,ERRM6
  1779.     STA    BLOCK
  1780.     JMP    RPLY
  1781. ERRM6    DB    'FILE TOO LARGE TO FIT IN MEMORY...ONLY PARTIALLY LOADED'
  1782.     DB    13
  1783. ;GET    THE    FILE    NAME
  1784. GFILE    MVI    A,1
  1785.     STA    DISK
  1786.     MVI    C,9
  1787.     MVI    A,' '
  1788.     LXI    D,FILE
  1789. BFILL    STAX    D
  1790.     INX    D
  1791.     DCR    C
  1792.     JNZ    BFILL
  1793. LOOK1    MOV    A,M
  1794.     CPI    13
  1795.     JZ    ERR1
  1796.     CPI    ' '
  1797.     JNZ    MFILE
  1798.     INX    H
  1799.     JMP    LOOK1
  1800. MFILE    MVI    C,9
  1801.     LXI    D,FILE
  1802. FILL1    MOV    A,M
  1803.     CPI    13
  1804.     JZ    UPPER
  1805.     CPI    ' '
  1806.     JZ    UPPER
  1807.     CPI    ','
  1808.     JZ    LOOKU
  1809.     STAX    D
  1810.     INX    H
  1811.     INX    D
  1812.     DCR    C
  1813.     JZ    ERR1
  1814.     JMP    FILL1
  1815. LOOKU    INX    H
  1816.     MOV    A,M
  1817.     CPI    13
  1818.     JZ    UPPER
  1819.     CPI    '1'
  1820.     JC    ERR1
  1821.     CPI    '4'+1    ;QD ALLOWS 4 DRIVES
  1822.     JNC    ERR1
  1823.     ANI    0FH
  1824.     STA    DISK
  1825.     INX    H
  1826. UPPER    LXI    D,FILE
  1827.     MVI    B,8
  1828. UPPR    LDAX    D
  1829.     CPI    60H
  1830.     JC    LOWER
  1831.     SBI    20H
  1832.     STAX    D
  1833. LOWER    INX    D
  1834.     DCR    B
  1835.     JNZ    UPPR
  1836.     RET
  1837. ;    SEE    IF    FILE IS THERE
  1838. DIREC    LDA    DISK
  1839.     LXI    H,FILE
  1840.     CALL    DLOOK
  1841.     RNC
  1842.     LXI    H,ERR4
  1843.     JMP    REPLY
  1844. ERR4    DB    'FILE NOT FOUND'
  1845.     DB    13
  1846. ;OUTPUT    NULL    CHARACTERS
  1847. NULLO    LDA    NULLC
  1848.     ORA    A
  1849.     RZ
  1850.     PUSH    D
  1851.     MOV    E,A
  1852. NULL2    MVI    B,0
  1853.     CALL    OUT8A
  1854.     DCR    E
  1855.     JNZ    NULL2
  1856. NULL3    POP    D
  1857.     RET
  1858. ;OUTPUT    A    CARRIAGE    RETURN LINE FEED
  1859. CRLF    MVI    B,13
  1860.     CALL    OUT8
  1861.     MVI    B,10
  1862.     CALL    OUT8
  1863.     CALL    NULLO
  1864.     RET
  1865. ;CHARACTER    INPUT    ROUTINE
  1866. IN8    XRA    A
  1867.     JMP    CIN
  1868. ;ECHOE    TAB    CHAR    AS @
  1869. ;OUTPUT    A    CHARACTER    TO THE CONSOLE
  1870. OUT8    MVI    A,09
  1871.     CMP    B
  1872.     JNZ    SKIP21
  1873.     MVI    B,'@'
  1874. SKIP21    XRA    A
  1875.     JMP    COUT
  1876. ;OUTPUT    A    CHARACTER    TO UNIT "UNIT"
  1877. OUT8A    MVI    A,09
  1878.     CMP    B
  1879.     JNZ    SKIP22
  1880.     MVI    B,'@'
  1881. SKIP22    LDA    UNIT
  1882.     JMP    COUT
  1883. ;DISPLAY    LINE    THROUGH    CR
  1884. SCRN    MOV    B,M
  1885.     MVI    A,13
  1886.     CMP    B
  1887.     RZ
  1888.     CALL    OUT8
  1889.     INX    H
  1890.     JMP    SCRN
  1891. ;LINE    PRINT    FOR    LIST AND PRINT COMMANDS
  1892. OUTPT    MOV    B,M
  1893.     MVI    A,13
  1894.     CMP    B
  1895.     JZ    OUTDN
  1896.     CALL    OUT8A
  1897.     INX    H
  1898.     JMP    OUTPT
  1899. OUTDN    CALL    OUTCR
  1900.     LDA    SPACE
  1901.     ORA    A
  1902.     RZ
  1903.     PUSH    B
  1904.     MOV    C,A
  1905. OUTA    DCR    C
  1906.     JZ    OUTB
  1907.     CALL    OUTCR
  1908.     JMP    OUTA
  1909. OUTB    POP    B
  1910.     RET
  1911. OUTCR    MVI    B,13
  1912.     CALL    OUT8A
  1913.     MVI    B,10
  1914.     CALL    OUT8A
  1915.     CALL    NULLO
  1916.     RET
  1917. ;DISPLAY    AN    ERROR    MESSAGE
  1918. REPLY    CALL    CRLF
  1919.     CALL    SCRN
  1920.     JMP    EOR
  1921. DIRECTORY    EQU    $
  1922. CATLG    LHLD    DOSER
  1923.     SHLD    ADDR1
  1924.     LXI    H,CAT2
  1925.     SHLD    DOSER
  1926.     CALL    CRLF
  1927.     CALL    SETUP
  1928.     CALL    GPARM
  1929.     ORA    A
  1930.     JNZ    CAT1
  1931.     MVI    A,1
  1932. CAT1    MVI    L,0
  1933.     CALL    DLIST
  1934. CAT2    LHLD    ADDR1
  1935.     SHLD    DOSER
  1936.     CALL    CRLF
  1937.     JMP    EOR
  1938. ;    GET    1    PARAMETER
  1939. PARM    EQU    $
  1940. GPARM    EQU    $
  1941.     PUSH    D
  1942.     PUSH    B
  1943.     XRA    A
  1944.     STA    SAVE
  1945. PARM9    EQU    $
  1946.     MOV    A,M
  1947.     CPI    13
  1948.     JZ    PEOF
  1949.     CPI    ','
  1950.     JZ    PARM0
  1951.     CPI    ' '
  1952.     JNZ    PARM1
  1953. PARM0    INX    H
  1954.     JMP    PARM9
  1955. PARM1    EQU    $
  1956.     CPI    '0'
  1957.     JC    ERR2
  1958.     CPI    '9'+1
  1959.     JNC    ERR2
  1960.     ANI    0FH
  1961.     MOV    E,A
  1962.     LDA    SAVE
  1963.     MOV    B,A
  1964.     RLC
  1965.     RLC
  1966.     RLC
  1967.     ADD    B
  1968.     ADD    B
  1969.     ADD    E
  1970.     STA    SAVE
  1971.     INX    H
  1972.     MOV    A,M
  1973.     CPI    13
  1974.     JZ    PEOF
  1975.     CPI    ','
  1976.     JZ    PEOF
  1977.     CPI    ' '
  1978.     JZ    PEOF
  1979.     JMP    PARM1
  1980. PEOF    LDA    SAVE
  1981.     POP    B
  1982.     POP    D
  1983.     RET
  1984. MERGECMND    EQU    $
  1985. BASIC    LDA    IBUF-1
  1986.     CPI    8
  1987.     JNC    BDB1
  1988.     CALL    EOFBA
  1989.     LXI    H,BMSG5
  1990.     JMP    REPLY
  1991. BMSG5    DB    'BASIC FILE DELETED'
  1992.     DB    13
  1993. BDB1    LDA    INSRT
  1994.     ORA    A
  1995.     JZ    BDB2
  1996.     JMP    NSERR
  1997. BDB2    LDA    TOP+1
  1998.     DCR    A
  1999.     DCR    A
  2000.     MOV    B,A
  2001.     LDA    EOFP+1
  2002.     CMP    B
  2003.     JC    BDB3
  2004.     LXI    H,BMSG22
  2005.     JMP    REPLY
  2006. BMSG22    DB    'NO ROOM FOR BUFFER'
  2007.     DB    13
  2008. BDB3    CALL    SETUP
  2009.     CALL    GFILE
  2010.     CALL    DIREC
  2011.     CALL    SETDN
  2012.     LDA    DENTY
  2013.     CPI    'S'
  2014.     JZ    BDB42
  2015.     LDA    DBYTE
  2016.     ORA    A
  2017.     JZ    BDB42
  2018.     MVI    A,1
  2019.     JMP    BDB72
  2020. BDB42    MVI    A,2
  2021. BDB72    STA    BLOCK
  2022.     PUSH    H
  2023.     LHLD    TOP
  2024.     DCR    H
  2025.     DCR    H
  2026.     DCR    L
  2027.     SHLD    TOP
  2028.     POP    H
  2029.     PUSH    H
  2030.     INX    H
  2031.     INX    H
  2032.     INX    H
  2033.     INX    H
  2034.     MOV    A,M
  2035.     ANI    0FH
  2036.     CPI    3
  2037.     JZ    BDB52
  2038.     LXI    H,BMSG32
  2039.     JMP    REPLY
  2040. BMSG32    DB    'NOT A BASIC DATA FILE'
  2041.     DB    13
  2042. BDB52    POP    H
  2043.     MOV    E,M
  2044.     INX    H
  2045.     MOV    D,M
  2046.     XCHG
  2047.     DCX    H
  2048.     LDA    BLOCK
  2049.     CPI    1
  2050.     JZ    SDA2
  2051.     DCX    H
  2052. SDA2    SHLD    DSKAD
  2053.     LHLD    TOP
  2054.     INX    H
  2055.     SHLD    BUFAD
  2056.     CALL    GETBA
  2057.     LHLD    BUFAD
  2058.     MOV    A,M
  2059.     CPI    3
  2060.     JZ    BDB6
  2061.     LXI    H,BMSG4
  2062.     JMP    REPLY
  2063. BMSG4    DB    'FILE NOT STRING DATA'
  2064.     DB    13
  2065. BDB6    INX    H
  2066.     MOV    A,M
  2067.     STA    RECCT
  2068.     INX    H
  2069.     SHLD    BUFAD
  2070.     LHLD    BUFCT
  2071.     INX    H
  2072.     INX    H
  2073.     SHLD    BUFCT
  2074.     XRA    A
  2075.     STA    INHIB
  2076.     MVI    A,1
  2077.     STA    INSRT
  2078.     CALL    FREE
  2079.     JMP    EOR
  2080. GETBA    PUSH    H
  2081.     PUSH    B
  2082.     PUSH    D
  2083.     LHLD    TOP
  2084.     INX    H
  2085.     SHLD    BUFAD
  2086.     XCHG
  2087.     LHLD    DSKAD
  2088.     INX    H
  2089.     LDA    BLOCK
  2090.     CPI    1
  2091.     JZ    SDA
  2092.     INX    H
  2093. SDA    SHLD    DSKAD
  2094.     LDA    DISK
  2095.     MOV    C,A
  2096.     LDA    BLOCK
  2097.     MVI    B,1
  2098.     CALL    DCOM
  2099.     JC    IOERR
  2100.     CALL    RSTBA
  2101.     POP    D
  2102.     POP    B
  2103.     POP    H
  2104.     RET
  2105. EOFBA    LDA    INSRT
  2106.     ORA    A
  2107.     RZ
  2108.     XRA    A
  2109.     STA    RPEAT
  2110.     STA    INSRT
  2111.     LXI    H,0000H
  2112.     SHLD    DSKAD
  2113.     SHLD    BUFAD
  2114.     SHLD    BUFCT
  2115.     SHLD    RECCT
  2116.     LHLD    TOP
  2117.     INR    H
  2118.     INR    H
  2119.     INR    L
  2120.     SHLD    TOP
  2121.     MVI    A,1
  2122.     STA    INHIB
  2123.     RET
  2124. RSTBA    MVI    A,99
  2125.     STA    RPEAT
  2126.     LXI    H,0000
  2127.     SHLD    BUFCT
  2128.     RET
  2129. MOVBA    LDA    INHIB
  2130.     ORA    A
  2131.     RNZ
  2132.     PUSH    H
  2133.     PUSH    B
  2134. MOV0    LHLD    BUFAD
  2135.     MOV    A,M
  2136.     CPI    '+'
  2137.     JZ    MOV1
  2138.     STAX    D
  2139.     INX    D
  2140.     LDA    NCHR
  2141.     INR    A
  2142.     STA    NCHR
  2143.     MOV    B,A
  2144.     LDA    CCNT
  2145.     CMP    B
  2146.     JZ    LFULL
  2147.     CALL    INRBF
  2148.     CALL    INRRC
  2149.     LDA    INHIB
  2150.     ORA    A
  2151.     JZ    MOV0
  2152.     JMP    POPIT
  2153. MOV1    CALL    INRBF
  2154.     CALL    INRRC
  2155. POPIT    POP    B
  2156.     POP    H
  2157.     RET
  2158. LFULL    CALL    INRBF
  2159.     CALL    INRRC
  2160.     LHLD    BUFAD
  2161.     MOV    A,M
  2162.     CPI    '+'
  2163.     JZ    MOV1
  2164.     LDA    INHIB
  2165.     ORA    A
  2166.     JZ    LFULL
  2167.     JMP    POPIT
  2168. INRBF    INX    H
  2169.     SHLD    BUFAD
  2170.     LHLD    BUFCT
  2171.     INX    H
  2172.     SHLD    BUFCT
  2173.     MOV    A,H
  2174.     CPI    2
  2175.     RNZ
  2176.     CALL    GETBA
  2177.     RET
  2178. INRRC    LDA    CUSED
  2179.     INR    A
  2180.     STA    CUSED
  2181.     MOV    B,A
  2182.     LDA    RECCT
  2183.     CMP    B
  2184.     RNZ
  2185.     MVI    A,1
  2186.     STA    INHIB
  2187.     RET
  2188. FLUSH    PUSH    H
  2189.     PUSH    B
  2190.     XRA    A
  2191.     STA    INHIB
  2192. FLSH1    LHLD    BUFAD
  2193.     MOV    A,M
  2194.     CPI    03
  2195.     JZ    FLSH2
  2196.     CPI    1
  2197.     JZ    FLSH3
  2198.     CALL    INRBF
  2199.     JMP    FLSH1
  2200. FLSH2    CALL    INRBF
  2201.     LHLD    BUFAD
  2202.     MOV    A,M
  2203.     STA    RECCT
  2204.     XRA    A
  2205.     STA    CUSED
  2206.     CALL    INRBF
  2207.     POP    B
  2208.     POP    H
  2209.     RET
  2210. FLSH3    POP    B
  2211.     POP    H
  2212.     JMP    EOFBA
  2213. DEBUG        MVI    A,1
  2214.     STA    DBFLG
  2215.     CALL    HASH1
  2216.     CALL    HASH2
  2217.     JMP    EOR
  2218. DUMP1    CALL    OUTCR
  2219.     LHLD    BBUF+2
  2220.     XCHG
  2221.     LHLD    BBUF
  2222.     LDA    IBUF-1
  2223.     CPI    6
  2224.     JZ    DPRAM
  2225.     CALL    DUMP3
  2226.     CALL    OUTCR
  2227.     JMP    EOR
  2228. DPRAM    CALL    DUMP4
  2229.     CALL    OUTCR
  2230.     JMP    EOR
  2231. DUMP2    LDA    DBFLG
  2232.     ORA    A
  2233.     JZ    EOR
  2234. DUMP    EQU    $
  2235. DUMP4    LXI    D,TBUF+140
  2236.     LXI    H,AREA
  2237.     CALL    DUMP3
  2238.     JMP    EOR
  2239. DUMP5    PUSH    H
  2240.     PUSH    D
  2241.     PUSH    B
  2242.     PUSH    PSW
  2243.     SHLD    HL
  2244.     XCHG
  2245.     SHLD    DE
  2246.     JMP    H0
  2247. DUMP3    PUSH    H
  2248.     PUSH    D
  2249.     PUSH    B
  2250.     PUSH    PSW
  2251.     SHLD    HL
  2252.     XCHG
  2253.     SHLD    DE
  2254. REASK    CALL    CRLF
  2255.     LXI    H,MSGD
  2256.     CALL    SCRN
  2257.     CALL    IN8
  2258.     CPI    03
  2259.     JZ    EOR
  2260.     MOV    B,A
  2261.     CALL    OUT8
  2262.     MOV    A,B
  2263.     CPI    '0'
  2264.     JC    REASK
  2265.     CPI    '7'
  2266.     JNC    REASK
  2267.     ANI    07H
  2268.     STA    UNIT
  2269.     CALL    CRLF
  2270. H0    LXI    H,HL+1
  2271.     CALL    HEX
  2272.     LXI    H,HL
  2273.     CALL    HEX
  2274.     LHLD    HL
  2275.     MVI    D,8
  2276. H2    MVI    B,' '
  2277.     CALL    OUT8A
  2278.     MVI    E,4
  2279. H1    CALL    HEX
  2280.     INX    H
  2281.     DCR    E
  2282.     JNZ    H1
  2283.     DCR    D
  2284.     JNZ    H2
  2285.     LHLD    HL
  2286.     MVI    B,' '
  2287.     CALL    OUT8A
  2288.     MVI    D,32
  2289. H4    MOV    A,M
  2290.     CPI    20H
  2291.     JC    H5
  2292.     CPI    7EH
  2293.     JC    H3
  2294. H5    MVI    A,'.'
  2295. H3    MOV    B,A
  2296.     CALL    OUT8A
  2297.     INX    H
  2298.     DCR    D
  2299.     JNZ    H4
  2300.     CALL    OUTCR
  2301.     SHLD    HL
  2302.     CALL    CONTC
  2303.     JZ    EOR
  2304.     LDA    HL+1
  2305.     MOV    B,A
  2306.     LDA    DE+1
  2307.     CMP    B
  2308.     JZ    H6
  2309.     JNC    H0
  2310.     JMP    H7
  2311. H6    LDA    HL
  2312.     MOV    B,A
  2313.     LDA    DE
  2314.     CMP    B
  2315.     JZ    H7
  2316.     JNC    H0
  2317. H7    XRA    A
  2318.     STA    UNIT
  2319.     POP    PSW
  2320.     POP    B
  2321.     POP    D
  2322.     POP    H
  2323.     RET
  2324. MSGD    DB    'UNIT? '
  2325.     DB    13
  2326. HEX    PUSH    H
  2327.     MOV    A,M
  2328.     CALL    BINH
  2329.     LXI    H,HCON
  2330.     MOV    B,M
  2331.     CALL    OUT8A
  2332.     INX    H
  2333.     MOV    B,M
  2334.     CALL    OUT8A
  2335.     POP    H
  2336.     RET
  2337. BINH    LXI    H,HCON
  2338.     MOV    B,A
  2339.     RAR
  2340.     RAR
  2341.     RAR
  2342.     RAR
  2343.     CALL    BIN1
  2344.     MOV    M,A
  2345.     INX    H
  2346.     MOV    A,B
  2347.     CALL    BIN1
  2348.     MOV    M,A
  2349.     RET
  2350. BIN1    ANI    0FH
  2351.     ADI    48
  2352.     CPI    58
  2353.     RC
  2354.     ADI    7
  2355.     RET
  2356. HASH1    LXI    H,CLEAN
  2357.     LXI    D,RAM
  2358.     MVI    B,0
  2359.     CALL    HASH3
  2360.     LXI    H,PART5
  2361.     LXI    D,MEMRY
  2362. HASH3    MOV    A,B
  2363.     ADD    M
  2364.     MOV    B,A
  2365.     INX    H
  2366.     MOV    A,H
  2367.     CMP    D
  2368.     JNZ    HASH3
  2369.     MOV    A,L
  2370.     CMP    E
  2371.     JNZ    HASH3
  2372.     RET
  2373. HASH2    LDA    HTOT
  2374.     CMP    B
  2375.     RZ
  2376.     MOV    A,B
  2377.     STA    HTOT
  2378.     LXI    H,HASHM
  2379.     CALL    CRLF
  2380.     CALL    SCRN
  2381.     CALL    CRLF
  2382.     RET
  2383. HASHM    DB    'INTEGRITY FAILURE'
  2384.     DB    13
  2385. MOVECMND    MVI    A,1
  2386.     JMP    COPYCMND+1
  2387. COPYCMND    EQU    $
  2388.     XRA    A
  2389.     STA    TEMP3
  2390.     CALL    RANGE
  2391. GETLN    EQU    $
  2392.     LXI    H,0100H
  2393.     SHLD    INCR
  2394.     LXI    H,LINE1
  2395.     LXI    D,ABUF+8
  2396.     CALL    PACK
  2397.     XRA    A
  2398.     STA    TEMP3+1
  2399.     LXI    D,ABUF+8
  2400.     LXI    H,ABUF
  2401.     MVI    B,4
  2402. AGAIN    LDAX    D
  2403.     CMP    M
  2404.     JC    BKWRD
  2405.     JNZ    FRWRD
  2406.     INX    H
  2407.     INX    D
  2408.     DCR    B
  2409.     JZ    FRWRD
  2410.     JMP    AGAIN
  2411. BKWRD    MVI    A,1
  2412.     STA    TEMP3+1
  2413. FRWRD    CALL    FIND
  2414. MOVL    SHLD    ADDR1
  2415.     LXI    D,IBUF-1
  2416.     MOV    A,M
  2417.     STAX    D
  2418.     INX    D
  2419.     INX    H
  2420. MOVX    MOV    A,M
  2421.     STAX    D
  2422.     CPI    13
  2423.     JZ    COPD
  2424.     INX    H
  2425.     INX    D
  2426.     JMP    MOVX
  2427. COPD    SHLD    ADDR2
  2428.     INX    D
  2429.     MVI    A,1
  2430.     STAX    D
  2431.     LXI    H,IBUF
  2432.     CALL    LNGEN
  2433.     CALL    LINE
  2434.     LXI    D,ABUF+4
  2435.     LHLD    ADDR1
  2436.     LDA    TEMP3+1
  2437.     ORA    A
  2438.     JZ    SKPAD
  2439.     LHLD    ADDR2
  2440.     INX    H
  2441.     SHLD    ADDR1
  2442.     INX    H
  2443.     CALL    ADVNC
  2444.     SHLD    ADDR2
  2445.     LHLD    ADDR1
  2446. SKPAD    INX    H
  2447.     MVI    B,5
  2448. ENDD    DCR    B
  2449.     JZ    DONE2
  2450.     LDAX    D
  2451.     CMP    M
  2452.     JNZ    CNEXT
  2453.     INX    D
  2454.     INX    H
  2455.     JMP    ENDD
  2456. CNEXT    LHLD    ADDR2
  2457.     INX    H
  2458.     MOV    A,M
  2459.     CPI    1
  2460.     JZ    DONE2
  2461.     PUSH    B
  2462.     PUSH    H
  2463.     PUSH    D
  2464.     MVI    B,4
  2465.     INX    H
  2466.     LXI    D,ABUF+4
  2467. RETRY    LDAX    D
  2468.     CMP    M
  2469.     JC    DONE2
  2470.     JNZ    RESET
  2471.     INX    H
  2472.     INX    D
  2473.     DCR    B
  2474.     JZ    RESET
  2475.     JMP    RETRY
  2476. ADVNC    INX    H
  2477. AD    MOV    A,M
  2478.     CPI    13
  2479.     JZ    FNDIT
  2480.     INX    H
  2481.     JMP    AD
  2482. FNDIT    RET
  2483. RESET    POP    D
  2484.     POP    H
  2485.     POP    B
  2486.     JMP    MOVL
  2487. DONE2    LDA    TEMP3
  2488.     ORA    A
  2489.     JNZ    MOVC
  2490.     LXI    H,MESS21
  2491.     JMP    REPLY
  2492. MESS21    DB    'COPIED'
  2493.     DB    13
  2494. MOVC    CALL    DELL
  2495.     LXI    H,MESS22
  2496.     JMP    REPLY
  2497. MESS22    DB    'MOVED'
  2498.     DB    13
  2499.  
  2500. CHNG    MVI    A,1
  2501.     JMP    CHNGA+1
  2502. CHNGA    XRA    A
  2503.     STA    TEMP3
  2504. FINDZ    CALL    CRLF
  2505.     LXI    H,IBUF
  2506.     LXI    D,TBUF
  2507. EDIT5    MOV    A,M
  2508.     STAX    D
  2509.     CPI    13
  2510.     JZ    EDIT6
  2511.     INX    H
  2512.     INX    D
  2513.     JMP    EDIT5
  2514. EDIT6    LXI    H,TBUF
  2515.     CALL    SET1
  2516.     XRA    A
  2517.     STA    CNTR
  2518. CHNG1    MVI    A,13
  2519.     CMP    M
  2520.     JZ    ERR2
  2521.     MVI    A,' '
  2522.     CMP    M
  2523.     JNZ    CHNG5
  2524.     INX    H
  2525.     JMP    CHNG1
  2526. CHNG5    SHLD    ADDR1
  2527. CHNG6    MVI    A,13
  2528.     CMP    M
  2529.     JZ    ERR2
  2530.     MVI    A,'^'
  2531.     CMP    M
  2532.     JZ    CHNG2
  2533.     INX    H
  2534.     JMP    CHNG6
  2535. CHNG2    LHLD    BOFP
  2536.     INX    H
  2537. CHNGX    SHLD    ADDR2
  2538.     INX    H
  2539.     INX    H
  2540.     INX    H
  2541.     INX    H
  2542.     SHLD    ADDR3
  2543.     XCHG
  2544.     LHLD    ADDR1
  2545.     XCHG
  2546. CHNG3    LDAX    D
  2547.     CPI    '^'
  2548.     JZ    FUND
  2549.     CMP    M
  2550.     JNZ    NOTXX
  2551.     INX    H
  2552.     INX    D
  2553.     JMP    CHNG3
  2554. NOTXX    LHLD    ADDR1
  2555.     XCHG
  2556.     LHLD    ADDR3
  2557.     INX    H
  2558.     SHLD    ADDR3
  2559.     MVI    A,13
  2560.     CMP    M
  2561.     JNZ    CHNG3
  2562.     SHLD    ADDR3
  2563. EOFXX    LHLD    ADDR3
  2564.     INX    H
  2565.     MVI    A,1
  2566.     CMP    M
  2567.     JZ    FINIX
  2568.     CALL    CONTC
  2569.     JZ    EOR
  2570.     INX    H
  2571.     JMP    CHNGX
  2572. FUND    LDA    CNTR
  2573.     INR    A
  2574.     STA    CNTR
  2575.     CALL    REDIT
  2576.     LDA    TEMP3
  2577.     ORA    A
  2578.     JZ    CHNG4
  2579.     LXI    H,IBUF
  2580.     CALL    SCRN
  2581. IN1    CALL    IN8
  2582.     CPI    13
  2583.     JZ    KEEP
  2584.     CPI    03
  2585.     JZ    EOR
  2586.     CPI    01
  2587.     JZ    DELT
  2588.     CPI    20H
  2589.     JZ    DELT
  2590.     JMP    IN1
  2591. KEEP    CALL    CRLF
  2592. CHNG4    CALL    LINE
  2593.     JMP    EOFXX
  2594. DELT    CALL    CRLF
  2595.     LHLD    ADDR4
  2596.     SHLD    ADDR3
  2597.     JMP    EOFXX
  2598. FINIX    LDA    CNTR
  2599.     ORA    A
  2600.     JNZ    EOR
  2601.     LXI    H,MESS3
  2602.     JMP    REPLY
  2603. MESS3    DB    'CHAR NOT FOUND'
  2604.     DB    13
  2605. REDIT    LXI    B,IBUF
  2606.     MVI    A,6
  2607.     STA    INCR
  2608.     LHLD    ADDR2
  2609.     MVI    D,5
  2610. EDIT3    DCR    D
  2611.     JZ    EDIT4
  2612.     MOV    A,M
  2613.     STAX    B
  2614.     INX    H
  2615.     INX    B
  2616.     JMP    EDIT3
  2617. EDIT4    SHLD    ADDR3
  2618.     XCHG
  2619.     LHLD    ADDR1
  2620.     XCHG
  2621. EDIT1    LDAX    D
  2622.     CPI    '^'
  2623.     JZ    STFND
  2624.     CMP    M
  2625.     JNZ    STNF
  2626.     INX    H
  2627.     INX    D
  2628.     JMP    EDIT1
  2629. STNF    LHLD    ADDR3
  2630.     MOV    A,M
  2631.     STAX    B
  2632.     INX    B
  2633.     LDA    INCR
  2634.     INR    A
  2635.     STA    INCR
  2636.     CPI    139
  2637.     JZ    ERR44
  2638.     LHLD    ADDR1
  2639.     XCHG
  2640.     LHLD    ADDR3
  2641.     INX    H
  2642.     SHLD    ADDR3
  2643.     MVI    A,13
  2644.     CMP    M
  2645.     JNZ    EDIT1
  2646. ERR44    LXI    H,MESS44
  2647.     JMP    REPLY
  2648. MESS44    DB    'CHAR OVERFLOW'
  2649.     DB    13
  2650.     JMP    LNFUL
  2651. STFND    INX    D
  2652. EDIT2    LDAX    D
  2653.     CPI    13
  2654.     JZ    DADD
  2655.     STAX    B
  2656.     INX    B
  2657.     INX    D
  2658.     LDA    INCR
  2659.     INR    A
  2660.     STA    INCR
  2661.     CPI    139
  2662.     JZ    LNFUL
  2663.     JMP    EDIT2
  2664. DADD    MOV    A,M
  2665.     CPI    13
  2666.     JZ    LNFUL
  2667.     STAX    B
  2668.     INX    H
  2669.     INX    B
  2670.     LDA    INCR
  2671.     INR    A
  2672.     STA    INCR
  2673.     CPI    139
  2674.     JZ    LNFUL
  2675.     JMP    DADD
  2676. LNFUL    MVI    A,13
  2677.     STAX    B
  2678.     INX    B
  2679.     MVI    A,1
  2680.     STAX    B
  2681.     SHLD    ADDR4
  2682.     STAX    B
  2683.     LHLD    ADDR2
  2684.     DCX    H
  2685.     DCX    H
  2686.     SHLD    ADDR3
  2687.     LDA    INCR
  2688.     STA    IBUF-1
  2689.     RET
  2690. RECOVER    EQU    $
  2691. RCVR0    CALL    RVSUB
  2692.     ORA    A
  2693.     JNZ    RCVR9
  2694.     CALL    FREE
  2695.     LXI    H,MESS6
  2696.     JMP    REPLY
  2697. RCVR9    LXI    H,MESS5
  2698.     JMP    REPLY
  2699. MESS5    DB    'CANNOT    RECOVER'
  2700.     DB    13
  2701. MESS6    DB    'RECOVERY SUCCESSFUL'
  2702.     DB    13
  2703. RVSUB    LHLD    BOFP
  2704.     MOV    A,M
  2705.     CPI    01
  2706.     JNZ    RCVR5
  2707.     MVI    B,2
  2708. RCVR1    INX    H
  2709.     MOV    A,M
  2710.     CPI    13
  2711.     JZ    RCVR2
  2712.     INR    B
  2713.     MVI    A,139
  2714.     CMP    B
  2715.     JNZ    RCVR1
  2716.     MVI    A,1
  2717.     RET
  2718. RCVR2    LHLD    BOFP
  2719.     MOV    M,B
  2720.     JMP    RCVR0
  2721. RCVR5    SHLD    ADDR1
  2722. RCVR3    XCHG
  2723.     LHLD    ADDR1
  2724.     SHLD    ADDR2
  2725.     XCHG
  2726.     SHLD    ADDR1
  2727.     MOV    A,M
  2728.     CPI    01
  2729.     JZ    RCVRD
  2730.     MOV    B,A
  2731.     DCR    B
  2732. RCVR4    INX    H
  2733.     LDA    TOP+1
  2734.     CMP    H
  2735.     JNZ    RCVR7
  2736.     LDA    TOP
  2737.     CMP    L
  2738.     JZ    RCVR8
  2739. RCVR7    DCR    B
  2740.     JNZ    RCVR4
  2741.     MOV    A,M
  2742.     INX    H
  2743.     CPI    13
  2744.     JZ    RCVR3
  2745. RCVR8    LHLD    ADDR1
  2746.     MVI    A,01
  2747.     MOV    M,A
  2748. RCVRD    SHLD    EOFP
  2749.     LHLD    ADDR2
  2750.     INX    H
  2751.     MVI    B,4
  2752.     LXI    D,MAXL
  2753. RCVR6    MOV    A,M
  2754.     STAX    D
  2755.     INX    H
  2756.     INX    D
  2757.     DCR    B
  2758.     JNZ    RCVR6
  2759.     XRA    A
  2760.     RET
  2761. JUSTCMND    EQU    $
  2762. JUST    LXI    D,IBUF
  2763. JUST2    LDAX    D
  2764.     CPI    13
  2765.     JZ    JUST5
  2766.     CPI    ' '
  2767.     JZ    JUST3
  2768.     INX    D
  2769.     JMP    JUST2
  2770. JUST3    LDAX    D
  2771.     CPI    13
  2772.     JZ    JUST5
  2773.     CPI    'O'
  2774.     JZ    JUST4
  2775.     CPI    6FH
  2776.     JZ    JUST4
  2777.     INX    D
  2778.     JMP    JUST3
  2779. JUST4    INX    D
  2780.     LDAX    D
  2781.     CPI    'N'
  2782.     JZ    XJON
  2783.     CPI    6EH
  2784.     JZ    XJON
  2785.     CPI    'F'
  2786.     JZ    XJOFF2
  2787.     CPI    66H
  2788.     JZ    XJOFF2
  2789. JUST5    LDA    JSW
  2790. JUST6    ORA    A
  2791.     JZ    XJOFF
  2792.     LXI    H,MES12
  2793.     JMP    REPLY
  2794. XJOFF    LXI    H,MES11
  2795.     JMP    REPLY
  2796. XJON    MVI    A,1
  2797.     JMP    XJOFF2+1
  2798. XJOFF2    XRA    A
  2799.     STA    JSW
  2800.     JMP    JUST6
  2801. MES11    DB    'JUSTIFY OFF'
  2802.     DB    13
  2803. MES12    DB    'JUSTIFY ON'
  2804.     DB    13
  2805. NULLCMND    EQU    $
  2806. NULLS    CALL    SETUP
  2807.     CALL    GPARM
  2808.     STA    NULLC
  2809.     LXI    H,MESSD
  2810.     JMP    REPLY
  2811. MESSD    DB    'NULL COUNT ACCEPTED'
  2812.     DB    13
  2813. OFFSETCMND    EQU    $
  2814. SETOF    CALL    SETUP
  2815.     CALL    GPARM
  2816.     STA    OFFST
  2817.     LXI    H,MESSO
  2818.     JMP    REPLY
  2819. MESSO    DB    'OFFSET ACCEPTED'
  2820.     DB    13
  2821. MARGINCMND    EQU    $
  2822. MARGN    CALL    SETUP
  2823.     CALL    GPARM
  2824.     ORA    A
  2825.     JZ    ERR2
  2826.     DCR    A
  2827.     STA    OFFST
  2828.     CALL    GPARM
  2829.     ORA    A
  2830.     JZ    ERR2
  2831.     CPI    132
  2832.     JNC    ERR2
  2833.     MOV    B,A
  2834.     LDA    OFFST
  2835.     MOV    C,A
  2836.     MOV    A,B
  2837.     SUB    C
  2838.     JC    ERR2
  2839.     STA    LINES
  2840.     LXI    H,MESSM
  2841.     JMP    REPLY
  2842. MESSM    DB    'MARGINS SET'
  2843.     DB    13
  2844. PNUMCMND    EQU    $
  2845. SETPN    CALL    SETUP
  2846.     CALL    GPARM
  2847.     DCR    A
  2848.     STA    PNO
  2849.     LXI    H,MESSP
  2850.     JMP    REPLY
  2851. MESSP    DB    'PAGE NO ACCEPTED'
  2852.     DB    13
  2853. REPEATCMND    EQU    $
  2854. REPET    CALL    SETUP
  2855.     CALL    GPARM
  2856.     STA    RPEAT
  2857.     LXI    H,MESSE
  2858.     JMP    REPLY
  2859. MESSE    DB    'REPEAT COUNT ACCEPTED'
  2860.     DB    13
  2861. LINECMND    EQU    $
  2862.     CALL    SETUP
  2863.     CALL    GPARM
  2864.     STA    LINES
  2865.     LXI    H,MESSF
  2866.     JMP    REPLY
  2867. MESSF    DB    'CHAR/LINE CHANGED'
  2868.     DB    13
  2869. SPACECMND    EQU    $
  2870. SPACX    CALL    SETUP
  2871.     CALL    GPARM
  2872.     STA    SPACE
  2873.     LXI    H,MESSG
  2874.     JMP    REPLY
  2875. MESSG    DB    'SPACING CHANGED'
  2876.     DB    13
  2877. UNITCMND    EQU    $
  2878. UNITX    CALL    SETUP
  2879.     CALL    GPARM
  2880.     STA    UNIT
  2881.     LXI    H,MESS7
  2882.     JMP    REPLY
  2883. MESS7    DB    'PRINT UNIT CHANGED'
  2884.     DB    13
  2885. PAGECMND    EQU    $
  2886. PAGEX    CALL    SETUP
  2887.     CALL    GPARM
  2888.     ORA    A
  2889.     JZ    ERR2
  2890.     STA    PAGE1
  2891.     CALL    GPARM
  2892.     ORA    A
  2893.     JZ    OK1
  2894.     STA    PAGE2
  2895.     CALL    GPARM
  2896.     ORA    A
  2897.     JZ    OK1
  2898.     STA    PAGE3
  2899. OK1    LXI    H,MESS8
  2900.     JMP    REPLY
  2901. MESS8    DB    'PAGE PARMS CHANGED'
  2902.     DB    13
  2903. TITLECMND    EQU    $
  2904. TITLX    CALL    SETUP
  2905.     MVI    B,50
  2906.     LXI    D,TITLEX
  2907. TITL0    MOV    A,M
  2908.     CPI    ' '
  2909.     JNZ    TITL12
  2910.     INX    H
  2911.     JMP    TITL0
  2912. TITL12    MOV    A,M
  2913.     STAX    D
  2914.     CPI    13
  2915.     JZ    TITL2
  2916.     INX    H
  2917.     INX    D
  2918.     DCR    B
  2919.     JNZ    TITL12
  2920.     LXI    H,MESSA
  2921.     JMP    REPLY
  2922. MESSA    DB    'TITLE TOO LONG'
  2923.     DB    13
  2924. TITL2    LXI    H,MESS9
  2925.     JMP    REPLY
  2926. MESS9    DB    'TITLE ACCEPTED'
  2927.     DB    13
  2928. FINDCMND    CALL    CRLF
  2929.     CALL    SETUP
  2930.     XRA    A
  2931.     STA    CNTR
  2932. FIND1    MVI    A,13
  2933.     CMP    M
  2934.     JZ    ERR1
  2935.     MVI    A,' '
  2936.     CMP    M
  2937.     JNZ    FIND2
  2938.     INX    H
  2939.     JMP    FIND1
  2940. FIND2    SHLD    ADDR1
  2941.     LHLD    BOFP
  2942.     INX    H
  2943. FINDX    SHLD    ADDR2
  2944.     INX    H
  2945.     INX    H
  2946.     INX    H
  2947.     INX    H
  2948.     SHLD    ADDR3
  2949.     XCHG
  2950.     LHLD    ADDR1
  2951.     XCHG
  2952. FIND3    LDAX    D
  2953.     CPI    13
  2954.     JZ    FOUND
  2955.     CMP    M
  2956.     JNZ    NOTFD
  2957.     INX    H
  2958.     INX    D
  2959.     JMP    FIND3
  2960. NOTFD    LHLD    ADDR1
  2961.     XCHG
  2962.     LHLD    ADDR3
  2963.     INX    H
  2964.     SHLD    ADDR3
  2965.     MVI    A,13
  2966.     CMP    M
  2967.     JNZ    FIND3
  2968. EOFLN2    INX    H
  2969.     MVI    A,1
  2970.     CMP    M
  2971.     JZ    FINI
  2972.     CALL    CONTC
  2973.     JZ    EOR
  2974.     INX    H
  2975.     JMP    FINDX
  2976. FOUND    LHLD    ADDR2
  2977.     LDA    CNTR
  2978.     INR    A
  2979.     STA    CNTR
  2980. FIND5    MOV    A,M
  2981.     CPI    13
  2982.     JZ    FIND4
  2983.     MOV    B,A
  2984.     CALL    OUT8A
  2985.     INX    H
  2986.     JMP    FIND5
  2987. FIND4    CALL    OUTCR
  2988.     JMP    EOFLN2
  2989. FINI    LDA    CNTR
  2990.     ORA    A
  2991.     JNZ    EOR
  2992.     LXI    H,MESSC
  2993.     JMP    REPLY
  2994. MESSC    DB    'CHAR NOT FOUND'
  2995.     DB    13
  2996. OPENCMND    CALL    RANGE
  2997.     MVI    A,1
  2998. OPEN2    STA    TEMP
  2999.     LXI    H,0100H
  3000.     SHLD    INCR
  3001.     CALL    VCHK
  3002.     LXI    H,LINE1
  3003.     LXI    D,ABUF+4
  3004.     CALL    PACK
  3005.     LHLD    LINE1
  3006.     SHLD    TBUF
  3007.     LXI    H,INCR
  3008.     LDAX    D
  3009.     CPI    0
  3010.     CNZ    PACK
  3011.     LHLD    LINE1
  3012.     SHLD    TEMP2
  3013.     CALL    FIND
  3014. OPEN3    CALL    RNUMB
  3015.     MVI    C,4
  3016. OPEN4    INX    H
  3017.     DCR    C
  3018.     JNZ    OPEN4
  3019. OPEN5    INX    H
  3020.     MVI    A,0DH
  3021.     CMP    M
  3022.     JNZ    OPEN5
  3023.     INX    H
  3024.     MVI    A,1
  3025.     CMP    M
  3026.     JNZ    OPEN3
  3027.     LDA    TEMP
  3028.     ORA    A
  3029.     JZ    CFREE
  3030.     XRA    A
  3031.     JMP    OPEN2
  3032. CFREE    CALL    FREE
  3033.     JMP    EOR
  3034. RENUMBER    EQU    $
  3035. RENUM    MVI    A,1
  3036. RECAL    STA    TEMP
  3037.     LXI    H,0500H
  3038.     SHLD    INCR
  3039.     CALL    VCHK
  3040.     LXI    H,LINE1
  3041.     LXI    D,ABUF
  3042.     CALL    PACK
  3043.     LXI    H,INCR
  3044.     LDAX    D
  3045.     CPI    0
  3046.     CNZ    PACK
  3047.     LHLD    LINE1
  3048.     SHLD    TEMP2
  3049.     LHLD    BOFP
  3050. NXLIN    CALL    RNUMB
  3051.     MVI    C,4
  3052. NUM1    INX    H
  3053.     DCR    C
  3054.     JNZ    NUM1
  3055. ALPHA    INX    H
  3056.     MVI    A,0DH
  3057.     CMP    M
  3058.     JNZ    ALPHA
  3059.     INX    H
  3060.     MVI    A,1
  3061.     CMP    M
  3062.     JNZ    NXLIN
  3063.     LDA    TEMP
  3064.     ORA    A
  3065.     JZ    CFREE
  3066.     XRA    A
  3067.     JMP    RECAL
  3068. RNUMB    PUSH    B
  3069.     PUSH    D
  3070.     PUSH    H
  3071.     MVI    C,2
  3072.     LXI    H,NUMBR
  3073.     LXI    D,LINE1
  3074. CVRT    LDAX    D
  3075.     RRC
  3076.     RRC
  3077.     RRC
  3078.     RRC
  3079.     CALL    NGEN
  3080.     LDAX    D
  3081.     CALL    NGEN
  3082.     INX    D
  3083.     DCR    C
  3084.     JNZ    CVRT
  3085.     LDA    TEMP
  3086.     ORA    A
  3087.     JNZ    NOMOV
  3088.     POP    H
  3089.     PUSH    H
  3090.     MVI    C,4
  3091.     LXI    D,NUMBR-1
  3092. CVRT1    INX    D
  3093.     INX    H
  3094.     LDAX    D
  3095.     MOV    M,A
  3096.     DCR    C
  3097.     JNZ    CVRT1
  3098.     LXI    H,MAXL
  3099.     MVI    C,4
  3100.     LXI    D,NUMBR
  3101. CVRT2    LDAX    D
  3102.     MOV    M,A
  3103.     INX    D
  3104.     INX    H
  3105.     DCR    C
  3106.     JNZ    CVRT2
  3107. NOMOV    LXI    D,LINE1+1
  3108.     LXI    H,INCR+1
  3109.     XRA    A
  3110.     LDAX    D
  3111.     ADC    M
  3112.     DAA
  3113.     STAX    D
  3114.     DCX    D
  3115.     DCX    H
  3116.     LDAX    D
  3117.     ADC    M
  3118.     DAA
  3119.     STAX    D
  3120.     LDA    TEMP2
  3121.     MOV    B,A
  3122.     LDA    LINE1
  3123.     CMP    B
  3124.     JC    TOBIG
  3125.     LHLD    LINE1
  3126.     SHLD    TEMP2
  3127.     POP    H
  3128.     POP    D
  3129.     POP    B
  3130.     RET
  3131. TOBIG    LXI    H,ERRM7
  3132.     JMP    REPLY
  3133. ERRM7    DB    'RENUMBER VALUES TOO BIG'
  3134.     DB    13
  3135. NGEN    ANI    0FH
  3136.     ADI    '0'
  3137.     MOV    M,A
  3138.     INX    H
  3139.     RET
  3140. TABSCMND    EQU    $
  3141. SETAB    LXI    H,TABT
  3142.     MVI    B,10
  3143.     XRA    A
  3144. TAB64    MOV    M,A
  3145.     INX    H
  3146.     DCR    B
  3147.     JNZ    TAB64
  3148.     CALL    SETUP
  3149. TAB1    LXI    D,TABT
  3150.     MVI    B,10
  3151. TAB54    EQU    $
  3152.     CALL    GPARM
  3153.     STAX    D
  3154.     INX    D
  3155.     DCR    B
  3156.     JZ    TAB44
  3157.     MOV    A,M
  3158.     CPI    13
  3159.     JNZ    TAB54
  3160. TAB44    LXI    H,ERRM8
  3161.     JMP    REPLY
  3162. ERRM8    DB    'TABS SET'
  3163.     DB    13
  3164. PRINT    CALL    CRLF
  3165.     LHLD    BOFP
  3166.     MOV    A,M
  3167.     CPI    1
  3168.     JZ    STPIT
  3169.     MVI    A,1
  3170.     STA    LOMRG
  3171.     LDA    LINES
  3172.     STA    HIMRG
  3173.     STA    CCNT
  3174.     CALL    STADD
  3175.     LHLD    CALLD
  3176.     SHLD    CALLX+1
  3177. PRNT1    CALL    FIND
  3178.     XRA    A
  3179.     STA    JUSTY
  3180.     STA    ULFLG
  3181.     STA    HALT
  3182.     INX    H
  3183.     INX    H
  3184.     INX    H
  3185.     INX    H
  3186.     INX    H
  3187.     MVI    A,13
  3188.     STA    HL
  3189.     CALL    CMNDS
  3190.     LDA    PNO
  3191.     STA    TEMP+1
  3192. PRUN    XRA    A
  3193.     MOV    C,A
  3194.     STA    CNTR
  3195.     STA    TEMP
  3196.     LDA    TEMP+1
  3197.     INR    A
  3198.     STA    TEMP+1
  3199.     JZ    SKIP1
  3200.     CPI    250
  3201.     JC    MOVE1
  3202.     DCR    A
  3203.     STA    TEMP+1
  3204. MOVE1    CALL    MOVIT
  3205.     LDA    TITLEX
  3206.     ORA    A
  3207.     JZ    PPG1
  3208.     LXI    D,TITLEX
  3209.     CALL    PRNTR
  3210.     LDA    TEMP+1
  3211.     ORA    A
  3212.     JZ    NOTTL
  3213.     LDA    TEMP+1
  3214.     CPI    250
  3215.     JNC    NOTTL
  3216. PPG1    LDA    LINES
  3217.     SBI    8
  3218.     CMP    C
  3219.     JC    PPG2
  3220.     JZ    PPG2
  3221.     MVI    B,' '
  3222.     CALL    OUT8A
  3223.     INR    C
  3224.     JMP    PPG1
  3225. PPG2    LDA    TEMP+1
  3226.     CPI    250
  3227.     JNC    NOTTL
  3228.     PUSH    H
  3229.     LXI    H,PN2
  3230.     CALL    BIND
  3231.     POP    H
  3232.     LXI    D,PN2
  3233.     LDAX    D
  3234.     CPI    '0'
  3235.     JNZ    PPG3
  3236.     INX    D
  3237.     LDAX    D
  3238.     CPI    '0'
  3239.     JNZ    PPG3
  3240.     INX    D
  3241. PPG3    CALL    PRNTR
  3242.     JMP    NOTTL
  3243.     DB    0CDH
  3244. SKIP1    INR    A
  3245.     STA    TEMP+1
  3246. NOTTL    CALL    PCRLF
  3247.     LDA    CNTR
  3248.     INR    A
  3249.     STA    CNTR
  3250.     MOV    B,A
  3251.     LDA    PAGE3
  3252.     CMP    B
  3253.     JZ    PBODY
  3254.     JC    PBODY
  3255.     JMP    NOTTL
  3256. PBODY    CALL    FORMT
  3257.     DCX    H
  3258.     MOV    A,M
  3259.     INX    H
  3260.     CPI    '\'
  3261.     JZ    EJECT
  3262.     LDA    CALLC
  3263.     ORA    A
  3264.     JZ    PB1
  3265.     MOV    B,A
  3266.     MVI    C,133
  3267.     LXI    D,TBUF
  3268. CALL1    LDAX    D
  3269.     CMP    B
  3270.     JZ    CALL2
  3271.     CPI    13
  3272.     JZ    PB1
  3273.     INX    D
  3274.     DCR    C
  3275.     JZ    PB1
  3276.     JMP    CALL1
  3277.     DB    0CDH
  3278. CALL2    PUSH    H
  3279.     LXI    H,TBUF
  3280.     LXI    D,TBUF
  3281. CALLX    CALL    CALLT
  3282.     POP    H
  3283.     JMP    CALL4
  3284. PB1    LXI    D,TBUF
  3285. CALL4    CALL    MOVIT
  3286.     CALL    PRNTR
  3287. PB2    CALL    PCRLF
  3288.     LDA    CNTR
  3289.     INR    A
  3290.     STA    CNTR
  3291.     LDA    TEMP
  3292.     INR    A
  3293.     STA    TEMP
  3294.     MOV    B,A
  3295.     LDA    PAGE2
  3296.     CMP    B
  3297.     JZ    FULL
  3298.     LDA    CNTR
  3299.     MOV    B,A
  3300.     LDA    PAGE1
  3301.     CMP    B
  3302.     JZ    FULL
  3303.     LDA    SPACE
  3304.     ORA    A
  3305.     JZ    NOTFL
  3306.     MOV    C,A
  3307. BLKLN    DCR    C
  3308.     JZ    NOTFL
  3309.     CALL    PCRLF
  3310.     LDA    CNTR
  3311.     INR    A
  3312.     STA    CNTR
  3313.     LDA    TEMP
  3314.     INR    A
  3315.     STA    TEMP
  3316.     MOV    B,A
  3317.     LDA    PAGE2
  3318.     CMP    B
  3319.     JZ    FULL
  3320.     LDA    CNTR
  3321.     MOV    B,A
  3322.     LDA    PAGE1
  3323.     CMP    B
  3324.     JZ    FULL
  3325.     JMP    BLKLN
  3326. NOTFL    CALL    CONTC
  3327.     JZ    RTRN
  3328.     MVI    A,1
  3329.     CMP    M
  3330.     JZ    FULL
  3331.     JMP    PBODY
  3332. EJECT    MOV    A,M
  3333.     CPI    13
  3334.     JZ    FULL
  3335. TRY    CPI    '0'
  3336.     JC    BAD
  3337.     CPI    '9'+1
  3338.     JC    GOOD
  3339. BAD    CPI    13
  3340.     JZ    FULL
  3341.     INX    H
  3342.     MOV    A,M
  3343.     JMP    TRY
  3344. GOOD    CALL    NUMB
  3345. GOOD1    MOV    A,M
  3346.     CPI    13
  3347.     JZ    GOOD2
  3348.     INX    H
  3349.     JMP    GOOD1
  3350. GOOD2    INX    H
  3351.     INX    H
  3352.     INX    H
  3353.     INX    H
  3354.     INX    H
  3355.     INX    H
  3356.     MVI    A,3
  3357.     STA    HL
  3358.     CALL    CMNDS
  3359.     LDA    TEMP
  3360.     ADD    B
  3361.     MOV    B,A
  3362.     LDA    PAGE2
  3363.     CMP    B
  3364.     JNC    PBODY
  3365.     JZ    PBODY
  3366. FULL    LDA    CNTR
  3367.     MOV    B,A
  3368.     LDA    PAGE1
  3369.     CMP    B
  3370.     JZ    CKEOF
  3371.     CALL    PCRLF
  3372.     LDA    CNTR
  3373.     INR    A
  3374.     STA    CNTR
  3375.     JMP    FULL
  3376.     DB    0C3H
  3377. CKEOF    MVI    A,1
  3378.     CMP    M
  3379.     JNZ    HALT1
  3380.     LDA    INSRT
  3381.     ORA    A
  3382.     CNZ    FLUSH
  3383.     LDA    RPEAT
  3384.     ORA    A
  3385.     JZ    RTRN
  3386.     CPI    1
  3387.     JZ    RTRN
  3388.     DCR    A
  3389.     STA    RPEAT
  3390.     CALL    PAUSE
  3391.     JMP    PRNT1
  3392. RTRN    XRA    A
  3393.     STA    SPACE
  3394.     CALL    EOFBA
  3395. STPIT    XRA    A
  3396.     STA    UNIT
  3397.     JMP    EOR
  3398. HALT1    CALL    PAUSE
  3399.     JMP    PRUN
  3400. PCRLF    CALL    CONTC
  3401.     JZ    RTRN
  3402.     MVI    B,13
  3403.     CALL    OUT8A
  3404.     MVI    B,10
  3405.     CALL    OUT8A
  3406.     PUSH    D
  3407.     LDA    UNIT
  3408.     ORA    A
  3409.     JNZ    NOSTP
  3410.     LDA    SRCNT
  3411.     ORA    A
  3412.     JZ    NOSTP
  3413.     LDA    HALT
  3414.     INR    A
  3415.     STA    HALT
  3416.     MOV    D,A
  3417.     LDA    SRCNT
  3418.     CMP    D
  3419.     JC    PT3
  3420.     JNZ    NOSTP
  3421. PT3    LXI    D,M1
  3422. PT1    LDAX    D
  3423.     CPI    13
  3424.     JZ    PT2
  3425.     MOV    B,A
  3426.     CALL    OUT8A
  3427.     INX    D
  3428.     JMP    PT1
  3429. PT2    CALL    IN8
  3430.     CPI    03
  3431.     JZ    STPIT
  3432.     CPI    13
  3433.     JNZ    PT2
  3434.     XRA    A
  3435.     STA    HALT
  3436.     MVI    B,13
  3437.     CALL    OUT8A
  3438.     MVI    B,10
  3439.     CALL    OUT8A
  3440. NOSTP    LDA    NULLC
  3441.     ORA    A
  3442.     JZ    PCRL2
  3443.     MOV    E,A
  3444. PCRL1    MVI    B,0
  3445.     CALL    OUT8A
  3446.     DCR    E
  3447.     JNZ    PCRL1
  3448. PCRL2    POP    D
  3449.     RET
  3450. M1    DB    'PRESS RETURN TO CONTINUE'
  3451.     DB    13
  3452. FORMT    XRA    A
  3453.     STA    NCHR
  3454.     STA    SAVE
  3455.     STA    TBCNT
  3456. FORM1    XCHG
  3457.     LXI    H,TABT
  3458.     SHLD    TABAD
  3459.     LHLD    TADD
  3460.     XCHG
  3461. FORM2    MOV    A,M
  3462.     INX    H
  3463.     CPI    '>'
  3464.     JZ    MARG
  3465.     CPI    '['    ;VT
  3466.     JZ    JON
  3467.     CPI    ']'    ;SHIFT M
  3468.     JZ    JOFF
  3469.     CPI    '<'
  3470.     JZ    CON
  3471.     CPI    '^'
  3472.     JZ    INSR1
  3473.     CPI    13
  3474.     JZ    NEWLN
  3475.     CPI    '\'
  3476.     JZ    EOFPT
  3477.     CPI    09
  3478.     JZ    TABEX
  3479.     CPI    7EH    ;TILDE-PAUSE
  3480.     JZ    YOUIN
  3481.     CPI    '.'
  3482.     JZ    EOFS
  3483.     CPI    '&'
  3484.     JNZ    FORM3
  3485.     CALL    SETUL
  3486.     DCX    D
  3487.     LDAX    D
  3488.     CPI    ' '
  3489.     JNZ    FL1
  3490.     MOV    A,M
  3491.     CPI    ' '
  3492.     JNZ    FL1
  3493.     JMP    FORM4
  3494. FL1    INX    D
  3495.     JMP    FORM2
  3496. FORM4    INX    D
  3497.     MVI    A,'&'
  3498. FORM3    STAX    D
  3499.     LDA    ULFLG
  3500.     ORA    A
  3501.     JZ    FORM5
  3502.     LDAX    D
  3503.     CPI    ' '
  3504.     JZ    FORM5
  3505.     ORI    80H
  3506.     STAX    D
  3507. FORM5    INX    D
  3508.     LDA    NCHR
  3509.     INR    A
  3510.     STA    NCHR
  3511.     MOV    B,A
  3512.     CALL    SAVER
  3513.     LDA    JUSTY
  3514.     ORA    A
  3515.     JZ    FORM2
  3516.     LDA    CCNT
  3517.     CMP    B
  3518.     JZ    FILLN
  3519.     JMP    FORM2
  3520. EOFS    MOV    A,M
  3521.     CPI    13
  3522.     JNZ    NEOFS
  3523.     MVI    A,'.'
  3524.     STAX    D
  3525.     INX    D
  3526.     LDA    NCHR
  3527.     INR    A
  3528.     STA    NCHR
  3529.     MOV    B,A
  3530.     LDA    JUSTY
  3531.     ORA    A
  3532.     JZ    EOFS1
  3533.     LDA    CCNT
  3534.     CMP    B
  3535.     JZ    FILLN
  3536. EOFS1    MVI    A,' '
  3537.     JMP    FORM3
  3538. NEOFS    MVI    A,'.'
  3539.     JMP    FORM3
  3540. SETUL    MOV    A,M
  3541.     CPI    13
  3542.     JZ    OFFUL
  3543.     CPI    ' '
  3544.     JNZ    ONUL
  3545. OFFUL    XRA    A
  3546.     JMP    STAUL
  3547. ONUL    MVI    A,1
  3548. STAUL    STA    ULFLG
  3549.     RET
  3550. MARG    MOV    A,M
  3551.     CPI    13
  3552.     JNZ    SETMG
  3553.     MVI    A,1
  3554.     STA    LOMRG
  3555.     LDA    LINES
  3556.     STA    HIMRG
  3557.     STA    CCNT
  3558.     CALL    STADD
  3559.     INX    H
  3560.     JMP    NXTLN
  3561.     DB    3AH
  3562. ;SET    MARGINS
  3563. SETMG    EQU    $
  3564.     CALL    NUMB
  3565.     MOV    A,B
  3566.     ORA    A
  3567.     JZ    MAR1
  3568.     STA    LOMRG
  3569.     LDA    LINES
  3570.     CMP    B
  3571.     JC    ERRMG
  3572.     MOV    A,M
  3573.     CPI    13
  3574.     JZ    MAR2
  3575.     INX    H
  3576.     JMP    MAR3
  3577. MAR1    INX    H
  3578.     MVI    A,1
  3579.     STA    LOMRG
  3580.     JMP    MAR3
  3581. MAR2    LDA    LINES
  3582.     JMP    MAR5
  3583. MAR6    LDA    LINES
  3584.     JMP    MAR5
  3585. MAR3    CALL    NUMB
  3586. MAR4    MOV    A,B
  3587.     ORA    A
  3588.     JZ    MAR6
  3589. MAR5    STA    HIMRG
  3590.     LDA    LOMRG
  3591.     MOV    B,A
  3592.     LDA    HIMRG
  3593.     SUB    B
  3594.     JC    ERRMG
  3595.     INR    A
  3596.     STA    CCNT
  3597.     LXI    D,TBUF
  3598.     MVI    B,133
  3599.     MVI    A,' '
  3600. CLR    STAX    D
  3601.     INX    D
  3602.     DCR    B
  3603.     JNZ    CLR
  3604.     CALL    STADD
  3605.     INX    H
  3606. NXTLN    MOV    A,M
  3607.     CPI    1
  3608.     JZ    EOF
  3609.     INX    H
  3610.     INX    H
  3611.     INX    H
  3612.     INX    H
  3613.     INX    H
  3614.     MVI    A,3
  3615.     STA    HL
  3616.     CALL    CMNDS
  3617.     JMP    FORM2
  3618. ERRMG    LXI    H,ERRM4
  3619.     JMP    REPLY
  3620. ERRM4    DB    'MARGIN    ERROR'
  3621.     DB    13
  3622. PATCH    DB    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  3623. NUMB    XRA    A
  3624.     MOV    B,A
  3625. NUMB2    MOV    A,M
  3626.     CPI    13
  3627.     RZ
  3628.     CPI    ','
  3629.     RZ
  3630.     CPI    ' '
  3631.     RZ
  3632.     CPI    '0'
  3633.     JC    ERR3
  3634.     CPI    '9'+1
  3635.     JNC    ERR3
  3636.     ANI    0FH
  3637.     MOV    C,A
  3638.     MOV    A,B
  3639.     RLC
  3640.     RLC
  3641.     RLC
  3642.     ADD    B
  3643.     ADD    B
  3644.     ADD    C
  3645.     MOV    B,A
  3646.     INX    H
  3647.     JMP    NUMB2
  3648. STADD        EQU    $
  3649.     LXI    D,TBUF
  3650.     LDA    LOMRG
  3651.     DCR    A
  3652.     ADD    E
  3653.     MOV    E,A
  3654.     JNC    STAD1
  3655.     MOV    A,D
  3656.     INR    A
  3657.     MOV    D,A
  3658. STAD1    XCHG
  3659.     SHLD    TADD
  3660.     XCHG
  3661.     RET
  3662.     DB    0CDH
  3663. ;TAB    EXPANSION
  3664. TABEX    PUSH    H
  3665.     LHLD    TABAD
  3666. TABX1    MOV    A,M
  3667.     ORA    A
  3668.     JZ    TAB99
  3669.     LDA    TBCNT
  3670.     CPI    10
  3671.     JZ    TAB99
  3672.     INR    A
  3673.     STA    TBCNT
  3674. TABX3    LDA    NCHR
  3675.     MOV    B,A
  3676.     LDA    LOMRG
  3677.     ADD    B
  3678.     MOV    C,A    ;TRUE POSITION
  3679.     MOV    A,M    ;TAB POSITION
  3680.     CMP    C
  3681.     JZ    TAB98
  3682.     JNC    TABX2
  3683.     INX    H
  3684.     JMP    TABX1
  3685. TABX2    MVI    A,' '
  3686.     STAX    D
  3687.     INX    D
  3688.     LDA    NCHR
  3689.     INR    A
  3690.     STA    NCHR
  3691.     MOV    B,A
  3692.     LDA    CCNT
  3693.     CMP    B
  3694.     JZ    TAB98
  3695.     JC    TAB98
  3696.     JMP    TABX3
  3697.     DB    0CAH
  3698. TAB98    INX    H
  3699. TAB99    SHLD    TABAD
  3700.     POP    H
  3701.     JMP    FORM2
  3702. INSR1    LDA    INSRT
  3703.     ORA    A
  3704.     JNZ    INSR2
  3705.     MVI    A,'^'
  3706.     JMP    FORM3
  3707. INSR2    CALL    MOVBA
  3708.     JMP    FORM2
  3709.     DB    3AH
  3710. ;    LINE    FILL
  3711. SAVER    MOV    A,M
  3712.     CPI    ' '
  3713.     RNZ
  3714.     SHLD    ADDR1
  3715.     XCHG
  3716.     SHLD    ADDR2
  3717.     XCHG
  3718.     LDA    NCHR
  3719.     STA    ADDR4
  3720.     RET
  3721. FILLN    EQU    $
  3722.     MVI    A,13
  3723.     STAX    D
  3724. FILL2    LHLD    ADDR2
  3725.     XCHG
  3726.     LDA    ADDR4
  3727.     STA    NCHR
  3728. BKUP    DCX    D
  3729.     LDA    NCHR
  3730.     DCR    A
  3731.     STA    NCHR
  3732.     LDAX    D
  3733.     CPI    ' '
  3734.     JZ    BKUP
  3735. NOBU    LDA    JUSTY
  3736.     ORA    A
  3737.     CNZ    JSTFY
  3738.     LHLD    ADDR1
  3739. BLKCK    MOV    A,M
  3740.     INX    H
  3741.     CPI    ' '
  3742.     JZ    BLKCK
  3743.     INX    D
  3744.     DCX    H
  3745.     JMP    EOFPT
  3746. ;JUSTIFICATION    ROUTINE
  3747. JSTFY    LDA    SAVE
  3748.     ORA    A
  3749.     RNZ
  3750.     LDA    JSW
  3751.     ORA    A
  3752.     RZ
  3753.     PUSH    H
  3754.     PUSH    B
  3755.     LDA    NCHR
  3756.     INR    A
  3757.     STA    NCHR
  3758.     MOV    B,A
  3759.     LDA    CCNT
  3760.     CMP    B
  3761.     JZ    JEND
  3762.     JC    JEND
  3763.     MVI    A,13
  3764.     INX    D
  3765.     STAX    D
  3766.     XCHG
  3767.     LHLD    TADD
  3768.     XCHG
  3769. INDT1    LDAX    D
  3770.     CPI    ' '
  3771.     JNZ    BLTWO
  3772.     INX    D
  3773.     JMP    INDT1
  3774. ;ADD    1    BLANK    WHERE 2 OR MORE OCCUR
  3775. BLTWO    LDAX    D
  3776.     CPI    13
  3777.     JZ    ODD
  3778.     CPI    ' '
  3779.     JNZ    ONLY1
  3780.     INX    D
  3781.     LDAX    D
  3782.     CPI    13
  3783.     JZ    ODD
  3784.     CPI    ' '
  3785.     JNZ    ONLY1
  3786.     CALL    BLINS
  3787.     LDA    NCHR
  3788.     MOV    C,A
  3789.     LDA    CCNT
  3790.     CMP    C
  3791.     JZ    JEND
  3792.     JC    JEND
  3793. ONLY1    INX    D
  3794.     JMP    BLTWO
  3795.     DB    0CDH
  3796. ;EXTRA    BLANK    EVERY    OTHER ONE
  3797. ODD    XCHG
  3798.     LHLD    TADD
  3799.     XCHG
  3800.     XRA    A
  3801.     STA    INSP
  3802. ODD2    LDAX    D
  3803.     CPI    ' '
  3804.     JNZ    ODD3
  3805.     INX    D
  3806.     JMP    ODD2
  3807. ODD3    LDAX    D
  3808.     CPI    13
  3809.     JZ    REBLK
  3810.     CPI    ' '
  3811.     JNZ    ODD4
  3812.     LDA    INSP
  3813.     ORA    A
  3814.     JZ    ODD5
  3815.     XRA    A
  3816.     STA    INSP
  3817.     CALL    BLINS
  3818.     LDA    NCHR
  3819.     MOV    C,A
  3820.     LDA    CCNT
  3821.     CMP    C
  3822.     JZ    JEND
  3823.     JC    JEND
  3824. ODD4    INX    D
  3825.     JMP    ODD3
  3826. ODD5    MVI    A,1
  3827.     STA    INSP
  3828.     JMP    ODD4
  3829.     DB    0CAH
  3830. ;ADD    BLANK    TO    EVEN SPACES
  3831. REBLK    XCHG
  3832.     LHLD    TADD
  3833.     XCHG
  3834. INDT2    LDAX    D
  3835.     CPI    ' '
  3836.     JNZ    BLONE
  3837.     INX    D
  3838.     JMP    INDT2
  3839. BLONE    LDAX    D
  3840.     CPI    13
  3841.     JZ    REBLK
  3842.     CPI    ' '
  3843.     JNZ    NOBLK
  3844.     CALL    BLINS
  3845.     LDA    NCHR
  3846.     MOV    C,A
  3847.     LDA    CCNT
  3848.     CMP    C
  3849.     JZ    JEND
  3850.     JC    JEND
  3851. NOBLK    INX    D
  3852.     JMP    BLONE
  3853. JEND    POP    B
  3854.     POP    H
  3855.     XCHG
  3856.     LHLD    TADD
  3857.     XCHG
  3858. JEND2    LDAX    D
  3859.     CPI    13
  3860.     RZ
  3861.     INX    D
  3862.     JMP    JEND2
  3863. ;    BLANK    INSERT
  3864. BLINS    PUSH    H
  3865.     PUSH    B
  3866.     LXI    B,TBUF+130
  3867.     LXI    H,TBUF+131
  3868. BLIN1    LDAX    B
  3869.     MOV    M,A
  3870.     MOV    A,D
  3871.     CMP    B
  3872.     JNZ    BLIN3
  3873.     MOV    A,E
  3874.     CMP    C
  3875.     JZ    BLIN2
  3876. BLIN3    DCX    B
  3877.     DCX    H
  3878.     JMP    BLIN1
  3879. BLIN2    MVI    A,' '
  3880.     STAX    D
  3881.     LDA    NCHR
  3882.     INR    A
  3883.     STA    NCHR
  3884. BLIN4    INX    D
  3885.     LDAX    D
  3886.     CPI    ' '
  3887.     JZ    BLIN4
  3888.     POP    B
  3889.     POP    H
  3890.     RET
  3891. YOUIN    CALL    IN8
  3892.     CPI    03
  3893.     JZ    STPIT
  3894. X5F3    CPI    08
  3895.     JZ    BACKYOU
  3896.     CPI    13
  3897.     JZ    FORM2
  3898.     MOV    B,A
  3899.     STAX    D
  3900.     INX    D
  3901.     LDA    UNIT
  3902.     ORA    A
  3903.     JZ    SKIP2
  3904.     CALL    OUT8
  3905. SKIP2    LDA    NCHR
  3906.     INR    A
  3907.     STA    NCHR
  3908.     MOV    B,A
  3909.     LDA    CCNT
  3910.     CMP    B
  3911.     JZ    FORM2
  3912.     JC    FORM2
  3913.     JMP    YOUIN
  3914. BACKYOU LDA    NCHR
  3915.     ORA    A
  3916.     JZ    YOUIN
  3917.     DCR    A
  3918.     STA    NCHR
  3919.     DCX    D
  3920.     LDA    X5F3+1
  3921.     MOV    B,A
  3922.     LDA    UNIT
  3923.     ORA    A
  3924.     JZ    YOUIN
  3925.     CALL    OUT8
  3926.     JMP    YOUIN
  3927. JON    MVI    C,1
  3928.     JMP    JOFF+1
  3929. JOFF    XRA    A
  3930.     STA    JUSTY
  3931.     JMP    FORM2
  3932. NEWLN    MOV    A,M
  3933.     CPI    1
  3934.     JZ    EOFPT
  3935.     INX    H
  3936.     INX    H
  3937.     INX    H
  3938.     INX    H
  3939.     INX    H
  3940.     LDA    JUSTY
  3941.     ORA    A
  3942.     JZ    EOFPT
  3943.     SHLD    ADDR1
  3944.     XCHG
  3945.     SHLD    ADDR2
  3946.     XCHG
  3947.     LDA    NCHR
  3948.     STA    ADDR4
  3949.     MVI    A,' '
  3950.     JMP    FORM3
  3951. EOFPT    MVI    A,13
  3952.     STAX    D
  3953.     MVI    A,3
  3954.     STA    HL
  3955.     CALL    CMNDS
  3956.     RET
  3957. PRNTR    PUSH    D
  3958.     PUSH    H
  3959.     XCHG
  3960.     SHLD    HL
  3961.     XRA    A
  3962.     MOV    C,A
  3963.     MOV    D,A
  3964.     LDA    BSCR
  3965.     CPI    'B'
  3966.     JZ    PRNT7
  3967. PRNT0    MOV    A,M
  3968.     CPI    13
  3969.     JZ    PRNT4
  3970.     ANI    80H
  3971.     JZ    PRNT2
  3972.     INR    D
  3973.     MOV    A,M
  3974.     ANI    7FH
  3975.     JMP    PRNT3
  3976. PRNT2    MOV    A,M
  3977. PRNT3    MOV    B,A
  3978.     CALL    OUT8A
  3979.     INR    C
  3980.     INX    H
  3981.     JMP    PRNT0
  3982. PRNT4    MOV    A,D
  3983.     ORA    A
  3984.     JZ    PRNT9
  3985.     MVI    B,0DH
  3986.     CALL    OUT8A
  3987.     PUSH    B
  3988.     CALL    MOVIT
  3989.     POP    B
  3990.     LHLD    HL
  3991. PRNT5    MOV    A,M
  3992.     CPI    13
  3993.     JZ    PRNT9
  3994.     ANI    80H
  3995.     JZ    PRNT6
  3996.     MVI    B,'_'
  3997.     CALL    OUT8A
  3998.     INX    H
  3999.     DCR    D
  4000.     JZ    PRNT9
  4001.     JMP    PRNT5
  4002. PRNT6    MVI    B,' '
  4003.     CALL    OUT8A
  4004.     INX    H
  4005.     JMP    PRNT5
  4006. PRNT7    MOV    A,M
  4007.     CPI    13
  4008.     JZ    PRNT9
  4009.     ANI    80H
  4010.     JNZ    PRNT8
  4011.     MOV    A,M
  4012.     MOV    B,A
  4013. PRNTA    CALL    OUT8A
  4014.     INR    C
  4015.     INX    H
  4016.     JMP    PRNT7
  4017. PRNT8    MOV    A,M
  4018.     ANI    7FH
  4019.     MOV    B,A
  4020.     CALL    OUT8A
  4021.     MVI    B,08
  4022.     CALL    OUT8A
  4023.     MVI    B,5FH
  4024.     JMP    PRNTA
  4025. PRNT9    POP    H
  4026.     POP    D
  4027.     RET
  4028. CKJ    INX    H
  4029.     MVI    A,1
  4030.     STA    SAVE
  4031.     CALL    FORM1
  4032.     JMP    PB1
  4033. ;CENTER    TITLE
  4034.     DB    0CDH
  4035. CON    PUSH    B
  4036.     XRA    A
  4037.     MOV    C,A
  4038.     LXI    D,TBUF
  4039. CPY4    MOV    A,M
  4040.     INX    H
  4041.     CPI    '&'
  4042.     JNZ    CEN2
  4043.     CALL    SETUL
  4044.     DCX    D
  4045.     LDAX    D
  4046.     CPI    ' '
  4047.     JNZ    CEN4
  4048.     MOV    A,M
  4049.     CPI    ' '
  4050.     JNZ    CEN4
  4051.     JMP    CEN1
  4052. CEN4    INX    D
  4053.     JMP    CPY4
  4054. CEN1    INX    D
  4055.     MVI    A,'&'
  4056. CEN2    CPI    13
  4057.     JZ    CENT
  4058.     STAX    D
  4059.     LDA    ULFLG
  4060.     ORA    A
  4061.     JZ    CEN3
  4062.     LDAX    D
  4063.     CPI    ' '
  4064.     JZ    CEN3
  4065.     ORI    80H
  4066.     STAX    D
  4067. CEN3    INX    D
  4068.     INR    C
  4069.     MOV    B,C
  4070.     LDA    LINES
  4071.     CMP    B
  4072.     JNC    CPY4
  4073.     JZ    DON2
  4074.     POP    B
  4075.     LXI    H,ERRM3
  4076.     JMP    REPLY
  4077. ERRM3    DB    'LINE TOO SMALL TO CENTER'
  4078.     DB    13
  4079.     DB    03AH
  4080. CENT    MVI    A,13
  4081.     STAX    D
  4082.     XCHG
  4083.     SHLD    ADDR1
  4084.     XCHG
  4085.     INR    C
  4086.     MOV    A,C
  4087.     STA    NCHR
  4088.     MOV    B,A
  4089.     LDA    LINES
  4090.     SUB    B
  4091.     RRC
  4092.     ANI    07FH
  4093.     INR    A
  4094.     MOV    B,A
  4095.     PUSH    H
  4096. LOOP4    LHLD    ADDR1
  4097.     XCHG
  4098.     LHLD    ADDR1
  4099.     INX    H
  4100.     SHLD    ADDR1
  4101.     LDA    NCHR
  4102.     MOV    C,A
  4103. LOOP3    LDAX    D
  4104.     MOV    M,A
  4105.     MVI    A,' '
  4106.     STAX    D
  4107.     DCX    H
  4108.     DCX    D
  4109.     DCR    C
  4110.     JNZ    LOOP3
  4111.     DCR    B
  4112.     JNZ    LOOP4
  4113.     LHLD    ADDR1
  4114.     XCHG
  4115.     POP    H
  4116. DON2    POP    B
  4117.     JMP    NEWLN
  4118. ;PAGE    NO    TO    DBII
  4119. BIND    MVI    B,100
  4120.     CALL    BID1
  4121.     MVI    B,10
  4122.     CALL    BID1
  4123.     ADI    '0'
  4124.     MOV    M,A
  4125.     RET
  4126. BID1    MVI    M,'0'-1
  4127.     INR    M
  4128.     SUB    B
  4129.     JNC    BID1+2
  4130.     ADD    B
  4131.     INX    H
  4132.     RET
  4133. PN2    DB    '000'
  4134.     DB    13
  4135. PAUSE    LDA    STOP
  4136.     ORA    A
  4137.     RZ
  4138. PAZ    CALL    IN8
  4139.     CPI    13
  4140.     JNZ    PAZ
  4141.     RET
  4142. MOVIT    LDA    OFFST
  4143.     ORA    A
  4144.     RZ
  4145.     MOV    C,A
  4146.     MVI    B,' '
  4147. SHIFT5    CALL    OUT8A
  4148.     DCR    C
  4149.     JNZ    SHIFT5
  4150.     RET
  4151. CMNDS    PUSH    D
  4152. CMND2    MOV    A,M
  4153.     CPI    '#'
  4154.     JNZ    RETRN
  4155.     SHLD    ADDR1
  4156. COMM    LXI    D,IBUF
  4157.     INX    H
  4158. UPPER4    MOV    A,M
  4159.     STAX    D
  4160.     INX    D
  4161.     INX    H
  4162.     CPI    13
  4163.     JZ    SCAN
  4164.     JMP    UPPER4
  4165. SCAN    SHLD    DE
  4166.     MVI    B,4
  4167.     LXI    D,IBUF
  4168. SCAN2    LDAX    D
  4169.     CPI    60H
  4170.     JC    SCAN3
  4171.     SBI    20H
  4172.     STAX    D
  4173. SCAN3    INX    D
  4174.     DCR    B
  4175.     JNZ    SCAN2
  4176.     LXI    D,CTAB2
  4177.     LDA    HL
  4178.     MOV    B,A
  4179.     MVI    A,4
  4180.     STA    NCHR
  4181.     CALL    COMS
  4182.     JNZ    ERR1
  4183.     PCHL
  4184. NOGO    LHLD    ADDR1
  4185. RETRN    POP    D
  4186.     RET
  4187. CTAB2    DB    'SPAC'
  4188.     DW    SPAC2
  4189.     DB    'COMM'
  4190.     DW    COMNT
  4191.     DB    'CHAI'
  4192.     DW    CHAIN
  4193.     DB    'NULL'
  4194.     DW    NULL1
  4195.     DB    'TITL'
  4196.     DW    TITL1
  4197.     DB    'LINE'
  4198.     DW    LINE2
  4199.     DB    'UNIT'
  4200.     DW    UNIT2
  4201.     DB    'PAGE'
  4202.     DW    PAGEZ
  4203.     DB    'JUST'
  4204.     DW    JUSTZ
  4205.     DB    'TABS'
  4206.     DW    TABSZ
  4207.     DB    'OFFS'
  4208.     DW    OFF2
  4209.     DB    'PNUM'
  4210.     DW    PNUM2
  4211.     DB    'MARG'
  4212.     DW    MARG1
  4213. SETUP    LXI    H,IBUF
  4214. SET1    INX    H
  4215.     MOV    A,M
  4216.     CPI    ' '
  4217.     JZ    SET2
  4218.     CPI    13
  4219.     RZ
  4220.     JMP    SET1
  4221. SET2    INX    H
  4222.     MOV    A,M
  4223.     CPI    13
  4224.     RZ
  4225.     CPI    ' '
  4226.     JZ    SET2
  4227.     RET
  4228. MARG1    CALL    SETUP
  4229.     CALL    NUMB
  4230.     MOV    A,B
  4231.     ORA    A
  4232.     JZ    ERR2
  4233.     DCR    A
  4234.     STA    OFFST
  4235.     INX    H
  4236.     CALL    NUMB
  4237.     MOV    A,B
  4238.     ORA    A
  4239.     JZ    ERR2
  4240.     MOV    C,A
  4241.     LDA    OFFST
  4242.     MOV    B,A
  4243.     MOV    A,C
  4244.     SUB    B
  4245.     JC    ERR2
  4246.     STA    LINES
  4247.     STA    HIMRG
  4248.     STA    CCNT
  4249.     JMP    SKIP3
  4250. COMNT    CALL    SETUP
  4251.     JMP    SKIP3
  4252. NULL1    CALL    SETUP
  4253.     CALL    NUMB
  4254.     MOV    A,B
  4255.     STA    NULLC
  4256.     JMP    SKIP3
  4257. LINE2    CALL    SETUP
  4258.     CALL    NUMB
  4259.     MOV    A,B
  4260.     STA    LINES
  4261.     STA    HIMRG
  4262.     STA    CCNT
  4263.     JMP    SKIP3
  4264. SPAC2    CALL    SETUP
  4265.     CALL    NUMB
  4266.     MOV    A,B
  4267.     STA    SPACE
  4268.     JMP    SKIP3
  4269. UNIT2    CALL    SETUP
  4270.     CALL    NUMB
  4271.     MOV    A,B
  4272.     STA    UNIT
  4273.     JMP    SKIP3
  4274. OFF2    CALL    SETUP
  4275.     CALL    NUMB
  4276.     MOV    A,B
  4277.     STA    OFFST
  4278.     JMP    SKIP3
  4279. PNUM2    CALL    SETUP
  4280.     CALL    NUMB
  4281.     MOV    A,B
  4282.     DCR    A
  4283.     STA    PNO
  4284.     JMP    SKIP3
  4285. JUSTZ    CALL    SETUP
  4286.     CALL    ONOFF
  4287.     MOV    A,B
  4288.     STA    JSW
  4289.     JMP    SKIP3
  4290. PAGEZ    CALL    SETUP
  4291.     CALL    NUMB
  4292.     MOV    A,B
  4293.     STA    PAGE1
  4294.     MOV    A,M
  4295.     CPI    13
  4296.     JZ    SKIP3
  4297.     INX    H
  4298.     CALL    NUMB
  4299.     MOV    A,B
  4300.     STA    PAGE2
  4301.     MOV    A,M
  4302.     CPI    13
  4303.     JZ    SKIP3
  4304.     INX    H
  4305.     CALL    NUMB
  4306.     MOV    A,B
  4307.     STA    PAGE3
  4308.     JMP    SKIP3
  4309. TITL1    CALL    SETUP
  4310.     LXI    D,TITLEX
  4311.     MVI    B,50
  4312. TITL3    MOV    A,M
  4313.     STAX    D
  4314.     CPI    13
  4315.     JZ    SKIP3
  4316.     INX    H
  4317.     INX    D
  4318.     DCR    B
  4319.     JNZ    TITL3
  4320.     LXI    H,MSG1X4
  4321.     JMP    REPLY
  4322. MSG1X4    DB    'TITLE TOO LONG'
  4323.     DB    13
  4324. CHAIN    CALL    LOADR
  4325.     LHLD    BOFP
  4326.     LXI    SP,AREA+50
  4327.     INX    H
  4328.     INX    H
  4329.     INX    H
  4330.     INX    H
  4331.     INX    H
  4332.     LDA    TEMP+1
  4333.     STA    PNO
  4334.     MVI    A,13
  4335.     STA    HL
  4336.     CALL    CMNDS
  4337.     LDA    PNO
  4338.     STA    TEMP+1
  4339.     JMP    PB1
  4340. TABSZ    CALL    SETUP
  4341.     LXI    D,TABT
  4342.     MVI    B,10
  4343.     XRA    A
  4344. TAB6    STAX    D
  4345.     INX    D
  4346.     DCR    B
  4347.     JNZ    TAB6
  4348.     LXI    D,TABT
  4349.     MVI    B,10
  4350. TAB5    PUSH    B
  4351.     CALL    NUMB
  4352.     MOV    A,B
  4353.     STAX    D
  4354.     INX    D
  4355.     POP    B
  4356.     DCR    B
  4357.     JZ    SKIP3
  4358.     MOV    A,M
  4359.     CPI    13
  4360.     JZ    SKIP3
  4361.     INX    H
  4362.     JMP    TAB5
  4363.     DB    0CDH
  4364. ONOFF    XRA    A
  4365.     MOV    B,A
  4366.     MOV    A,M
  4367.     CPI    13
  4368.     RZ
  4369.     CPI    'O'
  4370.     JZ    ON2
  4371.     CPI    6FH
  4372.     RNZ
  4373. ON2    INX    H
  4374.     MOV    A,M
  4375.     CPI    'N'
  4376.     JZ    ON3
  4377.     CPI    6EH
  4378.     RNZ
  4379.     MOV    A,M
  4380.     CPI    1
  4381.     JZ    EOFPT
  4382. ON3    MVI    B,1
  4383.     RET
  4384. SKIP3    LHLD    DE
  4385.     INX    H
  4386.     MOV    A,M
  4387.     CPI    1
  4388.     JZ    EOF
  4389.     INX    H
  4390.     INX    H
  4391.     INX    H
  4392.     INX    H
  4393.     JMP    CMND2
  4394. RAM    EQU    $
  4395. AREA    DS    55
  4396. BOFP    DS    2
  4397. EOFP    DS    2
  4398. TOP    DS    2
  4399. MPTY    DS    2
  4400. MAXL    DS    4
  4401. INSP    DS    2
  4402. HCON    DS    2
  4403. FBUF    DS    5
  4404. NULLC    DS    1
  4405. SPACE    DS    1
  4406. LINES    DS    1
  4407. PAGE1    DS    1
  4408. PAGE2    DS    1
  4409. PAGE3    DS    1
  4410. FILE    DS    9
  4411. DISK    DS    1
  4412. LINEA    DS    2
  4413. SAVE    DS    1
  4414. NUMBR    DS    4
  4415. INCR    DS    2
  4416. RDWRT    EQU    INCR
  4417. CNTR    DS    1
  4418. RPEAT    DS    1
  4419. BLKS    DS    1
  4420. BLOCK    DS    1
  4421. UNIT    DS    1
  4422. AUTO    DS    1
  4423. JUSTY    DS    1
  4424. JSW    DS    1
  4425. INSRT    DS    1
  4426. CALLC    DS    1
  4427. CALLD    DS    2
  4428. ABUF    DS    12
  4429. BBUF    DS    4
  4430. NCHR    DS    1
  4431. PNTR    DS    2
  4432. LINE1    DS    2
  4433. TEMP    DS    2
  4434. ADDR1    DS    2
  4435. ADDR2    DS    2
  4436. ADDR3    DS    2
  4437. ADDR4    DS    2
  4438. TEMP2    DS    2
  4439. TEMP3    DS    2
  4440. ULFLG    DS    1
  4441. FTYPE    DS    1
  4442. TABAD    DS    2
  4443. TBCNT    DS    1
  4444. TADD    DS    2
  4445. TABT    DS    10
  4446. TITLEX    DS    50
  4447. HALT    DS    1
  4448. HIMRG    DS    1
  4449. LOMRG    DS    1
  4450. OFFST    DS    1
  4451. PNO    DS    1
  4452. DSKAD    DS    2
  4453. BUFAD    DS    2
  4454. BUFCT    DS    2
  4455. RECCT    DS    1
  4456. CUSED    DS    1
  4457. INHIB    DS    1
  4458. HL    DS    2
  4459. DE    DS    2
  4460. RECAD    EQU    DE
  4461. DBFLG    DS    1
  4462. LAST    DS    1
  4463. IBUF1    DS    1
  4464. IBUF    DS    140
  4465. TBUF    DS    140
  4466. DATA    EQU    $
  4467. PART5    EQU    $
  4468. BLOADCMND    CALL    GETBF
  4469.     MVI    A,1
  4470.     STA    RDWRT    ;READ OPERATION
  4471.     CALL    GETFL
  4472.     LHLD    BOFP
  4473.     SHLD    EOFP
  4474.     MVI    M,1
  4475.     LXI    H,0000
  4476.     SHLD    MAXL
  4477.     SHLD    MAXL+2
  4478.     LXI    H,IBUF
  4479.     SHLD    RECAD
  4480.     CALL    GETBACHR
  4481. STRT1    CALL    GCHAR     ;SKIP CNT
  4482.     CPI    01
  4483.     JZ    DONE5
  4484.     CALL    GCHAR     ;GET LINE NO
  4485.     MOV    C,A
  4486.     CALL    GCHAR
  4487.     MOV    B,A
  4488.     CALL    DBII    ;LINE NO TO DBII
  4489. LOAD1    CALL    GCHAR
  4490.     CPI    13
  4491.     JZ    EOFLN5
  4492.     CPI    09AH
  4493.     JZ    LNNO
  4494.     CPI    80
  4495.     JNC    DECOD
  4496.     LHLD    RECAD
  4497.     MOV    M,A
  4498.     INX    H
  4499.     SHLD    RECAD
  4500.     JMP    LOAD1
  4501. LNNO    CALL    GCHAR
  4502.     MOV    C,A
  4503.     CALL    GCHAR
  4504.     MOV    B,A
  4505.     CALL    DBII
  4506.     JMP    LOAD1
  4507. DONE5    LHLD    TOP
  4508.     INR    H
  4509.     INR    H
  4510.     INR    L
  4511.     SHLD    TOP
  4512.     CALL    FREE
  4513.     JMP    EOR
  4514. EOFLN5    LHLD    RECAD
  4515.     MVI    A,13
  4516.     MOV    M,A
  4517.     INX    H
  4518.     MVI    A,01
  4519.     MOV    M,A
  4520.     MVI    B,2
  4521.     LXI    H,IBUF
  4522. END1    MOV    A,M
  4523.     CPI    13
  4524.     JZ    END2
  4525.     INX    H
  4526.     INR    B
  4527.     JMP    END1
  4528. END2    MOV    A,B
  4529.     STA    IBUF-1
  4530.     CALL    CONTC
  4531.     JZ    DONE5
  4532.     LDA    DBFLG
  4533.     ORA    A
  4534.     JZ    END3
  4535.     LXI    H,IBUF
  4536.     CALL    CRLF
  4537.     CALL    SCRN
  4538. END3    CALL    LINE
  4539.     LXI    H,IBUF
  4540.     SHLD    RECAD
  4541.     JMP    STRT1
  4542. GCHAR    LHLD    BUFCT
  4543.     MVI    A,2
  4544.     CMP    H
  4545.     CZ    GETBACHR
  4546.     LHLD    BUFAD
  4547.     MOV    D,H
  4548.     MOV    E,L
  4549.     INX    H
  4550.     SHLD    BUFAD
  4551.     LHLD    BUFCT
  4552.     INX    H
  4553.     SHLD    BUFCT
  4554.     LDAX    D
  4555.     RET
  4556. ;CONVERT    BINARY    LINE    NO TO DBII
  4557. DBII    LXI    D,9999
  4558.     MOV    A,D
  4559.     CMP    B
  4560.     JNC    DBI2
  4561.     LXI    H,DBIM
  4562.     JMP    REPLY
  4563. DBIM    DB    'LINE NOS > 9999'
  4564.     DB    13
  4565. DBI2    XRA    A
  4566.     STA    LAST
  4567.     MOV    H,B
  4568.     MOV    L,C
  4569.     SHLD    MPTY
  4570.     LXI    H,1000
  4571.     SHLD    TEMP2
  4572.     CALL    DIVID5
  4573.     LXI    H,100
  4574.     SHLD    TEMP2
  4575.     CALL    DIVID5
  4576.     LXI    H,10
  4577.     SHLD    TEMP2
  4578.     CALL    DIVID5
  4579.     LDA    MPTY
  4580.     CALL    DBX
  4581.     RET
  4582. DIVID5    MVI    E,0
  4583.     LHLD    MPTY
  4584.     SHLD    TEMP
  4585. SB2    LXI    B,TEMP
  4586.     LXI    H,TEMP2
  4587.     XRA    A
  4588.     LDAX    B
  4589.     SBB    M
  4590.     STAX    B
  4591.     INX    B
  4592.     INX    H
  4593.     LDAX    B
  4594.     SBB    M
  4595.     STAX    B
  4596.     JC    NEG
  4597.     INR    E
  4598.     PUSH    H
  4599.     LHLD    TEMP
  4600.     SHLD    MPTY
  4601.     POP    H
  4602.     JMP    SB2
  4603. NEG    MOV    A,E
  4604. DBX    ADI    '0'
  4605.     MOV    D,A
  4606.     LDA    LAST
  4607.     ORA    A
  4608.     JNZ    ZERO
  4609.     MOV    A,D
  4610.     CPI    '0'
  4611.     RZ
  4612.     STA    LAST
  4613. ZERO    MOV    A,D
  4614.     LHLD    RECAD
  4615.     MOV    M,A
  4616.     INX    H
  4617.     SHLD    RECAD
  4618.     RET
  4619. GETBF    LDA    TOP+1
  4620.     DCR    A
  4621.     DCR    A
  4622.     MOV    B,A
  4623.     LDA    EOFP+1
  4624.     CMP    B
  4625.     RC
  4626.     LXI    H,BMSG2
  4627.     JMP    REPLY
  4628. BMSG2    DB    'NO ROOM FOR BUFFER'
  4629.     DB    13
  4630. GETFL    CALL    SETUP
  4631.     CALL    GFILE
  4632.     CALL    DIREC
  4633.     CALL    SETDN
  4634.     PUSH    H
  4635.     LHLD    TOP
  4636.     DCR    H
  4637.     DCR    H
  4638.     DCR    L
  4639.     SHLD    TOP
  4640.     POP    H
  4641.     LDA    DENTY
  4642.     CPI    'S'
  4643.     JZ    BDB4
  4644.     LDA    DBYTE
  4645.     ORA    A
  4646.     JZ    BDB4
  4647.     MVI    A,1
  4648.     JMP    BDB7
  4649. BDB4    MVI    A,2
  4650. BDB7    STA    BLOCK
  4651.     PUSH    H
  4652.     INX    H
  4653.     INX    H
  4654.     INX    H
  4655.     INX    H
  4656.     MOV    A,M
  4657.     ANI    0FH
  4658.     CPI    2
  4659.     JZ    BDB5
  4660.     LXI    H,BMSG3
  4661.     JMP    REPLY
  4662. BMSG3    DB    'NOT A BASIC PGM FILE'
  4663.     DB    13
  4664. BDB5    POP    H
  4665.     MOV    E,M
  4666.     INX    H
  4667.     MOV    D,M
  4668.     XCHG
  4669.     DCX    H
  4670.     LDA    BLOCK
  4671.     CPI    2
  4672.     JNZ    ONE1
  4673.     DCX    H
  4674. ONE1    SHLD    DSKAD
  4675.     LHLD    TOP
  4676.     INX    H
  4677.     SHLD    BUFAD
  4678.     XCHG
  4679.     INX    H    ;GET THE SIZE
  4680.     MOV    A,M    ;SAVE THE LOW ORDER BYTE
  4681.     STA    SAVE     ;SAVE THE SIZE BYTE
  4682.     RET
  4683. GETBACHR    PUSH    H
  4684.     PUSH    B
  4685.     PUSH    D
  4686.     LHLD    TOP
  4687.     INX    H
  4688.     SHLD    BUFAD
  4689.     XCHG
  4690.     LHLD    DSKAD
  4691.     INX    H
  4692.     LDA    BLOCK
  4693.     CPI    2
  4694.     JNZ    ONE
  4695.     INX    H
  4696. ONE    SHLD    DSKAD
  4697.     LDA    DISK
  4698.     MOV    C,A
  4699.     LDA    RDWRT
  4700.     MOV    B,A
  4701.     LDA    BLOCK
  4702.     CALL    DCOM
  4703.     JC    IOERR
  4704.     LXI    H,0000
  4705.     SHLD    BUFCT
  4706.     POP    D
  4707.     POP    B
  4708.     POP    H
  4709.     RET
  4710. IOERR    LXI    H,MSG1
  4711.     JMP    REPLY
  4712. MSG1    DB    'DISK I/O ERROR'
  4713.     DB    13
  4714. ;REPLACE    TOKEN    WITH    DBII TEXT
  4715. DECOD    LXI    H,BTAB
  4716.     MOV    B,A
  4717. CODE1    MOV    A,M
  4718.     CPI    0FFH
  4719.     JZ    CODE6
  4720.     CPI    80H
  4721.     JNC    CODE2
  4722. CODE3    INX    H
  4723.     JMP    CODE1
  4724. CODE2    CMP    B
  4725.     JNZ    CODE3
  4726.     INX    H
  4727.     XCHG
  4728.     LHLD    RECAD
  4729. CODE4    LDAX    D
  4730.     CPI    80H
  4731.     JNC    CODE5    ;ON NEXT CODE
  4732.     MOV    M,A
  4733.     INX    D
  4734.     INX    H
  4735.     JMP    CODE4
  4736. CODE6    LHLD    RECAD
  4737.     MOV    A,B
  4738.     MOV    M,A
  4739.     INX    H
  4740. CODE5    SHLD    RECAD
  4741.     JMP    LOAD1
  4742. ;*************        BSAVE     BSAVE  BSAVE  ****************
  4743. BSAVECMND    CALL    GETBF
  4744.     CALL    GETFL
  4745.     LXI    H,0000
  4746.     SHLD    BUFCT
  4747.     XRA    A
  4748.     STA    RDWRT
  4749.     STA    INHIB
  4750.     MVI    A,01
  4751.     STA    CCNT
  4752.     LHLD    BOFP
  4753.     SHLD    ADDR1
  4754. DECD1    LXI    H,IBUF
  4755.     SHLD    ADDR2
  4756.     CALL    GETCH
  4757.     CPI    01
  4758.     JZ    EOFPT5
  4759.     CALL    GETCH
  4760.     CALL    BINLN
  4761. DECD2    CALL    GETCH
  4762.     CPI    13
  4763.     JZ    ENDLN
  4764.     CPI    ' '
  4765.     JZ    NONUM
  4766.     CPI    ','
  4767.     JZ    NONUM
  4768.     CPI    22H
  4769.     JZ    QUOTE
  4770.     CPI    '0'
  4771.     JC    TOKEN
  4772.     CPI    '9'+1
  4773.     JNC    TOKEN
  4774.     JMP    LINEX
  4775. QUOTE    PUSH    PSW
  4776.     LDA    INHIB
  4777.     ORA    A
  4778.     JZ    QUOT2
  4779.     XRA    A
  4780. QUOT3    STA    INHIB
  4781.     POP    PSW
  4782.     JMP    LINEX
  4783. QUOT2    MVI    A,1
  4784.     JMP    QUOT3
  4785. NONUM    CALL    PUTCH
  4786.     JMP    DECD2
  4787. LINEX    MOV    B,A
  4788.     LDA    LINE1
  4789.     ORA    A
  4790.     JNZ    GENLN
  4791.     MOV    A,B
  4792.     CALL    PUTCH
  4793.     JMP    DECD2
  4794. ENDLN    CALL    PUTCH
  4795.     XRA    A
  4796.     STA    INHIB
  4797.     LDA    CCNT
  4798.     STA    IBUF-1
  4799.     LHLD    BUFAD
  4800.     SHLD    HL
  4801.     LXI    B,IBUF-1
  4802.     XCHG
  4803.     LHLD    BUFCT
  4804. ADDLN    LDAX    B
  4805.     STAX    D
  4806.     INX    B
  4807.     INX    D
  4808.     INX    H
  4809.     CALL    CKEND
  4810.     LDA    CCNT
  4811.     DCR    A
  4812.     JZ    ADDL3
  4813.     STA    CCNT
  4814.     JMP    ADDLN
  4815. ADDL3    CALL    CKEND
  4816.     SHLD    BUFCT
  4817.     XCHG
  4818.     SHLD    BUFAD
  4819.     CALL    CONTC
  4820.     JZ    EOFPT5
  4821.     LDA    DBFLG
  4822.     ORA    A
  4823.     JZ    DECD1
  4824.     XCHG
  4825.     LHLD    HL
  4826.     CALL    DUMP5
  4827.     JMP    DECD1
  4828. EOFPT5    LHLD    BUFAD
  4829.     MVI    A,01
  4830.     MOV    M,A
  4831.     CALL    PUTBA
  4832.     LHLD    TOP
  4833.     INR    H
  4834.     INR    H
  4835.     INR    D
  4836.     SHLD    TOP
  4837.     JMP    EOR
  4838. GENLN    MVI    A,9AH
  4839.     CALL    PUTCH
  4840.     CALL    BINLN
  4841.     JMP    DECD2
  4842. TOKEN    PUSH    PSW
  4843.     LDA    INHIB
  4844.     ORA    A
  4845.     JNZ    NOT2
  4846.     POP    PSW
  4847.     LXI    B,BTAB
  4848.     LHLD    ADDR1
  4849.     DCX    H
  4850.     SHLD    ADDR1
  4851.     XRA    A
  4852.     STA    LINE1
  4853.     LDAX    B
  4854. NXTN    STA    TEMP
  4855.     CPI    0FFH
  4856.     JZ    NOTOK    ;NO TOKEN FOUND
  4857.     INX    B
  4858.     LHLD    ADDR1
  4859.     LDAX    B
  4860. CKNXT    CMP    M
  4861.     JNZ    SKIP
  4862.     INX    H
  4863.     INX    B
  4864.     LDAX    B
  4865.     CPI    80H
  4866.     JC    CKNXT
  4867.     LDA    TEMP
  4868.     SHLD    ADDR1
  4869.     CALL    PUTCH
  4870.     CPI    88H
  4871.     JZ    GOTO
  4872.     CPI    89H
  4873.     JZ    GOTO
  4874.     CPI    0B2H
  4875.     JZ    GOTO
  4876.     CPI    8EH
  4877.     JZ    GOTO
  4878.     CPI    9FH
  4879.     JZ    GOTO
  4880.     CPI    0B4H
  4881.     JZ    GOTO
  4882.     CPI    96H
  4883.     JZ    GOTO
  4884.     JMP    DECD2
  4885. GOTO    MVI    A,1    ;SET TO EXPECT LINE NO
  4886.     STA    LINE1
  4887.     JMP    DECD2
  4888. NOT2    POP    PSW
  4889.     CALL    PUTCH
  4890.     JMP    DECD2
  4891. NOTKN    CALL    PUTCH
  4892.     CALL    GETCH    ;DUMMY CALL
  4893.     JMP    DECD2
  4894. SKIP    LDAX    B
  4895.     CPI    80H
  4896.     JNC    NXTN
  4897.     INX    B
  4898.     JMP    SKIP
  4899. NOTOK    LHLD    ADDR1
  4900.     MOV    A,M
  4901.     INX    H
  4902.     JMP    NOTKN
  4903. GETCH    LHLD    ADDR1
  4904.     MOV    A,M
  4905.     INX    H
  4906.     SHLD    ADDR1
  4907.     RET
  4908. CCNT    DB    0
  4909. PUTCH    LHLD    ADDR2
  4910.     MOV    M,A
  4911.     INX    H
  4912.     SHLD    ADDR2
  4913.     LXI    H,CCNT
  4914.     INR    M
  4915.     RET
  4916. CKEND    MVI    A,2
  4917.     CMP    H
  4918.     RNZ
  4919.     CALL    PUTBA
  4920.     LHLD    BUFAD
  4921.     XCHG
  4922.     LXI    H,0000
  4923.     RET
  4924. PUTBA    LDA    SAVE    ;GET REMAINING SIZE
  4925.     ORA    A
  4926.     JZ    SMALL
  4927.     DCR    A
  4928.     STA    SAVE
  4929.     LDA    BLOCK
  4930.     CPI    2
  4931.     JNZ    PUT1
  4932.     LDA    SAVE
  4933.     ORA    A
  4934.     JZ    SMALL
  4935.     DCR    A
  4936.     STA    SAVE
  4937. PUT1    CALL    GETBACHR
  4938.     RET
  4939. SMALL    LXI    H,MSG2
  4940.     JMP    REPLY
  4941. MSG2    DB    'BASIC FILE TOO SMALL'
  4942.     DB    13
  4943. BINLN    LHLD    ADDR1
  4944.     DCX    H
  4945.     SHLD    ADDR1
  4946.     LXI    H,0
  4947. ADE1    PUSH    H
  4948.     CALL    GETCH
  4949.     POP    H
  4950.     CPI    '0'
  4951.     JC    DUN
  4952.     CPI    '9'+1
  4953.     JNC    DUN
  4954.     MOV    D,H
  4955.     MOV    E,L
  4956.     DAD    H
  4957.     DAD    H
  4958.     DAD    D
  4959.     DAD    H
  4960.     SUI    48
  4961.     CPI    10
  4962.     CMC
  4963.     JC    DUN
  4964.     MOV    E,A
  4965.     MVI    D,0
  4966.     DAD    D
  4967.     JMP    ADE1
  4968. DUN    PUSH    H
  4969.     MOV    A,L
  4970.     CALL    PUTCH
  4971.     POP    H
  4972.     MOV    A,H
  4973.     CALL    PUTCH
  4974.     LHLD    ADDR1
  4975.     DCX    H
  4976.     SHLD    ADDR1
  4977.     RET
  4978. BTAB    DB    80H
  4979.     DB    'LET'
  4980.     DB    81H
  4981.     DB    'FOR'
  4982.     DB    82H
  4983.     DB    'PRINT'
  4984.     DB    83H
  4985.     DB    'NEXT'
  4986.     DB    84H
  4987.     DB    'IF'
  4988.     DB    85H
  4989.     DB    'READ'
  4990.     DB    86H
  4991.     DB    'INPUT'
  4992.     DB    87H
  4993.     DB    'DATA'
  4994.     DB    88H
  4995.     DB    'GOTO'
  4996.     DB    89H
  4997.     DB    'GOSUB'
  4998.     DB    8AH
  4999.     DB    'RETURN'
  5000.     DB    8BH
  5001.     DB    'DIM'
  5002.     DB    8CH
  5003.     DB    'STOP'
  5004.     DB    8DH
  5005.     DB    'END'
  5006.     DB    8EH
  5007.     DB    'RESTORE'
  5008.     DB    8FH
  5009.     DB    'REM'
  5010.     DB    90H
  5011.     DB    'FN'
  5012.     DB    91H
  5013.     DB    'DEF'
  5014.     DB    92H
  5015.     DB    '!'
  5016.     DB    93H
  5017.     DB    'ON'
  5018.     DB    94H
  5019.     DB    'OUT'
  5020.     DB    95H
  5021.     DB    'FILL'
  5022.     DB    96H
  5023.     DB    'EXIT'
  5024.     DB    97H
  5025.     DB    'OPEN'
  5026.     DB    98H
  5027.     DB    'CLOSE'
  5028.     DB    99H
  5029.     DB    'WRITE'
  5030.     DB    9BH
  5031.     DB    'CHAIN'
  5032.     DB    9CH
  5033.     DB    'LINE'
  5034.     DB    9DH
  5035.     DB    'DESTROY'
  5036.     DB    9EH
  5037.     DB    'CREATE'
  5038.     DB    9FH
  5039.     DB    'ERRSET'
  5040.     DB    0A0H
  5041.     DB    'RUN'
  5042.     DB    0A1H
  5043.     DB    'LIST'
  5044.     DB    0A2H
  5045.     DB    'MEMSET'
  5046.     DB    0A3H
  5047.     DB    'SCR'
  5048.     DB    0A4H
  5049.     DB    'AUTO'
  5050.     DB    0A5H
  5051.     DB    'LOAD'
  5052.     DB    0A6H
  5053.     DB    'CONT'
  5054.     DB    0A7H
  5055.     DB    'APPEND'
  5056.     DB    0A8H
  5057.     DB    'REN'
  5058.     DB    0A9H
  5059.     DB    'NSAVE'
  5060.     DB    0AAH
  5061.     DB    'SAVE'
  5062.     DB    0ABH
  5063.     DB    'BYE'
  5064.     DB    0ACH
  5065.     DB    'EDIT'
  5066.     DB    0ADH
  5067.     DB    'DEL'
  5068.     DB    0AEH
  5069.     DB    'PSIZE'
  5070.     DB    0AFH
  5071.     DB    'CAT'
  5072.     DB    0B0H
  5073.     DB    'STEP'
  5074.     DB    0B1H
  5075.     DB    'TO'
  5076.     DB    0B2H
  5077.     DB    'THEN'
  5078.     DB    0B3H
  5079.     DB    'TAB'
  5080.     DB    0B4H
  5081.     DB    'ELSE'
  5082.     DB    0B5H
  5083.     DB    'CHR$'
  5084.     DB    0B6H
  5085.     DB    'DB'
  5086.     DB    0B7H
  5087.     DB    'VAL'
  5088.     DB    0B8H
  5089.     DB    'STR$'
  5090.     DB    0B9H
  5091.     DB    'NOENDMARK'
  5092.     DB    0BAH
  5093.     DB    'INCHAR'
  5094.     DB    0BBH
  5095.     DB    'FILE'
  5096.     DB    0E0H
  5097.     DB    '('
  5098.     DB    0E0H
  5099.     DB    '['
  5100.     DB    0E2H
  5101.     DB    '*'
  5102.     DB    0E3H
  5103.     DB    '+'
  5104.     DB    0E5H
  5105.     DB    '-'
  5106.     DB    0E7H
  5107.     DB    '/'
  5108.     DB    0ECH
  5109.     DB    'AND'
  5110.     DB    0EDH
  5111.     DB    'OR'
  5112.     DB    0EFH
  5113.     DB    '>='
  5114.     DB    0F0H
  5115.     DB    '<='
  5116.     DB    0F1H
  5117.     DB    '<>'
  5118.     DB    0EFH
  5119.     DB    '>='
  5120.     DB    0F0H
  5121.     DB    '=<'
  5122.     DB    0F4H
  5123.     DB    '<'
  5124.     DB    0F5H
  5125.     DB    '='
  5126.     DB    0F6H
  5127.     DB    '>'
  5128.     DB    0F7H
  5129.     DB    'NOT'
  5130.     DB    0E1H
  5131.     DB    '^'
  5132.     DB    0C6H
  5133.     DB    'INT'
  5134.     DB    0CCH
  5135.     DB    'LEN'
  5136.     DB    0CDH
  5137.     DB    'CALL'
  5138.     DB    0CEH
  5139.     DB    'RND'
  5140.     DB    0CAH
  5141.     DB    'SGN'
  5142.     DB    0CBH
  5143.     DB    'SIN'
  5144.     DB    0C4H
  5145.     DB    'SQRT'
  5146.     DB    0D2H
  5147.     DB    'ATN'
  5148.     DB    0D8H
  5149.     DB    'FREE'
  5150.     DB    0D9H
  5151.     DB    'INP'
  5152.     DB    0DAH
  5153.     DB    'EXAM'
  5154.     DB    0DBH
  5155.     DB    'ABS'
  5156.     DB    0DCH
  5157.     DB    'COS'
  5158.     DB    0DDH
  5159.     DB    'LOG'
  5160.     DB    0DEH
  5161.     DB    'EXP'
  5162.     DB    0DFH
  5163.     DB    'TYP'
  5164.     DB    0FFH
  5165. CONFIGURE LXI    SP,AREA+50
  5166.     CALL    CRLF
  5167.     LXI    H,Q1
  5168.     CALL    SCRN
  5169.     CALL    IN8
  5170.     MOV    B,A
  5171.     CALL    OUT8
  5172.     MOV    E,B
  5173.     CALL    CRLF
  5174.     MOV    A,E
  5175.     CPI    'N'
  5176.     JZ    EOR
  5177.     CPI    'Y'
  5178.     JNZ    CONFIGURE
  5179. CNFG2    CALL    CRLF
  5180.     MVI    A,'Y'
  5181.     STA    FLG1
  5182.     LXI    H,MEMRY
  5183. MEM1    XRA    A
  5184.     MOV    M,A
  5185.     MOV    A,M
  5186.     ORA    A
  5187.     JNZ    MEM2
  5188.     INX    H
  5189.     MOV    A,H
  5190.     ORA    A
  5191.     JZ    MEM2
  5192.     JMP    MEM1
  5193. MEM2    DCX    H
  5194.     SHLD    MEMTP
  5195.     MOV    A,L     ;SHOULD END IN FF
  5196.     INR    A
  5197.     JZ    MEM4
  5198.     CALL    MEMER
  5199.     JMP    MEM4
  5200. MEMER    SHLD    HL
  5201.     CALL    CRLF
  5202.     LXI    H,MEM3
  5203.     CALL    SCRN
  5204.     LXI    H,HL+1
  5205.     CALL    HEX
  5206.     LXI    H,HL
  5207.     CALL    HEX
  5208.     LHLD    HL
  5209.     RET
  5210. MEM3    DB    'MEMORY    ERROR AT '
  5211.     DB    13
  5212. MEM4    CALL    CRLF
  5213. CNFG3    LXI    H,Q3
  5214.     CALL    SCRN
  5215.     CALL    IN8
  5216.     MOV    B,A
  5217.     CALL    OUT8
  5218.     MOV    A,B
  5219.     STA    BSPCH
  5220.     CALL    CRLF
  5221. CNFG4    LXI    H,Q4
  5222.     CALL    SCRN
  5223.     CALL    IN8
  5224.     STA    DENTY
  5225.     MOV    B,A
  5226.     CALL    OUT8
  5227.     MOV    A,B
  5228.     CPI    'S'
  5229.     JZ    CNFGA
  5230.     CPI    'D'
  5231.     JZ    CNFGA
  5232.     CALL    CRLF
  5233.     JMP    CNFG4
  5234. CNFGA    CALL    CRLF
  5235. CNFG5    LXI    H,Q5
  5236.     CALL    SCRN
  5237.     CALL    IN8
  5238.     MOV    B,A
  5239.     CALL    OUT8
  5240.     MOV    A,B
  5241.     CPI    'N'
  5242.     JZ    CNFGB
  5243.     CPI    'Y'
  5244.     JZ    CNFGC
  5245.     CALL    CRLF
  5246.     JMP    CNFG5
  5247. CNFGB    XRA    A
  5248.     JMP    NOSTOP
  5249. CNFGC    MVI    A,1
  5250. NOSTOP    EQU    $
  5251.     STA    STOP
  5252.     CALL    CRLF
  5253.     LXI    H,Q6
  5254.     CALL    SCRN
  5255.     CALL    READ
  5256.     LXI    H,IBUF
  5257.     CALL    GPARM
  5258.     ORA    A
  5259.     JZ    $+1
  5260.     DCR    A
  5261.     STA    SRCNT
  5262. CNFG8    CALL    CRLF
  5263.     LXI    H,Q8
  5264.     CALL    SCRN
  5265.     CALL    READ
  5266.     LXI    H,IBUF
  5267.     CALL    GPARM
  5268.     CPI    139
  5269.     JNC    CNFG8
  5270.     ADI    2
  5271.     STA    LNSIZ
  5272. CNFG7    CALL    CRLF
  5273.     LXI    H,Q7
  5274.     CALL    SCRN
  5275.     CALL    IN8
  5276.     MOV    B,A
  5277.     STA    WRAP
  5278.     CALL    OUT8
  5279.     CALL    CRLF
  5280.     LDA    WRAP
  5281.     CPI    'Y'
  5282.     JZ    CNF10
  5283.     CPI    'N'
  5284.     JZ    CNF10
  5285.     JMP    CNFG7
  5286. CNF10    LXI    H,Q10
  5287.     CALL    SCRN
  5288.     CALL    IN8
  5289.     MOV    B,A
  5290.     CALL    OUT8
  5291.     MOV    A,B
  5292.     STA    BSCR
  5293.     CALL    CRLF
  5294.     LDA    BSCR
  5295.     CPI    'B'
  5296.     JZ    CNFG9
  5297.     CPI    'C'
  5298.     JZ    CNFG9
  5299.     JMP    CNF10
  5300. CNFG9    LXI    H,Q99
  5301.     CALL    SCRN
  5302.     CALL    IN8
  5303.     MOV    B,A
  5304.     CALL    OUT8
  5305.     MOV    A,B
  5306.     CPI    'N'
  5307.     JZ    SPC
  5308.     CPI    'Y'
  5309.     JZ    CNFGD
  5310.     JMP    CNFG9
  5311. CNFGD    CALL    HASH1
  5312.     MOV    A,B
  5313.     STA    HTOT
  5314.     CALL    SAVME
  5315.     JMP    PART1
  5316. SPC    CALL    CRLF
  5317.     CALL    HASH1
  5318.     MOV    A,B
  5319.     STA    HTOT
  5320.     JMP    PART1
  5321. Q1    DB    'CONFIGURE (Y/N)? '
  5322.     DB    13
  5323. Q3    DB    'TYPE CHAR USED FOR BACKSPACE'
  5324.     DB    13
  5325. Q4    DB    'SINGLE OR DOUBLE DENSITY (S/D)? '
  5326.     DB    13
  5327. Q5    DB    'STOP AT END OF EACH PAGE (Y/N)? '
  5328.     DB    13
  5329. Q6    DB    'LINES PER SCREEN OR ZERO? '
  5330.     DB    13
  5331. Q7    DB    'LINE WRAP AROUND ON INPUT (Y/N)? '
  5332.     DB    13
  5333. Q8    DB    'INPUT LINE LENGTH? '
  5334.     DB    13
  5335. Q10    DB    'UNDERLINE USING BS OR CR (B/C)? '
  5336.     DB    13
  5337. Q99    DB    'SAVE THIS VERSION OF SECRTARY (Y/N)? '
  5338.     DB    13
  5339.  
  5340.  
  5341. ; STATUS COMMAND SHOWS ALL USER CHANGABLE INDICATORS
  5342. STATCMND    CALL    CRLF
  5343.     CALL    CRLF        ;BLANK LINE BEFORE DISPLAY
  5344.     LXI    H,STAT1        ;SCREEN SIZE
  5345.     CALL    SCRN
  5346.     LDA    SRCNT
  5347.     INR    A
  5348.     CALL    NUMBER
  5349.     LXI    H,STAT2
  5350.     CALL    SCRN
  5351.     LDA    LNSIZ
  5352.     DCR    A        ;CONFIGURE ADDS 2
  5353.     DCR    A    
  5354.     CALL    NUMBER
  5355.     LXI    H,STAT3        ;LINE WRAPAROUND
  5356.     CALL    SCRN
  5357.     LDA    WRAP
  5358.     CALL    ALPHABETIC
  5359.     LXI    H,STAT4        ;UNDERLINE MODE
  5360.     CALL    SCRN
  5361.     LDA    BSCR
  5362.     CALL    ALPHABETIC
  5363.     CALL    CRLF
  5364.     LXI    H,STAT5        ;STOP AT BOTTOM OF PAGE
  5365.     CALL    SCRN
  5366.     LDA    STOP
  5367.     ORA    A
  5368.     JZ    STATUS1
  5369.     MVI    A,'Y'
  5370.     JMP    STATUS2
  5371. STATUS1    MVI    A,'N'
  5372. STATUS2    CALL    ALPHABETIC
  5373.     LXI    H,STAT6        ;DISK DENSITY
  5374.     CALL    SCRN
  5375.     LDA    DENTY
  5376.     CALL    ALPHABETIC
  5377.     LXI    H,STAT7        ;NULL COUNT
  5378.     CALL    SCRN
  5379.     LDA    NULLC
  5380.     CALL    NUMBER
  5381.     LXI    H,STAT19    ;OFFSET
  5382.     CALL    SCRN
  5383.     LDA    OFFST
  5384.     CALL    NUMBER
  5385.     CALL    CRLF
  5386.     LXI    H,STAT8        ;PAGE SIZE
  5387.     CALL    SCRN
  5388.     LDA    PAGE1
  5389.     CALL    NUMBER
  5390.     LDA    PAGE2
  5391.     CALL    NUMBER
  5392.     LDA    PAGE3
  5393.     CALL    NUMBER
  5394.     LXI    H,STAT9        ;MARGINS
  5395.     CALL    SCRN
  5396.     LDA    OFFST
  5397.     INR    A
  5398.     CALL    NUMBER
  5399.     LDA    OFFST
  5400.     MOV    B,A
  5401.     LDA    LINES
  5402.     ADD    B
  5403.     CALL    NUMBER
  5404.     LXI    H,STAT10    ;OUTPUT LINE LENGTH
  5405.     CALL    SCRN
  5406.     LDA    LINES
  5407.     CALL    NUMBER
  5408.     CALL    CRLF
  5409.     LXI    H,STAT11    ;TAB SETTINGS
  5410.     CALL    SCRN
  5411.     LXI    D,TABT
  5412.     MVI    B,10
  5413.     LDAX    D
  5414.     ORA    A
  5415.     JNZ    STATTAB
  5416.     LXI    H,STAT99
  5417.     CALL    SCRN
  5418.     JMP    STATSPC
  5419. STATTAB    CALL    NUMBER
  5420.     INX    D
  5421.     DCR    B
  5422.     JZ    STATSPC
  5423.     LDAX    D
  5424.     ORA    A
  5425.     JNZ    STATTAB
  5426. STATSPC    LXI    H,STAT12    ;SPACING BETWEEN LINES
  5427.     CALL    SCRN
  5428.     LDA    SPACE
  5429.     CALL    NUMBER
  5430.     CALL    CRLF
  5431.     LXI    H,STAT13    ;TITLE
  5432.     CALL    SCRN
  5433.     LDA    TITLEX
  5434.     ORA    A
  5435.     JNZ    STATTTL
  5436.     LXI    H,STAT99
  5437.     CALL    SCRN
  5438.     JMP    STATLN6
  5439. STATTTL    LXI    H,TITLEX
  5440.     CALL    SCRN
  5441. STATLN6    CALL    CRLF
  5442.     LXI    H,STAT14    ;JUSTIFY
  5443.     CALL    SCRN
  5444.     LDA    JSW
  5445.     ORA    A
  5446.     JZ    STATJN
  5447.     MVI    A,'Y'
  5448.     JMP    STATJY
  5449. STATJN    MVI    A,'N'
  5450. STATJY    CALL    ALPHABETIC
  5451.     LXI    H,STAT16    ;UNIT
  5452.     CALL    SCRN
  5453.     LDA    UNIT
  5454.     CALL    NUMBER
  5455.     LXI    H,STAT17    ;REPEAT
  5456.     CALL    SCRN
  5457.     LDA    RPEAT
  5458.     CALL    NUMBER
  5459.     LXI    H,STAT18    ;PAGE NUMBER--PNUM
  5460.     CALL    SCRN
  5461.     LDA    PNO
  5462.     INR    A
  5463.     CALL    NUMBER
  5464.     CALL    FREE        ;MEMORY UTILIZATION INFO
  5465.     CALL    CRLF
  5466.     JMP    EOR
  5467.  
  5468. NUMBER    EQU    $
  5469.     PUSH    H
  5470.     PUSH    D
  5471.     PUSH    B
  5472.     CALL    BLANK
  5473.     LXI    H,PN2
  5474.     CALL    BIND
  5475.     LXI    D,PN2
  5476.     LDAX    D
  5477.     CPI    '0'        ;SKIP LEADING ZEROES
  5478.     JNZ    PRTNUMB
  5479.     INX    D
  5480.     LDAX    D        ;SKIP ZEROES
  5481.     CPI    '0'
  5482.     JNZ    PRTNUMB
  5483.     INX    D
  5484. PRTNUMB    EQU    $
  5485.     XCHG
  5486.     CALL    SCRN
  5487.     POP    B
  5488.     POP    D
  5489.     POP    H
  5490.     RET
  5491.  
  5492. BLANK    PUSH    PSW        ;SAVE A REG
  5493.     MVI    B,20H
  5494.     CALL    OUT8
  5495.     POP    PSW
  5496.     RET
  5497.  
  5498. ALPHABETIC EQU    $        ;PRINT 1 ALPHA CHAR IN A
  5499.     CALL    BLANK
  5500.     MOV    B,A
  5501.     JMP    OUT8        ;PRINT IT USING OUT8'S RETURN
  5502. STAT1    DB    'SCREEN SIZE:',13
  5503. STAT2    DB    ' X',13
  5504. STAT3    DB    '   LINE WRAPAROUND:',13
  5505. STAT4    DB    '   UNDERLINE:',13
  5506. STAT5    DB    'STOP AT BOTTOM:',13
  5507. STAT6    DB    '   DISK DENSITY:',13
  5508. STAT7    DB    '   NULLS:',13
  5509. STAT8    DB    'PAGE SIZE:',13
  5510. STAT9    DB    '   MARGINS:',13
  5511. STAT10    DB    '   OUTPUT LINE:',13
  5512. STAT11    DB    'TABS:',13
  5513. STAT12    DB    '   SPACING:',13
  5514. STAT13    DB    'TITLE: ',13
  5515. STAT14    DB    'JUSTIFY:',13
  5516. STAT16    DB    '   UNIT:',13
  5517. STAT17    DB    '   REPEAT:',13
  5518. STAT18    DB    '   PNUM:',13
  5519. STAT19    DB    '   OFFSET:',13
  5520. STAT99    DB    ' NONE',13
  5521. MEMRY    EQU    $
  5522.     END
  5523.