home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
SIMTEL
/
CPMUG
/
CPMUG092.ARK
/
NSSEC.ASM
< prev
next >
Wrap
Assembly Source File
|
1986-10-18
|
64KB
|
5,523 lines
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