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