home *** CD-ROM | disk | FTP | other *** search
- TITLE 'NORTH STAR SECRTARY AS OF 0308A'
-
- ;COPYRIGHT 1979, G. YOUNG, PO BOX 3218, NORTH HOLLYWOOD, CA 91609
- ;PERMISSION GRANTED TO COPY FOR ANY NON-COMMERCIAL USE ONLY.
-
-
-
- NS EQU 2000H ;NORTH STAR SYSTEM BEGINS AT 2000
- DCOM EQU NS+22H
- COUT EQU NS+0DH
- CIN EQU NS+10H
- CONTC EQU NS+16H
- DOS EQU NS+28H
- DLOOK EQU NS+1CH
- DLIST EQU NS+25H
- DOSER EQU NS+2DH
- RWCHK EQU NS+2BH
- DBYTE EQU NS+2FH
- DWRIT EQU NS+1FH
- PART1 EQU NS+0D00H
- ORG PART1
- JMP INITA
- DB 0
- JMP EOR ;RESTART WITHOUT RESETTING
- ASSMB DB ' 0308A',13
- DB 'COPYRIGHT 1979, G. YOUNG, INC'
- DENTY DB 'S'
- BSPCH DB 08
- STOP DB 0
- SRCNT DB 23
- FLG1 DB 'N'
- HTOT DB 0
- DATA0 DW MEMRY
- BSCR DB 'C'
- LNSIZ DB 78
- WRAP DB 'Y'
- MEMTP DW 07FFFH
- CLEAN LXI H,BOFP
- MVI C,255
- XRA A
- CLRM MOV M,A
- INX H
- DCR C
- JNZ CLRM
- LHLD DATA0
- SHLD BOFP
- SHLD EOFP
- LHLD MEMTP
- SHLD TOP
- MVI A,70
- STA LINES
- MVI A,0FFH
- STA PNO
- MVI A,1
- LHLD BOFP
- MOV M,A
- MVI A,66
- STA PAGE1
- MVI A,54
- STA PAGE2
- MVI A,7
- STA PAGE3
- LDA BSPCH
- STA X5F2+1
- STA X5F1+1
- STA X5F3+1
- LDA LNSIZ
- STA CPI80+1
- SUI 7
- STA CPI74+1
- RET
- INITA LXI SP,AREA+50
- LXI SP,AREA+50
- CALL CLEAN
- CALL CRLF
- LXI SP,AREA+50
- LXI H,SMESS
- CALL SCRN
- LXI H,ASSMB
- CALL SCRN
- LXI SP,AREA+50
- CALL FREE1
- LDA FLG1
- CPI 'Y'
- CNG2 JNZ CONFIGURE
- EOR LXI SP,AREA+50
- CALL CRLF
- MVI B,'#'
- CALL OUT8
- CALL READ
- LXI H,IBUF
- MOV A,M
- CPI '0'
- CC CMPCT
- CPI '9'+1
- JC LINER
- XRA A
- STA AUTO
- CALL VALC
- CALL COMM1
- JMP EOR
- CMPCT LDA DBFLG
- ORA A
- JNZ DUMP
- LXI D,IBUF+1
- L1X LDAX D
- MOV M,A
- CPI 13
- JZ L2X
- INX D
- INX H
- JMP L1X
- L2X LXI H,IBUF
- LDA IBUF-1
- DCR A
- STA IBUF-1
- MOV A,M
- RET
- READ LXI H,IBUF
- LXI D,TBUF
- XRA A
- STA HALT
- STA TEMP
- LDA AUTO
- ORA A
- JZ BACKN
- CALL LNGEN
- MVI C,6
- LXI D,TBUF+4
- JMP INPUT
- RESTR LXI H,IBUF
- RESCN LXI D,TBUF
- XRA A
- STA TEMP
- BACKN MVI C,2
- INPUT CALL IN8
- CPI 0
- JZ INPUT
- CPI 02
- JZ INPUT
- CPI 0AH
- JZ INPUT
- CPI 07
- JZ CPYLN
- CPI 18H ;CNTLX
- JZ EOR
- X5F1 CPI 08H
- JZ BACKS
- CPI 011H
- JZ BACKS
- CPI 0FH
- JZ BACKS
- CPI 01H
- JZ CPYCH
- CPI 04
- JZ FNDCH
- CPI 19H
- JZ PUTIN
- CPI 13
- JZ EDONE
- CPI 0EH
- JZ CNTLN
- CPI 010H
- JZ RESTR
- CPI 1AH
- JZ DELCH
- CPI 03H
- JZ CLRX
- JMP CHAR
- CLRX XRA A
- STA AUTO
- JMP EOR
- BACKS MOV A,C
- CPI 2
- JC INPUT
- JZ INPUT
- DCR C
- DCX H
- DCX D
- X5F2 MVI B,08
- CALL OUT8
- JMP INPUT
- DELCH LDAX D
- CPI 13
- JZ INPUT
- INX D
- MVI B,'%'
- CALL OUT8
- JMP INPUT
- CPYCH LDAX D
- CPI 13
- JZ INPUT
- MOV A,C
- CPI 139
- JZ BELL
- LDAX D
- MOV M,A
- MOV B,A
- CALL OUT8
- INR C
- INX H
- INX D
- JMP INPUT
- CPYLN LDAX D
- CPI 13
- JZ INPUT
- MOV A,C
- CPI 139
- JZ BELL
- LDAX D
- MOV B,A
- MOV M,A
- CALL OUT8
- INX D
- INX H
- INR C
- JMP CPYLN
- BELL MVI B,07
- CALL OUT8
- JMP INPUT
- PUTIN LDA TEMP
- ORA A
- JZ SETON
- MVI B,'>'
- CALL OUT8
- XRA A
- STA TEMP
- JMP INPUT
- SETON MVI B,'<'
- CALL OUT8
- MVI A,1
- STA TEMP
- JMP INPUT
- FNDCH CALL IN8
- CPI 03
- JZ EOR
- PUSH D
- INX D
- MOV B,A
- FND2 LDAX D
- CMP B
- JZ FND3
- CPI 13
- JZ FND5
- INX D
- JMP FND2
- FND3 POP D
- MOV B,A
- CALL DUP1
- FND4 LDAX D
- CMP B
- JZ INPUT
- MOV A,C
- CPI 139
- JZ INPUT
- CALL DUP1
- JMP FND4
- DUP1 LDAX D
- MOV M,A
- PUSH B
- MOV B,A
- CALL OUT8
- POP B
- INR C
- INX H
- INX D
- RET
- FND5 POP D
- MVI B,07
- CALL OUT8
- JMP FNDCH
- CNTLN MVI B,'@'
- CALL OUT8
- MVI A,13
- MOV M,A
- CALL CRLF
- CALL COPYLINE
- JMP RESTR
- COPYLINE PUSH D
- PUSH H
- LXI D,IBUF
- LXI H,TBUF
- CPYN LDAX D
- MOV M,A
- CPI 13
- JZ CPYX
- INX D
- INX H
- JMP CPYN
- CPYX POP H
- POP D
- RET
- EDONE MOV A,C
- CPI 2
- JZ READ
- CPI 10
- JC NOBACKUP
- BACKUP DCX H
- DCR C
- MOV A,M
- CPI ' '
- JZ BACKUP
- INX H
- INR C
- NOBACKUP MVI M,13
- INX H
- MVI M,1
- LXI H,IBUF-1
- MOV M,C
- CALL COPYLINE
- LDA HALT
- ORA A
- RZ
- CALL LINE
- JMP EOR
- CHAR MOV B,A
- LDA TEMP
- ORA A
- JNZ CHAR1 ;SKIP IF INSERT MODE
- MOV A,C
- CPI80 CPI 66
- JNZ CHAR1
- MOV A,B
- STA TEMP3
- LDA WRAP
- CPI 'N'
- JZ WRAP1
- LDA AUTO
- ORA A
- JNZ WRAP2
- WRAP1 MVI B,07
- CALL OUT8
- JMP INPUT
- WRAP2 MVI M,13
- DCX H
- WRAP3 DCX H
- MOV A,M
- CPI ' '
- JNZ WRAP3
- WRAP6 DCX H
- MOV A,M
- CPI ' '
- JZ WRAP6
- INX H
- SHLD ADDR1
- MVI A,13
- MOV M,A
- INX H
- MOV A,M
- STA TEMP2+1
- MVI A,1
- MOV M,A
- LXI H,IBUF
- MVI C,2
- WRAP7 MOV A,M
- CPI 13
- JZ WRAP8
- INR C
- INX H
- JMP WRAP7
- WRAP8 MOV A,C
- STA IBUF-1
- CALL COPYLINE
- CALL LINE
- CALL CRLF
- LXI H,IBUF
- MVI B,'#'
- CALL OUT8
- CALL LNGEN
- MVI C,6
- XCHG
- LHLD ADDR1
- XCHG
- INX D
- LDA TEMP2+1
- CPI ' '
- JZ WRAP4
- MOV M,A
- MOV B,A
- INR C
- CALL OUT8
- INX H
- WRAP4 INX D
- LDAX D
- CPI 13
- JZ WRAP5
- MOV M,A
- INX H
- INR C
- MOV B,A
- CALL OUT8
- JMP WRAP4
- WRAP5 LXI D,TBUF-2
- PUSH H
- MVI H,0
- MOV L,C
- DAD D
- XCHG
- POP H
- LDA TEMP3
- MOV B,A
- CHAR1 MOV M,B
- INR C
- CALL OUT8
- MOV A,C
- CPI74 CPI 59
- JNZ NOBEL
- MVI B,07
- CALL OUT8
- NOBEL INX H
- LDA TEMP
- ORA A
- JNZ INPUT
- INX D
- JMP INPUT
- COMM1 LXI D,IBUF
- MVI B,4
- UPPER1 LDAX D
- CPI 60H
- JC LOWER1
- SBI 20H
- STAX D
- LOWER1 INX D
- DCR B
- JNZ UPPER1
- LXI D,CTAB
- MVI B,NCOM
- MVI A,4
- STA NCHR
- CALL COMS
- JNZ ERR1
- PCHL
- COMS LXI H,IBUF
- LDA NCHR
- MOV C,A
- CALL SEAR
- LDAX D
- MOV L,A
- INX D
- LDAX D
- MOV H,A
- RZ
- INX D
- DCR B
- JNZ COMS
- INR B
- RET
- SEAR LDAX D
- CMP M
- JNZ INCA
- INX H
- INX D
- DCR C
- JNZ SEAR
- RET
- INCA INX D
- DCR C
- JNZ INCA
- INR C
- RET
- ZBUF XRA A
- LXI D,ABUF+12
- MVI B,12
- ZBU1 DCX D
- STAX D
- DCR B
- JNZ ZBU1
- RET
- VALC EQU $
- ETRA LXI H,0
- SHLD BBUF+2
- SHLD FBUF
- CALL ZBUF
- LXI H,IBUF-1
- VAL1 INX H
- MOV A,M
- CPI ' '
- CMC
- RNC
- JNZ VAL1
- SHLD PNTR
- CALL SBLK
- CMC
- RNC
- VAL5 LXI D,ABUF
- CALL ALPS
- MOV A,B
- CPI 5
- CMC
- RC
- LXI B,ABUF
- CALL AHEX
- RC
- SHLD BBUF
- LXI H,ABUF
- CALL NORM
- CALL SBLK
- CMC
- RNC
- LXI D,ABUF+4
- CALL ALPS
- MOV A,B
- CPI 5
- CMC
- RC
- LXI B,ABUF+4
- CALL AHEX
- RC
- SHLD BBUF+2
- LXI H,ABUF+4
- CALL NORM
- CALL SBLK
- CMC
- RNC
- LXI D,ABUF+8
- CALL ALPS
- MOV A,B
- CPI 5
- CMC
- RC
- LXI H,ABUF+8
- CALL NORM
- ORA A
- RET
- RANGE PUSH H
- PUSH D
- LDA ABUF+4
- ORA A
- JZ OK
- MVI B,4
- LXI H,ABUF
- LXI D,ABUF+4
- CKIT LDAX D
- CMP M
- JC ERR2
- JNZ OK
- INX H
- INX D
- DCR B
- JZ OK
- JMP CKIT
- OK POP D
- POP H
- RET
- AHEX LXI H,0
- AHE1 LDAX B
- ORA A
- RZ
- DAD H
- DAD H
- DAD H
- DAD H
- CALL AHS1
- CPI 10H
- CMC
- RC
- ADD L
- MOV L,A
- INX B
- JMP AHE1
- AHS1 SUI 48
- CPI 10
- RC
- SUI 7
- RET
- ADEC LXI H,0
- ADE11 LDAX B
- ORA A
- RZ
- MOV D,H
- MOV E,L
- DAD H
- DAD H
- DAD D
- DAD H
- SUI 48
- CPI 10
- CMC
- RC
- MOV E,A
- MVI D,0
- DAD D
- INX B
- JMP ADE11
- BLK1 MVI B,' '
- CALL OUT8
- RET
- ACHK LHLD BBUF
- LDA BBUF+3
- CMP H
- JNZ ACH1
- LDA BBUF+2
- CMP L
- JNZ ACH1
- STC
- ACH1 INX H
- SHLD BBUF
- RET
- NCOM EQU 47
- CTAB DB 'APPE'
- DW APPND
- DB 'AUTO'
- DW AUTOL
- DB 'BLOA'
- BLOAD DW BLOADCMND
- DB 'BOOT'
- DW 0E800H
- DB 'BSAV'
- BSAVE DW BSAVECMND
- DB 'CALL'
- DW CALLA
- DB 'CHAI'
- DW CHAINCMND
- DB 'CHAL'
- DW CHNGA
- DB 'CHNG'
- DW CHNG
- DB 'CONF'
- CONFG DW CNFG2
- DB 'COPY'
- DW COPYCMND
- DB 'DELE'
- DW DELL
- DB 'DELT'
- DW DELL
- DB 'DEST'
- DW DESTR
- DB 'DIRE'
- DW DIRECTORY
- DB 'DUMP'
- DW DUMP1
- DB 'EDIT'
- DW EDIT
- DB 'EXPA'
- DW EXPAND
- DB 'FIND'
- DW FINDCMND
- DB 'FREE'
- DW FREE
- DB 'HELP'
- DW HELP
- DB 'JUST'
- DW JUSTCMND
- DB 'LINE'
- DW LINECMND
- DB 'LIST'
- DW LIST
- DB 'LOAD'
- DW LOAD
- DB 'MARG'
- DW MARGINCMND
- DB 'MERG'
- DW MERGECMND
- DB 'MOVE'
- DW MOVECMND
- DB 'NSAV'
- DW NSAVE
- DB 'NULL'
- DW NULLCMND
- DB 'OFFS'
- DW OFFSETCMND
- DB 'OPEN'
- DW OPENCMND
- DB 'PAGE'
- DW PAGECMND
- DB 'PNUM'
- DW PNUMCMND
- DB 'PRIN'
- DW PRINT
- DB 'QUIT'
- DW QUIT
- DB 'RECO'
- DW RECOVER
- DB 'RENU'
- DW RENUMBER
- DB 'REPE'
- DW REPEATCMND
- DB 'SAVE'
- DW SAVECMND
- DB 'SCRA'
- DW SCRAT
- DB 'SPAC'
- DW SPACECMND
- DB 'STAT'
- STATUS DW STATCMND
- DB 'TABS'
- DW TABSCMND
- DB 'TITL'
- DW TITLECMND
- DB 'UNIT'
- DW UNITCMND
- DB 'DEBU'
- DW DEBUG
- QUIT CALL CRLF
- LXI H,QUITM
- CALL SCRN
- CALL CRLF
- JMP DOS
- EXPAND LXI H,DATA
- SHLD DATA0
- LXI H,EOR
- SHLD BLOAD
- SHLD BSAVE
- SHLD STATUS
- SHLD CONFG
- SHLD CNG2+1
- CALL CLEAN
- CALL FREE1
- JMP EOR
- CALLA CALL ETRA
- JC ERR3
- LHLD BBUF
- SHLD CALLD
- LDA BBUF+2
- STA CALLC
- LXI H,CALLP
- JMP REPLY
- CALLT LXI D,CALLM
- RET
- CALLM DB 'CALL COMMAND TEST'
- DB 13
- CALLP DB 'CALL COMMAND ACCEPTED'
- DB 13
- BHEAD DB ' BLOCKS: '
- DB 13
- CHEAD DB ' AVAILABLE: '
- DB 13
- DHEAD DB ' LAST LINE: '
- DB 13
- VCHK LDA ABUF
- ORA A
- JZ ERR2
- RET
- FREE EQU $
- FREER CALL FREE1
- CALL FREE2
- LXI H,BHEAD
- CALL SCRN
- LHLD EOFP
- SHLD MPTY
- MVI E,2
- LXI B,MPTY
- LXI H,BOFP
- XRA A
- CALL ADSB1
- LHLD MPTY
- INR H
- MOV L,H
- MVI H,0
- SHLD MPTY
- CALL DECPT
- RET
- FREE1 CALL CRLF
- LXI H,HEAD
- CALL SCRN
- LHLD EOFP
- SHLD MPTY
- MVI E,2
- LXI B,MPTY
- LXI H,BOFP
- XRA A
- CALL ADSB1
- CALL DECPT
- LXI H,CHEAD
- CALL SCRN
- CALL ADSUB
- CALL DECPT
- RET
- FREE2 LXI H,DHEAD
- CALL SCRN
- CALL LABPT
- RET
- ADDRC EQU $
- LHLD ADDR2
- SHLD ADDR3
- LXI B,ADDR3
- LXI H,ADDR1
- JMP ADDRC1
- ADSUB LHLD TOP
- SHLD MPTY
- LXI B,MPTY
- LXI H,EOFP
- ADDRC1 MVI E,2
- XRA A
- ADSB1 LDAX B
- SBB M
- STAX B
- DCR E
- RZ
- INX B
- INX H
- JMP ADSB1
- LABPT CALL BLK1
- MVI E,4
- LXI H,MAXL
- LABP2 MOV B,M
- CALL OUT8
- DCR E
- RZ
- INX H
- JMP LABP2
- SCRAT CALL CRLF
- CALL CLEAN
- CALL FREE1
- JMP EOR
- ERR1 CALL CRLF
- LXI H,MESS1
- CALL SCRN
- JMP HELP
- MESS1 DB 'INVALID COMMAND'
- DB 13
- ERR2 LXI H,MESS2
- JMP REPLY
- MESS2 DB 'INVALID PARAMETER'
- DB 13
- ERR3 CALL CRLF
- LXI H,MESS3P1
- CALL SCRN
- CALL CRLF
- LXI H,IBUF
- CALL SCRN
- JMP DUMP
- MESS3P1 DB 'INVALID CHARACTER IN PARAMETER'
- DB 13
- SMESS DB 'SECRTARY REL '
- DB '9.76'
- DB 13
- HEAD DB 'USED: '
- DB 13
- QUITM DB 'FINISHED'
- DB 13
- HELP LXI H,CTAB
- MVI E,NCOM-1
- HELP1 CALL CRLF
- MVI D,12
- HELP2 MVI C,4
- HELP3 MOV B,M
- CALL OUT8
- INX H
- DCR C
- JNZ HELP3
- INX H
- INX H
- MVI B,' '
- CALL OUT8
- CALL CONTC
- JZ EOR
- DCR E
- JZ EOR
- DCR D
- JNZ HELP2
- JMP HELP1
- LINER CALL LINE
- JMP EOR
- LINE CALL FILLN2
- CALL DELCK
- CALL ADSUB
- LDA MPTY+1
- ORA A
- JNZ OK2AD
- LDA MPTY
- MOV B,A
- LDA IBUF-1
- SUB B
- JC OK2AD
- LXI H,ERR4P1
- JMP REPLY
- ERR4P1 DB 'FILE FULL ERROR'
- DB 13
- OK2AD EQU $
- MVI C,4
- LXI H,IBUF-1
- LICK INX H
- MOV A,M
- CPI '0'
- JC ERR3
- CPI '9'+1
- JNC ERR3
- DCR C
- JNZ LICK
- SHLD HCON
- LXI D,MAXL+3
- CALL COM0
- JNC INSR
- INX H
- CALL LODM
- LXI H,MAXL+3
- CALL STOM
- LXI D,IBUF-1
- LHLD EOFP
- MVI C,1
- CALL LMOV
- SEOF MVI M,1
- SHLD EOFP
- RET
- INSR CALL FIN1
- MVI C,2
- JZ EQUL
- DCR C
- EQUL MOV B,M
- DCX H
- MVI M,2
- SHLD INSP
- LDA IBUF-1
- DCR C
- JZ LTX
- SUB B
- JZ ZEROX
- JC GTX
- LTX LHLD EOFP
- MOV D,H
- MOV E,L
- CALL ADR
- SHLD EOFP
- MVI C,2
- CALL RMOV
- JMP ZEROX
- GTX CMA
- INR A
- MOV D,H
- MOV E,L
- CALL ADR
- XCHG
- CALL LMOV
- MVI M,1
- SHLD EOFP
- ZEROX LHLD INSP
- MVI M,13
- INX H
- LXI D,IBUF-1
- MVI C,1
- CALL LMOV
- RET
- FIND LXI H,ABUF+3
- SHLD HCON
- FIN1 LHLD BOFP
- MOV A,H
- ORA L
- JZ EOR
- FI1 CALL EO1
- XCHG
- LHLD HCON
- XCHG
- MVI A,4
- CALL ADR
- CALL COM0
- RC
- RZ
- FI2 MOV A,M
- CALL ADR
- JMP FI1
- EOF INX H
- EO1 MVI A,1
- CMP M
- RNZ
- XRA A
- STA UNIT
- JMP EOR
- ADR ADD L
- MOV L,A
- RNC
- INR H
- RET
- LMOV LDAX D
- INX D
- CMP C
- RZ
- MOV M,A
- INX H
- JMP LMOV
- RMOV LDAX D
- DCX D
- CMP C
- RZ
- MOV M,A
- DCX H
- JMP RMOV
- LODM MOV B,M
- INX H
- MOV C,M
- INX H
- MOV D,M
- INX H
- MOV E,M
- RET
- STOM MOV M,E
- DCX H
- MOV M,D
- DCX H
- MOV M,C
- DCX H
- MOV M,B
- RET
- COM0 MVI B,1
- MVI C,4
- ORA A
- CO1 LDAX D
- SBB M
- JZ CO2
- INR B
- CO2 DCX D
- DCX H
- DCR C
- JNZ CO1
- DCR B
- RET
- COM1 MVI C,4
- LDAX D
- SUI 1
- JMP CO1+1
- NORM CALL LODM
- XRA A
- CMP B
- RZ
- NOR1 CMP E
- CNZ STOM
- RNZ
- MOV E,D
- MOV D,C
- MOV C,B
- MVI B,'0'
- JMP NOR1
- DELCK LXI H,IBUF-1
- MOV A,M
- CPI 6
- RNZ
- XRA A
- STA AUTO
- LXI H,0
- SHLD BBUF+2
- SHLD FBUF
- CALL ZBUF
- LXI H,IBUF
- LXI D,ABUF
- MVI B,5
- LOOP DCR B
- JZ DEL6
- MOV A,M
- STAX D
- INX D
- INX H
- JMP LOOP
- DEL6 CALL DEL0
- JMP EOR
- FILLN2 LXI H,IBUF
- MVI C,4
- FILL32 INX H
- DCR C
- RZ
- FILL12 MOV A,M
- CPI '0'
- JC FILL22
- CPI '9'+1
- JNC FILL22
- JMP FILL32
- FILL22 PUSH D
- PUSH H
- PUSH B
- MVI C,139
- LXI D,IBUF+138
- LXI H,IBUF+139
- SHIFT2 LDAX D
- MOV M,A
- DCX D
- DCX H
- DCR C
- JNZ SHIFT2
- MVI A,'0'
- STA IBUF
- LDA IBUF-1
- INR A
- STA IBUF-1
- POP B
- POP H
- POP D
- JMP FILL32
- LIST CALL CRLF
- CALL RANGE
- CALL FIND
- LIST2 XRA A
- STA CNTR
- LIST0 INX H
- CALL OUTPT
- CALL EOF
- CALL STOPL
- CALL CONTC
- JZ LIST3
- LDA UNIT
- ORA A
- JNZ LIST0
- LDA SRCNT
- ORA A
- JZ LIST0
- MOV B,A
- LDA CNTR
- INR A
- STA CNTR
- CMP B
- JC LIST0
- PUSH H
- LXI H,M1
- CALL SCRN
- LIST1 CALL IN8
- CPI 03
- JZ LIST3
- CPI 13
- JNZ LIST1
- CALL CRLF
- POP H
- JMP LIST2
- LIST3 XRA A
- STA UNIT
- JMP EOR
- STOPL LXI D,ABUF+4
- MVI B,4
- STOP1 LDAX D
- ORA A
- JNZ STOP2
- INX D
- DCR B
- JNZ STOP1
- RET
- STOP2 PUSH H
- INX H
- LXI D,ABUF+4
- MVI B,4
- STOP4 LDAX D
- CMP M
- JZ STOP3
- JC EOR
- POP H
- RET
- STOP3 INX H
- INX D
- DCR B
- JNZ STOP4
- POP H
- RET
- DELL CALL VCHK
- CALL RANGE
- DEL0 CALL FIND
- SHLD INSP
- LXI H,ABUF+7
- MOV A,M
- ORA A
- JNZ DEL1
- LXI H,ABUF+3
- DEL1 SHLD HCON
- XCHG
- LXI H,MAXL+3
- CALL COM0
- LHLD INSP
- JC NOVR
- SHLD EOFP
- MVI M,1
- XCHG
- LHLD BOFP
- XCHG
- MVI B,13
- DCX H
- DEL2 MOV A,L
- SUB E
- MOV A,H
- SBB D
- MVI A,13
- JC DEL4
- DCR B
- DCX H
- CMP M
- JNZ DEL2
- DCX H
- MOV A,L
- SUB E
- MOV A,H
- SBB D
- JC DEL5
- CMP M
- INX H
- INX H
- JZ DEL3
- INX H
- DEL3 CALL LODM
- LXI H,MAXL+3
- CALL STOM
- RET
- DEL4 CMP B
- DEL5 XCHG
- JNZ DEL3-1
- STA MAXL
- RET
- NOVR CALL FI1
- CZ FI2
- NOV1 XCHG
- LHLD INSP
- MVI C,1
- CALL LMOV
- SHLD EOFP
- MVI M,1
- RET
- SBLK LHLD PNTR
- SBL1 MOV A,M
- CPI ','
- JZ SBL2
- CPI ' '
- RNZ
- SBL2 INX H
- SHLD PNTR
- JMP SBL1
- ALPS MVI B,0
- ALP1 STAX D
- INR B
- MOV A,B
- CPI 11
- RNC
- INX D
- INX H
- SHLD PNTR
- MOV A,M
- CPI '0'
- RC
- CPI '9'+1
- JC ALP1
- CPI 'A'
- RC
- CPI 'Z'+1
- JC ALP1
- RET
- DECPT XRA A
- STA LAST
- LXI H,2710H
- SHLD TEMP2
- CALL DIVID2
- LXI H,03E8H
- SHLD TEMP2
- CALL DIVID2
- LXI H,64H
- SHLD TEMP2
- CALL DIVID2
- LXI H,0AH
- SHLD TEMP2
- CALL DIVID2
- LDA MPTY
- ADI '0'
- MOV B,A
- CALL OUT8
- RET
- DIVID2 MVI E,0
- LHLD MPTY
- SHLD TEMP
- SB22 LXI B,TEMP
- LXI H,TEMP2
- XRA A
- LDAX B
- SBB M
- STAX B
- INX B
- INX H
- LDAX B
- SBB M
- STAX B
- JC NEG2
- INR E
- PUSH H
- LHLD TEMP
- SHLD MPTY
- POP H
- JMP SB22
- NEG2 MOV A,E
- DIV2 ADI '0'
- MOV B,A
- LDA LAST
- ORA A
- JNZ DIV4
- MOV A,B
- CPI '0'
- RZ
- STA LAST
- DIV4 CALL OUT8
- RET
- LNGEN PUSH B
- PUSH D
- PUSH H
- MVI C,2
- LXI H,NUMBR
- LXI D,LINE1
- CONVT LDAX D
- RRC
- RRC
- RRC
- RRC
- CALL UNPAK
- LDAX D
- CALL UNPAK
- INX D
- DCR C
- JNZ CONVT
- POP H
- MVI C,4
- LXI D,NUMBR
- LOOP2 LDAX D
- MOV M,A
- INX D
- INX H
- DCR C
- JNZ LOOP2
- PUSH H
- MVI C,2
- LXI D,LINE1+1
- LXI H,INCR+1
- XRA A
- LOOP1 LDAX D
- ADC M
- DAA
- STAX D
- DCR C
- DCX D
- DCX H
- JNZ LOOP1
- POP H
- POP D
- POP B
- RET
- AUTOL LXI H,0500H
- SHLD INCR
- CALL VCHK
- LXI H,LINE1
- LXI D,ABUF
- CALL PACK
- LXI H,INCR
- LDAX D
- CPI 0
- JZ SWITH
- CALL PACK
- SWITH MVI A,1
- STA AUTO
- JMP EOR
- PACK CALL TWICE
- TWICE CALL TEST
- RLC
- RLC
- RLC
- RLC
- MOV B,A
- INX D
- CALL TEST
- ADD B
- MOV M,A
- INX D
- INX H
- RET
- TEST LDAX D
- CPI '0'
- JC ERR3
- CPI '9'+1
- JNC ERR3
- ANI 0FH
- RET
- UNPAK ANI 0FH
- ADI '0'
- MOV M,A
- MOV B,A
- LDA AUTO
- ORA A
- CNZ OUT8
- INX H
- RET
- EDIT CALL CRLF
- MVI B,'>'
- CALL OUT8
- MVI A,1
- STA HALT
- LDA ABUF
- ORA A
- JZ ERR9
- XRA A
- STA TEMP
- CALL FIND
- INX H
- LXI D,TBUF
- CPYLOOP MOV A,M
- STAX D
- MOV B,A
- CALL OUT8
- MOV A,B
- CPI 13
- JZ DPLAY
- INX H
- INX D
- JMP CPYLOOP
- DPLAY CALL CRLF
- MVI B,'>'
- CALL OUT8
- JMP RESTR
- ERR9 LXI H,ERRM9
- JMP REPLY
- ERRM9 DB 'MISSING LINE NO.'
- DB 13
- SAVME CALL CRLF
- LXI H,DUMMY
- CALL SCRN
- CALL IN8
- MOV B,A
- CALL OUT8
- MOV E,B
- CALL CRLF
- MOV A,E
- CPI 'Y'
- JZ SAVM1
- LXI H,SORRY
- CALL SCRN
- CALL CRLF
- JMP DOS
- DUMMY DB 'DO YOU HAVE A BACKUP OF '
- DB 'THIS DISK (Y/N)? '
- DB 13
- SORRY DB 'BACKUP THIS DISK NOW!!!'
- DB 13
- SAVM1 MVI A,1
- STA DISK
- LXI H,RITER
- CALL DLOOK
- JNC SAVM2
- LXI H,RITER
- JMP REPLY
- RITER DB 'SECRTARY '
- DB 'NOT FOUND ON DRIVE 1'
- DB 13
- SAVM2 LDA RWCHK
- STA TEMP
- XRA A
- STA RWCHK
- CALL SETDN
- MOV E,M
- INX H
- MOV D,M
- XCHG
- LDA DISK
- MOV C,A
- LDA DISK
- ANI 80H
- JZ L4
- MVI A,26
- JMP L5
- L4 MVI A,52
- L5 EQU $
- MVI B,0
- LXI D,PART1
- CALL DCOM
- JC IOERR2
- LDA TEMP
- STA RWCHK
- RET
- SETDN LDA DENTY
- CPI 'S'
- JZ SETS
- LDA DBYTE
- ORA A
- JZ SETS
- SETD MVI A,87H
- STA FTYPE
- LDA DISK
- ORI 80H
- JMP SETE
- SETS MVI A,7
- STA FTYPE
- LDA DISK
- ANI 07
- SETE STA DISK
- RET
- ;FILE LOAD ROUTINE
- LOAD CALL CRLF
- CALL LOADR
- CALL FREE
- JMP EOR
- CHAINCMND CALL LOADR
- LXI H,000
- SHLD ABUF
- SHLD ABUF+2
- JMP PRINT
- LOADR CALL SETUP
- CALL GFILE
- CALL DIREC
- CALL SETDN
- MVI A,1
- CALL SIZE
- MOV E,M
- INX H
- MOV D,M
- XCHG
- LDA DISK
- MOV C,A
- LDA BLOCK
- PUSH PSW
- LDA DISK
- ANI 80H
- JZ LOADSNGL
- POP PSW
- RRC
- JMP LOADBLK
- LOADSNGL POP PSW
- LOADBLK EQU $
- MVI B,1
- XCHG
- LHLD BOFP
- XCHG
- DOIT CALL DCOM
- JNC IOGD
- IOERR2 LXI H,ERR31
- JMP REPLY
- ERR31 DB 'DISK FULL ERROR'
- DB 07
- DB 07
- DB 07
- DB 13
- IOGD LHLD BOFP
- LOAD2 LXI D,MAXL
- MVI C,4
- LOAD14 INX H
- MOV A,M
- STAX D
- INX D
- DCR C
- JNZ LOAD14
- LOAD3 INX H
- MVI A,0DH
- CMP M
- JNZ LOAD3
- INX H
- MVI A,1
- CMP M
- JNZ LOAD2
- LOAD4 SHLD EOFP
- LOAD5 RET
- DB 3AH
- ;NEW FILE SAVE ROUTINE
- NSAVE CALL CRLF
- CALL SETUP
- CALL GFILE
- CALL GPARM
- STA BLOCK
- LDA DISK
- ANI 7FH
- LXI H,FILE
- CALL DLOOK
- JNC NSERR
- SHLD TEMP
- MVI B,10
- LXI H,TBUF
- NSAV4 MVI A,20H
- MOV M,A
- INX H
- DCR B
- JNZ NSAV4
- LDA DISK
- LXI H,TBUF
- CALL DLOOK
- JC IOERR2
- CALL SETDN
- MVI B,8
- NSAV5 DCX H
- DCR B
- JNZ NSAV5
- LXI D,FILE
- MVI B,8
- NSAV2 LDAX D
- MOV M,A
- INX H
- INX D
- DCR B
- JNZ NSAV2
- NSAV3 SHLD TEMP2
- LDA TEMP
- MOV M,A
- INX H
- LDA TEMP+1
- MOV M,A
- INX H
- LDA BLOCK
- ORA A
- JNZ NSAV6
- CALL SIZEB
- LDA BLOCK
- INR A
- INR A
- INR A
- INR A
- STA BLOCK
- NSAV6 PUSH PSW
- LDA DISK
- ANI 80H
- JZ SDBLK
- POP PSW
- RRC
- JNC NOINR
- INR A
- NOINR ANI 7FH
- JMP L1
- SDBLK POP PSW
- L1 STA BLOCK
- MOV M,A
- INX H
- XRA A
- MOV M,A
- INX H
- LDA FTYPE
- MOV M,A
- CALL DWRIT
- CALL DIREC
- CALL SETDN
- JMP SAVE1
- NSERR LXI H,MESSD2
- JMP REPLY
- MESSD2 DB 'FILE ALREADY EXISTS'
- DB 13
- ;FILE SAVE ROUTINE
- SAVECMND CALL CRLF
- CALL SETUP
- CALL GFILE
- CALL DIREC
- CALL SETDN
- XRA A
- CALL SIZE
- LDA DBYTE
- ORA A
- JZ SAVE1
- LDA BLOCK
- RRC
- INR A
- SAVE2 ANI 7FH
- STA BLOCK
- SAVE1 MOV E,M
- INX H
- MOV D,M
- XCHG
- LDA DISK
- MOV C,A
- LDA BLOCK
- MVI B,0
- XCHG
- LHLD BOFP
- XCHG
- CALL DCOM
- JC IOERR2
- LXI H,MESSB
- JMP REPLY
- MESSB DB 'SAVED'
- DB 13
- DESTR CALL CRLF
- CALL SETUP
- CALL GFILE
- CALL DIREC
- MVI B,8
- KILL2 DCX H
- DCR B
- JNZ KILL2
- MVI B,8
- MVI A,' '
- KILL3 MOV M,A
- INX H
- DCR B
- JNZ KILL3
- KILL4 LXI H,CHK
- CALL SCRN
- CALL IN8
- MOV B,A
- CALL OUT8
- MOV E,B
- CALL CRLF
- MOV A,E
- CPI 'N'
- JZ EOR
- CPI 'Y'
- JNZ KILL4
- CALL DWRIT
- LXI H,MSGK
- JMP REPLY
- MSGK DB 'FILE DELETED',13
- CHK DB 'ARE YOU SURE (Y/N)? ',13
- APPND CALL APPNDR ;APPEND COMMAND
- CALL FREE
- JMP EOR
- APPNDR CALL CRLF
- CALL SETUP
- CALL GFILE
- CALL DIREC
- CALL SETDN
- CALL SIZEA
- MOV E,M
- INX H
- MOV D,M
- LDA DISK
- MOV C,A
- LDA BLOCK
- MVI B,1
- LHLD EOFP
- XCHG
- JMP DOIT
- SIZEA PUSH H
- INX H
- INX H
- MOV A,M
- STA BLOCK
- LDA DISK
- ANI 80H
- JZ L2
- LDA BLOCK
- ANI 7FH
- RLC
- STA BLOCK
- L2 LHLD EOFP
- JMP INSZ2
- SIZEB PUSH H
- LHLD BOFP
- SHLD ADDR1
- LHLD EOFP
- SHLD ADDR2
- CALL ADDRC
- LDA ADDR3+1
- INR A
- STA BLOCK
- POP H
- RET
- SIZE PUSH H
- STA TEMP
- INX H
- INX H
- MOV A,M
- STA BLOCK
- LDA DISK
- ANI 80H
- JZ L3
- LDA BLOCK
- ANI 7FH
- RLC
- STA BLOCK
- L3 LDA TEMP
- ORA A
- JZ OUTSZ
- ; SIZE ON LOAD
- INSZ LHLD BOFP
- INSZ2 SHLD ADDR1
- LHLD TOP
- SHLD ADDR2
- CALL ADDRC
- LDA ADDR3+1
- INR A
- LXI H,BLOCK
- CMP M
- JZ SIZE9
- JC ERR6
- MOV A,M
- JMP SIZE9
- ; SIZE ON SAVE
- OUTSZ LHLD BOFP
- SHLD ADDR1
- LHLD EOFP
- SHLD ADDR2
- CALL ADDRC
- LDA ADDR3+1
- INR A
- LXI H,BLOCK
- CMP M
- JZ SIZE9
- JNC ERR5
- SIZE9 STA BLOCK
- POP H
- RET
- ERR5 CALL CRLF
- LXI H,ERRM5
- CALL SCRN
- JMP EOR
- RPLY CALL CRLF
- CALL SCRN
- POP H
- RET
- ERRM5 DB 'FILE TOO SMALL...NOT SAVED'
- DB 13
- ERR6 LXI H,ERRM6
- STA BLOCK
- JMP RPLY
- ERRM6 DB 'FILE TOO LARGE TO FIT IN MEMORY...ONLY PARTIALLY LOADED'
- DB 13
- ;GET THE FILE NAME
- GFILE MVI A,1
- STA DISK
- MVI C,9
- MVI A,' '
- LXI D,FILE
- BFILL STAX D
- INX D
- DCR C
- JNZ BFILL
- LOOK1 MOV A,M
- CPI 13
- JZ ERR1
- CPI ' '
- JNZ MFILE
- INX H
- JMP LOOK1
- MFILE MVI C,9
- LXI D,FILE
- FILL1 MOV A,M
- CPI 13
- JZ UPPER
- CPI ' '
- JZ UPPER
- CPI ','
- JZ LOOKU
- STAX D
- INX H
- INX D
- DCR C
- JZ ERR1
- JMP FILL1
- LOOKU INX H
- MOV A,M
- CPI 13
- JZ UPPER
- CPI '1'
- JC ERR1
- CPI '4'+1 ;QD ALLOWS 4 DRIVES
- JNC ERR1
- ANI 0FH
- STA DISK
- INX H
- UPPER LXI D,FILE
- MVI B,8
- UPPR LDAX D
- CPI 60H
- JC LOWER
- SBI 20H
- STAX D
- LOWER INX D
- DCR B
- JNZ UPPR
- RET
- ; SEE IF FILE IS THERE
- DIREC LDA DISK
- LXI H,FILE
- CALL DLOOK
- RNC
- LXI H,ERR4
- JMP REPLY
- ERR4 DB 'FILE NOT FOUND'
- DB 13
- ;OUTPUT NULL CHARACTERS
- NULLO LDA NULLC
- ORA A
- RZ
- PUSH D
- MOV E,A
- NULL2 MVI B,0
- CALL OUT8A
- DCR E
- JNZ NULL2
- NULL3 POP D
- RET
- ;OUTPUT A CARRIAGE RETURN LINE FEED
- CRLF MVI B,13
- CALL OUT8
- MVI B,10
- CALL OUT8
- CALL NULLO
- RET
- ;CHARACTER INPUT ROUTINE
- IN8 XRA A
- JMP CIN
- ;ECHOE TAB CHAR AS @
- ;OUTPUT A CHARACTER TO THE CONSOLE
- OUT8 MVI A,09
- CMP B
- JNZ SKIP21
- MVI B,'@'
- SKIP21 XRA A
- JMP COUT
- ;OUTPUT A CHARACTER TO UNIT "UNIT"
- OUT8A MVI A,09
- CMP B
- JNZ SKIP22
- MVI B,'@'
- SKIP22 LDA UNIT
- JMP COUT
- ;DISPLAY LINE THROUGH CR
- SCRN MOV B,M
- MVI A,13
- CMP B
- RZ
- CALL OUT8
- INX H
- JMP SCRN
- ;LINE PRINT FOR LIST AND PRINT COMMANDS
- OUTPT MOV B,M
- MVI A,13
- CMP B
- JZ OUTDN
- CALL OUT8A
- INX H
- JMP OUTPT
- OUTDN CALL OUTCR
- LDA SPACE
- ORA A
- RZ
- PUSH B
- MOV C,A
- OUTA DCR C
- JZ OUTB
- CALL OUTCR
- JMP OUTA
- OUTB POP B
- RET
- OUTCR MVI B,13
- CALL OUT8A
- MVI B,10
- CALL OUT8A
- CALL NULLO
- RET
- ;DISPLAY AN ERROR MESSAGE
- REPLY CALL CRLF
- CALL SCRN
- JMP EOR
- DIRECTORY EQU $
- CATLG LHLD DOSER
- SHLD ADDR1
- LXI H,CAT2
- SHLD DOSER
- CALL CRLF
- CALL SETUP
- CALL GPARM
- ORA A
- JNZ CAT1
- MVI A,1
- CAT1 MVI L,0
- CALL DLIST
- CAT2 LHLD ADDR1
- SHLD DOSER
- CALL CRLF
- JMP EOR
- ; GET 1 PARAMETER
- PARM EQU $
- GPARM EQU $
- PUSH D
- PUSH B
- XRA A
- STA SAVE
- PARM9 EQU $
- MOV A,M
- CPI 13
- JZ PEOF
- CPI ','
- JZ PARM0
- CPI ' '
- JNZ PARM1
- PARM0 INX H
- JMP PARM9
- PARM1 EQU $
- CPI '0'
- JC ERR2
- CPI '9'+1
- JNC ERR2
- ANI 0FH
- MOV E,A
- LDA SAVE
- MOV B,A
- RLC
- RLC
- RLC
- ADD B
- ADD B
- ADD E
- STA SAVE
- INX H
- MOV A,M
- CPI 13
- JZ PEOF
- CPI ','
- JZ PEOF
- CPI ' '
- JZ PEOF
- JMP PARM1
- PEOF LDA SAVE
- POP B
- POP D
- RET
- MERGECMND EQU $
- BASIC LDA IBUF-1
- CPI 8
- JNC BDB1
- CALL EOFBA
- LXI H,BMSG5
- JMP REPLY
- BMSG5 DB 'BASIC FILE DELETED'
- DB 13
- BDB1 LDA INSRT
- ORA A
- JZ BDB2
- JMP NSERR
- BDB2 LDA TOP+1
- DCR A
- DCR A
- MOV B,A
- LDA EOFP+1
- CMP B
- JC BDB3
- LXI H,BMSG22
- JMP REPLY
- BMSG22 DB 'NO ROOM FOR BUFFER'
- DB 13
- BDB3 CALL SETUP
- CALL GFILE
- CALL DIREC
- CALL SETDN
- LDA DENTY
- CPI 'S'
- JZ BDB42
- LDA DBYTE
- ORA A
- JZ BDB42
- MVI A,1
- JMP BDB72
- BDB42 MVI A,2
- BDB72 STA BLOCK
- PUSH H
- LHLD TOP
- DCR H
- DCR H
- DCR L
- SHLD TOP
- POP H
- PUSH H
- INX H
- INX H
- INX H
- INX H
- MOV A,M
- ANI 0FH
- CPI 3
- JZ BDB52
- LXI H,BMSG32
- JMP REPLY
- BMSG32 DB 'NOT A BASIC DATA FILE'
- DB 13
- BDB52 POP H
- MOV E,M
- INX H
- MOV D,M
- XCHG
- DCX H
- LDA BLOCK
- CPI 1
- JZ SDA2
- DCX H
- SDA2 SHLD DSKAD
- LHLD TOP
- INX H
- SHLD BUFAD
- CALL GETBA
- LHLD BUFAD
- MOV A,M
- CPI 3
- JZ BDB6
- LXI H,BMSG4
- JMP REPLY
- BMSG4 DB 'FILE NOT STRING DATA'
- DB 13
- BDB6 INX H
- MOV A,M
- STA RECCT
- INX H
- SHLD BUFAD
- LHLD BUFCT
- INX H
- INX H
- SHLD BUFCT
- XRA A
- STA INHIB
- MVI A,1
- STA INSRT
- CALL FREE
- JMP EOR
- GETBA PUSH H
- PUSH B
- PUSH D
- LHLD TOP
- INX H
- SHLD BUFAD
- XCHG
- LHLD DSKAD
- INX H
- LDA BLOCK
- CPI 1
- JZ SDA
- INX H
- SDA SHLD DSKAD
- LDA DISK
- MOV C,A
- LDA BLOCK
- MVI B,1
- CALL DCOM
- JC IOERR
- CALL RSTBA
- POP D
- POP B
- POP H
- RET
- EOFBA LDA INSRT
- ORA A
- RZ
- XRA A
- STA RPEAT
- STA INSRT
- LXI H,0000H
- SHLD DSKAD
- SHLD BUFAD
- SHLD BUFCT
- SHLD RECCT
- LHLD TOP
- INR H
- INR H
- INR L
- SHLD TOP
- MVI A,1
- STA INHIB
- RET
- RSTBA MVI A,99
- STA RPEAT
- LXI H,0000
- SHLD BUFCT
- RET
- MOVBA LDA INHIB
- ORA A
- RNZ
- PUSH H
- PUSH B
- MOV0 LHLD BUFAD
- MOV A,M
- CPI '+'
- JZ MOV1
- STAX D
- INX D
- LDA NCHR
- INR A
- STA NCHR
- MOV B,A
- LDA CCNT
- CMP B
- JZ LFULL
- CALL INRBF
- CALL INRRC
- LDA INHIB
- ORA A
- JZ MOV0
- JMP POPIT
- MOV1 CALL INRBF
- CALL INRRC
- POPIT POP B
- POP H
- RET
- LFULL CALL INRBF
- CALL INRRC
- LHLD BUFAD
- MOV A,M
- CPI '+'
- JZ MOV1
- LDA INHIB
- ORA A
- JZ LFULL
- JMP POPIT
- INRBF INX H
- SHLD BUFAD
- LHLD BUFCT
- INX H
- SHLD BUFCT
- MOV A,H
- CPI 2
- RNZ
- CALL GETBA
- RET
- INRRC LDA CUSED
- INR A
- STA CUSED
- MOV B,A
- LDA RECCT
- CMP B
- RNZ
- MVI A,1
- STA INHIB
- RET
- FLUSH PUSH H
- PUSH B
- XRA A
- STA INHIB
- FLSH1 LHLD BUFAD
- MOV A,M
- CPI 03
- JZ FLSH2
- CPI 1
- JZ FLSH3
- CALL INRBF
- JMP FLSH1
- FLSH2 CALL INRBF
- LHLD BUFAD
- MOV A,M
- STA RECCT
- XRA A
- STA CUSED
- CALL INRBF
- POP B
- POP H
- RET
- FLSH3 POP B
- POP H
- JMP EOFBA
- DEBUG MVI A,1
- STA DBFLG
- CALL HASH1
- CALL HASH2
- JMP EOR
- DUMP1 CALL OUTCR
- LHLD BBUF+2
- XCHG
- LHLD BBUF
- LDA IBUF-1
- CPI 6
- JZ DPRAM
- CALL DUMP3
- CALL OUTCR
- JMP EOR
- DPRAM CALL DUMP4
- CALL OUTCR
- JMP EOR
- DUMP2 LDA DBFLG
- ORA A
- JZ EOR
- DUMP EQU $
- DUMP4 LXI D,TBUF+140
- LXI H,AREA
- CALL DUMP3
- JMP EOR
- DUMP5 PUSH H
- PUSH D
- PUSH B
- PUSH PSW
- SHLD HL
- XCHG
- SHLD DE
- JMP H0
- DUMP3 PUSH H
- PUSH D
- PUSH B
- PUSH PSW
- SHLD HL
- XCHG
- SHLD DE
- REASK CALL CRLF
- LXI H,MSGD
- CALL SCRN
- CALL IN8
- CPI 03
- JZ EOR
- MOV B,A
- CALL OUT8
- MOV A,B
- CPI '0'
- JC REASK
- CPI '7'
- JNC REASK
- ANI 07H
- STA UNIT
- CALL CRLF
- H0 LXI H,HL+1
- CALL HEX
- LXI H,HL
- CALL HEX
- LHLD HL
- MVI D,8
- H2 MVI B,' '
- CALL OUT8A
- MVI E,4
- H1 CALL HEX
- INX H
- DCR E
- JNZ H1
- DCR D
- JNZ H2
- LHLD HL
- MVI B,' '
- CALL OUT8A
- MVI D,32
- H4 MOV A,M
- CPI 20H
- JC H5
- CPI 7EH
- JC H3
- H5 MVI A,'.'
- H3 MOV B,A
- CALL OUT8A
- INX H
- DCR D
- JNZ H4
- CALL OUTCR
- SHLD HL
- CALL CONTC
- JZ EOR
- LDA HL+1
- MOV B,A
- LDA DE+1
- CMP B
- JZ H6
- JNC H0
- JMP H7
- H6 LDA HL
- MOV B,A
- LDA DE
- CMP B
- JZ H7
- JNC H0
- H7 XRA A
- STA UNIT
- POP PSW
- POP B
- POP D
- POP H
- RET
- MSGD DB 'UNIT? '
- DB 13
- HEX PUSH H
- MOV A,M
- CALL BINH
- LXI H,HCON
- MOV B,M
- CALL OUT8A
- INX H
- MOV B,M
- CALL OUT8A
- POP H
- RET
- BINH LXI H,HCON
- MOV B,A
- RAR
- RAR
- RAR
- RAR
- CALL BIN1
- MOV M,A
- INX H
- MOV A,B
- CALL BIN1
- MOV M,A
- RET
- BIN1 ANI 0FH
- ADI 48
- CPI 58
- RC
- ADI 7
- RET
- HASH1 LXI H,CLEAN
- LXI D,RAM
- MVI B,0
- CALL HASH3
- LXI H,PART5
- LXI D,MEMRY
- HASH3 MOV A,B
- ADD M
- MOV B,A
- INX H
- MOV A,H
- CMP D
- JNZ HASH3
- MOV A,L
- CMP E
- JNZ HASH3
- RET
- HASH2 LDA HTOT
- CMP B
- RZ
- MOV A,B
- STA HTOT
- LXI H,HASHM
- CALL CRLF
- CALL SCRN
- CALL CRLF
- RET
- HASHM DB 'INTEGRITY FAILURE'
- DB 13
- MOVECMND MVI A,1
- JMP COPYCMND+1
- COPYCMND EQU $
- XRA A
- STA TEMP3
- CALL RANGE
- GETLN EQU $
- LXI H,0100H
- SHLD INCR
- LXI H,LINE1
- LXI D,ABUF+8
- CALL PACK
- XRA A
- STA TEMP3+1
- LXI D,ABUF+8
- LXI H,ABUF
- MVI B,4
- AGAIN LDAX D
- CMP M
- JC BKWRD
- JNZ FRWRD
- INX H
- INX D
- DCR B
- JZ FRWRD
- JMP AGAIN
- BKWRD MVI A,1
- STA TEMP3+1
- FRWRD CALL FIND
- MOVL SHLD ADDR1
- LXI D,IBUF-1
- MOV A,M
- STAX D
- INX D
- INX H
- MOVX MOV A,M
- STAX D
- CPI 13
- JZ COPD
- INX H
- INX D
- JMP MOVX
- COPD SHLD ADDR2
- INX D
- MVI A,1
- STAX D
- LXI H,IBUF
- CALL LNGEN
- CALL LINE
- LXI D,ABUF+4
- LHLD ADDR1
- LDA TEMP3+1
- ORA A
- JZ SKPAD
- LHLD ADDR2
- INX H
- SHLD ADDR1
- INX H
- CALL ADVNC
- SHLD ADDR2
- LHLD ADDR1
- SKPAD INX H
- MVI B,5
- ENDD DCR B
- JZ DONE2
- LDAX D
- CMP M
- JNZ CNEXT
- INX D
- INX H
- JMP ENDD
- CNEXT LHLD ADDR2
- INX H
- MOV A,M
- CPI 1
- JZ DONE2
- PUSH B
- PUSH H
- PUSH D
- MVI B,4
- INX H
- LXI D,ABUF+4
- RETRY LDAX D
- CMP M
- JC DONE2
- JNZ RESET
- INX H
- INX D
- DCR B
- JZ RESET
- JMP RETRY
- ADVNC INX H
- AD MOV A,M
- CPI 13
- JZ FNDIT
- INX H
- JMP AD
- FNDIT RET
- RESET POP D
- POP H
- POP B
- JMP MOVL
- DONE2 LDA TEMP3
- ORA A
- JNZ MOVC
- LXI H,MESS21
- JMP REPLY
- MESS21 DB 'COPIED'
- DB 13
- MOVC CALL DELL
- LXI H,MESS22
- JMP REPLY
- MESS22 DB 'MOVED'
- DB 13
-
- CHNG MVI A,1
- JMP CHNGA+1
- CHNGA XRA A
- STA TEMP3
- FINDZ CALL CRLF
- LXI H,IBUF
- LXI D,TBUF
- EDIT5 MOV A,M
- STAX D
- CPI 13
- JZ EDIT6
- INX H
- INX D
- JMP EDIT5
- EDIT6 LXI H,TBUF
- CALL SET1
- XRA A
- STA CNTR
- CHNG1 MVI A,13
- CMP M
- JZ ERR2
- MVI A,' '
- CMP M
- JNZ CHNG5
- INX H
- JMP CHNG1
- CHNG5 SHLD ADDR1
- CHNG6 MVI A,13
- CMP M
- JZ ERR2
- MVI A,'^'
- CMP M
- JZ CHNG2
- INX H
- JMP CHNG6
- CHNG2 LHLD BOFP
- INX H
- CHNGX SHLD ADDR2
- INX H
- INX H
- INX H
- INX H
- SHLD ADDR3
- XCHG
- LHLD ADDR1
- XCHG
- CHNG3 LDAX D
- CPI '^'
- JZ FUND
- CMP M
- JNZ NOTXX
- INX H
- INX D
- JMP CHNG3
- NOTXX LHLD ADDR1
- XCHG
- LHLD ADDR3
- INX H
- SHLD ADDR3
- MVI A,13
- CMP M
- JNZ CHNG3
- SHLD ADDR3
- EOFXX LHLD ADDR3
- INX H
- MVI A,1
- CMP M
- JZ FINIX
- CALL CONTC
- JZ EOR
- INX H
- JMP CHNGX
- FUND LDA CNTR
- INR A
- STA CNTR
- CALL REDIT
- LDA TEMP3
- ORA A
- JZ CHNG4
- LXI H,IBUF
- CALL SCRN
- IN1 CALL IN8
- CPI 13
- JZ KEEP
- CPI 03
- JZ EOR
- CPI 01
- JZ DELT
- CPI 20H
- JZ DELT
- JMP IN1
- KEEP CALL CRLF
- CHNG4 CALL LINE
- JMP EOFXX
- DELT CALL CRLF
- LHLD ADDR4
- SHLD ADDR3
- JMP EOFXX
- FINIX LDA CNTR
- ORA A
- JNZ EOR
- LXI H,MESS3
- JMP REPLY
- MESS3 DB 'CHAR NOT FOUND'
- DB 13
- REDIT LXI B,IBUF
- MVI A,6
- STA INCR
- LHLD ADDR2
- MVI D,5
- EDIT3 DCR D
- JZ EDIT4
- MOV A,M
- STAX B
- INX H
- INX B
- JMP EDIT3
- EDIT4 SHLD ADDR3
- XCHG
- LHLD ADDR1
- XCHG
- EDIT1 LDAX D
- CPI '^'
- JZ STFND
- CMP M
- JNZ STNF
- INX H
- INX D
- JMP EDIT1
- STNF LHLD ADDR3
- MOV A,M
- STAX B
- INX B
- LDA INCR
- INR A
- STA INCR
- CPI 139
- JZ ERR44
- LHLD ADDR1
- XCHG
- LHLD ADDR3
- INX H
- SHLD ADDR3
- MVI A,13
- CMP M
- JNZ EDIT1
- ERR44 LXI H,MESS44
- JMP REPLY
- MESS44 DB 'CHAR OVERFLOW'
- DB 13
- JMP LNFUL
- STFND INX D
- EDIT2 LDAX D
- CPI 13
- JZ DADD
- STAX B
- INX B
- INX D
- LDA INCR
- INR A
- STA INCR
- CPI 139
- JZ LNFUL
- JMP EDIT2
- DADD MOV A,M
- CPI 13
- JZ LNFUL
- STAX B
- INX H
- INX B
- LDA INCR
- INR A
- STA INCR
- CPI 139
- JZ LNFUL
- JMP DADD
- LNFUL MVI A,13
- STAX B
- INX B
- MVI A,1
- STAX B
- SHLD ADDR4
- STAX B
- LHLD ADDR2
- DCX H
- DCX H
- SHLD ADDR3
- LDA INCR
- STA IBUF-1
- RET
- RECOVER EQU $
- RCVR0 CALL RVSUB
- ORA A
- JNZ RCVR9
- CALL FREE
- LXI H,MESS6
- JMP REPLY
- RCVR9 LXI H,MESS5
- JMP REPLY
- MESS5 DB 'CANNOT RECOVER'
- DB 13
- MESS6 DB 'RECOVERY SUCCESSFUL'
- DB 13
- RVSUB LHLD BOFP
- MOV A,M
- CPI 01
- JNZ RCVR5
- MVI B,2
- RCVR1 INX H
- MOV A,M
- CPI 13
- JZ RCVR2
- INR B
- MVI A,139
- CMP B
- JNZ RCVR1
- MVI A,1
- RET
- RCVR2 LHLD BOFP
- MOV M,B
- JMP RCVR0
- RCVR5 SHLD ADDR1
- RCVR3 XCHG
- LHLD ADDR1
- SHLD ADDR2
- XCHG
- SHLD ADDR1
- MOV A,M
- CPI 01
- JZ RCVRD
- MOV B,A
- DCR B
- RCVR4 INX H
- LDA TOP+1
- CMP H
- JNZ RCVR7
- LDA TOP
- CMP L
- JZ RCVR8
- RCVR7 DCR B
- JNZ RCVR4
- MOV A,M
- INX H
- CPI 13
- JZ RCVR3
- RCVR8 LHLD ADDR1
- MVI A,01
- MOV M,A
- RCVRD SHLD EOFP
- LHLD ADDR2
- INX H
- MVI B,4
- LXI D,MAXL
- RCVR6 MOV A,M
- STAX D
- INX H
- INX D
- DCR B
- JNZ RCVR6
- XRA A
- RET
- JUSTCMND EQU $
- JUST LXI D,IBUF
- JUST2 LDAX D
- CPI 13
- JZ JUST5
- CPI ' '
- JZ JUST3
- INX D
- JMP JUST2
- JUST3 LDAX D
- CPI 13
- JZ JUST5
- CPI 'O'
- JZ JUST4
- CPI 6FH
- JZ JUST4
- INX D
- JMP JUST3
- JUST4 INX D
- LDAX D
- CPI 'N'
- JZ XJON
- CPI 6EH
- JZ XJON
- CPI 'F'
- JZ XJOFF2
- CPI 66H
- JZ XJOFF2
- JUST5 LDA JSW
- JUST6 ORA A
- JZ XJOFF
- LXI H,MES12
- JMP REPLY
- XJOFF LXI H,MES11
- JMP REPLY
- XJON MVI A,1
- JMP XJOFF2+1
- XJOFF2 XRA A
- STA JSW
- JMP JUST6
- MES11 DB 'JUSTIFY OFF'
- DB 13
- MES12 DB 'JUSTIFY ON'
- DB 13
- NULLCMND EQU $
- NULLS CALL SETUP
- CALL GPARM
- STA NULLC
- LXI H,MESSD
- JMP REPLY
- MESSD DB 'NULL COUNT ACCEPTED'
- DB 13
- OFFSETCMND EQU $
- SETOF CALL SETUP
- CALL GPARM
- STA OFFST
- LXI H,MESSO
- JMP REPLY
- MESSO DB 'OFFSET ACCEPTED'
- DB 13
- MARGINCMND EQU $
- MARGN CALL SETUP
- CALL GPARM
- ORA A
- JZ ERR2
- DCR A
- STA OFFST
- CALL GPARM
- ORA A
- JZ ERR2
- CPI 132
- JNC ERR2
- MOV B,A
- LDA OFFST
- MOV C,A
- MOV A,B
- SUB C
- JC ERR2
- STA LINES
- LXI H,MESSM
- JMP REPLY
- MESSM DB 'MARGINS SET'
- DB 13
- PNUMCMND EQU $
- SETPN CALL SETUP
- CALL GPARM
- DCR A
- STA PNO
- LXI H,MESSP
- JMP REPLY
- MESSP DB 'PAGE NO ACCEPTED'
- DB 13
- REPEATCMND EQU $
- REPET CALL SETUP
- CALL GPARM
- STA RPEAT
- LXI H,MESSE
- JMP REPLY
- MESSE DB 'REPEAT COUNT ACCEPTED'
- DB 13
- LINECMND EQU $
- CALL SETUP
- CALL GPARM
- STA LINES
- LXI H,MESSF
- JMP REPLY
- MESSF DB 'CHAR/LINE CHANGED'
- DB 13
- SPACECMND EQU $
- SPACX CALL SETUP
- CALL GPARM
- STA SPACE
- LXI H,MESSG
- JMP REPLY
- MESSG DB 'SPACING CHANGED'
- DB 13
- UNITCMND EQU $
- UNITX CALL SETUP
- CALL GPARM
- STA UNIT
- LXI H,MESS7
- JMP REPLY
- MESS7 DB 'PRINT UNIT CHANGED'
- DB 13
- PAGECMND EQU $
- PAGEX CALL SETUP
- CALL GPARM
- ORA A
- JZ ERR2
- STA PAGE1
- CALL GPARM
- ORA A
- JZ OK1
- STA PAGE2
- CALL GPARM
- ORA A
- JZ OK1
- STA PAGE3
- OK1 LXI H,MESS8
- JMP REPLY
- MESS8 DB 'PAGE PARMS CHANGED'
- DB 13
- TITLECMND EQU $
- TITLX CALL SETUP
- MVI B,50
- LXI D,TITLEX
- TITL0 MOV A,M
- CPI ' '
- JNZ TITL12
- INX H
- JMP TITL0
- TITL12 MOV A,M
- STAX D
- CPI 13
- JZ TITL2
- INX H
- INX D
- DCR B
- JNZ TITL12
- LXI H,MESSA
- JMP REPLY
- MESSA DB 'TITLE TOO LONG'
- DB 13
- TITL2 LXI H,MESS9
- JMP REPLY
- MESS9 DB 'TITLE ACCEPTED'
- DB 13
- FINDCMND CALL CRLF
- CALL SETUP
- XRA A
- STA CNTR
- FIND1 MVI A,13
- CMP M
- JZ ERR1
- MVI A,' '
- CMP M
- JNZ FIND2
- INX H
- JMP FIND1
- FIND2 SHLD ADDR1
- LHLD BOFP
- INX H
- FINDX SHLD ADDR2
- INX H
- INX H
- INX H
- INX H
- SHLD ADDR3
- XCHG
- LHLD ADDR1
- XCHG
- FIND3 LDAX D
- CPI 13
- JZ FOUND
- CMP M
- JNZ NOTFD
- INX H
- INX D
- JMP FIND3
- NOTFD LHLD ADDR1
- XCHG
- LHLD ADDR3
- INX H
- SHLD ADDR3
- MVI A,13
- CMP M
- JNZ FIND3
- EOFLN2 INX H
- MVI A,1
- CMP M
- JZ FINI
- CALL CONTC
- JZ EOR
- INX H
- JMP FINDX
- FOUND LHLD ADDR2
- LDA CNTR
- INR A
- STA CNTR
- FIND5 MOV A,M
- CPI 13
- JZ FIND4
- MOV B,A
- CALL OUT8A
- INX H
- JMP FIND5
- FIND4 CALL OUTCR
- JMP EOFLN2
- FINI LDA CNTR
- ORA A
- JNZ EOR
- LXI H,MESSC
- JMP REPLY
- MESSC DB 'CHAR NOT FOUND'
- DB 13
- OPENCMND CALL RANGE
- MVI A,1
- OPEN2 STA TEMP
- LXI H,0100H
- SHLD INCR
- CALL VCHK
- LXI H,LINE1
- LXI D,ABUF+4
- CALL PACK
- LHLD LINE1
- SHLD TBUF
- LXI H,INCR
- LDAX D
- CPI 0
- CNZ PACK
- LHLD LINE1
- SHLD TEMP2
- CALL FIND
- OPEN3 CALL RNUMB
- MVI C,4
- OPEN4 INX H
- DCR C
- JNZ OPEN4
- OPEN5 INX H
- MVI A,0DH
- CMP M
- JNZ OPEN5
- INX H
- MVI A,1
- CMP M
- JNZ OPEN3
- LDA TEMP
- ORA A
- JZ CFREE
- XRA A
- JMP OPEN2
- CFREE CALL FREE
- JMP EOR
- RENUMBER EQU $
- RENUM MVI A,1
- RECAL STA TEMP
- LXI H,0500H
- SHLD INCR
- CALL VCHK
- LXI H,LINE1
- LXI D,ABUF
- CALL PACK
- LXI H,INCR
- LDAX D
- CPI 0
- CNZ PACK
- LHLD LINE1
- SHLD TEMP2
- LHLD BOFP
- NXLIN CALL RNUMB
- MVI C,4
- NUM1 INX H
- DCR C
- JNZ NUM1
- ALPHA INX H
- MVI A,0DH
- CMP M
- JNZ ALPHA
- INX H
- MVI A,1
- CMP M
- JNZ NXLIN
- LDA TEMP
- ORA A
- JZ CFREE
- XRA A
- JMP RECAL
- RNUMB PUSH B
- PUSH D
- PUSH H
- MVI C,2
- LXI H,NUMBR
- LXI D,LINE1
- CVRT LDAX D
- RRC
- RRC
- RRC
- RRC
- CALL NGEN
- LDAX D
- CALL NGEN
- INX D
- DCR C
- JNZ CVRT
- LDA TEMP
- ORA A
- JNZ NOMOV
- POP H
- PUSH H
- MVI C,4
- LXI D,NUMBR-1
- CVRT1 INX D
- INX H
- LDAX D
- MOV M,A
- DCR C
- JNZ CVRT1
- LXI H,MAXL
- MVI C,4
- LXI D,NUMBR
- CVRT2 LDAX D
- MOV M,A
- INX D
- INX H
- DCR C
- JNZ CVRT2
- NOMOV LXI D,LINE1+1
- LXI H,INCR+1
- XRA A
- LDAX D
- ADC M
- DAA
- STAX D
- DCX D
- DCX H
- LDAX D
- ADC M
- DAA
- STAX D
- LDA TEMP2
- MOV B,A
- LDA LINE1
- CMP B
- JC TOBIG
- LHLD LINE1
- SHLD TEMP2
- POP H
- POP D
- POP B
- RET
- TOBIG LXI H,ERRM7
- JMP REPLY
- ERRM7 DB 'RENUMBER VALUES TOO BIG'
- DB 13
- NGEN ANI 0FH
- ADI '0'
- MOV M,A
- INX H
- RET
- TABSCMND EQU $
- SETAB LXI H,TABT
- MVI B,10
- XRA A
- TAB64 MOV M,A
- INX H
- DCR B
- JNZ TAB64
- CALL SETUP
- TAB1 LXI D,TABT
- MVI B,10
- TAB54 EQU $
- CALL GPARM
- STAX D
- INX D
- DCR B
- JZ TAB44
- MOV A,M
- CPI 13
- JNZ TAB54
- TAB44 LXI H,ERRM8
- JMP REPLY
- ERRM8 DB 'TABS SET'
- DB 13
- PRINT CALL CRLF
- LHLD BOFP
- MOV A,M
- CPI 1
- JZ STPIT
- MVI A,1
- STA LOMRG
- LDA LINES
- STA HIMRG
- STA CCNT
- CALL STADD
- LHLD CALLD
- SHLD CALLX+1
- PRNT1 CALL FIND
- XRA A
- STA JUSTY
- STA ULFLG
- STA HALT
- INX H
- INX H
- INX H
- INX H
- INX H
- MVI A,13
- STA HL
- CALL CMNDS
- LDA PNO
- STA TEMP+1
- PRUN XRA A
- MOV C,A
- STA CNTR
- STA TEMP
- LDA TEMP+1
- INR A
- STA TEMP+1
- JZ SKIP1
- CPI 250
- JC MOVE1
- DCR A
- STA TEMP+1
- MOVE1 CALL MOVIT
- LDA TITLEX
- ORA A
- JZ PPG1
- LXI D,TITLEX
- CALL PRNTR
- LDA TEMP+1
- ORA A
- JZ NOTTL
- LDA TEMP+1
- CPI 250
- JNC NOTTL
- PPG1 LDA LINES
- SBI 8
- CMP C
- JC PPG2
- JZ PPG2
- MVI B,' '
- CALL OUT8A
- INR C
- JMP PPG1
- PPG2 LDA TEMP+1
- CPI 250
- JNC NOTTL
- PUSH H
- LXI H,PN2
- CALL BIND
- POP H
- LXI D,PN2
- LDAX D
- CPI '0'
- JNZ PPG3
- INX D
- LDAX D
- CPI '0'
- JNZ PPG3
- INX D
- PPG3 CALL PRNTR
- JMP NOTTL
- DB 0CDH
- SKIP1 INR A
- STA TEMP+1
- NOTTL CALL PCRLF
- LDA CNTR
- INR A
- STA CNTR
- MOV B,A
- LDA PAGE3
- CMP B
- JZ PBODY
- JC PBODY
- JMP NOTTL
- PBODY CALL FORMT
- DCX H
- MOV A,M
- INX H
- CPI '\'
- JZ EJECT
- LDA CALLC
- ORA A
- JZ PB1
- MOV B,A
- MVI C,133
- LXI D,TBUF
- CALL1 LDAX D
- CMP B
- JZ CALL2
- CPI 13
- JZ PB1
- INX D
- DCR C
- JZ PB1
- JMP CALL1
- DB 0CDH
- CALL2 PUSH H
- LXI H,TBUF
- LXI D,TBUF
- CALLX CALL CALLT
- POP H
- JMP CALL4
- PB1 LXI D,TBUF
- CALL4 CALL MOVIT
- CALL PRNTR
- PB2 CALL PCRLF
- LDA CNTR
- INR A
- STA CNTR
- LDA TEMP
- INR A
- STA TEMP
- MOV B,A
- LDA PAGE2
- CMP B
- JZ FULL
- LDA CNTR
- MOV B,A
- LDA PAGE1
- CMP B
- JZ FULL
- LDA SPACE
- ORA A
- JZ NOTFL
- MOV C,A
- BLKLN DCR C
- JZ NOTFL
- CALL PCRLF
- LDA CNTR
- INR A
- STA CNTR
- LDA TEMP
- INR A
- STA TEMP
- MOV B,A
- LDA PAGE2
- CMP B
- JZ FULL
- LDA CNTR
- MOV B,A
- LDA PAGE1
- CMP B
- JZ FULL
- JMP BLKLN
- NOTFL CALL CONTC
- JZ RTRN
- MVI A,1
- CMP M
- JZ FULL
- JMP PBODY
- EJECT MOV A,M
- CPI 13
- JZ FULL
- TRY CPI '0'
- JC BAD
- CPI '9'+1
- JC GOOD
- BAD CPI 13
- JZ FULL
- INX H
- MOV A,M
- JMP TRY
- GOOD CALL NUMB
- GOOD1 MOV A,M
- CPI 13
- JZ GOOD2
- INX H
- JMP GOOD1
- GOOD2 INX H
- INX H
- INX H
- INX H
- INX H
- INX H
- MVI A,3
- STA HL
- CALL CMNDS
- LDA TEMP
- ADD B
- MOV B,A
- LDA PAGE2
- CMP B
- JNC PBODY
- JZ PBODY
- FULL LDA CNTR
- MOV B,A
- LDA PAGE1
- CMP B
- JZ CKEOF
- CALL PCRLF
- LDA CNTR
- INR A
- STA CNTR
- JMP FULL
- DB 0C3H
- CKEOF MVI A,1
- CMP M
- JNZ HALT1
- LDA INSRT
- ORA A
- CNZ FLUSH
- LDA RPEAT
- ORA A
- JZ RTRN
- CPI 1
- JZ RTRN
- DCR A
- STA RPEAT
- CALL PAUSE
- JMP PRNT1
- RTRN XRA A
- STA SPACE
- CALL EOFBA
- STPIT XRA A
- STA UNIT
- JMP EOR
- HALT1 CALL PAUSE
- JMP PRUN
- PCRLF CALL CONTC
- JZ RTRN
- MVI B,13
- CALL OUT8A
- MVI B,10
- CALL OUT8A
- PUSH D
- LDA UNIT
- ORA A
- JNZ NOSTP
- LDA SRCNT
- ORA A
- JZ NOSTP
- LDA HALT
- INR A
- STA HALT
- MOV D,A
- LDA SRCNT
- CMP D
- JC PT3
- JNZ NOSTP
- PT3 LXI D,M1
- PT1 LDAX D
- CPI 13
- JZ PT2
- MOV B,A
- CALL OUT8A
- INX D
- JMP PT1
- PT2 CALL IN8
- CPI 03
- JZ STPIT
- CPI 13
- JNZ PT2
- XRA A
- STA HALT
- MVI B,13
- CALL OUT8A
- MVI B,10
- CALL OUT8A
- NOSTP LDA NULLC
- ORA A
- JZ PCRL2
- MOV E,A
- PCRL1 MVI B,0
- CALL OUT8A
- DCR E
- JNZ PCRL1
- PCRL2 POP D
- RET
- M1 DB 'PRESS RETURN TO CONTINUE'
- DB 13
- FORMT XRA A
- STA NCHR
- STA SAVE
- STA TBCNT
- FORM1 XCHG
- LXI H,TABT
- SHLD TABAD
- LHLD TADD
- XCHG
- FORM2 MOV A,M
- INX H
- CPI '>'
- JZ MARG
- CPI '[' ;VT
- JZ JON
- CPI ']' ;SHIFT M
- JZ JOFF
- CPI '<'
- JZ CON
- CPI '^'
- JZ INSR1
- CPI 13
- JZ NEWLN
- CPI '\'
- JZ EOFPT
- CPI 09
- JZ TABEX
- CPI 7EH ;TILDE-PAUSE
- JZ YOUIN
- CPI '.'
- JZ EOFS
- CPI '&'
- JNZ FORM3
- CALL SETUL
- DCX D
- LDAX D
- CPI ' '
- JNZ FL1
- MOV A,M
- CPI ' '
- JNZ FL1
- JMP FORM4
- FL1 INX D
- JMP FORM2
- FORM4 INX D
- MVI A,'&'
- FORM3 STAX D
- LDA ULFLG
- ORA A
- JZ FORM5
- LDAX D
- CPI ' '
- JZ FORM5
- ORI 80H
- STAX D
- FORM5 INX D
- LDA NCHR
- INR A
- STA NCHR
- MOV B,A
- CALL SAVER
- LDA JUSTY
- ORA A
- JZ FORM2
- LDA CCNT
- CMP B
- JZ FILLN
- JMP FORM2
- EOFS MOV A,M
- CPI 13
- JNZ NEOFS
- MVI A,'.'
- STAX D
- INX D
- LDA NCHR
- INR A
- STA NCHR
- MOV B,A
- LDA JUSTY
- ORA A
- JZ EOFS1
- LDA CCNT
- CMP B
- JZ FILLN
- EOFS1 MVI A,' '
- JMP FORM3
- NEOFS MVI A,'.'
- JMP FORM3
- SETUL MOV A,M
- CPI 13
- JZ OFFUL
- CPI ' '
- JNZ ONUL
- OFFUL XRA A
- JMP STAUL
- ONUL MVI A,1
- STAUL STA ULFLG
- RET
- MARG MOV A,M
- CPI 13
- JNZ SETMG
- MVI A,1
- STA LOMRG
- LDA LINES
- STA HIMRG
- STA CCNT
- CALL STADD
- INX H
- JMP NXTLN
- DB 3AH
- ;SET MARGINS
- SETMG EQU $
- CALL NUMB
- MOV A,B
- ORA A
- JZ MAR1
- STA LOMRG
- LDA LINES
- CMP B
- JC ERRMG
- MOV A,M
- CPI 13
- JZ MAR2
- INX H
- JMP MAR3
- MAR1 INX H
- MVI A,1
- STA LOMRG
- JMP MAR3
- MAR2 LDA LINES
- JMP MAR5
- MAR6 LDA LINES
- JMP MAR5
- MAR3 CALL NUMB
- MAR4 MOV A,B
- ORA A
- JZ MAR6
- MAR5 STA HIMRG
- LDA LOMRG
- MOV B,A
- LDA HIMRG
- SUB B
- JC ERRMG
- INR A
- STA CCNT
- LXI D,TBUF
- MVI B,133
- MVI A,' '
- CLR STAX D
- INX D
- DCR B
- JNZ CLR
- CALL STADD
- INX H
- NXTLN MOV A,M
- CPI 1
- JZ EOF
- INX H
- INX H
- INX H
- INX H
- INX H
- MVI A,3
- STA HL
- CALL CMNDS
- JMP FORM2
- ERRMG LXI H,ERRM4
- JMP REPLY
- ERRM4 DB 'MARGIN ERROR'
- DB 13
- PATCH DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- NUMB XRA A
- MOV B,A
- NUMB2 MOV A,M
- CPI 13
- RZ
- CPI ','
- RZ
- CPI ' '
- RZ
- CPI '0'
- JC ERR3
- CPI '9'+1
- JNC ERR3
- ANI 0FH
- MOV C,A
- MOV A,B
- RLC
- RLC
- RLC
- ADD B
- ADD B
- ADD C
- MOV B,A
- INX H
- JMP NUMB2
- STADD EQU $
- LXI D,TBUF
- LDA LOMRG
- DCR A
- ADD E
- MOV E,A
- JNC STAD1
- MOV A,D
- INR A
- MOV D,A
- STAD1 XCHG
- SHLD TADD
- XCHG
- RET
- DB 0CDH
- ;TAB EXPANSION
- TABEX PUSH H
- LHLD TABAD
- TABX1 MOV A,M
- ORA A
- JZ TAB99
- LDA TBCNT
- CPI 10
- JZ TAB99
- INR A
- STA TBCNT
- TABX3 LDA NCHR
- MOV B,A
- LDA LOMRG
- ADD B
- MOV C,A ;TRUE POSITION
- MOV A,M ;TAB POSITION
- CMP C
- JZ TAB98
- JNC TABX2
- INX H
- JMP TABX1
- TABX2 MVI A,' '
- STAX D
- INX D
- LDA NCHR
- INR A
- STA NCHR
- MOV B,A
- LDA CCNT
- CMP B
- JZ TAB98
- JC TAB98
- JMP TABX3
- DB 0CAH
- TAB98 INX H
- TAB99 SHLD TABAD
- POP H
- JMP FORM2
- INSR1 LDA INSRT
- ORA A
- JNZ INSR2
- MVI A,'^'
- JMP FORM3
- INSR2 CALL MOVBA
- JMP FORM2
- DB 3AH
- ; LINE FILL
- SAVER MOV A,M
- CPI ' '
- RNZ
- SHLD ADDR1
- XCHG
- SHLD ADDR2
- XCHG
- LDA NCHR
- STA ADDR4
- RET
- FILLN EQU $
- MVI A,13
- STAX D
- FILL2 LHLD ADDR2
- XCHG
- LDA ADDR4
- STA NCHR
- BKUP DCX D
- LDA NCHR
- DCR A
- STA NCHR
- LDAX D
- CPI ' '
- JZ BKUP
- NOBU LDA JUSTY
- ORA A
- CNZ JSTFY
- LHLD ADDR1
- BLKCK MOV A,M
- INX H
- CPI ' '
- JZ BLKCK
- INX D
- DCX H
- JMP EOFPT
- ;JUSTIFICATION ROUTINE
- JSTFY LDA SAVE
- ORA A
- RNZ
- LDA JSW
- ORA A
- RZ
- PUSH H
- PUSH B
- LDA NCHR
- INR A
- STA NCHR
- MOV B,A
- LDA CCNT
- CMP B
- JZ JEND
- JC JEND
- MVI A,13
- INX D
- STAX D
- XCHG
- LHLD TADD
- XCHG
- INDT1 LDAX D
- CPI ' '
- JNZ BLTWO
- INX D
- JMP INDT1
- ;ADD 1 BLANK WHERE 2 OR MORE OCCUR
- BLTWO LDAX D
- CPI 13
- JZ ODD
- CPI ' '
- JNZ ONLY1
- INX D
- LDAX D
- CPI 13
- JZ ODD
- CPI ' '
- JNZ ONLY1
- CALL BLINS
- LDA NCHR
- MOV C,A
- LDA CCNT
- CMP C
- JZ JEND
- JC JEND
- ONLY1 INX D
- JMP BLTWO
- DB 0CDH
- ;EXTRA BLANK EVERY OTHER ONE
- ODD XCHG
- LHLD TADD
- XCHG
- XRA A
- STA INSP
- ODD2 LDAX D
- CPI ' '
- JNZ ODD3
- INX D
- JMP ODD2
- ODD3 LDAX D
- CPI 13
- JZ REBLK
- CPI ' '
- JNZ ODD4
- LDA INSP
- ORA A
- JZ ODD5
- XRA A
- STA INSP
- CALL BLINS
- LDA NCHR
- MOV C,A
- LDA CCNT
- CMP C
- JZ JEND
- JC JEND
- ODD4 INX D
- JMP ODD3
- ODD5 MVI A,1
- STA INSP
- JMP ODD4
- DB 0CAH
- ;ADD BLANK TO EVEN SPACES
- REBLK XCHG
- LHLD TADD
- XCHG
- INDT2 LDAX D
- CPI ' '
- JNZ BLONE
- INX D
- JMP INDT2
- BLONE LDAX D
- CPI 13
- JZ REBLK
- CPI ' '
- JNZ NOBLK
- CALL BLINS
- LDA NCHR
- MOV C,A
- LDA CCNT
- CMP C
- JZ JEND
- JC JEND
- NOBLK INX D
- JMP BLONE
- JEND POP B
- POP H
- XCHG
- LHLD TADD
- XCHG
- JEND2 LDAX D
- CPI 13
- RZ
- INX D
- JMP JEND2
- ; BLANK INSERT
- BLINS PUSH H
- PUSH B
- LXI B,TBUF+130
- LXI H,TBUF+131
- BLIN1 LDAX B
- MOV M,A
- MOV A,D
- CMP B
- JNZ BLIN3
- MOV A,E
- CMP C
- JZ BLIN2
- BLIN3 DCX B
- DCX H
- JMP BLIN1
- BLIN2 MVI A,' '
- STAX D
- LDA NCHR
- INR A
- STA NCHR
- BLIN4 INX D
- LDAX D
- CPI ' '
- JZ BLIN4
- POP B
- POP H
- RET
- YOUIN CALL IN8
- CPI 03
- JZ STPIT
- X5F3 CPI 08
- JZ BACKYOU
- CPI 13
- JZ FORM2
- MOV B,A
- STAX D
- INX D
- LDA UNIT
- ORA A
- JZ SKIP2
- CALL OUT8
- SKIP2 LDA NCHR
- INR A
- STA NCHR
- MOV B,A
- LDA CCNT
- CMP B
- JZ FORM2
- JC FORM2
- JMP YOUIN
- BACKYOU LDA NCHR
- ORA A
- JZ YOUIN
- DCR A
- STA NCHR
- DCX D
- LDA X5F3+1
- MOV B,A
- LDA UNIT
- ORA A
- JZ YOUIN
- CALL OUT8
- JMP YOUIN
- JON MVI C,1
- JMP JOFF+1
- JOFF XRA A
- STA JUSTY
- JMP FORM2
- NEWLN MOV A,M
- CPI 1
- JZ EOFPT
- INX H
- INX H
- INX H
- INX H
- INX H
- LDA JUSTY
- ORA A
- JZ EOFPT
- SHLD ADDR1
- XCHG
- SHLD ADDR2
- XCHG
- LDA NCHR
- STA ADDR4
- MVI A,' '
- JMP FORM3
- EOFPT MVI A,13
- STAX D
- MVI A,3
- STA HL
- CALL CMNDS
- RET
- PRNTR PUSH D
- PUSH H
- XCHG
- SHLD HL
- XRA A
- MOV C,A
- MOV D,A
- LDA BSCR
- CPI 'B'
- JZ PRNT7
- PRNT0 MOV A,M
- CPI 13
- JZ PRNT4
- ANI 80H
- JZ PRNT2
- INR D
- MOV A,M
- ANI 7FH
- JMP PRNT3
- PRNT2 MOV A,M
- PRNT3 MOV B,A
- CALL OUT8A
- INR C
- INX H
- JMP PRNT0
- PRNT4 MOV A,D
- ORA A
- JZ PRNT9
- MVI B,0DH
- CALL OUT8A
- PUSH B
- CALL MOVIT
- POP B
- LHLD HL
- PRNT5 MOV A,M
- CPI 13
- JZ PRNT9
- ANI 80H
- JZ PRNT6
- MVI B,'_'
- CALL OUT8A
- INX H
- DCR D
- JZ PRNT9
- JMP PRNT5
- PRNT6 MVI B,' '
- CALL OUT8A
- INX H
- JMP PRNT5
- PRNT7 MOV A,M
- CPI 13
- JZ PRNT9
- ANI 80H
- JNZ PRNT8
- MOV A,M
- MOV B,A
- PRNTA CALL OUT8A
- INR C
- INX H
- JMP PRNT7
- PRNT8 MOV A,M
- ANI 7FH
- MOV B,A
- CALL OUT8A
- MVI B,08
- CALL OUT8A
- MVI B,5FH
- JMP PRNTA
- PRNT9 POP H
- POP D
- RET
- CKJ INX H
- MVI A,1
- STA SAVE
- CALL FORM1
- JMP PB1
- ;CENTER TITLE
- DB 0CDH
- CON PUSH B
- XRA A
- MOV C,A
- LXI D,TBUF
- CPY4 MOV A,M
- INX H
- CPI '&'
- JNZ CEN2
- CALL SETUL
- DCX D
- LDAX D
- CPI ' '
- JNZ CEN4
- MOV A,M
- CPI ' '
- JNZ CEN4
- JMP CEN1
- CEN4 INX D
- JMP CPY4
- CEN1 INX D
- MVI A,'&'
- CEN2 CPI 13
- JZ CENT
- STAX D
- LDA ULFLG
- ORA A
- JZ CEN3
- LDAX D
- CPI ' '
- JZ CEN3
- ORI 80H
- STAX D
- CEN3 INX D
- INR C
- MOV B,C
- LDA LINES
- CMP B
- JNC CPY4
- JZ DON2
- POP B
- LXI H,ERRM3
- JMP REPLY
- ERRM3 DB 'LINE TOO SMALL TO CENTER'
- DB 13
- DB 03AH
- CENT MVI A,13
- STAX D
- XCHG
- SHLD ADDR1
- XCHG
- INR C
- MOV A,C
- STA NCHR
- MOV B,A
- LDA LINES
- SUB B
- RRC
- ANI 07FH
- INR A
- MOV B,A
- PUSH H
- LOOP4 LHLD ADDR1
- XCHG
- LHLD ADDR1
- INX H
- SHLD ADDR1
- LDA NCHR
- MOV C,A
- LOOP3 LDAX D
- MOV M,A
- MVI A,' '
- STAX D
- DCX H
- DCX D
- DCR C
- JNZ LOOP3
- DCR B
- JNZ LOOP4
- LHLD ADDR1
- XCHG
- POP H
- DON2 POP B
- JMP NEWLN
- ;PAGE NO TO DBII
- BIND MVI B,100
- CALL BID1
- MVI B,10
- CALL BID1
- ADI '0'
- MOV M,A
- RET
- BID1 MVI M,'0'-1
- INR M
- SUB B
- JNC BID1+2
- ADD B
- INX H
- RET
- PN2 DB '000'
- DB 13
- PAUSE LDA STOP
- ORA A
- RZ
- PAZ CALL IN8
- CPI 13
- JNZ PAZ
- RET
- MOVIT LDA OFFST
- ORA A
- RZ
- MOV C,A
- MVI B,' '
- SHIFT5 CALL OUT8A
- DCR C
- JNZ SHIFT5
- RET
- CMNDS PUSH D
- CMND2 MOV A,M
- CPI '#'
- JNZ RETRN
- SHLD ADDR1
- COMM LXI D,IBUF
- INX H
- UPPER4 MOV A,M
- STAX D
- INX D
- INX H
- CPI 13
- JZ SCAN
- JMP UPPER4
- SCAN SHLD DE
- MVI B,4
- LXI D,IBUF
- SCAN2 LDAX D
- CPI 60H
- JC SCAN3
- SBI 20H
- STAX D
- SCAN3 INX D
- DCR B
- JNZ SCAN2
- LXI D,CTAB2
- LDA HL
- MOV B,A
- MVI A,4
- STA NCHR
- CALL COMS
- JNZ ERR1
- PCHL
- NOGO LHLD ADDR1
- RETRN POP D
- RET
- CTAB2 DB 'SPAC'
- DW SPAC2
- DB 'COMM'
- DW COMNT
- DB 'CHAI'
- DW CHAIN
- DB 'NULL'
- DW NULL1
- DB 'TITL'
- DW TITL1
- DB 'LINE'
- DW LINE2
- DB 'UNIT'
- DW UNIT2
- DB 'PAGE'
- DW PAGEZ
- DB 'JUST'
- DW JUSTZ
- DB 'TABS'
- DW TABSZ
- DB 'OFFS'
- DW OFF2
- DB 'PNUM'
- DW PNUM2
- DB 'MARG'
- DW MARG1
- SETUP LXI H,IBUF
- SET1 INX H
- MOV A,M
- CPI ' '
- JZ SET2
- CPI 13
- RZ
- JMP SET1
- SET2 INX H
- MOV A,M
- CPI 13
- RZ
- CPI ' '
- JZ SET2
- RET
- MARG1 CALL SETUP
- CALL NUMB
- MOV A,B
- ORA A
- JZ ERR2
- DCR A
- STA OFFST
- INX H
- CALL NUMB
- MOV A,B
- ORA A
- JZ ERR2
- MOV C,A
- LDA OFFST
- MOV B,A
- MOV A,C
- SUB B
- JC ERR2
- STA LINES
- STA HIMRG
- STA CCNT
- JMP SKIP3
- COMNT CALL SETUP
- JMP SKIP3
- NULL1 CALL SETUP
- CALL NUMB
- MOV A,B
- STA NULLC
- JMP SKIP3
- LINE2 CALL SETUP
- CALL NUMB
- MOV A,B
- STA LINES
- STA HIMRG
- STA CCNT
- JMP SKIP3
- SPAC2 CALL SETUP
- CALL NUMB
- MOV A,B
- STA SPACE
- JMP SKIP3
- UNIT2 CALL SETUP
- CALL NUMB
- MOV A,B
- STA UNIT
- JMP SKIP3
- OFF2 CALL SETUP
- CALL NUMB
- MOV A,B
- STA OFFST
- JMP SKIP3
- PNUM2 CALL SETUP
- CALL NUMB
- MOV A,B
- DCR A
- STA PNO
- JMP SKIP3
- JUSTZ CALL SETUP
- CALL ONOFF
- MOV A,B
- STA JSW
- JMP SKIP3
- PAGEZ CALL SETUP
- CALL NUMB
- MOV A,B
- STA PAGE1
- MOV A,M
- CPI 13
- JZ SKIP3
- INX H
- CALL NUMB
- MOV A,B
- STA PAGE2
- MOV A,M
- CPI 13
- JZ SKIP3
- INX H
- CALL NUMB
- MOV A,B
- STA PAGE3
- JMP SKIP3
- TITL1 CALL SETUP
- LXI D,TITLEX
- MVI B,50
- TITL3 MOV A,M
- STAX D
- CPI 13
- JZ SKIP3
- INX H
- INX D
- DCR B
- JNZ TITL3
- LXI H,MSG1X4
- JMP REPLY
- MSG1X4 DB 'TITLE TOO LONG'
- DB 13
- CHAIN CALL LOADR
- LHLD BOFP
- LXI SP,AREA+50
- INX H
- INX H
- INX H
- INX H
- INX H
- LDA TEMP+1
- STA PNO
- MVI A,13
- STA HL
- CALL CMNDS
- LDA PNO
- STA TEMP+1
- JMP PB1
- TABSZ CALL SETUP
- LXI D,TABT
- MVI B,10
- XRA A
- TAB6 STAX D
- INX D
- DCR B
- JNZ TAB6
- LXI D,TABT
- MVI B,10
- TAB5 PUSH B
- CALL NUMB
- MOV A,B
- STAX D
- INX D
- POP B
- DCR B
- JZ SKIP3
- MOV A,M
- CPI 13
- JZ SKIP3
- INX H
- JMP TAB5
- DB 0CDH
- ONOFF XRA A
- MOV B,A
- MOV A,M
- CPI 13
- RZ
- CPI 'O'
- JZ ON2
- CPI 6FH
- RNZ
- ON2 INX H
- MOV A,M
- CPI 'N'
- JZ ON3
- CPI 6EH
- RNZ
- MOV A,M
- CPI 1
- JZ EOFPT
- ON3 MVI B,1
- RET
- SKIP3 LHLD DE
- INX H
- MOV A,M
- CPI 1
- JZ EOF
- INX H
- INX H
- INX H
- INX H
- JMP CMND2
- RAM EQU $
- AREA DS 55
- BOFP DS 2
- EOFP DS 2
- TOP DS 2
- MPTY DS 2
- MAXL DS 4
- INSP DS 2
- HCON DS 2
- FBUF DS 5
- NULLC DS 1
- SPACE DS 1
- LINES DS 1
- PAGE1 DS 1
- PAGE2 DS 1
- PAGE3 DS 1
- FILE DS 9
- DISK DS 1
- LINEA DS 2
- SAVE DS 1
- NUMBR DS 4
- INCR DS 2
- RDWRT EQU INCR
- CNTR DS 1
- RPEAT DS 1
- BLKS DS 1
- BLOCK DS 1
- UNIT DS 1
- AUTO DS 1
- JUSTY DS 1
- JSW DS 1
- INSRT DS 1
- CALLC DS 1
- CALLD DS 2
- ABUF DS 12
- BBUF DS 4
- NCHR DS 1
- PNTR DS 2
- LINE1 DS 2
- TEMP DS 2
- ADDR1 DS 2
- ADDR2 DS 2
- ADDR3 DS 2
- ADDR4 DS 2
- TEMP2 DS 2
- TEMP3 DS 2
- ULFLG DS 1
- FTYPE DS 1
- TABAD DS 2
- TBCNT DS 1
- TADD DS 2
- TABT DS 10
- TITLEX DS 50
- HALT DS 1
- HIMRG DS 1
- LOMRG DS 1
- OFFST DS 1
- PNO DS 1
- DSKAD DS 2
- BUFAD DS 2
- BUFCT DS 2
- RECCT DS 1
- CUSED DS 1
- INHIB DS 1
- HL DS 2
- DE DS 2
- RECAD EQU DE
- DBFLG DS 1
- LAST DS 1
- IBUF1 DS 1
- IBUF DS 140
- TBUF DS 140
- DATA EQU $
- PART5 EQU $
- BLOADCMND CALL GETBF
- MVI A,1
- STA RDWRT ;READ OPERATION
- CALL GETFL
- LHLD BOFP
- SHLD EOFP
- MVI M,1
- LXI H,0000
- SHLD MAXL
- SHLD MAXL+2
- LXI H,IBUF
- SHLD RECAD
- CALL GETBACHR
- STRT1 CALL GCHAR ;SKIP CNT
- CPI 01
- JZ DONE5
- CALL GCHAR ;GET LINE NO
- MOV C,A
- CALL GCHAR
- MOV B,A
- CALL DBII ;LINE NO TO DBII
- LOAD1 CALL GCHAR
- CPI 13
- JZ EOFLN5
- CPI 09AH
- JZ LNNO
- CPI 80
- JNC DECOD
- LHLD RECAD
- MOV M,A
- INX H
- SHLD RECAD
- JMP LOAD1
- LNNO CALL GCHAR
- MOV C,A
- CALL GCHAR
- MOV B,A
- CALL DBII
- JMP LOAD1
- DONE5 LHLD TOP
- INR H
- INR H
- INR L
- SHLD TOP
- CALL FREE
- JMP EOR
- EOFLN5 LHLD RECAD
- MVI A,13
- MOV M,A
- INX H
- MVI A,01
- MOV M,A
- MVI B,2
- LXI H,IBUF
- END1 MOV A,M
- CPI 13
- JZ END2
- INX H
- INR B
- JMP END1
- END2 MOV A,B
- STA IBUF-1
- CALL CONTC
- JZ DONE5
- LDA DBFLG
- ORA A
- JZ END3
- LXI H,IBUF
- CALL CRLF
- CALL SCRN
- END3 CALL LINE
- LXI H,IBUF
- SHLD RECAD
- JMP STRT1
- GCHAR LHLD BUFCT
- MVI A,2
- CMP H
- CZ GETBACHR
- LHLD BUFAD
- MOV D,H
- MOV E,L
- INX H
- SHLD BUFAD
- LHLD BUFCT
- INX H
- SHLD BUFCT
- LDAX D
- RET
- ;CONVERT BINARY LINE NO TO DBII
- DBII LXI D,9999
- MOV A,D
- CMP B
- JNC DBI2
- LXI H,DBIM
- JMP REPLY
- DBIM DB 'LINE NOS > 9999'
- DB 13
- DBI2 XRA A
- STA LAST
- MOV H,B
- MOV L,C
- SHLD MPTY
- LXI H,1000
- SHLD TEMP2
- CALL DIVID5
- LXI H,100
- SHLD TEMP2
- CALL DIVID5
- LXI H,10
- SHLD TEMP2
- CALL DIVID5
- LDA MPTY
- CALL DBX
- RET
- DIVID5 MVI E,0
- LHLD MPTY
- SHLD TEMP
- SB2 LXI B,TEMP
- LXI H,TEMP2
- XRA A
- LDAX B
- SBB M
- STAX B
- INX B
- INX H
- LDAX B
- SBB M
- STAX B
- JC NEG
- INR E
- PUSH H
- LHLD TEMP
- SHLD MPTY
- POP H
- JMP SB2
- NEG MOV A,E
- DBX ADI '0'
- MOV D,A
- LDA LAST
- ORA A
- JNZ ZERO
- MOV A,D
- CPI '0'
- RZ
- STA LAST
- ZERO MOV A,D
- LHLD RECAD
- MOV M,A
- INX H
- SHLD RECAD
- RET
- GETBF LDA TOP+1
- DCR A
- DCR A
- MOV B,A
- LDA EOFP+1
- CMP B
- RC
- LXI H,BMSG2
- JMP REPLY
- BMSG2 DB 'NO ROOM FOR BUFFER'
- DB 13
- GETFL CALL SETUP
- CALL GFILE
- CALL DIREC
- CALL SETDN
- PUSH H
- LHLD TOP
- DCR H
- DCR H
- DCR L
- SHLD TOP
- POP H
- LDA DENTY
- CPI 'S'
- JZ BDB4
- LDA DBYTE
- ORA A
- JZ BDB4
- MVI A,1
- JMP BDB7
- BDB4 MVI A,2
- BDB7 STA BLOCK
- PUSH H
- INX H
- INX H
- INX H
- INX H
- MOV A,M
- ANI 0FH
- CPI 2
- JZ BDB5
- LXI H,BMSG3
- JMP REPLY
- BMSG3 DB 'NOT A BASIC PGM FILE'
- DB 13
- BDB5 POP H
- MOV E,M
- INX H
- MOV D,M
- XCHG
- DCX H
- LDA BLOCK
- CPI 2
- JNZ ONE1
- DCX H
- ONE1 SHLD DSKAD
- LHLD TOP
- INX H
- SHLD BUFAD
- XCHG
- INX H ;GET THE SIZE
- MOV A,M ;SAVE THE LOW ORDER BYTE
- STA SAVE ;SAVE THE SIZE BYTE
- RET
- GETBACHR PUSH H
- PUSH B
- PUSH D
- LHLD TOP
- INX H
- SHLD BUFAD
- XCHG
- LHLD DSKAD
- INX H
- LDA BLOCK
- CPI 2
- JNZ ONE
- INX H
- ONE SHLD DSKAD
- LDA DISK
- MOV C,A
- LDA RDWRT
- MOV B,A
- LDA BLOCK
- CALL DCOM
- JC IOERR
- LXI H,0000
- SHLD BUFCT
- POP D
- POP B
- POP H
- RET
- IOERR LXI H,MSG1
- JMP REPLY
- MSG1 DB 'DISK I/O ERROR'
- DB 13
- ;REPLACE TOKEN WITH DBII TEXT
- DECOD LXI H,BTAB
- MOV B,A
- CODE1 MOV A,M
- CPI 0FFH
- JZ CODE6
- CPI 80H
- JNC CODE2
- CODE3 INX H
- JMP CODE1
- CODE2 CMP B
- JNZ CODE3
- INX H
- XCHG
- LHLD RECAD
- CODE4 LDAX D
- CPI 80H
- JNC CODE5 ;ON NEXT CODE
- MOV M,A
- INX D
- INX H
- JMP CODE4
- CODE6 LHLD RECAD
- MOV A,B
- MOV M,A
- INX H
- CODE5 SHLD RECAD
- JMP LOAD1
- ;************* BSAVE BSAVE BSAVE ****************
- BSAVECMND CALL GETBF
- CALL GETFL
- LXI H,0000
- SHLD BUFCT
- XRA A
- STA RDWRT
- STA INHIB
- MVI A,01
- STA CCNT
- LHLD BOFP
- SHLD ADDR1
- DECD1 LXI H,IBUF
- SHLD ADDR2
- CALL GETCH
- CPI 01
- JZ EOFPT5
- CALL GETCH
- CALL BINLN
- DECD2 CALL GETCH
- CPI 13
- JZ ENDLN
- CPI ' '
- JZ NONUM
- CPI ','
- JZ NONUM
- CPI 22H
- JZ QUOTE
- CPI '0'
- JC TOKEN
- CPI '9'+1
- JNC TOKEN
- JMP LINEX
- QUOTE PUSH PSW
- LDA INHIB
- ORA A
- JZ QUOT2
- XRA A
- QUOT3 STA INHIB
- POP PSW
- JMP LINEX
- QUOT2 MVI A,1
- JMP QUOT3
- NONUM CALL PUTCH
- JMP DECD2
- LINEX MOV B,A
- LDA LINE1
- ORA A
- JNZ GENLN
- MOV A,B
- CALL PUTCH
- JMP DECD2
- ENDLN CALL PUTCH
- XRA A
- STA INHIB
- LDA CCNT
- STA IBUF-1
- LHLD BUFAD
- SHLD HL
- LXI B,IBUF-1
- XCHG
- LHLD BUFCT
- ADDLN LDAX B
- STAX D
- INX B
- INX D
- INX H
- CALL CKEND
- LDA CCNT
- DCR A
- JZ ADDL3
- STA CCNT
- JMP ADDLN
- ADDL3 CALL CKEND
- SHLD BUFCT
- XCHG
- SHLD BUFAD
- CALL CONTC
- JZ EOFPT5
- LDA DBFLG
- ORA A
- JZ DECD1
- XCHG
- LHLD HL
- CALL DUMP5
- JMP DECD1
- EOFPT5 LHLD BUFAD
- MVI A,01
- MOV M,A
- CALL PUTBA
- LHLD TOP
- INR H
- INR H
- INR D
- SHLD TOP
- JMP EOR
- GENLN MVI A,9AH
- CALL PUTCH
- CALL BINLN
- JMP DECD2
- TOKEN PUSH PSW
- LDA INHIB
- ORA A
- JNZ NOT2
- POP PSW
- LXI B,BTAB
- LHLD ADDR1
- DCX H
- SHLD ADDR1
- XRA A
- STA LINE1
- LDAX B
- NXTN STA TEMP
- CPI 0FFH
- JZ NOTOK ;NO TOKEN FOUND
- INX B
- LHLD ADDR1
- LDAX B
- CKNXT CMP M
- JNZ SKIP
- INX H
- INX B
- LDAX B
- CPI 80H
- JC CKNXT
- LDA TEMP
- SHLD ADDR1
- CALL PUTCH
- CPI 88H
- JZ GOTO
- CPI 89H
- JZ GOTO
- CPI 0B2H
- JZ GOTO
- CPI 8EH
- JZ GOTO
- CPI 9FH
- JZ GOTO
- CPI 0B4H
- JZ GOTO
- CPI 96H
- JZ GOTO
- JMP DECD2
- GOTO MVI A,1 ;SET TO EXPECT LINE NO
- STA LINE1
- JMP DECD2
- NOT2 POP PSW
- CALL PUTCH
- JMP DECD2
- NOTKN CALL PUTCH
- CALL GETCH ;DUMMY CALL
- JMP DECD2
- SKIP LDAX B
- CPI 80H
- JNC NXTN
- INX B
- JMP SKIP
- NOTOK LHLD ADDR1
- MOV A,M
- INX H
- JMP NOTKN
- GETCH LHLD ADDR1
- MOV A,M
- INX H
- SHLD ADDR1
- RET
- CCNT DB 0
- PUTCH LHLD ADDR2
- MOV M,A
- INX H
- SHLD ADDR2
- LXI H,CCNT
- INR M
- RET
- CKEND MVI A,2
- CMP H
- RNZ
- CALL PUTBA
- LHLD BUFAD
- XCHG
- LXI H,0000
- RET
- PUTBA LDA SAVE ;GET REMAINING SIZE
- ORA A
- JZ SMALL
- DCR A
- STA SAVE
- LDA BLOCK
- CPI 2
- JNZ PUT1
- LDA SAVE
- ORA A
- JZ SMALL
- DCR A
- STA SAVE
- PUT1 CALL GETBACHR
- RET
- SMALL LXI H,MSG2
- JMP REPLY
- MSG2 DB 'BASIC FILE TOO SMALL'
- DB 13
- BINLN LHLD ADDR1
- DCX H
- SHLD ADDR1
- LXI H,0
- ADE1 PUSH H
- CALL GETCH
- POP H
- CPI '0'
- JC DUN
- CPI '9'+1
- JNC DUN
- MOV D,H
- MOV E,L
- DAD H
- DAD H
- DAD D
- DAD H
- SUI 48
- CPI 10
- CMC
- JC DUN
- MOV E,A
- MVI D,0
- DAD D
- JMP ADE1
- DUN PUSH H
- MOV A,L
- CALL PUTCH
- POP H
- MOV A,H
- CALL PUTCH
- LHLD ADDR1
- DCX H
- SHLD ADDR1
- RET
- BTAB DB 80H
- DB 'LET'
- DB 81H
- DB 'FOR'
- DB 82H
- DB 'PRINT'
- DB 83H
- DB 'NEXT'
- DB 84H
- DB 'IF'
- DB 85H
- DB 'READ'
- DB 86H
- DB 'INPUT'
- DB 87H
- DB 'DATA'
- DB 88H
- DB 'GOTO'
- DB 89H
- DB 'GOSUB'
- DB 8AH
- DB 'RETURN'
- DB 8BH
- DB 'DIM'
- DB 8CH
- DB 'STOP'
- DB 8DH
- DB 'END'
- DB 8EH
- DB 'RESTORE'
- DB 8FH
- DB 'REM'
- DB 90H
- DB 'FN'
- DB 91H
- DB 'DEF'
- DB 92H
- DB '!'
- DB 93H
- DB 'ON'
- DB 94H
- DB 'OUT'
- DB 95H
- DB 'FILL'
- DB 96H
- DB 'EXIT'
- DB 97H
- DB 'OPEN'
- DB 98H
- DB 'CLOSE'
- DB 99H
- DB 'WRITE'
- DB 9BH
- DB 'CHAIN'
- DB 9CH
- DB 'LINE'
- DB 9DH
- DB 'DESTROY'
- DB 9EH
- DB 'CREATE'
- DB 9FH
- DB 'ERRSET'
- DB 0A0H
- DB 'RUN'
- DB 0A1H
- DB 'LIST'
- DB 0A2H
- DB 'MEMSET'
- DB 0A3H
- DB 'SCR'
- DB 0A4H
- DB 'AUTO'
- DB 0A5H
- DB 'LOAD'
- DB 0A6H
- DB 'CONT'
- DB 0A7H
- DB 'APPEND'
- DB 0A8H
- DB 'REN'
- DB 0A9H
- DB 'NSAVE'
- DB 0AAH
- DB 'SAVE'
- DB 0ABH
- DB 'BYE'
- DB 0ACH
- DB 'EDIT'
- DB 0ADH
- DB 'DEL'
- DB 0AEH
- DB 'PSIZE'
- DB 0AFH
- DB 'CAT'
- DB 0B0H
- DB 'STEP'
- DB 0B1H
- DB 'TO'
- DB 0B2H
- DB 'THEN'
- DB 0B3H
- DB 'TAB'
- DB 0B4H
- DB 'ELSE'
- DB 0B5H
- DB 'CHR$'
- DB 0B6H
- DB 'DB'
- DB 0B7H
- DB 'VAL'
- DB 0B8H
- DB 'STR$'
- DB 0B9H
- DB 'NOENDMARK'
- DB 0BAH
- DB 'INCHAR'
- DB 0BBH
- DB 'FILE'
- DB 0E0H
- DB '('
- DB 0E0H
- DB '['
- DB 0E2H
- DB '*'
- DB 0E3H
- DB '+'
- DB 0E5H
- DB '-'
- DB 0E7H
- DB '/'
- DB 0ECH
- DB 'AND'
- DB 0EDH
- DB 'OR'
- DB 0EFH
- DB '>='
- DB 0F0H
- DB '<='
- DB 0F1H
- DB '<>'
- DB 0EFH
- DB '>='
- DB 0F0H
- DB '=<'
- DB 0F4H
- DB '<'
- DB 0F5H
- DB '='
- DB 0F6H
- DB '>'
- DB 0F7H
- DB 'NOT'
- DB 0E1H
- DB '^'
- DB 0C6H
- DB 'INT'
- DB 0CCH
- DB 'LEN'
- DB 0CDH
- DB 'CALL'
- DB 0CEH
- DB 'RND'
- DB 0CAH
- DB 'SGN'
- DB 0CBH
- DB 'SIN'
- DB 0C4H
- DB 'SQRT'
- DB 0D2H
- DB 'ATN'
- DB 0D8H
- DB 'FREE'
- DB 0D9H
- DB 'INP'
- DB 0DAH
- DB 'EXAM'
- DB 0DBH
- DB 'ABS'
- DB 0DCH
- DB 'COS'
- DB 0DDH
- DB 'LOG'
- DB 0DEH
- DB 'EXP'
- DB 0DFH
- DB 'TYP'
- DB 0FFH
- CONFIGURE LXI SP,AREA+50
- CALL CRLF
- LXI H,Q1
- CALL SCRN
- CALL IN8
- MOV B,A
- CALL OUT8
- MOV E,B
- CALL CRLF
- MOV A,E
- CPI 'N'
- JZ EOR
- CPI 'Y'
- JNZ CONFIGURE
- CNFG2 CALL CRLF
- MVI A,'Y'
- STA FLG1
- LXI H,MEMRY
- MEM1 XRA A
- MOV M,A
- MOV A,M
- ORA A
- JNZ MEM2
- INX H
- MOV A,H
- ORA A
- JZ MEM2
- JMP MEM1
- MEM2 DCX H
- SHLD MEMTP
- MOV A,L ;SHOULD END IN FF
- INR A
- JZ MEM4
- CALL MEMER
- JMP MEM4
- MEMER SHLD HL
- CALL CRLF
- LXI H,MEM3
- CALL SCRN
- LXI H,HL+1
- CALL HEX
- LXI H,HL
- CALL HEX
- LHLD HL
- RET
- MEM3 DB 'MEMORY ERROR AT '
- DB 13
- MEM4 CALL CRLF
- CNFG3 LXI H,Q3
- CALL SCRN
- CALL IN8
- MOV B,A
- CALL OUT8
- MOV A,B
- STA BSPCH
- CALL CRLF
- CNFG4 LXI H,Q4
- CALL SCRN
- CALL IN8
- STA DENTY
- MOV B,A
- CALL OUT8
- MOV A,B
- CPI 'S'
- JZ CNFGA
- CPI 'D'
- JZ CNFGA
- CALL CRLF
- JMP CNFG4
- CNFGA CALL CRLF
- CNFG5 LXI H,Q5
- CALL SCRN
- CALL IN8
- MOV B,A
- CALL OUT8
- MOV A,B
- CPI 'N'
- JZ CNFGB
- CPI 'Y'
- JZ CNFGC
- CALL CRLF
- JMP CNFG5
- CNFGB XRA A
- JMP NOSTOP
- CNFGC MVI A,1
- NOSTOP EQU $
- STA STOP
- CALL CRLF
- LXI H,Q6
- CALL SCRN
- CALL READ
- LXI H,IBUF
- CALL GPARM
- ORA A
- JZ $+1
- DCR A
- STA SRCNT
- CNFG8 CALL CRLF
- LXI H,Q8
- CALL SCRN
- CALL READ
- LXI H,IBUF
- CALL GPARM
- CPI 139
- JNC CNFG8
- ADI 2
- STA LNSIZ
- CNFG7 CALL CRLF
- LXI H,Q7
- CALL SCRN
- CALL IN8
- MOV B,A
- STA WRAP
- CALL OUT8
- CALL CRLF
- LDA WRAP
- CPI 'Y'
- JZ CNF10
- CPI 'N'
- JZ CNF10
- JMP CNFG7
- CNF10 LXI H,Q10
- CALL SCRN
- CALL IN8
- MOV B,A
- CALL OUT8
- MOV A,B
- STA BSCR
- CALL CRLF
- LDA BSCR
- CPI 'B'
- JZ CNFG9
- CPI 'C'
- JZ CNFG9
- JMP CNF10
- CNFG9 LXI H,Q99
- CALL SCRN
- CALL IN8
- MOV B,A
- CALL OUT8
- MOV A,B
- CPI 'N'
- JZ SPC
- CPI 'Y'
- JZ CNFGD
- JMP CNFG9
- CNFGD CALL HASH1
- MOV A,B
- STA HTOT
- CALL SAVME
- JMP PART1
- SPC CALL CRLF
- CALL HASH1
- MOV A,B
- STA HTOT
- JMP PART1
- Q1 DB 'CONFIGURE (Y/N)? '
- DB 13
- Q3 DB 'TYPE CHAR USED FOR BACKSPACE'
- DB 13
- Q4 DB 'SINGLE OR DOUBLE DENSITY (S/D)? '
- DB 13
- Q5 DB 'STOP AT END OF EACH PAGE (Y/N)? '
- DB 13
- Q6 DB 'LINES PER SCREEN OR ZERO? '
- DB 13
- Q7 DB 'LINE WRAP AROUND ON INPUT (Y/N)? '
- DB 13
- Q8 DB 'INPUT LINE LENGTH? '
- DB 13
- Q10 DB 'UNDERLINE USING BS OR CR (B/C)? '
- DB 13
- Q99 DB 'SAVE THIS VERSION OF SECRTARY (Y/N)? '
- DB 13
-
-
- ; STATUS COMMAND SHOWS ALL USER CHANGABLE INDICATORS
- STATCMND CALL CRLF
- CALL CRLF ;BLANK LINE BEFORE DISPLAY
- LXI H,STAT1 ;SCREEN SIZE
- CALL SCRN
- LDA SRCNT
- INR A
- CALL NUMBER
- LXI H,STAT2
- CALL SCRN
- LDA LNSIZ
- DCR A ;CONFIGURE ADDS 2
- DCR A
- CALL NUMBER
- LXI H,STAT3 ;LINE WRAPAROUND
- CALL SCRN
- LDA WRAP
- CALL ALPHABETIC
- LXI H,STAT4 ;UNDERLINE MODE
- CALL SCRN
- LDA BSCR
- CALL ALPHABETIC
- CALL CRLF
- LXI H,STAT5 ;STOP AT BOTTOM OF PAGE
- CALL SCRN
- LDA STOP
- ORA A
- JZ STATUS1
- MVI A,'Y'
- JMP STATUS2
- STATUS1 MVI A,'N'
- STATUS2 CALL ALPHABETIC
- LXI H,STAT6 ;DISK DENSITY
- CALL SCRN
- LDA DENTY
- CALL ALPHABETIC
- LXI H,STAT7 ;NULL COUNT
- CALL SCRN
- LDA NULLC
- CALL NUMBER
- LXI H,STAT19 ;OFFSET
- CALL SCRN
- LDA OFFST
- CALL NUMBER
- CALL CRLF
- LXI H,STAT8 ;PAGE SIZE
- CALL SCRN
- LDA PAGE1
- CALL NUMBER
- LDA PAGE2
- CALL NUMBER
- LDA PAGE3
- CALL NUMBER
- LXI H,STAT9 ;MARGINS
- CALL SCRN
- LDA OFFST
- INR A
- CALL NUMBER
- LDA OFFST
- MOV B,A
- LDA LINES
- ADD B
- CALL NUMBER
- LXI H,STAT10 ;OUTPUT LINE LENGTH
- CALL SCRN
- LDA LINES
- CALL NUMBER
- CALL CRLF
- LXI H,STAT11 ;TAB SETTINGS
- CALL SCRN
- LXI D,TABT
- MVI B,10
- LDAX D
- ORA A
- JNZ STATTAB
- LXI H,STAT99
- CALL SCRN
- JMP STATSPC
- STATTAB CALL NUMBER
- INX D
- DCR B
- JZ STATSPC
- LDAX D
- ORA A
- JNZ STATTAB
- STATSPC LXI H,STAT12 ;SPACING BETWEEN LINES
- CALL SCRN
- LDA SPACE
- CALL NUMBER
- CALL CRLF
- LXI H,STAT13 ;TITLE
- CALL SCRN
- LDA TITLEX
- ORA A
- JNZ STATTTL
- LXI H,STAT99
- CALL SCRN
- JMP STATLN6
- STATTTL LXI H,TITLEX
- CALL SCRN
- STATLN6 CALL CRLF
- LXI H,STAT14 ;JUSTIFY
- CALL SCRN
- LDA JSW
- ORA A
- JZ STATJN
- MVI A,'Y'
- JMP STATJY
- STATJN MVI A,'N'
- STATJY CALL ALPHABETIC
- LXI H,STAT16 ;UNIT
- CALL SCRN
- LDA UNIT
- CALL NUMBER
- LXI H,STAT17 ;REPEAT
- CALL SCRN
- LDA RPEAT
- CALL NUMBER
- LXI H,STAT18 ;PAGE NUMBER--PNUM
- CALL SCRN
- LDA PNO
- INR A
- CALL NUMBER
- CALL FREE ;MEMORY UTILIZATION INFO
- CALL CRLF
- JMP EOR
-
- NUMBER EQU $
- PUSH H
- PUSH D
- PUSH B
- CALL BLANK
- LXI H,PN2
- CALL BIND
- LXI D,PN2
- LDAX D
- CPI '0' ;SKIP LEADING ZEROES
- JNZ PRTNUMB
- INX D
- LDAX D ;SKIP ZEROES
- CPI '0'
- JNZ PRTNUMB
- INX D
- PRTNUMB EQU $
- XCHG
- CALL SCRN
- POP B
- POP D
- POP H
- RET
-
- BLANK PUSH PSW ;SAVE A REG
- MVI B,20H
- CALL OUT8
- POP PSW
- RET
-
- ALPHABETIC EQU $ ;PRINT 1 ALPHA CHAR IN A
- CALL BLANK
- MOV B,A
- JMP OUT8 ;PRINT IT USING OUT8'S RETURN
- STAT1 DB 'SCREEN SIZE:',13
- STAT2 DB ' X',13
- STAT3 DB ' LINE WRAPAROUND:',13
- STAT4 DB ' UNDERLINE:',13
- STAT5 DB 'STOP AT BOTTOM:',13
- STAT6 DB ' DISK DENSITY:',13
- STAT7 DB ' NULLS:',13
- STAT8 DB 'PAGE SIZE:',13
- STAT9 DB ' MARGINS:',13
- STAT10 DB ' OUTPUT LINE:',13
- STAT11 DB 'TABS:',13
- STAT12 DB ' SPACING:',13
- STAT13 DB 'TITLE: ',13
- STAT14 DB 'JUSTIFY:',13
- STAT16 DB ' UNIT:',13
- STAT17 DB ' REPEAT:',13
- STAT18 DB ' PNUM:',13
- STAT19 DB ' OFFSET:',13
- STAT99 DB ' NONE',13
- MEMRY EQU $
- END
-