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 / SECRTARY.ASM < prev    next >
Assembly Source File  |  1986-10-18  |  61KB  |  4,782 lines

  1.     TITLE    'CP/M SECRTARY WORD PROCESSOR 820220A'
  2. ;COPYRIGHT 1979, G. YOUNG, PO BOX 3218, NORTH HOLLYWOOD, CA 91609
  3. ;PERMISSION GRANTED TO COPY FOR NON-COMMERCIAL USE ONLY
  4.  
  5.  
  6. ; A NOTE ABOUT THIS CODE:  ORIGINALLY SECRETARY WAS ONLY AVAILABLE ON
  7. ; NORTH STAR SYSTEMS.  THE CODE WAS COMPOSED OF 5 FILES AND EACH FILE
  8. ; HAD TO FIT IN MEMORY DUE TO AN OLD EDITOR THAT WAS USED EDIT IT.
  9. ; CONSEQUENTLY, TO SAVE MEMORY IN EACH FILE, NO COMMENTS WERE ADDED.
  10. ; THIS IS WHY THE ONLY COMMENTS ARE ON THE NEW CODE SPECIFIC TO CP/M.
  11. ;
  12. ;
  13.     ORG    100H
  14. INIT    JMP    INITA
  15. ASSEMBLED    DB    ' 820320A$'
  16.     DB    'COPYRIGHT 1979, G.YOUNG, INC'
  17. BSPCH    DB    08
  18. STOP    DB    0
  19. SRCNT    DB    23
  20. FLG1    DB    'N'
  21. BSCR    DB    'C'
  22. LNSIZ    DB    80
  23. WRAP    DB    'Y'
  24. BOOT    EQU    0000H
  25. DOS    EQU    BOOT
  26. BDOS    EQU    0005H
  27. PRINTER    EQU    5
  28. CONSOLE    EQU    2
  29. CLEAN    LXI    H,BOFP
  30.     MVI    C,255
  31.     XRA    A
  32. CLRM    MOV    M,A
  33.     INX    H
  34.     DCR    C
  35.     JNZ    CLRM
  36.     LXI    H,DATA
  37.     SHLD    BOFP
  38.     SHLD    EOFP
  39.     LHLD    BDOS+1
  40.     SHLD    TOP
  41.     MVI    A,CONSOLE
  42.     STA    UNIT
  43.     MVI    A,70
  44.     STA    LINES
  45.     MVI    A,1
  46.     LHLD    BOFP
  47.     MOV    M,A
  48.     MVI    A,66
  49.     STA    PAGE1
  50.     MVI    A,54
  51.     STA    PAGE2
  52.     MVI    A,7
  53.     STA    PAGE3
  54.     LDA    BSPCH
  55.     STA    X5F2+1
  56.     STA    X5F1+1
  57.     STA    X5F3+1
  58.     LDA    LNSIZ
  59.     STA    CPI80+1
  60.     SUI    7
  61.     STA    CPI74+1
  62.     RET
  63. INITA    LXI    SP,AREA+50
  64.     CALL    CLEAN
  65.     CALL    CRLF
  66.     LXI    SP,AREA+50
  67.     LXI    D,SMESS
  68.     CALL    SCRN
  69.     LXI    D,ASSEMBLED
  70.     CALL    SCRN
  71.     LXI    SP,AREA+50
  72.     CALL    FREE1
  73.     LDA    FLG1
  74.     CPI    'Y'
  75.     JNZ    CONFIGURE
  76. EOR    LXI    SP,AREA+50
  77.     CALL    CRLF
  78.     MVI    B,'#'
  79.     CALL    OUT8
  80.     CALL    READ
  81.     LXI    H,IBUF
  82.     MOV    A,M
  83.     CPI    '0'
  84.     CC    CMPCT
  85.     CPI    '9'+1
  86.     JC    LINER
  87.     XRA    A
  88.     STA    AUTO
  89.     CALL    VALC
  90.     CALL    COMM
  91.     JMP    EOR
  92. CMPCT    LDA    DBFLG
  93.     ORA    A
  94.     JNZ    DUMP4
  95.     LXI    D,IBUF+1
  96. L1    LDAX    D
  97.     MOV    M,A
  98.     CPI    13
  99.     JZ    L2
  100.     INX    D
  101.     INX    H
  102.     JMP    L1
  103. L2    LXI    H,IBUF
  104.     LDA    IBUF-1
  105.     DCR    A
  106.     STA    IBUF-1
  107.     MOV    A,M
  108.     RET
  109. READ    LXI    H,IBUF
  110.     LXI    D,TBUF
  111.     XRA    A
  112.     STA    HALT
  113.     STA    TEMP
  114.     LDA    AUTO
  115.     ORA    A
  116.     JZ    BACKN
  117.     CALL    LNGEN
  118.     MVI    C,6
  119.     LXI    D,TBUF+4
  120.     JMP    INPUT
  121. RESTR    LXI    H,IBUF
  122. RESCN    LXI    D,TBUF
  123.     XRA    A
  124.     STA    TEMP
  125. BACKN    MVI    C,2
  126. INPUT    CALL    IN8
  127.     CPI    0
  128.     JZ    INPUT
  129.     CPI    2
  130.     JZ    INPUT
  131.     CPI    0AH
  132.     JZ    INPUT
  133.     CPI    07
  134.     JZ    CPYLN
  135.     CPI    18H        ;CNTLX
  136.     JZ    EOR
  137. X5F1    CPI    08H
  138.     JZ    BACKS
  139.     CPI    011H
  140.     JZ    BACKS
  141.     CPI    0FH
  142.     JZ    BACKS
  143.     CPI    01H
  144.     JZ    CPYCH1
  145.     CPI    04
  146.     JZ    FNDCH
  147.     CPI    19H
  148.     JZ    PUTIN
  149.     CPI    13
  150.     JZ    EDONE
  151.     CPI    0EH
  152.     JZ    CNTLN
  153.     CPI    010H
  154.     JZ    RESTR
  155.     CPI    40H
  156.     JZ    CNTLN
  157.     CPI    1AH
  158.     JZ    DELCH
  159.     CPI    03H
  160.     JZ    CLR1
  161.     JMP    CHAR
  162. CLR1    XRA    A
  163.     STA    AUTO
  164.     JMP    EOR
  165. BACKS    MOV    A,C
  166.     CPI    2
  167.     JC    INPUT
  168.     JZ    INPUT
  169.     DCR    C
  170.     DCX    H
  171.     DCX    D
  172. X5F2    MVI    B,08
  173.     CALL    OUT8
  174.     JMP    INPUT
  175. DELCH    LDAX    D
  176.     CPI    13
  177.     JZ    INPUT
  178.     INX    D
  179.     MVI    B,'%'
  180.     CALL    OUT8
  181.     JMP    INPUT
  182. CPYCH1    LDAX    D
  183.     CPI    13
  184.     JZ    INPUT
  185.     MOV    A,C
  186.     CPI    139
  187.     JZ    BELL
  188.     LDAX    D
  189.     MOV    M,A
  190.     MOV    B,A
  191.     CALL    OUT8
  192.     INR    C
  193.     INX    H
  194.     INX    D
  195.     JMP    INPUT
  196. CPYLN    LDAX    D
  197.     CPI    13
  198.     JZ    INPUT
  199.     MOV    A,C
  200.     CPI    139
  201.     JZ    BELL
  202.     LDAX    D
  203.     MOV    B,A
  204.     MOV    M,A
  205.     CALL    OUT8
  206.     INX    D
  207.     INX    H
  208.     INR    C
  209.     JMP    CPYLN
  210. BELL    MVI    B,07
  211.     CALL    OUT8
  212.     JMP    INPUT
  213. PUTIN    LDA    TEMP
  214.     ORA    A
  215.     JZ    SETON
  216.     MVI    B,'>'
  217.     CALL    OUT8
  218.     XRA    A
  219.     STA    TEMP
  220.     JMP    INPUT
  221. SETON    MVI    B,'<'
  222.     CALL    OUT8
  223.     MVI    A,1
  224.     STA    TEMP
  225.     JMP    INPUT
  226. FNDCH    CALL    IN8
  227.     CPI    03
  228.     JZ    EOR
  229.     PUSH    D
  230.     INX    D
  231.     MOV    B,A
  232. FND2    LDAX    D
  233.     CMP    B
  234.     JZ    FND3
  235.     CPI    13
  236.     JZ    FND5
  237.     INX    D
  238.     JMP    FND2
  239. FND3    POP    D
  240.     MOV    B,A
  241.     CALL    DUP1
  242. FND4    LDAX    D
  243.     CMP    B
  244.     JZ    INPUT
  245.     MOV    A,C
  246.     CPI    139
  247.     JZ    INPUT
  248.     CALL    DUP1
  249.     JMP    FND4
  250. DUP1    LDAX    D
  251.     MOV    M,A
  252.     PUSH    B
  253.     MOV    B,A
  254.     CALL    OUT8
  255.     POP    B
  256.     INR    C
  257.     INX    H
  258.     INX    D
  259.     RET
  260. FND5    POP    D
  261.     MVI    B,07
  262.     CALL    OUT8
  263.     JMP    FNDCH
  264. CNTLN    MVI    B,'@'
  265.     CALL    OUT8
  266.     MVI    A,13
  267.     MOV    M,A
  268.     CALL    CRLF
  269.     CALL    COPY
  270.     JMP    RESTR
  271. COPY    PUSH    D
  272.     PUSH    H
  273.     LXI    D,IBUF
  274.     LXI    H,TBUF
  275. CPYN    LDAX    D
  276.     MOV    M,A
  277.     CPI    13
  278.     JZ    CPYX
  279.     INX    D
  280.     INX    H
  281.     JMP    CPYN
  282. CPYX    POP    H
  283.     POP    D
  284.     RET
  285. EDONE    MOV    A,C
  286.     CPI    2
  287.     JZ    READ
  288.     CPI    10
  289.     JC    NOBU1
  290. BKUP1    DCX    H
  291.     DCR    C
  292.     MOV    A,M
  293.     CPI    ' '
  294.     JZ    BKUP1
  295.     INX    H
  296.     INR    C
  297. NOBU1    MVI    M,13
  298.     INX    H
  299.     MVI    M,1
  300.     LXI    H,IBUF-1
  301.     MOV    M,C
  302.     CALL    COPY
  303.     LDA    HALT
  304.     ORA    A
  305.     RZ
  306.     CALL    LINE
  307.     JMP    EOR
  308. CHAR    MOV    B,A
  309.     LDA    TEMP
  310.     ORA    A
  311.     JNZ    CHAR1
  312.     MOV    A,C
  313. CPI80    CPI    66
  314.     JNZ    CHAR1
  315.     MOV    A,B
  316.     STA    TEMP3
  317.     LDA    WRAP
  318.     CPI    'N'
  319.     JZ    WRAP1
  320.     LDA    AUTO
  321.     ORA    A
  322.     JNZ    WRAP2
  323. WRAP1    MVI    B,07
  324.     CALL    OUT8
  325.     JMP    INPUT
  326. WRAP2    MVI    M,13
  327.     DCX    H
  328. WRAP3    DCX    H
  329.     MOV    A,M
  330.     CPI    ' '
  331.     JNZ    WRAP3
  332. WRAP6    DCX    H
  333.     MOV    A,M
  334.     CPI    ' '
  335.     JZ    WRAP6
  336.     INX    H
  337.     SHLD    ADDR1
  338.     MVI    A,13
  339.     MOV    M,A
  340.     INX    H
  341.     MOV    A,M
  342.     STA    TEMP2+1
  343.     MVI    A,1
  344.     MOV    M,A
  345.     LXI    H,IBUF
  346.     MVI    C,2
  347. WRAP7    MOV    A,M
  348.     CPI    13
  349.     JZ    WRAP8
  350.     INR    C
  351.     INX    H
  352.     JMP    WRAP7
  353. WRAP8    MOV    A,C
  354.     STA    IBUF-1
  355.     CALL    COPY
  356.     CALL    LINE
  357.     CALL    CRLF
  358.     LXI    H,IBUF
  359.     MVI    B,'#'
  360.     CALL    OUT8
  361.     CALL    LNGEN
  362.     MVI    C,6
  363.     XCHG
  364.     LHLD    ADDR1
  365.     XCHG
  366.     INX    D
  367.     LDA    TEMP2+1
  368.     CPI    ' '
  369.     JZ    WRAP4
  370.     MOV    M,A
  371.     MOV    B,A
  372.     INR    C
  373.     CALL    OUT8
  374.     INX    H
  375. WRAP4    INX    D
  376.     LDAX    D
  377.     CPI    13
  378.     JZ    WRAP5
  379.     MOV    M,A
  380.     INX    H
  381.     INR    C
  382.     MOV    B,A
  383.     CALL    OUT8
  384.     JMP    WRAP4
  385. WRAP5    LXI    D,TBUF-2
  386.     PUSH    H
  387.     MVI    H,0
  388.     MOV    L,C
  389.     DAD    D
  390.     XCHG
  391.     POP    H
  392.     LDA    TEMP3
  393.     MOV    B,A
  394. CHAR1    MOV    M,B
  395.     INR    C
  396.     CALL    OUT8
  397.     MOV    A,C
  398. CPI74    CPI    59
  399.     JNZ    NOBEL
  400.     MVI    B,07
  401.     CALL    OUT8
  402. NOBEL    INX    H
  403.     LDA    TEMP
  404.     ORA    A
  405.     JNZ    INPUT
  406.     INX    D
  407.     JMP    INPUT
  408. COMM    LXI    D,IBUF
  409.     MVI    B,4
  410. UPPER1    LDAX    D
  411.     CPI    60H
  412.     JC    LOWER1
  413.     SBI    20H
  414.     STAX    D
  415. LOWER1    INX    D
  416.     DCR    B
  417.     JNZ    UPPER1
  418.     LXI    D,CTAB
  419.     MVI    B,NCOM
  420.     MVI    A,4
  421.     STA    NCHR
  422.     CALL    COMS
  423.     JNZ    ERR1
  424.     PCHL
  425. COMS    LXI    H,IBUF
  426.     MVI    A,3        ;COMPARE ONLY FIRST THREE
  427.     MOV    C,A
  428.     CALL    SEAR
  429.     INX    D        ;POSITION PAST 4TH CHAR
  430.     LDAX    D
  431.     MOV    L,A
  432.     INX    D
  433.     LDAX    D
  434.     MOV    H,A
  435.     RZ
  436.     INX    D
  437.     DCR    B
  438.     JNZ    COMS
  439.     INR    B
  440.     RET
  441. SEAR    LDAX    D
  442.     CMP    M
  443.     JNZ    INCA
  444.     INX    H
  445.     INX    D
  446.     DCR    C
  447.     JNZ    SEAR
  448.     RET
  449. INCA    INX    D
  450.     DCR    C
  451.     JNZ    INCA
  452.     INR    C
  453.     RET
  454. ZBUF    XRA    A
  455.     LXI    D,ABUF+12
  456.     MVI    B,12
  457. ZBU1    DCX    D
  458.     STAX    D
  459.     DCR    B
  460.     JNZ    ZBU1
  461.     RET
  462. VALC    EQU    $
  463. ETRA    LXI    H,0
  464.     SHLD    BBUF+2
  465.     SHLD    FBUF
  466.     CALL    ZBUF
  467.     LXI    H,IBUF-1
  468. VAL1    INX    H
  469.     MOV    A,M
  470.     CPI    ' '
  471.     CMC
  472.     RNC
  473.     JNZ    VAL1
  474.     SHLD    PNTR
  475.     CALL    SBLK
  476.     CMC
  477.     RNC
  478. VAL5    LXI    D,ABUF
  479.     CALL    ALPS
  480.     MOV    A,B
  481.     CPI    5
  482.     CMC
  483.     RC
  484.     LXI    B,ABUF
  485.     CALL    AHEX
  486.     RC
  487.     SHLD    BBUF
  488.     LXI    H,ABUF
  489.     CALL    NORM
  490.     CALL    SBLK
  491.     CMC
  492.     RNC
  493.     LXI    D,ABUF+4
  494.     CALL    ALPS
  495.     MOV    A,B
  496.     CPI    5
  497.     CMC
  498.     RC
  499.     LXI    B,ABUF+4
  500.     CALL    AHEX
  501.     RC
  502.     SHLD    BBUF+2
  503.     LXI    H,ABUF+4
  504.     CALL    NORM
  505.     CALL    SBLK
  506.     CMC
  507.     RNC
  508.     LXI    D,ABUF+8
  509.     CALL    ALPS
  510.     MOV    A,B
  511.     CPI    5
  512.     CMC
  513.     RC
  514.     LXI    H,ABUF+8
  515.     CALL    NORM
  516.     ORA    A
  517.     RET
  518. RANGE    PUSH    H
  519.     PUSH    D
  520.     LDA    ABUF+4
  521.     ORA    A
  522.     JZ    OK
  523.     MVI    B,4
  524.     LXI    H,ABUF
  525.     LXI    D,ABUF+4
  526. CKIT    LDAX    D
  527.     CMP    M
  528.     JC    ERR2
  529.     JNZ    OK
  530.     INX    H
  531.     INX    D
  532.     DCR    B
  533.     JZ    OK
  534.     JMP    CKIT
  535. OK    POP    D
  536.     POP    H
  537.     RET
  538. AHEX    LXI    H,0
  539. AHE1    LDAX    B
  540.     ORA    A
  541.     RZ
  542.     DAD    H
  543.     DAD    H
  544.     DAD    H
  545.     DAD    H
  546.     CALL    AHS1
  547.     CPI    10H
  548.     CMC
  549.     RC
  550.     ADD    L
  551.     MOV    L,A
  552.     INX    B
  553.     JMP    AHE1
  554. AHS1    SUI    48
  555.     CPI    10
  556.     RC
  557.     SUI    7
  558.     RET
  559. ADEC    LXI    H,0
  560. ADE1    LDAX    B
  561.     ORA    A
  562.     RZ
  563.     MOV    D,H
  564.     MOV    E,L
  565.     DAD    H
  566.     DAD    H
  567.     DAD    D
  568.     DAD    H
  569.     SUI    48
  570.     CPI    10
  571.     CMC    
  572.     RC
  573.     MOV    E,A
  574.     MVI    D,0
  575.     DAD    D
  576.     INX    B
  577.     JMP    ADE1
  578. BLK1    MVI    B,' '
  579.     CALL    OUT8
  580.     RET
  581. ACHK    LHLD    BBUF
  582.     LDA    BBUF+3
  583.     CMP    H
  584.     JNZ    ACH1
  585.     LDA    BBUF+2
  586.     CMP    L
  587.     JNZ    ACH1
  588.     STC
  589. ACH1    INX    H
  590.     SHLD    BBUF
  591.     RET
  592. NCOM    EQU    48
  593. CTAB    DB    'APPE'
  594.     DW    APPEND
  595.     DB    'AUTO'
  596.     DW    AUTOL
  597.     DB    'BLOA'
  598.     DW    BLOAD
  599.     DB    'BSAV'
  600.     DW    BSAVE
  601.     DB    'CHAI'
  602.     DW    CHAIN
  603.     DB    'CHLL'
  604.     DW    CHANGEALL
  605.     DB    'CHNG'
  606.     DW    CHANGE
  607.     DB    'CONF'
  608.     DW    CNFG2
  609.     DB    'COPY'
  610.     DW    COPYCMND
  611.     DB    'DELE'
  612.     DW    DELL
  613.     DB    'DELT'
  614.     DW    DELL
  615.     DB    'DEVI'
  616.     DW    UNITCMND
  617.     DB    'DIR '
  618.     DW    DIRECTORY
  619.     DB    'DUMP'
  620.     DW    DUMP1
  621.     DB    'EDIT'
  622.     DW    EDITCMND
  623.     DB    'ERA '
  624.     DW    ERASEFILE
  625.     DB    'FIND'
  626.     DW    FINDCMND
  627.     DB    'FREE'
  628.     DW    FREE
  629.     DB    'HELP'
  630.     DW    HELP
  631.     DB    'JUST'
  632.     DW    JUSTCMND
  633.     DB    'LINE'
  634.     DW    LINECMND
  635.     DB    'LIST'
  636.     DW    LIST
  637.     DB    'LOAD'
  638.     DW    LOADCMND
  639.     DB    'MARG'
  640.     DW    MARGINCMND
  641.     DB    'MERG'
  642.     DW    MERGECMND
  643.     DB    'MOVE'
  644.     DW    MOVECMND
  645.     DB    'NULL'
  646.     DW    NULLCMND
  647.     DB    'OFFS'
  648.     DW    OFFSCMND
  649.     DB    'OPEN'
  650.     DW    OPENCMND
  651.     DB    'PAGE'
  652.     DW    PAGECMND
  653.     DB    'PNUM'
  654.     DW    PNUMCMND
  655.     DB    'PRIN'
  656.     DW    PRINTCMND
  657.     DB    'QUIT'
  658.     DW    QUIT
  659.     DB    'RECO'
  660.     DW    RECOVER
  661.     DB    'RENU'
  662.     DW    RENUMBER
  663.     DB    'REPE'
  664.     DW    REPEATCMND
  665.     DB    'SAVE'
  666.     DW    SAVECMND
  667.     DB    'SCRA'
  668.     DW    SCRAT
  669.     DB    'SPAC'
  670.     DW    SPACECMND
  671.     DB    'STAT'
  672.     DW    STATCMND
  673.     DB    'TABS'
  674.     DW    TABSCMND
  675.     DB    'TITL'
  676.     DW    TITLECMND
  677.     DB    'DEBU'
  678.     DW    DEBUG
  679.     DB    'UNIT'
  680.     DW    OLDUNIT
  681.     DB    'CALL'
  682.     DW    NOTIMPL
  683.     DB    'EXPA'
  684.     DW    NOTIMPL
  685.     DB    'NSAV'
  686.     DW    SAVECMND
  687.     DB    'DEST'
  688.     DW    ERASEFILE
  689. QUIT    CALL    CRLF
  690.     LXI    D,QUITM
  691.     CALL    SCRN
  692.     CALL    CRLF
  693.     MVI    C,0
  694.     JMP    BDOS
  695. BHEAD    DB    '  BLOCKS: '
  696.     DB    '$'
  697. CHEAD    DB    '  AVAILABLE: '
  698.     DB    '$'
  699. DHEAD    DB    ' LAST LINE:'
  700.     DB    '$'
  701. OLDUNIT    LXI    D,UNITERR
  702.     JMP    REPLY
  703. UNITERR    DB    'FOR CP/M VERSION, USE: DEVICE L/C$'
  704. VCHK    LDA    ABUF
  705.     ORA    A
  706.     JZ    ERR2
  707.     RET
  708. FREE    EQU    $
  709. FREER    CALL    FREE1
  710.     CALL    FREE2
  711.     LXI    D,BHEAD
  712.     CALL    SCRN
  713.     LHLD    EOFP
  714.     SHLD    MPTY
  715.     MVI    E,2
  716.     LXI    B,MPTY
  717.     LXI    H,BOFP
  718.     XRA    A
  719.     CALL    ADSB1
  720.     LHLD    MPTY
  721.     INR    H
  722.     MOV    L,H
  723.     MVI    H,0
  724.     SHLD    MPTY
  725.     CALL    DECPT
  726.     RET
  727. FREE1    CALL    CRLF
  728.     LXI    D,HEAD
  729.     CALL    SCRN
  730.     LHLD    EOFP
  731.     SHLD    MPTY
  732.     MVI    E,2
  733.     LXI    B,MPTY
  734.     LXI    H,BOFP
  735.     XRA    A
  736.     CALL    ADSB1
  737.     CALL    DECPT
  738.     LXI    D,CHEAD
  739.     CALL    SCRN
  740.     CALL    ADSUB
  741.     CALL    DECPT
  742.     RET
  743. FREE2    LXI    D,DHEAD
  744.     CALL    SCRN
  745.     CALL    LABPT
  746.     RET
  747. ADSUB    LHLD    TOP
  748.     SHLD    MPTY
  749.     MVI    E,2
  750.     LXI    B,MPTY
  751.     LXI    H,EOFP
  752.     XRA    A
  753. ADSB1    LDAX    B
  754.     SBB    M
  755.     STAX    B
  756.     DCR    E
  757.     RZ
  758.     INX    B
  759.     INX    H
  760.     JMP    ADSB1
  761. LABPT    CALL    BLK1
  762.     MVI    E,4
  763.     LXI    H,MAXL
  764. LABP2    MOV    B,M
  765.     CALL    OUT8
  766.     DCR    E
  767.     RZ
  768.     INX    H
  769.     JMP    LABP2
  770. SCRAT    CALL    CRLF
  771.     CALL    CLEAN
  772.     CALL    FREE1
  773.     JMP    EOR
  774. ERR1    CALL    CRLF
  775.     LXI    D,MESS1X
  776.     CALL    SCRN
  777.     JMP    HELP
  778. MESS1X    DB    'INVALID COMMAND'
  779.     DB    '$'
  780. ERR2    LXI    D,MESS2X
  781.     JMP    REPLY
  782. MESS2X    DB    'INVALID PARAMETER'
  783.     DB    '$'
  784. ERR3    CALL    CRLF
  785.     LXI    D,MESS31
  786.     CALL    SCRN
  787.     CALL    CRLF
  788.     LXI    D,IBUF
  789.     CALL    SCRNCR
  790.     JMP    DUMP
  791. MESS31    DB    'INVALID CHARACTER IN PARAMETER --'
  792.     DB    '$'
  793. SMESS    DB    'CP/M SECRTARY REL '
  794.     DB    '9.76'
  795.     DB    '   $'
  796. HEAD    DB    'USED: '
  797.     DB    '$'
  798. QUITM    DB    'FINISHED'
  799.     DB    '$'
  800. HELP    LXI    H,CTAB
  801.     MVI    E,NCOM-6
  802. HELP1    CALL    CRLF
  803.     MVI    D,12
  804. HELP2    MVI    C,4
  805. HELP3    MOV    B,M
  806.     CALL    OUT8
  807.     INX    H
  808.     DCR    C
  809.     JNZ    HELP3
  810.     INX    H
  811.     INX    H
  812.     MVI    B,' '
  813.     CALL    OUT8
  814.     CALL    CONTC
  815.     JZ    EOR
  816.     DCR    E
  817.     JZ    EOR
  818.     DCR    D
  819.     JNZ    HELP2
  820.     JMP    HELP1
  821. LINER    CALL    LINE
  822.     JMP    EOR
  823. LINE    CALL    FILLN
  824.     CALL    DELCK
  825.     CALL    ADSUB
  826.     LDA    MPTY+1
  827.     ORA    A
  828.     JNZ    OK2AD
  829.     LDA    MPTY
  830.     MOV    B,A
  831.     LDA    IBUF-1
  832.     SUB    B
  833.     JC    OK2AD
  834.     LXI    D,ERR4
  835.     JMP    REPLY
  836. ERR4    DB    'FILE FULL ERROR'
  837.     DB    '$'
  838. OK2AD    EQU    $
  839.     MVI    C,4
  840.     LXI    H,IBUF-1
  841. LICK    INX    H
  842.     MOV    A,M
  843.     CPI    '0'
  844.     JC    ERR3
  845.     CPI    '9'+1
  846.     JNC    ERR3
  847.     DCR    C
  848.     JNZ    LICK
  849.     SHLD    HCON
  850.     LXI    D,MAXL+3
  851.     CALL    COM0
  852.     JNC    INSR
  853.     INX    H
  854.     CALL    LODM
  855.     LXI    H,MAXL+3
  856.     CALL    STOM
  857.     LXI    D,IBUF-1
  858.     LHLD    EOFP
  859.     MVI    C,1
  860.     CALL    LMOV
  861. SEOF    MVI    M,1
  862.     SHLD    EOFP
  863.     RET
  864. INSR    CALL    FIN1
  865.     MVI    C,2
  866.     JZ    EQUL
  867.     DCR    C
  868. EQUL    MOV    B,M
  869.     DCX    H
  870.     MVI    M,2
  871.     SHLD    INSP
  872.     LDA    IBUF-1
  873.     DCR    C
  874.     JZ    LT1
  875.     SUB    B
  876.     JZ    ZERO
  877.     JC    GT1
  878. LT1    LHLD    EOFP
  879.     MOV    D,H
  880.     MOV    E,L
  881.     CALL    ADR
  882.     SHLD    EOFP
  883.     MVI    C,2
  884.     CALL    RMOV
  885.     JMP    ZERO
  886. GT1    CMA
  887.     INR    A
  888.     MOV    D,H
  889.     MOV    E,L
  890.     CALL    ADR
  891.     XCHG
  892.     CALL    LMOV
  893.     MVI    M,1
  894.     SHLD    EOFP
  895. ZERO    LHLD    INSP
  896.     MVI    M,13
  897.     INX    H
  898.     LXI    D,IBUF-1
  899.     MVI    C,1
  900.     CALL    LMOV
  901.     RET
  902. LFIND    EQU    $
  903. FIND    LXI    H,ABUF+3
  904.     SHLD    HCON
  905. FIN1    LHLD    BOFP
  906.     MOV    A,H
  907.     ORA    L
  908.     JZ    EOR
  909. FI1    CALL    EO1
  910.     XCHG
  911.     LHLD    HCON
  912.     XCHG
  913.     MVI    A,4
  914.     CALL    ADR
  915.     CALL    COM0
  916.     RC
  917.     RZ
  918. FI2    MOV    A,M
  919.     CALL    ADR
  920.     JMP    FI1
  921. EOF    INX    H
  922. EO1    MVI    A,1
  923.     CMP    M
  924.     RNZ
  925.     MVI    A,CONSOLE
  926.     STA    UNIT
  927.     JMP    EOR
  928. ADR    ADD    L
  929.     MOV    L,A
  930.     RNC
  931.     INR    H
  932.     RET
  933. LMOV    LDAX    D
  934.     INX    D
  935.     CMP    C
  936.     RZ
  937.     MOV    M,A
  938.     INX    H
  939.     JMP    LMOV
  940. RMOV    LDAX    D
  941.     DCX    D
  942.     CMP    C
  943.     RZ
  944.     MOV    M,A
  945.     DCX    H
  946.     JMP    RMOV
  947. LODM    MOV    B,M
  948.     INX    H
  949.     MOV    C,M
  950.     INX    H
  951.     MOV    D,M
  952.     INX    H
  953.     MOV    E,M
  954.     RET
  955. STOM    MOV    M,E
  956.     DCX    H
  957.     MOV    M,D
  958.     DCX    H
  959.     MOV    M,C
  960.     DCX    H
  961.     MOV    M,B
  962.     RET
  963. COM0    MVI    B,1
  964.     MVI    C,4
  965.     ORA    A
  966. CO1    LDAX    D
  967.     SBB    M
  968.     JZ    CO2
  969.     INR    B
  970. CO2    DCX    D
  971.     DCX    H
  972.     DCR    C
  973.     JNZ    CO1
  974.     DCR    B
  975.     RET
  976. COM1    MVI    C,4
  977.     LDAX    D
  978.     SUI    1
  979.     JMP    CO1+1
  980. PARM    XRA    A
  981.     STA    SAVE
  982.     LXI    H,IBUF
  983.     MOV    A,M
  984. PARM1    CPI    '0'
  985.     JC    ERR3
  986.     CPI    '9'+1
  987.     JNC    ERR3
  988.     ANI    0FH
  989.     MOV    E,A
  990.     LDA    SAVE
  991.     MOV    B,A
  992.     RLC
  993.     RLC
  994.     RLC
  995.     ADD    B
  996.     ADD    B
  997.     ADD    E
  998.     STA    SAVE
  999.     INX    H
  1000.     MOV    A,M
  1001.     CPI    13
  1002.     JZ    PEOF2
  1003.     JMP    PARM1
  1004. PEOF2    LDA    SAVE
  1005.     RET
  1006. NORM    CALL    LODM
  1007.     XRA    A
  1008.     CMP    B
  1009.     RZ
  1010. NOR1    CMP    E
  1011.     CNZ    STOM
  1012.     RNZ
  1013.     MOV    E,D
  1014.     MOV    D,C
  1015.     MOV    C,B
  1016.     MVI    B,'0'
  1017.     JMP    NOR1
  1018. DELCK    LXI    H,IBUF-1
  1019.     MOV    A,M
  1020.     CPI    6
  1021.     RNZ
  1022.     XRA    A
  1023.     STA    AUTO
  1024.     LXI    H,0
  1025.     SHLD    BBUF+2
  1026.     SHLD    FBUF
  1027.     CALL    ZBUF
  1028.     LXI    H,IBUF
  1029.     LXI    D,ABUF
  1030.     MVI    B,5
  1031. LOOP    DCR    B
  1032.     JZ    DEL6
  1033.     MOV    A,M
  1034.     STAX    D
  1035.     INX    D
  1036.     INX    H
  1037.     JMP    LOOP
  1038. DEL6    CALL    DEL0
  1039.     JMP    EOR
  1040. FILLN    LXI    H,IBUF
  1041.     MVI    C,4
  1042. FILL3    INX    H
  1043.     DCR    C
  1044.     RZ
  1045. FILL1    MOV    A,M
  1046.     CPI    '0'
  1047.     JC    FILL2
  1048.     CPI    '9'+1
  1049.     JNC    FILL2
  1050.     JMP    FILL3
  1051. FILL2    PUSH    D
  1052.     PUSH    H
  1053.     PUSH    B
  1054.     MVI    C,139
  1055.     LXI    D,IBUF+138
  1056.     LXI    H,IBUF+139
  1057. SHIFT    LDAX    D
  1058.     MOV    M,A
  1059.     DCX    D
  1060.     DCX    H
  1061.     DCR    C
  1062.     JNZ    SHIFT
  1063.     MVI    A,'0'
  1064.     STA    IBUF
  1065.     LDA    IBUF-1
  1066.     INR    A
  1067.     STA    IBUF-1
  1068.     POP    B
  1069.     POP    H
  1070.     POP    D
  1071.     JMP    FILL3
  1072. LISTCMND    EQU    $
  1073. LIST    CALL    CRLF
  1074.     CALL    RANGE
  1075.     CALL    FIND
  1076. LIST2    XRA    A
  1077.     STA    CNTR
  1078. LIST0    INX    H
  1079.     CALL    OUTPT
  1080.     CALL    EOF
  1081.     CALL    STOPL
  1082.     CALL    CONTC
  1083.     JZ    LIST3
  1084.     LDA    UNIT
  1085.     CPI    PRINTER
  1086.     JZ    LIST0
  1087.     LDA    SRCNT
  1088.     ORA    A
  1089.     JZ    LIST0
  1090.     MOV    B,A
  1091.     LDA    CNTR
  1092.     INR    A
  1093.     STA    CNTR
  1094.     CMP    B
  1095.     JC    LIST0
  1096.     PUSH    H
  1097.     LXI    D,MESS5
  1098.     CALL    SCRN
  1099. LIST1    CALL    IN8
  1100.     CPI    03
  1101.     JZ    LIST3
  1102.     CPI    13
  1103.     JNZ    LIST1
  1104.     CALL    CRLF
  1105.     POP    H
  1106.     JMP    LIST2
  1107. LIST3    MVI    A,CONSOLE
  1108.     STA    UNIT
  1109.     JMP    EOR
  1110. MESS5    DB    'PRESS RETURN TO CONTINUE'
  1111.     DB    '$'
  1112. STOPL    LXI    D,ABUF+4
  1113.     MVI    B,4
  1114. STOP1    LDAX    D
  1115.     ORA    A
  1116.     JNZ    STOP2
  1117.     INX    D
  1118.     DCR    B
  1119.     JNZ    STOP1
  1120.     RET
  1121. STOP2    PUSH    H
  1122.     INX    H
  1123.     LXI    D,ABUF+4
  1124.     MVI    B,4
  1125. STOP4    LDAX    D
  1126.     CMP    M
  1127.     JZ    STOP3
  1128.     JC    EOR
  1129.     POP    H
  1130.     RET
  1131. STOP3    INX    H
  1132.     INX    D
  1133.     DCR    B
  1134.     JNZ    STOP4
  1135.     POP    H
  1136.     RET
  1137. DELL    CALL    VCHK
  1138.     CALL    RANGE
  1139. DEL0    CALL    FIND
  1140.     SHLD    INSP
  1141.     LXI    H,ABUF+7
  1142.     MOV    A,M
  1143.     ORA    A
  1144.     JNZ    DEL1
  1145.     LXI    H,ABUF+3
  1146. DEL1    SHLD    HCON
  1147.     XCHG
  1148.     LXI    H,MAXL+3
  1149.     CALL    COM0
  1150.     LHLD    INSP
  1151.     JC    NOVR
  1152.     SHLD    EOFP
  1153.     MVI    M,1
  1154.     XCHG
  1155.     LHLD    BOFP
  1156.     XCHG
  1157.     MVI    B,13
  1158.     DCX    H
  1159. DEL2    MOV    A,L
  1160.     SUB    E
  1161.     MOV    A,H
  1162.     SBB    D
  1163.     MVI    A,13
  1164.     JC    DEL4
  1165.     DCR    B
  1166.     DCX    H
  1167.     CMP    M
  1168.     JNZ    DEL2
  1169.     DCX    H
  1170.     MOV    A,L
  1171.     SUB    E
  1172.     MOV    A,H
  1173.     SBB    D
  1174.     JC    DEL5
  1175.     CMP    M
  1176.     INX    H
  1177.     INX    H
  1178.     JZ    DEL3
  1179.     INX    H
  1180. DEL3    CALL    LODM
  1181.     LXI    H,MAXL+3
  1182.     CALL    STOM
  1183.     RET
  1184. DEL4    CMP    B
  1185. DEL5    XCHG
  1186.     JNZ    DEL3-1
  1187.     STA    MAXL
  1188.     RET
  1189. NOVR    CALL    FI1
  1190.     CZ    FI2
  1191. NOV1    XCHG
  1192.     LHLD    INSP
  1193.     MVI    C,1
  1194.     CALL    LMOV
  1195.     SHLD    EOFP
  1196.     MVI    M,1
  1197.     RET
  1198. SBLK    LHLD    PNTR
  1199. SBL1    MOV    A,M
  1200.     CPI    ','
  1201.     JZ    SBL2
  1202.     CPI    ' '
  1203.     RNZ
  1204. SBL2    INX    H
  1205.     SHLD    PNTR
  1206.     JMP    SBL1
  1207. ALPS    MVI    B,0
  1208. ALP1    STAX    D
  1209.     INR    B
  1210.     MOV    A,B
  1211.     CPI    11
  1212.     RNC
  1213.     INX    D
  1214.     INX    H
  1215.     SHLD    PNTR
  1216.     MOV    A,M
  1217.     CPI    '0'
  1218.     RC
  1219.     CPI    '9'+1
  1220.     JC    ALP1
  1221.     CPI    'A'
  1222.     RC
  1223.     CPI    'Z'+1
  1224.     JC    ALP1
  1225.     RET
  1226. DECPT    XRA    A
  1227.     STA    LAST
  1228.     LXI    H,2710H
  1229.     SHLD    TEMP2
  1230.     CALL    DIVID
  1231.     LXI    H,03E8H
  1232.     SHLD    TEMP2
  1233.     CALL    DIVID
  1234.     LXI    H,64H
  1235.     SHLD    TEMP2
  1236.     CALL    DIVID
  1237.     LXI    H,0AH
  1238.     SHLD    TEMP2
  1239.     CALL    DIVID
  1240.     LDA    MPTY
  1241.     ADI    '0'
  1242.     MOV    B,A
  1243.     CALL    OUT8
  1244.     RET
  1245. DIVID    MVI    E,0
  1246.     LHLD    MPTY
  1247.     SHLD    TEMP
  1248. SB2    LXI    B,TEMP
  1249.     LXI    H,TEMP2
  1250.     XRA    A
  1251.     LDAX    B
  1252.     SBB    M
  1253.     STAX    B
  1254.     INX    B
  1255.     INX    H
  1256.     LDAX    B
  1257.     SBB    M
  1258.     STAX    B
  1259.     JC    NEG
  1260.     INR    E
  1261.     PUSH    H
  1262.     LHLD    TEMP
  1263.     SHLD    MPTY
  1264.     POP    H
  1265.     JMP    SB2
  1266. NEG    MOV    A,E
  1267. DIV2    ADI    '0'
  1268.     MOV    B,A
  1269.     LDA    LAST
  1270.     ORA    A
  1271.     JNZ    DIV4
  1272.     MOV    A,B
  1273.     CPI    '0'
  1274.     RZ
  1275.     STA    LAST
  1276. DIV4    CALL    OUT8
  1277.     RET
  1278. LNGEN    PUSH    B
  1279.     PUSH    D
  1280.     PUSH    H
  1281.     MVI    C,2
  1282.     LXI    H,NUMBR
  1283.     LXI    D,LINE1
  1284. CONVT1    LDAX    D
  1285.     RRC
  1286.     RRC
  1287.     RRC
  1288.     RRC
  1289.     CALL    UNPAK
  1290.     LDAX    D
  1291.     CALL    UNPAK
  1292.     INX    D
  1293.     DCR    C
  1294.     JNZ    CONVT1
  1295.     POP    H
  1296.     MVI    C,4
  1297.     LXI    D,NUMBR
  1298. LOOP21    LDAX    D
  1299.     MOV    M,A
  1300.     INX    D
  1301.     INX    H
  1302.     DCR    C
  1303.     JNZ    LOOP21
  1304.     PUSH    H
  1305.     MVI    C,2
  1306.     LXI    D,LINE1+1
  1307.     LXI    H,INCR+1
  1308.     XRA    A
  1309. LOOP11    LDAX    D
  1310.     ADC    M
  1311.     DAA
  1312.     STAX    D
  1313.     DCR    C
  1314.     DCX    D
  1315.     DCX    H
  1316.     JNZ    LOOP11
  1317.     POP    H
  1318.     POP    D
  1319.     POP    B
  1320.     RET
  1321. AUTOL    LXI    H,0500H
  1322.     SHLD    INCR
  1323.     CALL    VCHK
  1324.     LXI    H,LINE1
  1325.     LXI    D,ABUF
  1326.     CALL    PACK
  1327.     LXI    H,INCR
  1328.     LDAX    D
  1329.     CPI    0
  1330.     JZ    SWITH
  1331.     CALL    PACK
  1332. SWITH    MVI    A,1
  1333.     STA    AUTO
  1334.     JMP    EOR
  1335. PACK    CALL    TWICE
  1336. TWICE    CALL    TEST
  1337.     RLC
  1338.     RLC
  1339.     RLC
  1340.     RLC
  1341.     MOV    B,A
  1342.     INX    D
  1343.     CALL    TEST
  1344.     ADD    B
  1345.     MOV    M,A
  1346.     INX    D
  1347.     INX    H
  1348.     RET
  1349. TEST    LDAX    D
  1350.     CPI    '0'
  1351.     JC    ERR3
  1352.     CPI    '9'+1
  1353.     JNC    ERR3
  1354.     ANI    0FH
  1355.     RET
  1356. UNPAK    ANI    0FH
  1357.     ADI    '0'
  1358.     MOV    M,A
  1359.     MOV    B,A
  1360.     LDA    AUTO
  1361.     ORA    A        ;IF AUTO NOT ON
  1362.     JZ    SKIPOUT8    ;SKIP DISPLAYING THE NUMBER
  1363.     CALL    OUT8
  1364. SKIPOUT8 INX    H
  1365.     RET
  1366. EDITCMND    CALL    CRLF
  1367.     MVI    B,'>'
  1368.     CALL    OUT8
  1369.     MVI    A,1
  1370.     STA    HALT
  1371.     LDA    ABUF
  1372.     ORA    A
  1373.     JZ    ERR9
  1374.     XRA    A
  1375.     STA    TEMP
  1376.     CALL    FIND
  1377.     INX    H
  1378.     LXI    D,TBUF
  1379. CPY2    MOV    A,M
  1380.     STAX    D
  1381.     MOV    B,A
  1382.     CALL    OUT8
  1383.     MOV    A,B
  1384.     CPI    13
  1385.     JZ    DPLAY
  1386.     INX    H
  1387.     INX    D
  1388.     JMP    CPY2
  1389. DPLAY    CALL    CRLF
  1390.     MVI    B,'>'
  1391.     CALL    OUT8
  1392.     JMP    RESTR
  1393. ERR9    LXI    D,ERRM9
  1394.     JMP    REPLY
  1395. ERRM9    DB    'MISSING LINE NO.'
  1396.     DB    '$'
  1397. UPPERCASE    CPI    60H    ;CONVERT LOWER TO UPPERCASE
  1398.     RC
  1399.     SBI    20H
  1400.     RET
  1401. GETFCB    CALL    SETUP    ;CREATE AN FCB
  1402.     MVI    C,36
  1403.     XRA    A
  1404.     LXI    D,FCB
  1405. CLEARFCB    STAX    D    ;RESET FCB TO ZEROES
  1406.     INX    D
  1407.     DCR    C
  1408.     JNZ    CLEARFCB
  1409.     PUSH    H    ;SAVE POSITION OF DRIVE NO
  1410.     INX    H    ;CHECK FOR COLON
  1411.     MOV    A,M
  1412.     CPI    ':'
  1413.     JNZ    NOCOLON
  1414.     POP    H
  1415.     MOV    A,M
  1416.     ANI    0FH    ;CONVERT A=1...P=16
  1417.     STA    FCB
  1418.     INX    H    ;POINT TO COLON
  1419.     INX    H    ;POINT TO 1ST CHAR OF NAME
  1420.     JMP    GETNAME
  1421. NOCOLON    POP    H
  1422. GETNAME    LXI    D,FCB+1
  1423.     MVI    C,11
  1424.     MVI    A,20H
  1425. CLEARNAME    STAX    D
  1426.     INX    D
  1427.     DCR    C
  1428.     JNZ    CLEARNAME
  1429.     MVI    A,'T'        ;DEFAULT TO LOAD TXT FILE TYPE
  1430.     STA    FCB+9
  1431.     STA    FCB+11
  1432.     MVI    A,'X'
  1433.     STA    FCB+10
  1434.     LXI    D,FCB+1
  1435.     MVI    C,8
  1436. MOVENAME    MOV    A,M
  1437.     CPI    '.'
  1438.     JZ    PERIOD
  1439.     CPI    13
  1440.     RZ
  1441.     CALL    UPPERCASE
  1442.     STAX    D
  1443.     INX    D
  1444.     INX    H
  1445.     DCR    C
  1446.     JNZ    MOVENAME
  1447.     MOV    A,M
  1448.     CPI    13
  1449.     RZ
  1450.     CPI    '.'
  1451.     JNZ    ERR2
  1452. PERIOD    LXI    D,FTYPE
  1453.     INX    H
  1454.     MVI    C,3
  1455. MOVETYPE    MOV    A,M
  1456.     CPI    13
  1457.     RZ
  1458.     CALL    UPPERCASE
  1459.     STAX    D
  1460.     INX    D
  1461.     INX    H
  1462.     DCR    C
  1463.     JNZ    MOVETYPE
  1464.     MOV    A,M
  1465.     CPI    13
  1466.     JNZ    ERR2
  1467.     RET
  1468. ; TRANSFER DATA TO/FROM MEMORY/DISK
  1469. MEMTRANS    LHLD     BOUND
  1470. NEXTREC    PUSH    H
  1471.     LXI    D,128
  1472.     DAD    D
  1473.     LDA    TOP+1
  1474.     CMP    H
  1475.     JZ    COMPAREL
  1476.     JC    TOOLARGE
  1477.     JMP    SPACEOK
  1478. COMPAREL    LDA    TOP
  1479.     CMP    L
  1480.     JZ    TOOLARGE
  1481.     JC    TOOLARGE
  1482. SPACEOK    POP    H
  1483.     MVI    C,26    ;SET DMA ADDRESS
  1484.     XCHG        ;HL TO DE
  1485.     CALL    BDOS
  1486.     LXI    D,FCB
  1487.     LDA    RWIND    ;SET TO READ OR WRITE
  1488.     MOV    C,A
  1489.     CALL    BDOS
  1490.     INR    A
  1491.     JZ    MEMERR
  1492.     LHLD    BOUND
  1493.     MVI    C,128
  1494. FINDEOF    MOV    A,M    ;SEE IF EOF WAS TRANSFERED
  1495.     CPI    01
  1496.     JZ    DMARESET    ;RESET DMA BEFORE QUITTING
  1497.     INX    H
  1498.     DCR    C
  1499.     JNZ    FINDEOF
  1500.     SHLD    BOUND
  1501.     JMP    NEXTREC
  1502. TOOLARGE    EQU    $
  1503.     CALL    DMARESET
  1504.     LXI    D,OVERSIZE
  1505.     JMP    REPLY
  1506. MEMERR    CALL    DMARESET
  1507.     LXI    D,IOERR
  1508.     JMP    REPLY
  1509. DMARESET    MVI    C,0DH    ;RESET THE DISK SYSTEM
  1510.     JMP    BDOS
  1511. OVERSIZE    DB    'FILE TOO LARGE TO LOAD$'
  1512. IOERR    DB    'DISK I/O ERROR$'
  1513. LOADCMND    CALL    CRLF
  1514.     LHLD    BOFP
  1515. LOAD7    SHLD    BOUND
  1516.     CALL    LOADR
  1517.     CALL    FREE
  1518.     JMP    EOR
  1519. APPEND    CALL    CRLF
  1520.     LHLD    EOFP
  1521.     JMP    LOAD7
  1522. CHAIN    LHLD    BOFP
  1523.     SHLD    BOUND
  1524.     CALL    LOADR
  1525.     LXI    H,0000
  1526.     SHLD    ABUF
  1527.     SHLD    ABUF+2
  1528.     JMP    PRINTCMND
  1529. ERASEFILE    CALL    CRLF    ;DELETE A FILE
  1530.     CALL    GETFCB
  1531.     LXI    D,FCB
  1532.     MVI    C,0FH    ;OPEN THE FILE TO SEE IF IT IS THERE
  1533.     CALL    BDOS
  1534.     LXI    D,NOFILE
  1535.     INR    A
  1536.     JZ    REPLY
  1537.     LXI    D,CONFIRM    ;SEND CONFIRMATION QUESTION
  1538.     CALL    SCRN
  1539.     CALL    CIN
  1540.     MOV    B,A
  1541.     CALL    COUT
  1542.     MOV    A,B
  1543.     CALL    UPPERCASE
  1544.     CPI    'N'
  1545.     JZ    EOR
  1546.     CPI    'Y'
  1547.     JNZ    ERR2
  1548.     LXI    D,FCB
  1549.     MVI    C,13H    ;DELETE THE FILE NOW
  1550.     CALL    BDOS
  1551.     JMP    EOR
  1552. CONFIRM    DB    'ARE YOU SURE (Y/N)? $'
  1553. NOFILE    DB    'FILE CANNOT BE FOUND$'
  1554. LOADR    CALL    GETFCB
  1555.     LXI    D,FCB
  1556.     MVI    C,0FH    ;OPEN THE FILE
  1557.     CALL    BDOS
  1558.     LXI    D,NOFILE
  1559.     INR    A
  1560.     JZ    REPLY
  1561.     MVI    A,14H    ;SET SEQUENTIAL READ
  1562.     STA    RWIND
  1563.     CALL    MEMTRANS    ;DO ACTUAL LOAD
  1564. FINDEND    LHLD    BOFP        ;SEARCH FOR THE END OF DATA
  1565. LOAD2    LXI    D,MAXL
  1566.     MVI    C,4
  1567. LOAD1    INX    H
  1568.     MOV    A,M
  1569.     STAX    D
  1570.     INX    D
  1571.     DCR    C
  1572.     JNZ    LOAD1
  1573. LOAD3    INX    H
  1574.     MVI    A,0DH
  1575.     CMP    M
  1576.     JNZ    LOAD3
  1577.     INX    H
  1578.     MVI    A,1
  1579.     CMP    M
  1580.     JNZ    LOAD2
  1581. LOAD4    SHLD    EOFP
  1582.     RET
  1583. SAVECMND    CALL    CRLF
  1584.     CALL    GETFCB
  1585.     MVI    C,0FH    ;ATTEMP TO OPEN
  1586.     LXI    D,FCB
  1587.     CALL    BDOS
  1588.     INR    A
  1589.     JZ    CREATEFILE
  1590.     LHLD    FTYPE    ;CREATE BACKUP NAME
  1591.     SHLD     HTYPE
  1592.     LHLD    FTYPE+2
  1593.     SHLD    HTYPE+2
  1594.     MVI    A,'B'
  1595.     STA    FTYPE
  1596.     MVI    A,'A'
  1597.     STA    FTYPE+1
  1598.     MVI    A,'K'
  1599.     STA    FTYPE+2
  1600.     LXI    D,FCB
  1601.     MVI    C,0FH    ;SEE IF BAK EXISTS
  1602.     CALL    BDOS
  1603.     INR    A
  1604.     JZ    RENAMEIT
  1605.     LXI    D,FCB
  1606.     MVI    C,13H    ;DELETE BACKUP FILE
  1607.     CALL    BDOS
  1608. RENAMEIT    LXI    D,FCB+16    ;COPY THE NAME
  1609.     LXI    H,FCB
  1610.     MVI    C,16
  1611. COPYNAME    MOV    A,M
  1612.     STAX    D
  1613.     INX    D
  1614.     INX    H
  1615.     DCR    C
  1616.     JNZ    COPYNAME
  1617.     LHLD    HTYPE
  1618.     SHLD    FTYPE
  1619.     LDA    HTYPE+2
  1620.     STA    FTYPE+2
  1621.     LXI    D,FCB
  1622.     MVI    C,17H    ;RENAME TO BACKUP
  1623.     CALL    BDOS
  1624.     LXI    D,NORENAME
  1625.     INR    A
  1626.     JZ    REPLY
  1627.     CALL     NEWSECTOR
  1628.     LXI    D,FCB+16
  1629.     MVI    C,17
  1630.     XRA    A    ;CLEAR THE RENAMEED FCB
  1631. WIPEOUT    STAX    D
  1632.     INX    D
  1633.     DCR    C
  1634.     JNZ    WIPEOUT
  1635. CREATEFILE    LXI    D,FCB    ;MAKE A NEW FILE
  1636.     MVI    C,16H
  1637.     CALL    BDOS
  1638.     LXI    D,DISKFULL
  1639.     INR    A
  1640.     JZ    REPLY
  1641.     LHLD    BOFP
  1642.     SHLD    BOUND
  1643.     MVI    A,15H    ;SET SEQUENTIAL WRITE
  1644.     STA    RWIND
  1645.     CALL    MEMTRANS    ;WRITE THE FILE
  1646. CLOSEIT    MVI    C,10H        ;CLOSE THE FILE
  1647.     LXI    D,FCB
  1648.     CALL    BDOS
  1649.     LXI    D,BADCLOSE
  1650.     INR    A
  1651.     JZ    REPLY
  1652.     CALL    NEWSECTOR
  1653.     LXI    D,SAVED
  1654.     JMP    REPLY
  1655. ; IF YOU DO TWO SAVES IN A ROW, CPM WILL OVERWRITE THE FIRST ONE WITH
  1656. ; THE DATA FROM THE SECOND ONE.  TO PREVENT ANY DISK IO PROBLEMS, 
  1657. ; RESET THE DISK SYSTEM AFTER A SAVE.
  1658. NEWSECTOR EQU    $
  1659.     MVI    C,0DH
  1660.     CALL    BDOS
  1661.     RET
  1662. SAVED    DB    'SAVED$'
  1663. BADCLOSE    DB    'BAD CLOSE -- NOT SAVED$'
  1664. DISKFULL    DB    'DISK FULL -- NOT SAVED$'
  1665. NORENAME    DB    'CANNOT RENAME BACKUP$'
  1666. NULLO    LDA    NULLC
  1667.     ORA    A
  1668.     RZ
  1669.     PUSH    D
  1670.     MOV    E,A
  1671. NULL2    MVI    B,0
  1672.     CALL    OUT8A
  1673.     DCR    E
  1674.     JNZ    NULL2
  1675. NULL3    POP    D
  1676.     RET
  1677. MERGECMND    EQU    $    ;MERGE COMMAND FOR MERGING BASIC DATA
  1678.     CALL    CRLF        ;INTO FORM LETTERS
  1679.     CALL    GETFCB
  1680.     LXI    D,FCB        ;COPY THE FCB TO A MERGE-FCB (MFCB)
  1681.     LXI    H,MFCB        ;SO ANY OTHER DISK COMMANDS WILL NOT
  1682.     MVI    B,36        ;DESTROY THE FCB SET UP FOR THIS COMMAND
  1683. SAVEFCB    LDAX    D
  1684.     MOV    M,A        ;COPY FCB
  1685.     INX    H
  1686.     INX    D
  1687.     DCR    B
  1688.     JNZ    SAVEFCB
  1689.     LXI    D,MFCB
  1690.     MVI    C,0FH        ;OPEN THE FILE
  1691.     CALL    BDOS
  1692.     LXI    D,NOFILE    ;SEE IF FILE IS THERE
  1693.     INR    A
  1694.     JZ    REPLY
  1695.     CALL    GETBA        ;GET THE FIRST RECORD
  1696.     LHLD    BUFAD
  1697.     MOV    A,M
  1698.     INX    H        ;GET THE FIRST CHARACTER
  1699.     SHLD    BUFAD
  1700.     CPI    22H        ;MUST BE A DOUBLE QUOTE
  1701.     JZ    INRRCX
  1702.     LXI    D,MRGERR
  1703.     JMP    REPLY
  1704. MRGERR    DB    'RECORD DOES NOT BEGIN WITH DOUBLE QUOTE$'
  1705. INRRCX    LDA    BUFCT
  1706.     DCR    A
  1707.     STA    BUFCT
  1708.     JMP    EOR
  1709. GETBA    PUSH    H
  1710.     PUSH    B
  1711.     PUSH    D
  1712.     CALL    RSTBA
  1713.     LXI    D,MBUF        ;SET DMA FOR MERGE BUFFER
  1714.     MVI    C,1AH
  1715.     CALL    BDOS
  1716.     LXI    D,MFCB        ;READ SEQUENTIAL
  1717.     MVI    C,14H
  1718.     CALL    BDOS
  1719.     ORA    A        ;CHECK FOR EOF
  1720.     CNZ    EOFBA
  1721.     POP    D
  1722.     POP    B
  1723.     POP    H
  1724.     RET
  1725. EOFBA    LDA    INSRT
  1726.     ORA    A
  1727.     RZ
  1728.     XRA    A
  1729.     STA    RPEAT
  1730.     STA    INSRT
  1731.     MVI    A,1
  1732.     STA    INHIB
  1733.     RET
  1734. RSTBA    MVI    A,99
  1735.     STA    RPEAT
  1736.     XRA    A
  1737.     STA    INHIB
  1738.     MVI    A,1
  1739.     STA    INSRT
  1740.     LXI    H,MBUF
  1741.     SHLD    BUFAD
  1742.     MVI    A,128
  1743.     STA    BUFCT
  1744.     RET
  1745. MOVBA    LDA    INHIB
  1746.     ORA    A
  1747.     RNZ
  1748.     PUSH    H
  1749.     PUSH    B
  1750. MOV0    LHLD    BUFAD
  1751.     MOV    A,M
  1752.     CPI    '+'
  1753.     JZ    MOV1
  1754.     STAX    D
  1755.     INX    D
  1756.     LDA    NCHR
  1757.     INR    A
  1758.     STA    NCHR
  1759.     MOV    B,A
  1760.     LDA    CCNT
  1761.     CMP    B
  1762.     JZ    LFULL
  1763.     CALL    INRBF
  1764.     LDA    INHIB
  1765.     ORA    A
  1766.     JZ    MOV0
  1767.     JMP    POPIT
  1768. MOV1    CALL    INRBF
  1769. POPIT    POP    B
  1770.     POP    H
  1771.     RET
  1772. LFULL    CALL    INRBF
  1773.     LHLD    BUFAD
  1774.     MOV    A,M
  1775.     CPI    '+'
  1776.     JZ    MOV1
  1777.     LDA    INHIB
  1778.     ORA    A
  1779.     JZ    LFULL
  1780.     JMP    POPIT
  1781. INRBF    INX    H
  1782.     SHLD    BUFAD
  1783.     LDA    BUFCT
  1784.     DCR    A
  1785.     STA    BUFCT
  1786.     CZ    GETBA
  1787.     LHLD    BUFAD            ;REFILL BUFFER
  1788.     MOV    A,M
  1789.     CPI    22H            ;DOUBLE QUOTE?
  1790.     RNZ
  1791.     MVI    A,1
  1792.     STA    INHIB
  1793.     RET
  1794. FLUSH    PUSH    H
  1795.     PUSH    B
  1796. FLSH1    LHLD    BUFAD
  1797.     MOV    A,M
  1798.     CPI    22H        ;FIND QUOTE AT END OF CURRENT RECORD
  1799.     JZ    FLSH2
  1800.     CPI    1AH        ;END OF FILE?
  1801.     JZ    FLSH3
  1802.     CALL    INRBF
  1803.     JMP    FLSH1
  1804. FLSH2    CALL    INRBF
  1805.     LHLD    BUFAD
  1806.     MOV    A,M
  1807.     CPI    1AH        ;END OF FILE?
  1808.     JZ    FLSH3
  1809.     CPI    22H        ;FIND QUOTE AT BEGINNING OF NEXT RECORD
  1810.     JNZ    FLSH2
  1811.     CALL    INRBF
  1812.     XRA    A
  1813.     STA    INHIB
  1814.     POP    B
  1815.     POP    H
  1816.     RET
  1817. FLSH3    POP    B
  1818.     POP    H
  1819.     JMP    EOFBA
  1820. NOTIMPL    LXI    D,NOTIMSG
  1821.     JMP    REPLY
  1822. NOTIMSG    DB    'COMMAND NOT IMPLEMENTED$'
  1823. ;OUTPUT    A    CARRIAGE RETURN LINE FEED
  1824. CRLF    MVI    B,13
  1825.     CALL    OUT8
  1826.     MVI    B,10
  1827.     CALL    OUT8
  1828.     CALL    NULLO
  1829.     RET
  1830. ;ECHOE    TAB    CHAR AS @
  1831. ;OUTPUT    A    CHARACTER TO THE CONSOLE
  1832. OUT8    MVI    A,09
  1833.     CMP    B
  1834.     JNZ    SKIP1X
  1835.     MVI    B,'@'
  1836. SKIP1X    XRA    A
  1837. COUTZ    PUSH    H
  1838.     PUSH    D
  1839.     PUSH    B
  1840.     MVI    C,CONSOLE
  1841.     MOV    E,B
  1842.     CALL    BDOS
  1843.     POP    B
  1844.     POP    D
  1845.     POP    H
  1846.     RET
  1847. ;OUTPUT    A    CHARACTER TO UNIT "UNIT"
  1848. OUT8A    MVI    A,09
  1849.     CMP    B
  1850.     JNZ    COUT
  1851.     MVI    B,'@'
  1852.     JMP    COUT
  1853. IN8    EQU    $
  1854. CIN    PUSH    H
  1855.     PUSH    D
  1856.     PUSH    B
  1857. CIN1    MVI    C,06
  1858.     MVI    E,0FFH
  1859.     CALL    BDOS
  1860.     ORA    A
  1861.     JZ    CIN1
  1862.     POP    B
  1863.     POP    D
  1864.     POP    H
  1865.     RET
  1866. COUT    PUSH    H
  1867.     PUSH    D
  1868.     PUSH    B
  1869.     LDA    UNIT
  1870.     MOV    C,A
  1871. COUT2    MOV    E,B
  1872.     CALL    BDOS
  1873.     POP    B
  1874.     POP    D
  1875.     POP    H
  1876.     RET
  1877. CONTC    PUSH    H
  1878.     PUSH    D
  1879.     PUSH    B
  1880.     MVI    C,6
  1881.     MVI    E,0FFH
  1882.     CALL    BDOS
  1883.     ORA    A
  1884.     JZ    NCONTC
  1885.     CPI    03
  1886.     JNZ    NCONTC
  1887.     MVI    A,'Y'
  1888.     JMP    CONTC2
  1889. NCONTC    MVI    A,'N'
  1890. CONTC2    CPI    'Y'
  1891.     POP    B
  1892.     POP    D
  1893.     POP    H
  1894.     RET
  1895. SCRN    MVI    C,9
  1896.     JMP    BDOS
  1897. SCRNCR    LDAX    D
  1898.     CPI    13
  1899.     RZ
  1900.     MOV    B,A
  1901.     CALL    OUT8
  1902.     INX    D
  1903.     JMP    SCRNCR
  1904. ;LINE    PRINT    FOR LIST AND PRINT COMMANDS
  1905. OUTPT    MOV    B,M
  1906.     MVI    A,13
  1907.     CMP    B
  1908.     JZ    OUTDN
  1909.     CALL    OUT8A
  1910.     INX    H
  1911.     JMP    OUTPT
  1912. OUTDN    CALL    OUTCR
  1913.     LDA    SPACE
  1914.     ORA    A
  1915.     RZ
  1916.     PUSH    B
  1917.     MOV    C,A
  1918. OUTA    DCR    C
  1919.     JZ    OUTB
  1920.     CALL    OUTCR
  1921.     JMP    OUTA
  1922. OUTB    POP    B
  1923.     RET
  1924. OUTCR    MVI    B,13
  1925.     CALL    OUT8A
  1926.     MVI    B,10
  1927.     CALL    OUT8A
  1928.     CALL    NULLO
  1929.     RET
  1930. ;DISPLAY    AN    ERROR MESSAGE
  1931. REPLY    CALL    CRLF
  1932.     CALL    SCRN
  1933.     JMP    EOR
  1934. ;    RESET    INPUT BUFFER
  1935. SETUP    LXI    H,IBUF
  1936. SET1    INX    H
  1937.     MOV    A,M
  1938.     CPI    13
  1939.     RZ
  1940.     CPI    ' '
  1941.     JNZ    SET1
  1942. SET2    INX    H
  1943.     MOV    A,M
  1944.     CPI    13
  1945.     RZ
  1946.     CPI    ' '
  1947.     JZ    SET2
  1948.     RET
  1949. DEBUG    MVI    A,1
  1950.     STA    DBFLG
  1951.     JMP    EOR
  1952. DUMP1    CALL    OUTCR
  1953.     LHLD    BBUF+2
  1954.     XCHG
  1955.     LHLD    BBUF
  1956.     LDA    IBUF-1
  1957.     CPI    6
  1958.     JZ    DPRAM
  1959.     CALL    DUMP3
  1960.     CALL    OUTCR
  1961.     JMP    EOR
  1962. DPRAM    CALL    DUMP4
  1963.     CALL    OUTCR
  1964.     JMP    EOR
  1965. DUMP    EQU    $
  1966. DUMP2    LDA    DBFLG
  1967.     ORA    A
  1968.     JZ    EOR
  1969. DUMP4    LXI    D,TBUF+140
  1970.     LXI    H,AREA
  1971.     CALL    DUMP3
  1972.     JMP    EOR
  1973. DUMP5    PUSH    H
  1974.     PUSH    D
  1975.     PUSH    B
  1976.     PUSH    PSW
  1977.     SHLD    HL
  1978.     XCHG
  1979.     SHLD    DE
  1980.     JMP    H0
  1981. DUMP3    PUSH    H
  1982.     PUSH    D
  1983.     PUSH    B
  1984.     PUSH    PSW
  1985.     SHLD    HL
  1986.     XCHG
  1987.     SHLD    DE
  1988. REASK    CALL    CRLF
  1989.     LXI    D,DEVICEMSG
  1990.     CALL    SCRN
  1991.     CALL    CIN
  1992.     CPI    03
  1993.     JZ    EOR
  1994.     MOV    B,A
  1995.     CALL    OUT8
  1996.     MOV    A,B
  1997.     CPI    'L'
  1998.     JZ    LISTDEVICE
  1999.     CPI    6CH    ;LOWER CASE L
  2000.     JZ    LISTDEVICE
  2001.     CPI    63H    ;LOWER CASE C
  2002.     JZ    CONDEVICE
  2003.     CPI    'C'
  2004.     JNZ    REASK
  2005. CONDEVICE    EQU    $
  2006.     MVI    A,CONSOLE
  2007.     JMP    SETDEVICE
  2008. LISTDEVICE    MVI    A,PRINTER
  2009. SETDEVICE    STA    UNIT
  2010.     CALL    CRLF
  2011. H0    LXI    H,HL+1
  2012.     CALL    HEX
  2013.     LXI    H,HL
  2014.     CALL    HEX
  2015.     LHLD    HL
  2016.     MVI    D,8
  2017. H2    MVI    B,' '
  2018.     CALL    OUT8A
  2019.     MVI    E,4
  2020. H1    CALL    HEX
  2021.     INX    H
  2022.     DCR    E
  2023.     JNZ    H1
  2024.     DCR    D
  2025.     JNZ    H2
  2026.     LHLD    HL
  2027.     MVI    B,' '
  2028.     CALL    OUT8A
  2029.     MVI    D,32
  2030. H4    MOV    A,M
  2031.     CPI    20H
  2032.     JC    H5
  2033.     CPI    7EH
  2034.     JC    H3
  2035. H5    MVI    A,'.'
  2036. H3    MOV    B,A
  2037.     CALL    OUT8A
  2038.     INX    H
  2039.     DCR    D
  2040.     JNZ    H4
  2041.     CALL    OUTCR
  2042.     SHLD    HL
  2043.     CALL    CONTC
  2044.     JZ    EOR
  2045.     LDA    HL+1
  2046.     MOV    B,A
  2047.     LDA    DE+1
  2048.     CMP    B
  2049.     JZ    H6
  2050.     JNC    H0
  2051.     JMP    H7
  2052. H6    LDA    HL
  2053.     MOV    B,A
  2054.     LDA    DE
  2055.     CMP    B
  2056.     JZ    H7
  2057.     JNC    H0
  2058. H7    MVI    A,CONSOLE
  2059.     STA    UNIT
  2060.     POP    PSW
  2061.     POP    B
  2062.     POP    D
  2063.     POP    H
  2064.     RET
  2065. DEVICEMSG    DB    'DEVICE (L/C)? $'
  2066. HEX    PUSH    H
  2067.     MOV    A,M
  2068.     CALL    BINH
  2069.     LXI    H,HCON
  2070.     MOV    B,M
  2071.     CALL    OUT8A
  2072.     INX    H
  2073.     MOV    B,M
  2074.     CALL    OUT8A
  2075.     POP    H
  2076.     RET
  2077. BINH    LXI    H,HCON
  2078.     MOV    B,A
  2079.     RAR
  2080.     RAR
  2081.     RAR
  2082.     RAR
  2083.     CALL    BIN1
  2084.     MOV    M,A
  2085.     INX    H
  2086.     MOV    A,B
  2087.     CALL    BIN1
  2088.     MOV    M,A
  2089.     RET
  2090. BIN1    ANI    0FH
  2091.     ADI    48
  2092.     CPI    58
  2093.     RC
  2094.     ADI    7
  2095.     RET
  2096. MOVECMND    MVI    A,1
  2097.     JMP    COPYCMND+1
  2098. COPYCMND    EQU    $
  2099.     XRA    A
  2100.     STA    TEMP3
  2101.     CALL    RANGE
  2102. GETLN    EQU    $
  2103.     LXI    H,0100H
  2104.     SHLD    INCR
  2105.     LXI    H,LINE1
  2106.     LXI    D,ABUF+8
  2107.     CALL    PACK
  2108.     XRA    A
  2109.     STA    TEMP3+1
  2110.     LXI    D,ABUF+8
  2111.     LXI    H,ABUF
  2112.     MVI    B,4
  2113. AGAIN    LDAX    D
  2114.     CMP    M
  2115.     JC    BKWRD
  2116.     JNZ    FRWRD
  2117.     INX    H
  2118.     INX    D
  2119.     DCR    B
  2120.     JZ    FRWRD
  2121.     JMP    AGAIN
  2122. BKWRD    MVI    A,1
  2123.     STA    TEMP3+1
  2124. FRWRD    CALL    LFIND
  2125. MOVL    SHLD    ADDR1
  2126.     LXI    D,IBUF-1
  2127.     MOV    A,M
  2128.     STAX    D
  2129.     INX    D
  2130.     INX    H
  2131. MOVX    MOV    A,M
  2132.     STAX    D
  2133.     CPI    13
  2134.     JZ    COPD
  2135.     INX    H
  2136.     INX    D
  2137.     JMP    MOVX
  2138. COPD    SHLD    ADDR2
  2139.     INX    D
  2140.     MVI    A,1
  2141.     STAX    D
  2142.     LXI    H,IBUF
  2143.     CALL    LNGEN
  2144.     CALL    LINE
  2145.     LXI    D,ABUF+4
  2146.     LHLD    ADDR1
  2147.     LDA    TEMP3+1
  2148.     ORA    A
  2149.     JZ    SKPAD
  2150.     LHLD    ADDR2
  2151.     INX    H
  2152.     SHLD    ADDR1
  2153.     INX    H
  2154.     CALL    ADVNC
  2155.     SHLD    ADDR2
  2156.     LHLD    ADDR1
  2157. SKPAD    INX    H
  2158.     MVI    B,5
  2159. ENDD    DCR    B
  2160.     JZ    DONE
  2161.     LDAX    D
  2162.     CMP    M
  2163.     JNZ    CNEXT
  2164.     INX    D
  2165.     INX    H
  2166.     JMP    ENDD
  2167. CNEXT    LHLD    ADDR2
  2168.     INX    H
  2169.     MOV    A,M
  2170.     CPI    1
  2171.     JZ    DONE
  2172.     PUSH    B
  2173.     PUSH    H
  2174.     PUSH    D
  2175.     MVI    B,4
  2176.     INX    H
  2177.     LXI    D,ABUF+4
  2178. RETRY    LDAX    D
  2179.     CMP    M
  2180.     JC    DONE
  2181.     JNZ    RESET
  2182.     INX    H
  2183.     INX    D
  2184.     DCR    B
  2185.     JZ    RESET
  2186.     JMP    RETRY
  2187. ADVNC    INX    H
  2188. AD    MOV    A,M
  2189.     CPI    13
  2190.     JZ    FNDIT
  2191.     INX    H
  2192.     JMP    AD
  2193. FNDIT    RET
  2194. RESET    POP    D
  2195.     POP    H
  2196.     POP    B
  2197.     JMP    MOVL
  2198. DONE    LDA    TEMP3
  2199.     ORA    A
  2200.     JNZ    MOVC
  2201.     LXI    D,MESS1
  2202.     JMP    REPLY
  2203. MESS1    DB    'COPIED'
  2204.     DB    '$'
  2205. MOVC    CALL    DELL
  2206.     LXI    D,MESS2
  2207.     JMP    REPLY
  2208. MESS2    DB    'MOVED'
  2209.     DB    '$'
  2210. CHANGE    MVI    A,1
  2211.     JMP    CHANGEALL+1
  2212. CHANGEALL    XRA    A
  2213.     STA    TEMP3
  2214. FINDZ    CALL    CRLF
  2215.     LXI    H,IBUF
  2216.     LXI    D,TBUF
  2217. EDIT5    MOV    A,M
  2218.     STAX    D
  2219.     CPI    13
  2220.     JZ    EDIT6
  2221.     INX    H
  2222.     INX    D
  2223.     JMP    EDIT5
  2224. EDIT6    LXI    H,TBUF
  2225.     CALL    SET1
  2226.     XRA    A
  2227.     STA    CNTR
  2228. CHNG1    MVI    A,13
  2229.     CMP    M
  2230.     JZ    ERR2
  2231.     MVI    A,' '
  2232.     CMP    M
  2233.     JNZ    CHNG5
  2234.     INX    H
  2235.     JMP    CHNG1
  2236. CHNG5    SHLD    ADDR1
  2237. CHNG6    MVI    A,13
  2238.     CMP    M
  2239.     JZ    ERR2
  2240.     MVI    A,'^'
  2241.     CMP    M
  2242.     JZ    CHNG2
  2243.     INX    H
  2244.     JMP    CHNG6
  2245. CHNG2    LHLD    BOFP
  2246.     INX    H
  2247. CHNGX    SHLD    ADDR2
  2248.     INX    H
  2249.     INX    H
  2250.     INX    H
  2251.     INX    H
  2252.     SHLD    ADDR3
  2253.     XCHG
  2254.     LHLD    ADDR1
  2255.     XCHG
  2256. CHNG3    LDAX    D
  2257.     CPI    '^'
  2258.     JZ    FUND
  2259.     CMP    M
  2260.     JNZ    NOTXX
  2261.     INX    H
  2262.     INX    D
  2263.     JMP    CHNG3
  2264. NOTXX    LHLD    ADDR1
  2265.     XCHG
  2266.     LHLD    ADDR3
  2267.     INX    H
  2268.     SHLD    ADDR3
  2269.     MVI    A,13
  2270.     CMP    M
  2271.     JNZ    CHNG3
  2272.     SHLD    ADDR3
  2273. EOFXX    LHLD    ADDR3
  2274.     INX    H
  2275.     MVI    A,1
  2276.     CMP    M
  2277.     JZ    FINIX
  2278.     CALL    CONTC
  2279.     JZ    EOR
  2280.     INX    H
  2281.     JMP    CHNGX
  2282. FUND    LDA    CNTR
  2283.     INR    A
  2284.     STA    CNTR
  2285.     CALL    REDIT
  2286.     LDA    TEMP3
  2287.     ORA    A
  2288.     JZ    CHNG4
  2289.     LXI    D,IBUF
  2290.     CALL    SCRNCR
  2291. IN1    CALL    IN8
  2292.     CPI    13
  2293.     JZ    KEEP
  2294.     CPI    03
  2295.     JZ    EOR
  2296.     CPI    01
  2297.     JZ    DELT
  2298.     CPI    20H
  2299.     JZ    DELT
  2300.     JMP    IN1
  2301. KEEP    CALL    CRLF
  2302. CHNG4    CALL    LINE
  2303.     JMP    EOFXX
  2304. DELT    CALL    CRLF
  2305.     LHLD    ADDR4
  2306.     SHLD    ADDR3
  2307.     JMP    EOFXX
  2308. FINIX    LDA    CNTR
  2309.     ORA    A
  2310.     JNZ    EOR
  2311.     LXI    D,MESS3X
  2312.     JMP    REPLY
  2313. MESS3X    DB    'CHAR NOT FOUND'
  2314.     DB    '$'
  2315. REDIT    LXI    B,IBUF
  2316.     MVI    A,6
  2317.     STA    INCR
  2318.     LHLD    ADDR2
  2319.     MVI    D,5
  2320. EDIT3    DCR    D
  2321.     JZ    EDIT4
  2322.     MOV    A,M
  2323.     STAX    B
  2324.     INX    H
  2325.     INX    B
  2326.     JMP    EDIT3
  2327. EDIT4    SHLD    ADDR3
  2328.     XCHG
  2329.     LHLD    ADDR1
  2330.     XCHG
  2331. EDIT1    LDAX    D
  2332.     CPI    '^'
  2333.     JZ    STFND
  2334.     CMP    M
  2335.     JNZ    STNF
  2336.     INX    H
  2337.     INX    D
  2338.     JMP    EDIT1
  2339. STNF    LHLD    ADDR3
  2340.     MOV    A,M
  2341.     STAX    B
  2342.     INX    B
  2343.     LDA    INCR
  2344.     INR    A
  2345.     STA    INCR
  2346.     CPI    139
  2347.     JZ    ERR4X
  2348.     LHLD    ADDR1
  2349.     XCHG
  2350.     LHLD    ADDR3
  2351.     INX    H
  2352.     SHLD    ADDR3
  2353.     MVI    A,13
  2354.     CMP    M
  2355.     JNZ    EDIT1
  2356. ERR4X    LXI    D,MESS4X
  2357.     JMP    REPLY
  2358. MESS4X    DB    'CHAR OVERFLOW'
  2359.     DB    '$'
  2360.     JMP    LNFUL
  2361. STFND    INX    D
  2362. EDIT2    LDAX    D
  2363.     CPI    13
  2364.     JZ    DADD
  2365.     STAX    B
  2366.     INX    B
  2367.     INX    D
  2368.     LDA    INCR
  2369.     INR    A
  2370.     STA    INCR
  2371.     CPI    139
  2372.     JZ    LNFUL
  2373.     JMP    EDIT2
  2374. DADD    MOV    A,M
  2375.     CPI    13
  2376.     JZ    LNFUL
  2377.     STAX    B
  2378.     INX    H
  2379.     INX    B
  2380.     LDA    INCR
  2381.     INR    A
  2382.     STA    INCR
  2383.     CPI    139
  2384.     JZ    LNFUL
  2385.     JMP    DADD
  2386. LNFUL    MVI    A,13
  2387.     STAX    B
  2388.     INX    B
  2389.     MVI    A,1
  2390.     STAX    B
  2391.     SHLD    ADDR4
  2392.     STAX    B
  2393.     LHLD    ADDR2
  2394.     DCX    H
  2395.     DCX    H
  2396.     SHLD    ADDR3
  2397.     LDA    INCR
  2398.     STA    IBUF-1
  2399.     RET
  2400. RECOVER    CALL    RVSUB
  2401.     ORA    A
  2402.     JNZ    RCVR9
  2403.     CALL    FREE
  2404.     LXI    D,MESSA6
  2405.     JMP    REPLY
  2406. RCVR9    LXI    D,MESSA5
  2407.     JMP    REPLY
  2408. MESSA5    DB    'CANNOT RECOVER'
  2409.     DB    '$'
  2410. MESSA6    DB    'RECOVERY SUCCESSFUL'
  2411.     DB    '$'
  2412. RVSUB    LHLD    BOFP
  2413.     MOV    A,M
  2414.     CPI    01
  2415.     JNZ    RCVR5
  2416.     MVI    B,2
  2417. RCVR1    INX    H
  2418.     MOV    A,M
  2419.     CPI    13
  2420.     JZ    RCVR2
  2421.     INR    B
  2422.     MVI    A,139
  2423.     CMP    B
  2424.     JNZ    RCVR1
  2425.     MVI    A,1
  2426.     RET
  2427. RCVR2    LHLD    BOFP
  2428.     MOV    M,B
  2429.     JMP    RECOVER
  2430. RCVR5    SHLD    ADDR1
  2431. RCVR3    XCHG
  2432.     LHLD    ADDR1
  2433.     SHLD    ADDR2
  2434.     XCHG
  2435.     SHLD    ADDR1
  2436.     MOV    A,M
  2437.     CPI    01
  2438.     JZ    RCVRD
  2439.     MOV    B,A
  2440.     DCR    B
  2441. RCVR4    INX    H
  2442.     LDA    TOP+1
  2443.     CMP    H
  2444.     JNZ    RCVR7
  2445.     LDA    TOP
  2446.     CMP    L
  2447.     JZ    RCVR8
  2448. RCVR7    DCR    B
  2449.     JNZ    RCVR4
  2450.     MOV    A,M
  2451.     INX    H
  2452.     CPI    13
  2453.     JZ    RCVR3
  2454. RCVR8    LHLD    ADDR1
  2455.     MVI    A,01
  2456.     MOV    M,A
  2457. RCVRD    SHLD    EOFP
  2458.     LHLD    ADDR2
  2459.     INX    H
  2460.     MVI    B,4
  2461.     LXI    D,MAXL
  2462. RCVR6    MOV    A,M
  2463.     STAX    D
  2464.     INX    H
  2465.     INX    D
  2466.     DCR    B
  2467.     JNZ    RCVR6
  2468.     XRA    A
  2469.     RET
  2470. JUSTCMND    CALL    SETUP
  2471. JUST3    MOV    A,M
  2472.     CPI    13
  2473.     JZ    JUST5
  2474.     CPI    'O'
  2475.     JZ    JUST4
  2476.     CPI    6FH
  2477.     JZ    JUST4
  2478.     INX    H
  2479.     JMP    JUST3
  2480. JUST4    INX    H
  2481.     MOV    A,M
  2482.     CPI    'N'
  2483.     JZ    XJON
  2484.     CPI    6EH
  2485.     JZ    XJON
  2486.     CPI    'F'
  2487.     JZ    XJOFF2
  2488.     CPI    66H
  2489.     JZ    XJOFF2
  2490. JUST5    LDA    JSW
  2491. JUST6    ORA    A
  2492.     JZ    XJOFF
  2493.     LXI    D,MES12
  2494.     JMP    REPLY
  2495. XJOFF    LXI    D,MES11
  2496.     JMP    REPLY
  2497. XJON    MVI    A,1
  2498.     JMP    XJOFF2+1
  2499. XJOFF2    XRA    A
  2500.     STA    JSW
  2501.     JMP    JUST6
  2502. MES11    DB    'JUSTIFY OFF'
  2503.     DB    '$'
  2504. MES12    DB    'JUSTIFY ON'
  2505.     DB    '$'
  2506. NULLCMND    CALL    SETUP
  2507.     CALL    GPARM
  2508.     STA    NULLC
  2509.     LXI    D,MESSD
  2510.     JMP    REPLY
  2511. MESSD    DB    'NULL COUNT ACCEPTED'
  2512.     DB    '$'
  2513. OFFSCMND    CALL    SETUP
  2514.     CALL    GPARM
  2515.     STA    OFFST
  2516.     LXI    D,MESSO
  2517.     JMP    REPLY
  2518. MESSO    DB    'OFFSET ACCEPTED'
  2519.     DB    '$'
  2520. MARGINCMND    CALL    SETUP
  2521.     CALL    GPARM
  2522.     ORA    A
  2523.     JZ    ERR2
  2524.     DCR    A
  2525.     STA    OFFST
  2526.     CALL    GPARM
  2527.     ORA    A
  2528.     JZ    ERR2
  2529.     CPI    132
  2530.     JNC    ERR2
  2531.     MOV    B,A
  2532.     LDA    OFFST
  2533.     MOV    C,A
  2534.     MOV    A,B
  2535.     SUB    C
  2536.     JC    ERR2
  2537.     STA    LINES
  2538.     LXI    D,MESSM
  2539.     JMP    REPLY
  2540. MESSM    DB    'MARGINS SET'
  2541.     DB    '$'
  2542. PNUMCMND    CALL    SETUP
  2543.     CALL    GPARM
  2544.     DCR    A
  2545.     STA    PNO
  2546.     LXI    D,MESSP
  2547.     JMP    REPLY
  2548. MESSP    DB    'PAGE NO ACCEPTED'
  2549.     DB    '$'
  2550. REPEATCMND    CALL    SETUP
  2551.     CALL    GPARM
  2552.     STA    RPEAT
  2553.     LXI    D,MESSE
  2554.     JMP    REPLY
  2555. MESSE    DB    'REPEAT COUNT ACCEPTED'
  2556.     DB    '$'
  2557. LINECMND    CALL    SETUP
  2558.     CALL    GPARM
  2559.     STA    LINES
  2560.     LXI    D,MESSF
  2561.     JMP    REPLY
  2562. MESSF    DB    'CHAR/LINE CHANGED'
  2563.     DB    '$'
  2564. SPACECMND    CALL    SETUP
  2565.     CALL    GPARM
  2566.     STA    SPACE
  2567.     LXI    D,MESSG
  2568.     JMP    REPLY
  2569. MESSG    DB    'SPACING CHANGED'
  2570.     DB    '$'
  2571. UNITCMND    CALL    SETUP
  2572.     MOV    A,M
  2573.     CPI    'L'
  2574.     JZ    UNIT1
  2575.     CPI    6CH    ;LOWER CASE L
  2576.     JZ    UNIT1
  2577.     CPI    63H    ;LOWER CASE C
  2578.     JZ    CONUNIT
  2579.     CPI     'C'
  2580.     JNZ    ERR2
  2581. CONUNIT    EQU    $
  2582.     MVI    A,CONSOLE
  2583.     JMP    UNIT5
  2584. UNIT1    MVI    A,PRINTER
  2585. UNIT5    STA    UNIT
  2586.     LXI    D,MESS7
  2587.     JMP    REPLY
  2588. MESS7    DB    'PRINT DEVICE CHANGED'
  2589.     DB    '$'
  2590. PAGECMND    CALL    SETUP
  2591.     CALL    GPARM
  2592.     ORA    A
  2593.     JZ    ERR2
  2594.     STA    PAGE1
  2595.     CALL    GPARM
  2596.     ORA    A
  2597.     JZ    OK1
  2598.     STA    PAGE2
  2599.     CALL    GPARM
  2600.     ORA    A
  2601.     JZ    OK1
  2602.     STA    PAGE3
  2603. OK1    LXI    D,MESS8
  2604.     JMP    REPLY
  2605. MESS8    DB    'PAGE PARMS CHANGED'
  2606.     DB    '$'
  2607. TITLECMND    CALL    SETUP
  2608.     MVI    B,50
  2609.     LXI    D,TITLEX
  2610. TTITL0    MOV    A,M
  2611.     CPI    ' '
  2612.     JNZ    TTITL1
  2613.     INX    H
  2614.     JMP    TTITL0
  2615. TTITL1    MOV    A,M
  2616.     STAX    D
  2617.     CPI    13
  2618.     JZ    TTITL2
  2619.     INX    H
  2620.     INX    D
  2621.     DCR    B
  2622.     JNZ    TTITL1
  2623.     LXI    D,MESSA
  2624.     JMP    REPLY
  2625. MESSA    DB    'TITLE TOO LONG'
  2626.     DB    '$'
  2627. TTITL2    LXI    D,MESS9
  2628.     JMP    REPLY
  2629. MESS9    DB    'TITLE ACCEPTED'
  2630.     DB    '$'
  2631. ;    GET    1 PARAMETER
  2632. GPARM    PUSH    B
  2633.     PUSH    D
  2634.     XRA    A
  2635.     STA    SAVE
  2636. GPRM2    MOV    A,M
  2637.     CPI    13
  2638.     JZ    PEOF
  2639.     CPI    ','
  2640.     JZ    PARAM0
  2641.     CPI    ' '
  2642.     JNZ    PARAM1
  2643. PARAM0    INX    H
  2644.     JMP    GPRM2
  2645. PARAM1    EQU    $
  2646.     CPI    '0'
  2647.     JC    ERR3
  2648.     CPI    '9'+1
  2649.     JNC    ERR3
  2650.     ANI    0FH
  2651.     MOV    E,A
  2652.     LDA    SAVE
  2653.     MOV    B,A
  2654.     RLC
  2655.     RLC
  2656.     RLC
  2657.     ADD    B
  2658.     ADD    B
  2659.     ADD    E
  2660.     STA    SAVE
  2661.     INX    H
  2662.     MOV    A,M
  2663.     CPI    13
  2664.     JZ    PEOF
  2665.     CPI    ','
  2666.     JZ    PEOF3
  2667.     CPI    ' '
  2668.     JZ    PEOF3
  2669.     JMP    PARAM1
  2670. PEOF3    INX    H
  2671. PEOF    LDA    SAVE
  2672.     POP    D
  2673.     POP    B
  2674.     RET
  2675. FINDCMND    CALL    CRLF
  2676.     CALL    SETUP
  2677.     XRA    A
  2678.     STA    CNTR
  2679. FIND1    MVI    A,13
  2680.     CMP    M
  2681.     JZ    ERR2
  2682.     MVI    A,' '
  2683.     CMP    M
  2684.     JNZ    FIND2
  2685.     INX    H
  2686.     JMP    FIND1
  2687. FIND2    SHLD    ADDR1
  2688.     LHLD    BOFP
  2689.     INX    H
  2690. FINDX    SHLD    ADDR2
  2691.     INX    H
  2692.     INX    H
  2693.     INX    H
  2694.     INX    H
  2695.     SHLD    ADDR3
  2696.     XCHG
  2697.     LHLD    ADDR1
  2698.     XCHG
  2699. FIND3    LDAX    D
  2700.     CPI    13
  2701.     JZ    FOUND
  2702.     CMP    M
  2703.     JNZ    NOTFD
  2704.     INX    H
  2705.     INX    D
  2706.     JMP    FIND3
  2707. NOTFD    LHLD    ADDR1
  2708.     XCHG
  2709.     LHLD    ADDR3
  2710.     INX    H
  2711.     SHLD    ADDR3
  2712.     MVI    A,13
  2713.     CMP    M
  2714.     JNZ    FIND3
  2715. EOFLN    INX    H
  2716.     MVI    A,1
  2717.     CMP    M
  2718.     JZ    FINI
  2719.     CALL    CONTC
  2720.     JZ    EOR
  2721.     INX    H
  2722.     JMP    FINDX
  2723. FOUND    LHLD    ADDR2
  2724.     LDA    CNTR
  2725.     INR    A
  2726.     STA    CNTR
  2727. FIND5    MOV    A,M
  2728.     CPI    13
  2729.     JZ    FIND4
  2730.     MOV    B,A
  2731.     CALL    OUT8A
  2732.     INX    H
  2733.     JMP    FIND5
  2734. FIND4    CALL    OUTCR
  2735.     JMP    EOFLN
  2736. FINI    LDA    CNTR
  2737.     ORA    A
  2738.     JNZ    EOR
  2739.     LXI    D,MESSC
  2740.     JMP    REPLY
  2741. MESSC    DB    'CHAR NOT FOUND'
  2742.     DB    '$'
  2743. OPENCMND    CALL    RANGE
  2744.     MVI    A,1
  2745. OPEN2    STA    TEMP
  2746.     LXI    H,0100H
  2747.     SHLD    INCR
  2748.     CALL    VCHK
  2749.     LXI    H,LINE1
  2750.     LXI    D,ABUF+4
  2751.     CALL    PACK
  2752.     LHLD    LINE1
  2753.     SHLD    TBUF
  2754.     LXI    H,INCR
  2755.     LDAX    D
  2756.     CPI    0
  2757.     CNZ    PACK
  2758.     LHLD    LINE1
  2759.     SHLD    TEMP2
  2760.     CALL    LFIND
  2761. OPEN3    CALL    RNUMB
  2762.     MVI    C,4
  2763. OPEN4    INX    H
  2764.     DCR    C
  2765.     JNZ    OPEN4
  2766. OPEN5    INX    H
  2767.     MVI    A,0DH
  2768.     CMP    M
  2769.     JNZ    OPEN5
  2770.     INX    H
  2771.     MVI    A,1
  2772.     CMP    M
  2773.     JNZ    OPEN3
  2774.     LDA    TEMP
  2775.     ORA    A
  2776.     JZ    CFREE
  2777.     XRA    A
  2778.     JMP    OPEN2
  2779. CFREE    CALL    FREE
  2780.     JMP    EOR
  2781. RENUMBER    MVI    A,1
  2782. RECAL    STA    TEMP
  2783.     LXI    H,0500H
  2784.     SHLD    INCR
  2785.     CALL    VCHK
  2786.     LXI    H,LINE1
  2787.     LXI    D,ABUF
  2788.     CALL    PACK
  2789.     LXI    H,INCR
  2790.     LDAX    D
  2791.     CPI    0
  2792.     CNZ    PACK
  2793.     LHLD    LINE1
  2794.     SHLD    TEMP2
  2795.     LHLD    BOFP
  2796. NXLIN    CALL    RNUMB
  2797.     MVI    C,4
  2798. NUM1    INX    H
  2799.     DCR    C
  2800.     JNZ    NUM1
  2801. ALPHA    INX    H
  2802.     MVI    A,0DH
  2803.     CMP    M
  2804.     JNZ    ALPHA
  2805.     INX    H
  2806.     MVI    A,1
  2807.     CMP    M
  2808.     JNZ    NXLIN
  2809.     LDA    TEMP
  2810.     ORA    A
  2811.     JZ    CFREE
  2812.     XRA    A
  2813.     JMP    RECAL
  2814. RNUMB    PUSH    B
  2815.     PUSH    D
  2816.     PUSH    H
  2817.     MVI    C,2
  2818.     LXI    H,NUMBR
  2819.     LXI    D,LINE1
  2820. CVRT    LDAX    D
  2821.     RRC
  2822.     RRC
  2823.     RRC
  2824.     RRC
  2825.     CALL    NGEN
  2826.     LDAX    D
  2827.     CALL    NGEN
  2828.     INX    D
  2829.     DCR    C
  2830.     JNZ    CVRT
  2831.     LDA    TEMP
  2832.     ORA    A
  2833.     JNZ    NOMOV
  2834.     POP    H
  2835.     PUSH    H
  2836.     MVI    C,4
  2837.     LXI    D,NUMBR-1
  2838. CVRT1    INX    D
  2839.     INX    H
  2840.     LDAX    D
  2841.     MOV    M,A
  2842.     DCR    C
  2843.     JNZ    CVRT1
  2844.     LXI    H,MAXL
  2845.     MVI    C,4
  2846.     LXI    D,NUMBR
  2847. CVRT2    LDAX    D
  2848.     MOV    M,A
  2849.     INX    D
  2850.     INX    H
  2851.     DCR    C
  2852.     JNZ    CVRT2
  2853. NOMOV    LXI    D,LINE1+1
  2854.     LXI    H,INCR+1
  2855.     XRA    A
  2856.     LDAX    D
  2857.     ADC    M
  2858.     DAA
  2859.     STAX    D
  2860.     DCX    D
  2861.     DCX    H
  2862.     LDAX    D
  2863.     ADC    M
  2864.     DAA
  2865.     STAX    D
  2866.     LDA    TEMP2
  2867.     MOV    B,A
  2868.     LDA    LINE1
  2869.     CMP    B
  2870.     JC    TOBIG
  2871.     LHLD    LINE1
  2872.     SHLD    TEMP2
  2873.     POP    H
  2874.     POP    D
  2875.     POP    B
  2876.     RET
  2877. TOBIG    LXI    D,ERRM7
  2878.     JMP    REPLY
  2879. ERRM7    DB    'RENUMBER VALUES TOO BIG'
  2880.     DB    '$'
  2881. NGEN    ANI    0FH
  2882.     ADI    '0'
  2883.     MOV    M,A
  2884.     INX    H
  2885.     RET
  2886. TABSCMND    LXI    H,TABT
  2887.     MVI    B,10
  2888.     XRA    A
  2889. TAB6X    MOV    M,A
  2890.     INX    H
  2891.     DCR    B
  2892.     JNZ    TAB6X
  2893.     CALL    SETUP
  2894. TAB1    LXI    D,TABT
  2895.     MVI    B,10
  2896. TAB5X    PUSH    B
  2897.     CALL    GPARM
  2898.     STAX    D
  2899.     INX    D
  2900.     POP    B
  2901.     DCR    B
  2902.     JZ    TAB4
  2903.     MOV    A,M
  2904.     CPI    13
  2905.     JNZ    TAB5X
  2906. TAB4    LXI    D,ERRM8A
  2907.     JMP    REPLY
  2908. ERRM8A    DB    'TABS SET'
  2909.     DB    '$'
  2910. PRINTCMND    CALL    CRLF
  2911.     LHLD    BOFP
  2912.     MOV    A,M
  2913.     CPI    1
  2914.     JZ    STPIT
  2915.     MVI    A,1
  2916.     STA    LOMRG
  2917.     LDA    LINES
  2918.     STA    HIMRG
  2919.     STA    CCNT
  2920.     CALL    STADD
  2921. PRNT1    CALL    FIND
  2922.     XRA    A
  2923.     STA    JUSTY
  2924.     STA    ULFLG
  2925.     STA    HALT
  2926.     INX    H
  2927.     INX    H
  2928.     INX    H
  2929.     INX    H
  2930.     INX    H
  2931.     MVI    A,13
  2932.     STA    HL
  2933.     CALL    CMNDS
  2934.     LDA    PNO
  2935.     STA    TEMP+1
  2936. PRUN    XRA    A
  2937.     MOV    C,A
  2938.     STA    CNTR
  2939.     STA    TEMP
  2940.     LDA    TEMP+1
  2941.     INR    A
  2942.     STA    TEMP+1
  2943.     JZ    SKIP1
  2944.     CPI    250
  2945.     JC    MOVE1
  2946.     DCR    A
  2947.     STA    TEMP+1
  2948. MOVE1    CALL    MOVIT
  2949.     LDA    TITLEX
  2950.     ORA    A
  2951.     JZ    PPG1
  2952.     LXI    D,TITLEX
  2953.     CALL    PRNTR
  2954.     LDA    TEMP+1
  2955.     ORA    A
  2956.     JZ    NOTTL
  2957.     LDA    TEMP+1
  2958.     CPI    250
  2959.     JNC    NOTTL
  2960. PPG1    LDA    LINES
  2961.     SBI    8
  2962.     CMP    C
  2963.     JC    PPG2
  2964.     JZ    PPG2
  2965.     MVI    B,' '
  2966.     CALL    OUT8A
  2967.     INR    C
  2968.     JMP    PPG1
  2969. PPG2    LDA    TEMP+1
  2970.     CPI    250
  2971.     JNC    NOTTL
  2972.     PUSH    H
  2973.     LXI    H,PN2
  2974.     CALL    BIND
  2975.     POP    H
  2976.     LXI    D,PN2
  2977.     LDAX    D
  2978.     CPI    '0'
  2979.     JNZ    PPG3
  2980.     INX    D
  2981.     LDAX    D
  2982.     CPI    '0'
  2983.     JNZ    PPG3
  2984.     INX    D
  2985. PPG3    CALL    PRNTR
  2986.     JMP    NOTTL
  2987.     DB    0CDH
  2988. SKIP1    INR    A
  2989.     STA    TEMP+1
  2990. NOTTL    CALL    PCRLF
  2991.     LDA    CNTR
  2992.     INR    A
  2993.     STA    CNTR
  2994.     MOV    B,A
  2995.     LDA    PAGE3
  2996.     CMP    B
  2997.     JZ    PBODY
  2998.     JC    PBODY
  2999.     JMP    NOTTL
  3000. PBODY    CALL    FORMT
  3001.     DCX    H
  3002.     MOV    A,M
  3003.     INX    H
  3004.     CPI    '\'
  3005.     JZ    EJECT
  3006. PB1    LXI    D,TBUF
  3007. CALL4    CALL    MOVIT
  3008.     CALL    PRNTR
  3009. PB2    CALL    PCRLF
  3010.     LDA    CNTR
  3011.     INR    A
  3012.     STA    CNTR
  3013.     LDA    TEMP
  3014.     INR    A
  3015.     STA    TEMP
  3016.     MOV    B,A
  3017.     LDA    PAGE2
  3018.     CMP    B
  3019.     JZ    FULL
  3020.     LDA    CNTR
  3021.     MOV    B,A
  3022.     LDA    PAGE1
  3023.     CMP    B
  3024.     JZ    FULL
  3025.     LDA    SPACE
  3026.     ORA    A
  3027.     JZ    NOTFL
  3028.     MOV    C,A
  3029. BLKLN    DCR    C
  3030.     JZ    NOTFL
  3031.     CALL    PCRLF
  3032.     LDA    CNTR
  3033.     INR    A
  3034.     STA    CNTR
  3035.     LDA    TEMP
  3036.     INR    A
  3037.     STA    TEMP
  3038.     MOV    B,A
  3039.     LDA    PAGE2
  3040.     CMP    B
  3041.     JZ    FULL
  3042.     LDA    CNTR
  3043.     MOV    B,A
  3044.     LDA    PAGE1
  3045.     CMP    B
  3046.     JZ    FULL
  3047.     JMP    BLKLN
  3048. NOTFL    CALL    CONTC
  3049.     JZ    RTRN
  3050.     MVI    A,1
  3051.     CMP    M
  3052.     JZ    FULL
  3053.     JMP    PBODY
  3054. EJECT    MOV    A,M
  3055.     CPI    13
  3056.     JZ    FULL
  3057. TRY    CPI    '0'
  3058.     JC    BAD
  3059.     CPI    '9'+1
  3060.     JC    GOOD
  3061. BAD    CPI    13
  3062.     JZ    FULL
  3063.     INX    H
  3064.     MOV    A,M
  3065.     JMP    TRY
  3066. GOOD    CALL    NUMB
  3067. GOOD1    MOV    A,M
  3068.     CPI    13
  3069.     JZ    GOOD2
  3070.     INX    H
  3071.     JMP    GOOD1
  3072. GOOD2    INX    H
  3073.     INX    H
  3074.     INX    H
  3075.     INX    H
  3076.     INX    H
  3077.     INX    H
  3078.     MVI    A,3
  3079.     STA    HL
  3080.     CALL    CMNDS
  3081.     LDA    TEMP
  3082.     ADD    B
  3083.     MOV    B,A
  3084.     LDA    PAGE2
  3085.     CMP    B
  3086.     JNC    PBODY
  3087.     JZ    PBODY
  3088. FULL    LDA    CNTR
  3089.     MOV    B,A
  3090.     LDA    PAGE1
  3091.     CMP    B
  3092.     JZ    CKEOF
  3093.     CALL    PCRLF
  3094.     LDA    CNTR
  3095.     INR    A
  3096.     STA    CNTR
  3097.     JMP    FULL
  3098.     DB    0C3H
  3099. CKEOF    MVI    A,1
  3100.     CMP    M
  3101.     JNZ    HALT1
  3102.     LDA    INSRT
  3103.     ORA    A
  3104.     CNZ    FLUSH
  3105.     LDA    RPEAT
  3106.     ORA    A
  3107.     JZ    RTRN
  3108.     CPI    1
  3109.     JZ    RTRN
  3110.     DCR    A
  3111.     STA    RPEAT
  3112.     CALL    PAUSE
  3113.     JMP    PRNT1
  3114. RTRN    XRA    A
  3115.     STA    SPACE
  3116.     CALL    EOFBA
  3117. STPIT    MVI    A,CONSOLE
  3118.     STA    UNIT
  3119.     JMP    EOR
  3120. HALT1    CALL    PAUSE
  3121.     JMP    PRUN
  3122. PCRLF    CALL    CONTC
  3123.     JZ    RTRN
  3124.     MVI    B,13
  3125.     CALL    OUT8A
  3126.     MVI    B,10
  3127.     CALL    OUT8A
  3128.     PUSH    D
  3129.     LDA    UNIT
  3130.     CPI    CONSOLE
  3131.     JNZ    NOSTP
  3132.     LDA    SRCNT
  3133.     ORA    A
  3134.     JZ    NOSTP
  3135.     LDA    HALT
  3136.     INR    A
  3137.     STA    HALT
  3138.     MOV    D,A
  3139.     LDA    SRCNT
  3140.     CMP    D
  3141.     JC    PT3
  3142.     JNZ    NOSTP
  3143. PT3    LXI    D,MESS5
  3144. PT1    LDAX    D
  3145.     CPI    '$'
  3146.     JZ    PT2
  3147.     MOV    B,A
  3148.     CALL    OUT8A
  3149.     INX    D
  3150.     JMP    PT1
  3151. PT2    CALL    IN8
  3152.     CPI    03
  3153.     JZ    STPIT
  3154.     CPI    13
  3155.     JNZ    PT2
  3156.     XRA    A
  3157.     STA    HALT
  3158.     MVI    B,13
  3159.     CALL    OUT8A
  3160.     MVI    B,10
  3161.     CALL    OUT8A
  3162. NOSTP    LDA    NULLC
  3163.     ORA    A
  3164.     JZ    PCRL2
  3165.     MOV    E,A
  3166. PCRL1    MVI    B,0
  3167.     CALL    OUT8A
  3168.     DCR    E
  3169.     JNZ    PCRL1
  3170. PCRL2    POP    D
  3171.     RET
  3172. FORMT    XRA    A
  3173.     STA    NCHR
  3174.     STA    SAVE
  3175.     STA    TBCNT
  3176. FORM1    XCHG
  3177.     LXI    H,TABT
  3178.     SHLD    TABAD
  3179.     LHLD    TADD
  3180.     XCHG
  3181. FORM2    MOV    A,M
  3182.     INX    H
  3183.     CPI    '>'
  3184.     JZ    MARG
  3185.     CPI    '['
  3186.     JZ    JON
  3187.     CPI    ']'
  3188.     JZ    JOFF
  3189.     CPI    '<'
  3190.     JZ    CON
  3191.     CPI    '^'
  3192.     JZ    INSR1
  3193.     CPI    13
  3194.     JZ    NEWLN
  3195.     CPI    '\'
  3196.     JZ    EOF2
  3197.     CPI    09
  3198.     JZ    TABEX
  3199.     CPI    7EH    ;TILDE-PAUSE
  3200.     JZ    YOUIN
  3201.     CPI    '.'
  3202.     JZ    EOFS
  3203.     CPI    '&'
  3204.     JNZ    FORM3
  3205.     CALL    SETUL
  3206.     DCX    D
  3207.     LDAX    D
  3208.     CPI    ' '
  3209.     JNZ    FL1
  3210.     MOV    A,M
  3211.     CPI    ' '
  3212.     JNZ    FL1
  3213.     JMP    FORM4
  3214. FL1    INX    D
  3215.     JMP    FORM2
  3216. FORM4    INX    D
  3217.     MVI    A,'&'
  3218. FORM3    STAX    D
  3219.     LDA    ULFLG
  3220.     ORA    A
  3221.     JZ    FORM5
  3222.     LDAX    D
  3223.     CPI    ' '
  3224.     JZ    FORM5
  3225.     ORI    80H
  3226.     STAX    D
  3227. FORM5    INX    D
  3228.     LDA    NCHR
  3229.     INR    A
  3230.     STA    NCHR
  3231.     MOV    B,A
  3232.     CALL    SAVER
  3233.     LDA    JUSTY
  3234.     ORA    A
  3235.     JZ    FORM2
  3236.     LDA    CCNT
  3237.     CMP    B
  3238.     JZ    FILLNX
  3239.     JMP    FORM2
  3240. EOFS    MOV    A,M
  3241.     CPI    13
  3242.     JNZ    NEOFS
  3243.     MVI    A,'.'
  3244.     STAX    D
  3245.     INX    D
  3246.     LDA    NCHR
  3247.     INR    A
  3248.     STA    NCHR
  3249.     MOV    B,A
  3250.     LDA    JUSTY
  3251.     ORA    A
  3252.     JZ    EOFS1
  3253.     LDA    CCNT
  3254.     CMP    B
  3255.     JZ    FILLNX
  3256. EOFS1    MVI    A,' '
  3257.     JMP    FORM3
  3258. NEOFS    MVI    A,'.'
  3259.     JMP    FORM3
  3260. SETUL    MOV    A,M
  3261.     CPI    13
  3262.     JZ    OFFUL
  3263.     CPI    ' '
  3264.     JNZ    ONUL
  3265. OFFUL    XRA    A
  3266.     JMP    STAUL
  3267. ONUL    MVI    A,1
  3268. STAUL    STA    ULFLG
  3269.     RET
  3270. MARG    MOV    A,M
  3271.     CPI    13
  3272.     JNZ    SETMG
  3273.     MVI    A,1
  3274.     STA    LOMRG
  3275.     LDA    LINES
  3276.     STA    HIMRG
  3277.     STA    CCNT
  3278.     CALL    STADD
  3279.     INX    H
  3280.     JMP    NXTLN
  3281.     DB    3AH
  3282. ;SET    MARGINS
  3283. SETMG    EQU    $
  3284.     CALL    NUMB
  3285.     MOV    A,B
  3286.     ORA    A
  3287.     JZ    MAR1
  3288.     STA    LOMRG
  3289.     LDA    LINES
  3290.     CMP    B
  3291.     JC    ERRMG
  3292.     MOV    A,M
  3293.     CPI    13
  3294.     JZ    MAR2
  3295.     INX    H
  3296.     JMP    MAR3
  3297. MAR1    INX    H
  3298.     MVI    A,1
  3299.     STA    LOMRG
  3300.     JMP    MAR3
  3301. MAR2    LDA    LINES
  3302.     JMP    MAR5
  3303. MAR6    LDA    LINES
  3304.     JMP    MAR5
  3305. MAR3    CALL    NUMB
  3306. MAR4    MOV    A,B
  3307.     ORA    A
  3308.     JZ    MAR6
  3309. MAR5    STA    HIMRG
  3310.     LDA    LOMRG
  3311.     MOV    B,A
  3312.     LDA    HIMRG
  3313.     SUB    B
  3314.     JC    ERRMG
  3315.     INR    A
  3316.     STA    CCNT
  3317.     LXI    D,TBUF
  3318.     MVI    B,133
  3319.     MVI    A,' '
  3320. CLR    STAX    D
  3321.     INX    D
  3322.     DCR    B
  3323.     JNZ    CLR
  3324.     CALL    STADD
  3325.     INX    H
  3326. NXTLN    MOV    A,M
  3327.     CPI    1
  3328.     JZ    EOF2
  3329.     INX    H
  3330.     INX    H
  3331.     INX    H
  3332.     INX    H
  3333.     INX    H
  3334.     MVI    A,3
  3335.     STA    HL
  3336.     CALL    CMNDS
  3337.     JMP    FORM2
  3338. ERRMG    LXI    D,ERRM4
  3339.     JMP    REPLY
  3340. ERRM4    DB    'MARGIN ERROR'
  3341.     DB    '$'
  3342. PATCH    DB    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  3343.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;PATCH AREA FOR FUTURE
  3344.                                             ;MODS
  3345. NUMB    XRA    A
  3346.     MOV    B,A
  3347. NUMB2    MOV    A,M
  3348.     CPI    13
  3349.     RZ
  3350.     CPI    ','
  3351.     RZ
  3352.     CPI    ' '
  3353.     RZ
  3354.     CPI    '0'
  3355.     JC    ERR3
  3356.     CPI    '9'+1
  3357.     JNC    ERR3
  3358.     ANI    0FH
  3359.     MOV    C,A
  3360.     MOV    A,B
  3361.     RLC
  3362.     RLC
  3363.     RLC
  3364.     ADD    B
  3365.     ADD    B
  3366.     ADD    C
  3367.     MOV    B,A
  3368.     INX    H
  3369.     JMP    NUMB2
  3370. STADD    EQU    $
  3371.     LXI    D,TBUF
  3372.     LDA    LOMRG
  3373.     DCR    A
  3374.     ADD    E
  3375.     MOV    E,A
  3376.     JNC    STAD1
  3377.     MOV    A,D
  3378.     INR    A
  3379.     MOV    D,A
  3380. STAD1    XCHG
  3381.     SHLD    TADD
  3382.     XCHG
  3383.     RET
  3384.     DB    0CDH
  3385. ;TAB    EXPANSION
  3386. TABEX    PUSH    H
  3387.     LHLD    TABAD
  3388. TABX1    MOV    A,M
  3389.     ORA    A
  3390.     JZ    TAB99
  3391.     LDA    TBCNT
  3392.     CPI    10
  3393.     JZ    TAB99
  3394.     INR    A
  3395.     STA    TBCNT
  3396. TABX3    LDA    NCHR
  3397.     MOV    B,A
  3398.     LDA    LOMRG
  3399.     ADD    B
  3400.     MOV    C,A ;TRUE POSITION
  3401.     MOV    A,M ;TAB POSITION
  3402.     CMP    C
  3403.     JZ    TAB98
  3404.     JNC    TABX2
  3405.     INX    H
  3406.     JMP    TABX1
  3407. TABX2    MVI    A,' '
  3408.     STAX    D
  3409.     INX    D
  3410.     LDA    NCHR
  3411.     INR    A
  3412.     STA    NCHR
  3413.     MOV    B,A
  3414.     LDA    CCNT
  3415.     CMP    B
  3416.     JZ    TAB98
  3417.     JC    TAB98
  3418.     JMP    TABX3
  3419.     DB    0CAH
  3420. TAB98    INX    H
  3421. TAB99    SHLD    TABAD
  3422.     POP    H
  3423.     JMP    FORM2
  3424. INSR1    LDA    INSRT
  3425.     ORA    A
  3426.     JNZ    INSR2
  3427.     MVI    A,'^'
  3428.     JMP    FORM3
  3429. INSR2    CALL    MOVBA
  3430.     JMP    FORM2
  3431.     DB    3AH
  3432. ;    LINE    FILL
  3433. SAVER    MOV    A,M
  3434.     CPI    ' '
  3435.     RNZ
  3436.     SHLD    ADDR1
  3437.     XCHG
  3438.     SHLD    ADDR2
  3439.     XCHG
  3440.     LDA    NCHR
  3441.     STA    ADDR4
  3442.     RET
  3443. FILLNX    EQU    $
  3444.     MVI    A,13
  3445.     STAX    D
  3446. FILL2X    LHLD    ADDR2
  3447.     XCHG
  3448.     LDA    ADDR4
  3449.     STA    NCHR
  3450. BKUP    DCX    D
  3451.     LDA    NCHR
  3452.     DCR    A
  3453.     STA    NCHR
  3454.     LDAX    D
  3455.     CPI    ' '
  3456.     JZ    BKUP
  3457. NOBU    LDA    JUSTY
  3458.     ORA    A
  3459.     CNZ    JSTFY
  3460.     LHLD    ADDR1
  3461. BLKCK    MOV    A,M
  3462.     INX    H
  3463.     CPI    ' '
  3464.     JZ    BLKCK
  3465.     INX    D
  3466.     DCX    H
  3467.     JMP    EOF2
  3468. ;JUSTIFICATION    ROUTINE
  3469. JSTFY    LDA    SAVE
  3470.     ORA    A
  3471.     RNZ
  3472.     LDA    JSW
  3473.     ORA    A
  3474.     RZ
  3475.     PUSH    H
  3476.     PUSH    B
  3477.     LDA    NCHR
  3478.     INR    A
  3479.     STA    NCHR
  3480.     MOV    B,A
  3481.     LDA    CCNT
  3482.     CMP    B
  3483.     JZ    JEND
  3484.     JC    JEND
  3485.     MVI    A,13
  3486.     INX    D
  3487.     STAX    D
  3488.     XCHG
  3489.     LHLD    TADD
  3490.     XCHG
  3491. INDT1    LDAX    D
  3492.     CPI    ' '
  3493.     JNZ    BLTWO
  3494.     INX    D
  3495.     JMP    INDT1
  3496. ;ADD    1    BLANK WHERE 2 OR MORE OCCUR
  3497. BLTWO    LDAX    D
  3498.     CPI    13
  3499.     JZ    ODD
  3500.     CPI    ' '
  3501.     JNZ    ONLY1
  3502.     INX    D
  3503.     LDAX    D
  3504.     CPI    13
  3505.     JZ    ODD
  3506.     CPI    ' '
  3507.     JNZ    ONLY1
  3508.     CALL    BLINS
  3509.     LDA    NCHR
  3510.     MOV    C,A
  3511.     LDA    CCNT
  3512.     CMP    C
  3513.     JZ    JEND
  3514.     JC    JEND
  3515. ONLY1    INX    D
  3516.     JMP    BLTWO
  3517.     DB    0CDH
  3518. ;EXTRA    BLANK    EVERY OTHER ONE
  3519. ODD    XCHG
  3520.     LHLD    TADD
  3521.     XCHG
  3522.     XRA    A
  3523.     STA    INSP
  3524. ODD2    LDAX    D
  3525.     CPI    ' '
  3526.     JNZ    ODD3
  3527.     INX    D
  3528.     JMP    ODD2
  3529. ODD3    LDAX    D
  3530.     CPI    13
  3531.     JZ    REBLK
  3532.     CPI    ' '
  3533.     JNZ    ODD4
  3534.     LDA    INSP
  3535.     ORA    A
  3536.     JZ    ODD5
  3537.     XRA    A
  3538.     STA    INSP
  3539.     CALL    BLINS
  3540.     LDA    NCHR
  3541.     MOV    C,A
  3542.     LDA    CCNT
  3543.     CMP    C
  3544.     JZ    JEND
  3545.     JC    JEND
  3546. ODD4    INX    D
  3547.     JMP    ODD3
  3548. ODD5    MVI    A,1
  3549.     STA    INSP
  3550.     JMP    ODD4
  3551.     DB    0CAH
  3552. ;ADD    BLANK    TO EVEN SPACES
  3553. REBLK    XCHG
  3554.     LHLD    TADD
  3555.     XCHG
  3556. INDT2    LDAX    D
  3557.     CPI    ' '
  3558.     JNZ    BLONE
  3559.     INX    D
  3560.     JMP    INDT2
  3561. BLONE    LDAX    D
  3562.     CPI    13
  3563.     JZ    REBLK
  3564.     CPI    ' '
  3565.     JNZ    NOBLK
  3566.     CALL    BLINS
  3567.     LDA    NCHR
  3568.     MOV    C,A
  3569.     LDA    CCNT
  3570.     CMP    C
  3571.     JZ    JEND
  3572.     JC    JEND
  3573. NOBLK    INX    D
  3574.     JMP    BLONE
  3575. JEND    POP    B
  3576.     POP    H
  3577.     XCHG
  3578.     LHLD    TADD
  3579.     XCHG
  3580. JEND2    LDAX    D
  3581.     CPI    13
  3582.     RZ
  3583.     INX    D
  3584.     JMP    JEND2
  3585. ;    BLANK    INSERT
  3586. BLINS    PUSH    H
  3587.     PUSH    B
  3588.     LXI    B,TBUF+130
  3589.     LXI    H,TBUF+131
  3590. BLIN1    LDAX    B
  3591.     MOV    M,A
  3592.     MOV    A,D
  3593.     CMP    B
  3594.     JNZ    BLIN3
  3595.     MOV    A,E
  3596.     CMP    C
  3597.     JZ    BLIN2
  3598. BLIN3    DCX    B
  3599.     DCX    H
  3600.     JMP    BLIN1
  3601. BLIN2    MVI    A,' '
  3602.     STAX    D
  3603.     LDA    NCHR
  3604.     INR    A
  3605.     STA    NCHR
  3606. BLIN4    INX    D
  3607.     LDAX    D
  3608.     CPI    ' '
  3609.     JZ    BLIN4
  3610.     POP    B
  3611.     POP    H
  3612.     RET
  3613. YOUIN    CALL    IN8
  3614.     CPI    03
  3615.     JZ    STPIT
  3616. X5F3    CPI    08
  3617.     JZ    BACKYOU
  3618.     CPI    13
  3619.     JZ    CKK
  3620.     STAX    D
  3621.     MOV    B,A
  3622.     INX    D
  3623.     LDA    UNIT
  3624.     CPI    CONSOLE
  3625.     JZ    SKIP2
  3626.     CALL    OUT8
  3627. SKIP2    LDA    NCHR
  3628.     INR    A
  3629.     STA    NCHR
  3630.     MOV    B,A
  3631.     LDA    CCNT
  3632.     CMP    B
  3633.     JZ    CKK
  3634.     JC    CKK
  3635.     JMP    YOUIN
  3636. BACKYOU    LDA    NCHR
  3637.     ORA    A
  3638.     JZ    YOUIN
  3639.     DCR    A
  3640.     STA    NCHR
  3641.     DCX    D
  3642.     LDA    X5F3+1
  3643.     CALL    OUT8
  3644.     JMP    YOUIN
  3645. CKK    JMP    FORM2
  3646. JON    MVI    C,1
  3647.     JMP    JOFF+1
  3648. JOFF    XRA    A
  3649.     STA    JUSTY
  3650.     JMP    FORM2
  3651. NEWLN    MOV    A,M
  3652.     CPI    1
  3653.     JZ    EOF2
  3654.     INX    H
  3655.     INX    H
  3656.     INX    H
  3657.     INX    H
  3658.     INX    H
  3659.     LDA    JUSTY
  3660.     ORA    A
  3661.     JZ    EOF2
  3662.     SHLD    ADDR1
  3663.     XCHG
  3664.     SHLD    ADDR2
  3665.     XCHG
  3666.     LDA    NCHR
  3667.     STA    ADDR4
  3668.     MVI    A,' '
  3669.     JMP    FORM3
  3670. EOF2    MVI    A,13
  3671.     STAX    D
  3672.     MVI    A,3
  3673.     STA    HL
  3674.     CALL    CMNDS
  3675.     RET
  3676. PRNTR    PUSH    D
  3677.     PUSH    H
  3678.     XCHG
  3679.     SHLD    HL
  3680.     XRA    A
  3681.     MOV    C,A
  3682.     MOV    D,A
  3683.     LDA    BSCR
  3684.     CPI    'B'
  3685.     JZ    PRNT7
  3686. PRNT0    MOV    A,M
  3687.     CPI    13
  3688.     JZ    PRNT4
  3689.     ANI    80H
  3690.     JZ    PRNT2
  3691.     INR    D
  3692.     MOV    A,M
  3693.     ANI    7FH
  3694.     JMP    PRNT3
  3695. PRNT2    MOV    A,M
  3696. PRNT3    MOV    B,A
  3697.     CALL    OUT8A
  3698.     INR    C
  3699.     INX    H
  3700.     JMP    PRNT0
  3701. PRNT4    MOV    A,D
  3702.     ORA    A
  3703.     JZ    PRNT9
  3704.     MVI    B,0DH
  3705.     CALL    OUT8A
  3706.     PUSH    B
  3707.     CALL    MOVIT
  3708.     POP    B
  3709.     LHLD    HL
  3710. PRNT5    MOV    A,M
  3711.     CPI    13
  3712.     JZ    PRNT9
  3713.     ANI    80H
  3714.     JZ    PRNT6
  3715.     MVI    B,'_'
  3716.     CALL    OUT8A
  3717.     INX    H
  3718.     DCR    D
  3719.     JZ    PRNT9
  3720.     JMP    PRNT5
  3721. PRNT6    MVI    B,' '
  3722.     CALL    OUT8A
  3723.     INX    H
  3724.     JMP    PRNT5
  3725. PRNT7    MOV    A,M
  3726.     CPI    13
  3727.     JZ    PRNT9
  3728.     ANI    80H
  3729.     JNZ    PRNT8
  3730.     MOV    A,M
  3731.     MOV    B,A
  3732. PRNTA    CALL    OUT8A
  3733.     INR    C
  3734.     INX    H
  3735.     JMP    PRNT7
  3736. PRNT8    MOV    A,M
  3737.     ANI    7FH
  3738.     MOV    B,A
  3739.     CALL    OUT8A
  3740.     MVI    B,08
  3741.     CALL    OUT8A
  3742.     MVI    B,5FH
  3743.     JMP    PRNTA
  3744. PRNT9    POP    H
  3745.     POP    D
  3746.     RET
  3747. CKJ    INX    H
  3748.     MVI    A,1
  3749.     STA    SAVE
  3750.     CALL    FORM1
  3751.     JMP    PB1
  3752. ;CENTER    TITLEX
  3753.     DB    0CDH
  3754. CON    PUSH    B
  3755.     XRA    A
  3756.     MOV    C,A
  3757.     LXI    D,TBUF
  3758. CPY    MOV    A,M
  3759.     INX    H
  3760.     CPI    '&'
  3761.     JNZ    CEN2
  3762.     CALL    SETUL
  3763.     DCX    D
  3764.     LDAX    D
  3765.     CPI    ' '
  3766.     JNZ    CEN4
  3767.     MOV    A,M
  3768.     CPI    ' '
  3769.     JNZ    CEN4
  3770.     JMP    CEN1
  3771. CEN4    INX    D
  3772.     JMP    CPY
  3773. CEN1    INX    D
  3774.     MVI    A,'&'
  3775. CEN2    CPI    13
  3776.     JZ    CENT
  3777.     STAX    D
  3778.     LDA    ULFLG
  3779.     ORA    A
  3780.     JZ    CEN3
  3781.     LDAX    D
  3782.     CPI    ' '
  3783.     JZ    CEN3
  3784.     ORI    80H
  3785.     STAX    D
  3786. CEN3    INX    D
  3787.     INR    C
  3788.     MOV    B,C
  3789.     LDA    LINES
  3790.     CMP    B
  3791.     JNC    CPY
  3792.     JZ    DON2
  3793.     POP    B
  3794.     LXI    D,ERRM3
  3795.     JMP    REPLY
  3796. ERRM3    DB    'LINE TOO SMALL TO CENTER'
  3797.     DB    '$'
  3798.     DB    03AH
  3799. CENT    MVI    A,13
  3800.     STAX    D
  3801.     XCHG
  3802.     SHLD    ADDR1
  3803.     XCHG
  3804.     INR    C
  3805.     MOV    A,C
  3806.     STA    NCHR
  3807.     MOV    B,A
  3808.     LDA    LINES
  3809.     SUB    B
  3810.     RRC
  3811.     ANI    07FH
  3812.     INR    A
  3813.     MOV    B,A
  3814.     PUSH    H
  3815. LOOP4    LHLD    ADDR1
  3816.     XCHG
  3817.     LHLD    ADDR1
  3818.     INX    H
  3819.     SHLD    ADDR1
  3820.     LDA    NCHR
  3821.     MOV    C,A
  3822. LOOP3    LDAX    D
  3823.     MOV    M,A
  3824.     MVI    A,' '
  3825.     STAX    D
  3826.     DCX    H
  3827.     DCX    D
  3828.     DCR    C
  3829.     JNZ    LOOP3
  3830.     DCR    B
  3831.     JNZ    LOOP4
  3832.     LHLD    ADDR1
  3833.     XCHG
  3834.     POP    H
  3835. DON2    POP    B
  3836.     JMP    NEWLN
  3837. ;PAGE    NO    TO DBII
  3838. BIND    MVI    B,100
  3839.     CALL    BID1
  3840.     MVI    B,10
  3841.     CALL    BID1
  3842.     ADI    '0'
  3843.     MOV    M,A
  3844.     RET
  3845. BID1    MVI    M,'0'-1
  3846.     INR    M
  3847.     SUB    B
  3848.     JNC    BID1+2
  3849.     ADD    B
  3850.     INX    H
  3851.     RET
  3852. PN2    DB    '000'
  3853.     DB    13
  3854. PAUSE    LDA    STOP
  3855.     ORA    A
  3856.     RZ
  3857. PAZ    CALL    IN8
  3858.     CPI    13
  3859.     JNZ    PAZ
  3860.     RET
  3861. MOVIT    LDA    OFFST
  3862.     ORA    A
  3863.     RZ
  3864.     MOV    C,A
  3865.     MVI    B,' '
  3866. SHIFTX    CALL    OUT8A
  3867.     DCR    C
  3868.     JNZ    SHIFTX
  3869.     RET
  3870. CMNDS    PUSH    D
  3871. CMND2    MOV    A,M
  3872.     CPI    '#'
  3873.     JNZ    RETRN
  3874.     SHLD    ADDR1
  3875.     LXI    D,IBUF
  3876.     INX    H
  3877. UPPER    MOV    A,M
  3878.     STAX    D
  3879.     INX    D
  3880.     INX    H
  3881.     CPI    13
  3882.     JZ    SCAN
  3883.     JMP    UPPER
  3884. SCAN    SHLD    DE
  3885.     MVI    B,4
  3886.     LXI    D,IBUF
  3887. SCAN2    LDAX    D
  3888.     CPI    60H
  3889.     JC    SCAN3
  3890.     SBI    20H
  3891.     STAX    D
  3892. SCAN3    INX    D
  3893.     DCR    B
  3894.     JNZ    SCAN2
  3895.     LXI    D,CTABX
  3896.     LDA    HL
  3897.     MOV    B,A
  3898.     MVI    A,4
  3899.     STA    NCHR
  3900.     CALL    COMS
  3901.     JNZ    ERR1
  3902.     PCHL
  3903. NOGO    LHLD    ADDR1
  3904. RETRN    POP    D
  3905.     RET
  3906. CTABX    DB    'SPAC'
  3907.     DW    SPAC2
  3908.     DB    'COMM'
  3909.     DW    COMNT
  3910.     DB    'CHAI'
  3911.     DW    CHAINR
  3912.     DB    'NULL'
  3913.     DW    NULL1
  3914.     DB    'TITL'
  3915.     DW    TITL1
  3916.     DB    'LINE'
  3917.     DW    LINE2
  3918.     DB    'DEVI'
  3919.     DW    UNIT2
  3920.     DB    'PAGE'
  3921.     DW    PAGEZ
  3922.     DB    'JUST'
  3923.     DW    JUSTZ
  3924.     DB    'TABS'
  3925.     DW    TABSZ
  3926.     DB    'OFFS'
  3927.     DW    OFF2
  3928.     DB    'PNUM'
  3929.     DW    PNUM2
  3930.     DB    'MARG'
  3931.     DW    MARG1
  3932. MARG1    CALL    SETUP
  3933.     CALL    NUMB
  3934.     MOV    A,B
  3935.     ORA    A
  3936.     JZ    ERR1
  3937.     DCR    A
  3938.     STA    OFFST
  3939.     INX    H
  3940.     CALL    NUMB
  3941.     MOV    A,B
  3942.     ORA    A
  3943.     JZ    ERR1
  3944.     MOV    C,A
  3945.     LDA    OFFST
  3946.     MOV    B,A
  3947.     MOV    A,C
  3948.     SUB    B
  3949.     JC    ERR1
  3950.     STA    LINES
  3951.     STA    HIMRG
  3952.     STA    CCNT
  3953.     JMP    SKIP3
  3954. COMNT    CALL    SETUP
  3955.     JMP    SKIP3
  3956. NULL1    CALL    SETUP
  3957.     CALL    NUMB
  3958.     MOV    A,B
  3959.     STA    NULLC
  3960.     JMP    SKIP3
  3961. LINE2    CALL    SETUP
  3962.     CALL    NUMB
  3963.     MOV    A,B
  3964.     STA    LINES
  3965.     STA    HIMRG
  3966.     STA    CCNT
  3967.     JMP    SKIP3
  3968. SPAC2    CALL    SETUP
  3969.     CALL    NUMB
  3970.     MOV    A,B
  3971.     STA    SPACE
  3972.     JMP    SKIP3
  3973. UNIT2    CALL    SETUP
  3974.     MOV    A,M
  3975.     CPI    'L'
  3976.     JZ    UNIT3
  3977.     CPI    6CH    ;LOWER CASE L
  3978.     JZ    UNIT3
  3979.     CPI    63H    ;LOWER CASE C
  3980.     JZ    CONUNITC
  3981.     CPI    'C'
  3982.     JNZ    ERR2
  3983. CONUNITC EQU    $
  3984.     MVI    A,CONSOLE
  3985.     JMP    UNIT4
  3986. UNIT3    MVI    A,PRINTER
  3987. UNIT4    STA    UNIT
  3988.     JMP    SKIP3
  3989. OFF2    CALL    SETUP
  3990.     CALL    NUMB
  3991.     MOV    A,B
  3992.     STA    OFFST
  3993.     JMP    SKIP3
  3994. PNUM2    CALL    SETUP
  3995.     CALL    NUMB
  3996.     MOV    A,B
  3997.     DCR    A
  3998.     STA    PNO
  3999.     JMP    SKIP3
  4000. JUSTZ    CALL    SETUP
  4001.     CALL    ONOFF
  4002.     MOV    A,B
  4003.     STA    JSW
  4004.     JMP    SKIP3
  4005. PAGEZ    CALL    SETUP
  4006.     CALL    NUMB
  4007.     MOV    A,B
  4008.     STA    PAGE1
  4009.     MOV    A,M
  4010.     CPI    13
  4011.     JZ    SKIP3
  4012.     INX    H
  4013.     CALL    NUMB
  4014.     MOV    A,B
  4015.     STA    PAGE2
  4016.     MOV    A,M
  4017.     CPI    13
  4018.     JZ    SKIP3
  4019.     INX    H
  4020.     CALL    NUMB
  4021.     MOV    A,B
  4022.     STA    PAGE3
  4023.     JMP    SKIP3
  4024. TITL1    CALL    SETUP
  4025.     LXI    D,TITLEX
  4026.     MVI    B,50
  4027. TITL3    MOV    A,M
  4028.     STAX    D
  4029.     CPI    13
  4030.     JZ    SKIP3
  4031.     INX    H
  4032.     INX    D
  4033.     DCR    B
  4034.     JNZ    TITL3
  4035.     LXI    D,MSG5
  4036.     JMP    REPLY
  4037. MSG5    DB    'TITLE TOO LONG'
  4038.     DB    '$'
  4039. CHAINR    LHLD    BOFP
  4040.     SHLD    BOUND
  4041.     CALL    LOADR
  4042.     LHLD    BOFP
  4043.     LXI    SP,AREA+50
  4044.     INX    H
  4045.     INX    H
  4046.     INX    H
  4047.     INX    H
  4048.     INX    H
  4049.     LDA    TEMP+1
  4050.     STA    PNO
  4051.     MVI    A,13
  4052.     STA    HL
  4053.     CALL    CMNDS
  4054.     LDA    PNO
  4055.     STA    TEMP+1
  4056.     JMP    PB1
  4057. TABSZ    CALL    SETUP
  4058.     LXI    D,TABT
  4059.     MVI    B,10
  4060.     XRA    A
  4061. TAB6    STAX    D
  4062.     INX    D
  4063.     DCR    B
  4064.     JNZ    TAB6
  4065.     LXI    D,TABT
  4066.     MVI    B,10
  4067. TAB5    PUSH    B
  4068.     CALL    NUMB
  4069.     MOV    A,B
  4070.     STAX    D
  4071.     INX    D
  4072.     POP    B
  4073.     DCR    B
  4074.     JZ    SKIP3
  4075.     MOV    A,M
  4076.     CPI    13
  4077.     JZ    SKIP3
  4078.     INX    H
  4079.     JMP    TAB5
  4080.     DB    0CDH
  4081. ONOFF    XRA    A
  4082.     MOV    B,A
  4083.     MOV    A,M
  4084.     CPI    13
  4085.     RZ
  4086.     CPI    'O'
  4087.     JZ    ON2
  4088.     CPI    6FH
  4089.     RNZ
  4090. ON2    INX    H
  4091.     MOV    A,M
  4092.     CPI    'N'
  4093.     JZ    ON3
  4094.     CPI    6EH
  4095.     RNZ
  4096. ON3    MVI    B,1
  4097.     RET
  4098. SKIP3    LHLD    DE
  4099.     INX    H
  4100.     INX    H
  4101.     INX    H
  4102.     INX    H
  4103.     INX    H
  4104.     JMP    CMND2
  4105. DIRECTORY    EQU    $    ;LIST THE SYSTEM DIRECTORY
  4106.     MVI    A,4        ;FOUR ENTRIES ACCROSS ON THE SCREEN
  4107.     STA    TEMP
  4108.     CALL    CRLF
  4109.     CALL    SETUP
  4110.     MOV    A,M        ;SEE IF A DISK LETTER WAS ENTERED
  4111.     CPI    13
  4112.     JZ    DEFAULT        ;NONE ENTERED, USE DEFAULT DRIVE
  4113.     CPI    'A'        ;CHECK FOR A VALID DRIVE
  4114.     JC    ERR2
  4115.     CPI    'P'+1
  4116.     JNC    ERR2
  4117.     STA    DIRENTRY    ;STORE LETTER IN THE PRINTED LINE
  4118.     ANI    0FH        ;A=1...P=15
  4119.     STA    DUMMYFCB    ;SELECT ENTRIES ON THE RIGHT DRIVE
  4120.     JMP    GETFIRST
  4121. DEFAULT    MVI    A,20H        ;NO DRIVE SPECIFIED
  4122.     STA    DIRENTRY
  4123.     XRA    A
  4124.     STA    DUMMYFCB
  4125. GETFIRST    EQU    $    ;GET THE FIRST DIRECTORY ENTRY
  4126.     LXI    D,TBUF        ;SET THE DMA ADDR FOR THE DIRECTORY 
  4127.     MVI    C,1AH        ;ENTRY TO INTERENAL STORAGE
  4128.     CALL    BDOS
  4129.     LXI    D,DUMMYFCB    ;GET FIRST ENTRY USING THE DUMMYFCB
  4130.     MVI    C,11H        ;TO GET ALL FILES
  4131.     CALL    BDOS
  4132.     INR    A
  4133.     JZ    DIRECTDONE    ;NO MORE FILES
  4134.     JMP    FORMFCB
  4135. NEXTFCB    LXI    D,DUMMYFCB    ;GET THE NEXT ENTRY
  4136.     MVI    C,12H
  4137.     CALL    BDOS
  4138.     INR    A
  4139.     JZ    DIRECTDONE
  4140. FORMFCB    LXI    D,32        ;EACH ENTRY IS 32 BYTES LONG
  4141.     LXI    H,TBUF
  4142.     CPI    1        ;IS NEXT ENTRY THE FIRST ENTRY IN
  4143.     JZ    FORMREC        ;THE DIRECTORY RECORD?
  4144.     DAD    D        ;POSITION TO SECOND ONE
  4145.     CPI    2        ;IS IT THE SECOND ONE
  4146.     JZ    FORMREC
  4147.     DAD    D        ;POSITION TO THIRD ONE
  4148.     CPI    3
  4149.     JZ    FORMREC
  4150.     DAD    D        ;MUST BE FOURTH ONE
  4151. FORMREC    PUSH    H        ;CHECK THE EXTENT NUMBER
  4152.     LXI    D,12        ;POSITION TO EXTENT
  4153.     DAD    D        ;POSITION TO EXTENT
  4154.     MOV    A,M        ;ONLY SAVE ENTRIES WITH THE FIRST EXTENT
  4155.     ORA    A        ;FIRST ONLY
  4156.     JZ    FIRSTEXT
  4157.     CPI    1        ;DIR CAN ALSO HAVE EXT 1
  4158.     JZ    FIRSTEXT
  4159.     POP    H
  4160.     JMP    NEXTFCB
  4161. FIRSTEXT    POP    H    ;GET BACK TO FIRST BYTE OF FCB
  4162.     LXI    D,DIRENTRY
  4163.     INX    H        ;POSITION PAST DRIVE NUMBER
  4164.     INX    D
  4165.     INX    D        ;POSITION PAST COLON
  4166.     MVI    C,8        ;MOVE 8 CHAR IN FILE NAME
  4167. FIRST8    MOV    A,M
  4168.     STAX    D
  4169.     INX    H
  4170.     INX    D
  4171.     DCR    C
  4172.     JNZ    FIRST8
  4173.     INX    D        ;POSITION PAST PERIOD
  4174.     MVI    C,3        ;COPY THE FILE TYPE
  4175. NEXT3    MOV    A,M
  4176.     STAX    D
  4177.     INX    H
  4178.     INX    D
  4179.     DCR    C
  4180.     JNZ    NEXT3
  4181.     LXI    D,DIRENTRY    ;PRINT THE DIRECTORY ON CONSOLE
  4182.     CALL    SCRN
  4183.     LDA    TEMP        ;CHECK THE NUMBER OF ENTRIES ON
  4184.     DCR    A        ;ONE LINE TO SEE IF A NEW LINE
  4185.     STA    TEMP        ;IS NEEDED
  4186.     JNZ    NEXTFCB        ;NO
  4187.     MVI    A,4        ;SETUP NEXT LINE
  4188.     STA    TEMP
  4189.     CALL    CRLF
  4190.     CALL    CONTC        ;SEE IF YOU SHOULD ABORT EARLY
  4191.     JZ    EOR
  4192.     JMP    NEXTFCB
  4193. DIRECTDONE    MVI    C,0DH    ;RESET DISK SYSTEM
  4194.     CALL    BDOS
  4195.     CALL    CRLF
  4196.     JMP    EOR
  4197. DIRENTRY    DS    1
  4198.     DB    ':'
  4199.     DS    8
  4200.     DB    '.'
  4201.     DS    3
  4202.     DB    '  $'
  4203. DUMMYFCB    DB    0,'????????????',0,0,0,0,0,0,0,0,0,0,0
  4204.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0,0
  4205. BSAVEMSG    DB    0DH,0AH,'STRIP OFF LINE NUMBERS (Y/N)? $'
  4206. BLOADMSG    DB    0DH,0AH,'DO LINE NUMBERS ALREADY EXIST (Y/N)? $'
  4207.  
  4208. * CONVERT A CP/M STANDARD FORMATTED FILE INTO SECRTARY FORMAT
  4209. * IE TEXT, CR, LF ....TO BYTE COUNT, 4 ASCII DIGIT LINE NUMBER,
  4210. * TEXT, CR
  4211.  
  4212. BLOAD    CALL    CRLF        ;CREATE A SECRTARY FILE
  4213.     LHLD    BOFP        ;EMPTY THE MEMORY FILE
  4214.     SHLD    EOFP
  4215.     MVI    M,1
  4216.     LXI    H,0000
  4217.     SHLD    MAXL
  4218.     SHLD    MAXL+2
  4219.     CALL    GETFCB
  4220.     MVI    C,0FH        ;ATTEMPT TO OPEN FILE
  4221.     LXI    D,FCB
  4222.     CALL    BDOS
  4223.     LXI    D,NOFILE    ;ERROR IF NOT THERE
  4224.     INR    A
  4225.     JZ    REPLY        ;DMA HAS NOT BEEN SET YET SO NO RESET
  4226. BMSG2    LXI    D,BLOADMSG    ;ASK IF LINE NUMBERS EXIST
  4227.     CALL    SCRN
  4228.     CALL    IN8
  4229.     STA    SAVE
  4230.     MOV    B,A
  4231.     CALL    OUT8
  4232.     LDA    SAVE
  4233.     CPI    'Y'
  4234.     JZ    BLOAD1
  4235.     CPI    'N'
  4236.     JNZ    BMSG2
  4237. BLOAD1    CALL    RESETIO        ;SET DMA AND COUNTERS
  4238.     CALL    READBUFF
  4239.     XRA    A        ;CLEAR EOF INDICATOR
  4240.     STA    DISK
  4241.     LXI    H,0500H        ;SET STARTING LINE NUMBER AND
  4242.     SHLD    INCR        ;INCREMENT FOR AUTOMATIC LINE NUMBER
  4243.     SHLD    LINE1        ;GENERATION
  4244. BLOAD3    MVI    C,2        ;C=CHAR/LINE INCL CR AND BYTE COUNT
  4245.     LXI    H,IBUF        ;DESTINATION BUFFER
  4246.     LDA    SAVE        ;DO LINE NUMBERS ALREADY EXIST?
  4247.     CPI    'N'
  4248.     JNZ    BLOAD2        ;YES, SKIP AUTO GENERATION
  4249.     CALL    LNGEN
  4250.     MOV    A,C        ;INCREMENT CHAR/LINE COUNT
  4251.     ADI    4        ;BY THE LINE NUMBER CHARACTERS
  4252.     MOV    C,A
  4253. BLOAD2    CALL    GETCHAR        ;COPY THE LINE THRU A CR
  4254.     MOV    M,A
  4255.     CPI    13
  4256.     JZ    ENDOFLINE
  4257.     INR    C
  4258.     INX    H
  4259.     JMP    BLOAD2        ;NO CHECK IS MADE FOR MAX LINE SIZE
  4260. ENDOFLINE    INX    H    ;ADD ONE TO THE ADDR TO GET THE 01
  4261.     MVI    M,01
  4262.     MOV    A,C        ;MOVE IN THE BYTE COUNT
  4263.     STA    IBUF-1
  4264.     CALL    LINE        ;ADD LINE TO THE FILE
  4265.     CALL    GETCHAR        ;SKIP LINE FEED
  4266.     CPI    0AH
  4267.     JNZ    FORMATERR    ;WAS EXPECTING A LINE FEED
  4268.     LDA    DISK        ;CHECK EOF
  4269.     ORA    A
  4270.     JZ    BLOAD3
  4271.     CALL    RESETIO        ;RESET DMA
  4272.     CALL    FINDEND        ;FIND END OF FILE
  4273.     CALL    FREE        ;PRINT STORAGE USAGE
  4274.     JMP    EOR
  4275.  
  4276. GETCHAR    PUSH    H
  4277.     LHLD    BUFAD        ;GET THE ADDR OF NEXT CHAR
  4278.     MOV    A,M
  4279.     INX    H        ;INCREMENT BUFFER ADDR
  4280.     SHLD    BUFAD
  4281.     PUSH    PSW        ;SAVE INPUT CHARACTER
  4282.     LDA    BUFCT        ;SEE IF BUFFER IS NOW EMPTY
  4283.     DCR    A
  4284.     STA    BUFCT
  4285.     CZ    READBUFF    ;READ IN NEXT BUFFER IF SO
  4286.     LHLD    BUFAD        ;SEE IF EOF WAS JUST READ
  4287.     MOV    A,M        ;EOF IS AN 1AH
  4288.     CPI    1AH
  4289.     JNZ    RETURN
  4290.     STA    DISK
  4291. RETURN    POP    PSW
  4292.     POP    H
  4293.     RET
  4294. FORMATERR    CALL    RESETIO    ;FORMAT OF INPUT FILE WAS WRONG
  4295.     LXI    D,FERR
  4296.     JMP    REPLY
  4297. FERR    DB    'EXPECTED LINE FEED MISSING$'
  4298. READBUFF    PUSH    H    ;READ NEXT RECORD INTO BUFFER
  4299.     PUSH    D
  4300.     PUSH    B
  4301.     CALL    CLRALL
  4302.     LXI    D,FCB
  4303.     MVI    C,20        ;READ SEQUENTIAL
  4304.     CALL    BDOS
  4305.     INR    A
  4306.     JNZ    RESTORE        ;LAST RECORD READ
  4307.     MVI    A,1
  4308.     STA    DISK        ;SET EOF INDICATOR
  4309. RESTORE    POP    B        ;RESTORE THE ENVIRONMENT
  4310.     POP    D
  4311.     POP    H
  4312.     RET
  4313.  
  4314. BSAVE    CALL    CRLF        ;CONVERT A SECRTARY FILE TO
  4315.     CALL    GETFCB
  4316.     MVI    C,0FH        ;ATTEMPT TO OPEN
  4317.     LXI    D,FCB
  4318.     CALL    BDOS
  4319.     INR    A
  4320.     JZ    BMAKE        ;FILE NOT FOUND, CREATE ONE
  4321.     LXI    D,FCB        ;FILE FOUND, DELETE IT
  4322.     MVI    C,13H
  4323.     CALL    BDOS
  4324. BMAKE    LXI    D,FCB
  4325.     MVI    C,16H        ;MAKE A NEW FILE
  4326.     CALL    BDOS
  4327.     LXI    D,DISKFULL    ;DISK IS ALREADY FULL
  4328.     INR    A
  4329.     JZ    REPLY
  4330. BMSG1    LXI    D,BSAVEMSG    ;ASK ABOUT LINE NUMBERS
  4331.     CALL    SCRN        ;DO YOU WANT THEM STRIPPED OFF
  4332.     CALL    IN8
  4333.     STA    SAVE
  4334.     MOV    B,A
  4335.     CALL    OUT8
  4336.     LDA    SAVE
  4337.     CPI    'Y'        ;SAVE LINE NUMBERS
  4338.     JZ    BSAVE1
  4339.     CPI    'N'        ;STRIP LINE NUMBERS
  4340.     JNZ    BMSG1        ;BAD RESPONSE
  4341. BSAVE1    CALL    RESETIO
  4342.     LXI    H,DATA        ;BEGINNING OF DATA
  4343. COPYLINE    MOV    A,M    ;GET CHAR FROM MEMORY
  4344.     CPI    01        ;IS IT AN END OF FILE
  4345.     JZ    BSAVEEND
  4346.     LDA    SAVE
  4347.     CPI    'N'        ;SKIP COPYING THE LINE NUMBERS
  4348.     JZ    COPYCHAR
  4349.     INX    H
  4350.     INX    H
  4351.     INX    H
  4352.     INX    H
  4353. COPYCHAR    INX    H    ;COPY THE LINE
  4354.     MOV    A,M
  4355.     CALL    PUTCHAR        ;PUT CHAR INTO BUFFER
  4356.     MOV    A,M        ;WRITEBUFF MAY WIPE OUT ACC
  4357.     CPI    0DH        ;CR FOUND
  4358.     JNZ    COPYCHAR    ;NO, KEEP COPYING
  4359.     MVI    A,0AH        ;PUT OUT A LINE FEED ALSO
  4360.     CALL    PUTCHAR
  4361.     INX    H        ;POSITION TO CHAR COUNT
  4362.     JMP    COPYLINE
  4363. BSAVEEND    CALL    WRITEBUFF    ; WRITE LAST BUFFER
  4364.     JMP    CLOSEIT
  4365.  
  4366. RESETIO    MVI    C,0DH        ;RESET DISK SYSTEM
  4367.     CALL    BDOS
  4368. CLRALL    MVI    A,128
  4369.     STA    BUFCT
  4370.     LXI    H,80H        ;BUFFER ADDRESS
  4371.     SHLD    BUFAD
  4372.     MVI    C,128        ;CLEAR BUFFER WITH EOF (1AH)
  4373.     MVI    A,1AH        ;FOR ENDING THE LAST BUFFER
  4374. INITBUFF MOV    M,A        ;CLEAR BUFFER
  4375.     INX    H
  4376.     DCR    C
  4377.     JNZ    INITBUFF
  4378.     RET
  4379.  
  4380. PUTCHAR    PUSH    H        ;MOVE CHAR TO THE BUFFER
  4381.     LHLD    BUFAD
  4382.     MOV    M,A
  4383.     INX    H
  4384.     SHLD    BUFAD
  4385.     LDA    BUFCT
  4386.     DCR    A
  4387.     STA    BUFCT
  4388.     POP    H
  4389.     RNZ
  4390. WRITEBUFF    PUSH    H    ;WRITE ONE BUFFER FULL
  4391.     LXI    D,FCB
  4392.     MVI    C,15H        ;WRITE SEQUENTIAL
  4393.     CALL    BDOS
  4394.     ORA    A
  4395.     JNZ    WRITERR        ;DISK FULL
  4396.     CALL    CLRALL        ;RESET POINTERS/ CLEAR BUFFER
  4397.     POP    H
  4398.     RET
  4399. WRITERR    CALL    RESETIO        ;RESET DMA
  4400.     LXI    D,DISKFULL    ;PUT OUT ERROR MESSAGE
  4401.     JMP    REPLY
  4402.  
  4403. CONFIGURE    LXI    SP,AREA+50
  4404.     CALL    CRLF
  4405.     LXI    D,Q1
  4406.     CALL    SCRN
  4407.     CALL    IN8
  4408.     MOV    B,A
  4409.     CALL    OUT8
  4410.     MOV    E,B
  4411.     CALL    CRLF
  4412.     MOV    A,E
  4413.     CPI    'N'
  4414.     JZ    EOR
  4415.     CPI    'Y'
  4416.     JNZ    CONFIGURE
  4417. CNFG2    CALL    CRLF
  4418.     MVI    A,'Y'
  4419.     STA    FLG1
  4420. CNFG3    LXI    D,Q3
  4421.     CALL    SCRN
  4422.     CALL    IN8
  4423.     MOV    B,A
  4424.     CALL    OUT8
  4425.     MOV    A,B
  4426.     STA    BSPCH
  4427.     CALL    CRLF
  4428. CNFG5    LXI    D,Q5
  4429.     CALL    SCRN
  4430.     CALL    IN8
  4431.     MOV    B,A
  4432.     CALL    OUT8
  4433.     MOV    A,B
  4434.     CPI    'N'
  4435.     JZ    CNFGB
  4436.     CPI    'Y'
  4437.     JZ    CNFGC
  4438.     CALL    CRLF
  4439.     JMP    CNFG5
  4440. CNFGB    XRA    A
  4441.     JMP    CNFGC1
  4442. CNFGC    MVI    A,1
  4443. CNFGC1    STA    STOP
  4444.     CALL    CRLF
  4445.     LXI    D,Q6
  4446.     CALL    SCRN
  4447.     CALL    READ
  4448.     LXI    H,IBUF
  4449.     CALL    GPARM
  4450.     ORA    A
  4451.     JZ    CNFGC2
  4452.     DCR    A
  4453. CNFGC2    STA    SRCNT
  4454. CNFG8    CALL    CRLF
  4455.     LXI    D,Q8
  4456.     CALL    SCRN
  4457.     CALL    READ
  4458.     LXI    H,IBUF
  4459.     CALL    GPARM
  4460.     CPI    139
  4461.     JNC    CNFG8
  4462.     ADI    2
  4463.     STA    LNSIZ
  4464. CNFG7    CALL    CRLF
  4465.     LXI    D,Q7
  4466.     CALL    SCRN
  4467.     CALL    IN8
  4468.     MOV    B,A
  4469.     STA    WRAP
  4470.     CALL    OUT8
  4471.     CALL    CRLF
  4472.     LDA    WRAP
  4473.     CPI    'Y'
  4474.     JZ    CNF10
  4475.     CPI    'N'
  4476.     JZ    CNF10
  4477.     JMP    CNFG7
  4478. CNF10    LXI    D,Q10X
  4479.     CALL    SCRN
  4480.     CALL    IN8
  4481.     MOV    B,A
  4482.     CALL    OUT8
  4483.     MOV    A,B
  4484.     STA    BSCR
  4485.     CALL    CRLF
  4486.     LDA    BSCR
  4487.     CPI    'B'
  4488.     JZ    CNFGD
  4489.     CPI    'C'
  4490.     JZ    CNFGD
  4491.     JMP    CNF10
  4492. CNFGD    EQU    $
  4493.     MVI    A,'Y'
  4494.     STA    FLG1
  4495.     LXI    D,Q99X
  4496.     CALL    SCRN
  4497.     JMP    INITA
  4498. Q99X    DB    13,10,10
  4499.         DB    'IF YOU WANT TO SAVE THIS CONFIGURATION,',13,10
  4500.     DB    '"QUIT" AND ENTER "SAVE 48 SECRTARY.COM"'
  4501.     DB    13,10,10,'$'
  4502. Q1    DB    'CONFIGURE (Y/N)? '
  4503.     DB    '$'
  4504. Q3    DB    'TYPE CHAR USED FOR BACKSPACE'
  4505.     DB    '$'
  4506. Q5    DB    'STOP AT END OF EACH PAGE (Y/N)? '
  4507.     DB    '$'
  4508. Q6    DB    'LINES PER SCREEN OR ZERO? '
  4509.     DB    '$'
  4510. Q7    DB    'LINE WRAP AROUND ON INPUT (Y/N)? '
  4511.     DB    '$'
  4512. Q8    DB    'INPUT LINE LENGTH? '
  4513.     DB    '$'
  4514. Q10X    DB    'UNDERLINE USING BS OR CR (B/C)? '
  4515.     DB    '$'
  4516. ; STATUS COMMAND SHOWS ALL USER CHANGABLE INDICATORS
  4517. STATCMND    CALL    CRLF
  4518.     CALL    CRLF        ;BLANK LINE BEFORE DISPLAY
  4519.     LXI    D,STAT1        ;SCREEN SIZE
  4520.     CALL    SCRN
  4521.     LDA    SRCNT
  4522.     INR    A
  4523.     CALL    NUMBER
  4524.     LXI    D,STAT2
  4525.     CALL    SCRN
  4526.     LDA    LNSIZ
  4527.     DCR    A        ;CONFIGURE ADDS 2
  4528.     DCR    A
  4529.     CALL    NUMBER
  4530.     LXI    D,STAT3        ;LINE WRAPAROUND
  4531.     CALL    SCRN
  4532.     LDA    WRAP
  4533.     CALL    ALPHABETIC
  4534.     LXI    D,STAT4        ;UNDERLINE MODE
  4535.     CALL    SCRN
  4536.     LDA    BSCR
  4537.     CALL    ALPHABETIC
  4538.     CALL    CRLF
  4539.     LXI    D,STAT5        ;STOP AT BOTTOM OF PAGE
  4540.     CALL    SCRN
  4541.     LDA    STOP
  4542.     ORA    A
  4543.     JZ    STATUS1
  4544.     MVI    A,'Y'
  4545.     JMP    STATUS2
  4546. STATUS1    MVI    A,'N'
  4547. STATUS2    CALL    ALPHABETIC
  4548.     LXI    D,STAT7        ;NULL COUNT
  4549.     CALL    SCRN
  4550.     LDA    NULLC
  4551.     CALL    NUMBER
  4552.     LXI    D,STAT19    ;OFFSET
  4553.     CALL    SCRN
  4554.     LDA    OFFST
  4555.     CALL    NUMBER
  4556.     LXI    D,STAT12    ;SPACE
  4557.     CALL    SCRN
  4558.     LDA    SPACE
  4559.     ORA    A
  4560.     JNZ    STATINR
  4561.     MVI    A,1
  4562. STATINR    EQU    $
  4563.     CALL    NUMBER
  4564.     CALL    CRLF
  4565.     LXI    D,STAT8        ;PAGE SIZE
  4566.     CALL    SCRN
  4567.     LDA    PAGE1
  4568.     CALL    NUMBER
  4569.     LDA    PAGE2
  4570.     CALL    NUMBER
  4571.     LDA    PAGE3
  4572.     CALL    NUMBER
  4573.     LXI    D,STAT9        ;MARGINS
  4574.     CALL    SCRN
  4575.     LDA    OFFST
  4576.     INR    A
  4577.     CALL    NUMBER
  4578.     LDA    OFFST
  4579.     MOV    B,A
  4580.     LDA    LINES
  4581.     ADD    B
  4582.     CALL    NUMBER
  4583.     LXI    D,STAT10    ;OUTPUT LINE LENGTH
  4584.     CALL    SCRN
  4585.     LDA    LINES
  4586.     CALL    NUMBER
  4587.     CALL    CRLF
  4588.     LXI    D,STAT11    ;TAB SETTINGS
  4589.     CALL    SCRN
  4590.     LXI    D,TABT
  4591.     MVI    B,10
  4592.     LDAX    D
  4593.     ORA    A
  4594.     JNZ    STATTAB
  4595.     LXI    D,STAT99
  4596.     CALL    SCRN
  4597.     JMP    STATSPC
  4598. STATTAB    CALL    NUMBER
  4599.     INX    D
  4600.     DCR    B
  4601.     JZ    STATSPC
  4602.     LDAX    D
  4603.     ORA    A
  4604.     JNZ    STATTAB
  4605. STATSPC    EQU    $
  4606.     CALL    CRLF
  4607.     LXI    D,STAT13    ;TITLE
  4608.     CALL    SCRN
  4609.     LDA    TITLEX
  4610.     ORA    A
  4611.     JNZ    STATTTL
  4612.     LXI    D,STAT99
  4613.     CALL    SCRN
  4614.     JMP    STATLN6
  4615. STATTTL    LXI    D,TITLEX
  4616.     CALL    SCRNCR
  4617. STATLN6    CALL    CRLF
  4618.     LXI    D,STAT14    ;JUSTIFY
  4619.     CALL    SCRN
  4620.     LDA    JSW
  4621.     ORA    A
  4622.     JZ    STATJN
  4623.     MVI    A,'Y'
  4624.     JMP    STATJY
  4625. STATJN    MVI    A,'N'
  4626. STATJY    CALL    ALPHABETIC
  4627.     LXI    D,STAT16    ;UNIT
  4628.     CALL    SCRN
  4629.     LDA    UNIT
  4630.     CPI    CONSOLE
  4631.     JZ    STATCON
  4632.     MVI    A,'L'
  4633.     JZ    STATDEV
  4634. STATCON    MVI    A,'C'
  4635. STATDEV    CALL    ALPHABETIC
  4636.     LXI    D,STAT17    ;REPEAT
  4637.     CALL    SCRN
  4638.     LDA    RPEAT
  4639.     CALL    NUMBER
  4640.     LXI    D,STAT18    ;PAGE NUMBER--PNUM
  4641.     CALL    SCRN
  4642.     LDA    PNO
  4643.     INR    A
  4644.     CALL    NUMBER
  4645.     CALL    FREE        ;MEMORY UTILIZATION INFO
  4646.     CALL    CRLF
  4647.     JMP    EOR
  4648. NUMBER    EQU    $
  4649.     PUSH    H
  4650.     PUSH    D
  4651.     PUSH    B
  4652.     CALL    PREBLANK
  4653.     LXI    H,PN2
  4654.     CALL    BIND
  4655.     LXI    D,PN2
  4656.     LDAX    D
  4657.     CPI    '0'        ;SKIP LEADING ZEROES
  4658.     JNZ    PRTNUMB
  4659.     INX    D
  4660.     LDAX    D        ;SKIP ZEROES
  4661.     CPI    '0'
  4662.     JNZ    PRTNUMB
  4663.     INX    D
  4664. PRTNUMB    EQU    $
  4665.     CALL    SCRNCR
  4666.     POP    B
  4667.     POP    D
  4668.     POP    H
  4669.     RET
  4670.  
  4671. PREBLANK    PUSH    PSW        ;SAVE A REG
  4672.     MVI    B,20H
  4673.     CALL    OUT8
  4674.     POP    PSW
  4675.     RET
  4676.  
  4677. ALPHABETIC EQU    $        ;PRINT 1 ALPHA CHAR IN A
  4678.     CALL    PREBLANK
  4679.     MOV    B,A
  4680.     JMP    OUT8        ;PRINT IT USING OUT8'S RETURN
  4681. STAT1    DB    'SCREEN SIZE:','$'
  4682. STAT2    DB    ' X','$'
  4683. STAT3    DB    '   LINE WRAPAROUND:','$'
  4684. STAT4    DB    '   UNDERLINE:','$'
  4685. STAT5    DB    'STOP AT BOTTOM:','$'
  4686. STAT7    DB    '   NULLS:','$'
  4687. STAT8    DB    'PAGE SIZE:','$'
  4688. STAT9    DB    '   MARGINS:','$'
  4689. STAT10    DB    '   OUTPUT LINE:','$'
  4690. STAT11    DB    'TABS:','$'
  4691. STAT12    DB    '   SPACING:','$'
  4692. STAT13    DB    'TITLE: ','$'
  4693. STAT14    DB    'JUSTIFY:','$'
  4694. STAT16    DB    '   DEVICE:','$'
  4695. STAT17    DB    '   REPEAT:','$'
  4696. STAT18    DB    '   PNUM:','$'
  4697. STAT19    DB    '   OFFSET:','$'
  4698. STAT99    DB    ' NONE','$'
  4699. RAM    EQU    $
  4700. AREA    DS    55
  4701. DBR    EQU    13
  4702. BOFP    DS    2
  4703. EOFP    DS    2
  4704. TOP    DS    2
  4705. MPTY    DS    2
  4706. MAXL    DS    4
  4707. INSP    DS    2
  4708. DELP    EQU    INSP
  4709. HCON    DS    2
  4710. ADDS    EQU    HCON
  4711. FBUF    DS    5
  4712. NULLC    DS    1
  4713. SPACE    DS    1
  4714. LINES    DS    1
  4715. PAGE1    DS    1
  4716. PAGE2    DS    1
  4717. PAGE3    DS    1
  4718. FCB    DS    1
  4719. FILE    DS    8
  4720. FTYPE    DS    3
  4721.     DS    24
  4722. HTYPE    DS    4
  4723. BOUND    DS    2
  4724. RWIND    DS    1
  4725. DISK    DS    1
  4726. LINEA    DS    2
  4727. SAVE    DS    1
  4728. NUMBR    DS    4
  4729. INCR    DS    2
  4730. CNTR    DS    1
  4731. RPEAT    DS    1
  4732. BLKS    DS    1
  4733. BLOCK    DS    1
  4734. UNIT    DS    1
  4735. AUTO    DS    1
  4736. JUSTY    DS    1
  4737. JSW    DS    1
  4738. INSRT    DS    1
  4739. CALLC    DS    1
  4740. CALLD    DS    2
  4741. ABUF    DS    12
  4742. BBUF    DS    4
  4743. NCHR    DS    1
  4744. PNTR    DS    2
  4745. LINE1    DS    2
  4746. TEMP    DS    2
  4747. ADDR1    DS    2
  4748. ADDR2    DS    2
  4749. ADDR3    DS    2
  4750. ADDR4    DS    2
  4751. TEMP2    DS    2
  4752. TEMP3    DS    2
  4753. TITLEX    DS    50
  4754. HIMRG    DS    1
  4755. LOMRG    DS    1
  4756. CCNT    DS    1
  4757. TADD    DS    2
  4758. TABT    DS    10
  4759. TBCNT    DS    1
  4760. TABAD    DS    2
  4761. OFFST    DS    1
  4762. PNO    DS    1
  4763. BUFAD    DS    2
  4764. LAST    DS    1
  4765. BUFCT    DS    2
  4766. DSKAD    DS    2
  4767. RECCT    DS    1
  4768. CUSED    DS    1
  4769. INHIB    DS    1
  4770. HALT    DS    1
  4771. HL    DS    2
  4772. DE    DS    2
  4773. DBFLG    DS    1
  4774. ULFLG    DS    1
  4775. IBUF1    DS    1
  4776. IBUF    DS    140
  4777. TBUF    DS    140
  4778. MBUF    DS    128    ;MERGE COMMAND DATA BUFFER
  4779. MFCB    DS    36    ;MERGE COMMAND FCB
  4780. DATA    EQU    $
  4781.     END    100H
  4782.