home *** CD-ROM | disk | FTP | other *** search
- ; D.ASM ver 2.4
- ; RESTRICTED DIRECTORY LIST PROGRAM
- ; (revised 03/01/81)
- ;
- ;D.COM is a directory list program, which writes
- ;5 entries on a line, separated by colons.
- ;
- ;The command contains an internal table of file names,
- ;which are not to be shown when just "D" is typed.
- ;(NOTE typing "D *.*" always shows all files)
- ;
- ;Why is this useful: A typical CP/M disk contains many
- ;utility files: ed.com, asm.com, submit.com, etc. When
- ;you do a directory listing, you typically aren't interested
- ;in seeing all those files, but rather just the "current"
- ;or "active" files. This is what "D.COM" can do.
- ;
- ;
- ;Revisions/updates: (in reverse order to minimize reading time)
- ;
- ;03/01/81 Added reset of DMA to 80H default on exit so D will
- ; work properly with submit. Deleted CEXIT routine,
- ; which was no longer used. Expanded documentation.
- ; (KBP)
- ;
- ;02/28/81 Mod. of 2/21 changed by popular demand to use of direct
- ; BIOS calls for freezing and aborting output. (CS)
- ;
- ;02/21/81 Abort on receipt of control-C character only (to prevent
- ; premature exit on remote systems with noisy telephone
- ; connections). Charlie Strom
- ;
- ;12/23/80 Changed sign-on message, revised documentation. (KBP)
- ;
- ;12/22/80 Fixed stack and file extent problems. Fully expanded
- ; macros so ASM may be used. Fixed problem in LOK routine
- ; By Keith Petersen, W8SDZ.
- ;
- ;12/07/80 Added drive select byte and expanded move macro in WRBACK
- ; routine. Also added "LOK" command. By Ron Fowler.
- ;
- ;12/02/80 Added "NOSYS" equate to ignore system files, code to strip
- ; attributes from files for CP/M 2.x, added date display and
- ; print options. Fixed up display format. By Ron Fowler
- ;
- ;12/01/80 Added "FILES NOT FOUND" feature of updated
- ; D.ASM of Ward Christensen. By Ron Fowler.
- ;
- ;11/23/78 Originally written by Ward Christensen.
- ;
- ;===================================================
- ;
- ;Use: D *.* prints all names, 5 across.
- ;
- ; D *.ASM prints selected files just like DIR.
- ;
- ; D SET builds a table (in D.COM) of all
- ; names currently on the disk. (see *NOTE).
- ;
- ; D SET <DATE> adds the date for printing whenever
- ; D is called by 'A>D<CR>' with no options.
- ; If the date field is left blank, it will
- ; be ignored. Note that the date must be 8
- ; characters or less (see *NOTE).
- ;
- ; D ADD FN.FT adds a name to the table in
- ; D.COM, so FN.FT won't be listed
- ; by the 'D' command (see *NOTE).
- ;
- ; D DEL FN.FT deletes a name from the table
- ; in D.COM, so if FN.FT is in the
- ; directory, it will be listed by 'D'
- ; (see *NOTE).
- ;
- ; D lists the directory 5 across, listing
- ; only those files NOT in D.COM, as
- ; put there by 'D SET' or 'D ADD FN.FT'
- ; command.
- ;
- ;*NOTE: the program must write itself back to disk,
- ;modified, so your disk must not be write protected.
- ;
- ;------------------------------------------------
- ;
- ;Examples: Suppose your disk has:
- ; D.COM
- ; ASM.COM
- ; ED.COM on it initially.
- ; LOAD.COM
- ; DDT.COM
- ;
- ;You would type: D SET
- ;to set these names into the D.COM program.
- ;
- ;Typing "D" would then list:
- ;
- ; -->New files
- ; A: ++NONE++
- ;
- ; -->Deleted files
- ; A: ++NONE++
- ;
- ;Suppose you ED TEST.ASM, ASM it, and LOAD it.
- ;Typing D would then list:
- ;
- ; -->New files
- ; A: TEST ASM : TEST BAK : TEST HEX : TEST COM
- ;
- ; -->Deleted files
- ; A: ++NONE++
- ;
- ;i.e. it tells you of the "current" files on the disk.
- ;
- ;Now, supposing you wanted to add TEST.COM as a "regular"
- ;file on your disk. Type:
- ;
- ; D ADD TEST.COM
- ;
- ;Now, typing D will show:
- ;
- ; -->New files
- ; A: TEST ASM : TEST BAK : TEST HEX
- ;
- ; -->Deleted files
- ; A: ++NONE++
- ;
- ;i.e. TEST.COM is now considered a "permanent" file.
- ;
- ;-----
- ;
- ;Now, suppose you accidentally erased ASM.COM from your
- ;disk. Typing D gives:
- ;
- ; -->New files
- ; A: TEST ASM : TEST BAK : TEST HEX
- ;
- ; -->Deleted files
- ; A: ASM COM
- ;
- ;showing you are missing one of the "regular" files.
- ;
- ;If, in fact, you didn't want ASM.COM to be on the disk,
- ;type:
- ;
- ; D DEL ASM.COM
- ;
- ;which will delete the name from the D.COM table, so ASM.COM
- ;won't show up as "deleted".
- ;
- ;===================================================
- ;
- ; SPECIAL NOTES FOR REMOTE SYSTEM USE:
- ;
- ;If you keep a dedicated copy of this program on each drive of
- ;your remote system, you can 'dedicate' each copy of this program
- ;to a drive by filling in the byte at 103H with the drive number.
- ;This prevents such things as:
- ;
- ; A>D B:
- ; or
- ; B>A:D
- ;
- ;Do this by using the command:
- ;
- ; A>D LOK A: to lock to a drive
- ; or
- ; A>D LOK to unlock
- ;
- ;If the conditional 'NOSYS' is set TRUE, $SYS files in CP/M 2.x
- ;will be ignored in both directory listings and when the "ADD"
- ;option is invoked, unless the override char is specified. This
- ;allows D.COM to be used as a "WHAT'S NEW" program for remote CP/M
- ;systems, where the $SYS files must not be listed.
- ;
- ;Examples:
- ; A>D *.* S displays everything
- ; A>D SET S puts ALL files in table
- ; A>D SET 12/23/80 sets date for reference
- ; (if you use 'D SET S', you lose the date option..
- ; ..sorry about that).
- ;
- ;If you use this program on a remote system, you will likely
- ;want to change the commands (ADD, DEL, and SET) for security.
- ;You will also want to change the $SYS suppress override character.
- ;You may also want to change the name of the program to make the
- ;name itself more informative, e.g. "WHATSNEW.COM".
- ;
- ;-->IMPORTANT: If you want the program to be 'TAG'ed after every
- ;D SET (so it cannot be taken by XMODEM), see the note at label
- ;"WRBACK" for setting the F1 bit in the filename itself.
- ;
- ;Note that this program defines its own name for write-back
- ;purposes under the label "WRBACK".
- ;
- ;===================================================
- ;
- FALSE EQU 0
- TRUE EQU NOT FALSE
- ;
- BDOS EQU 5
- FCB EQU 5CH
- FCBRNO EQU FCB+32
- CR EQU 13 ;CARRIAGE RETURN
- LF EQU 10 ;LINE FEED
- ;
- NOSYS EQU TRUE ;SET TRUE TO IGNORE SYSTEM FILES
- FENCE EQU ':' ;FILENAME SEPARATOR
- NPL EQU 5 ;NAMES PER LINE
- SYSOK EQU 'S' ;OVERRIDE CHAR FOR SYS SUPPRESSION
- ;
- ORG 100H
- ;
- DENTRY: JMP AROUND
- ;
- DRIVE: DB 0 ;<---DRV # IS PUT HERE IF DEDICATED
- ;
- ;Init local stack
- AROUND: LXI H,0 ;HL=0
- DAD SP ;HL=STACK
- SHLD STACK ;SAVE STACK POINTER
- LXI SP,STACK ;INIT LOCAL STACK
- CALL START
- DB 'D ver 2.4',CR,LF
- DB 'CTL-S pauses, CTL-C aborts',CR,LF,'$'
- ;
- ;Print ID message
- ;
- START: POP D ;GET ID ADDRESS
- MVI C,PRINT ;GET PRINT FNC
- CALL BDOS ;PRINT ID MSG
- LHLD 1
- LXI D,3
- DAD D ;HL=CONSTAT
- SHLD CSTSC+1
- DAD D ;HL=CONIN
- SHLD CIC+1
- ;
- ;Set file control block
- LDA DRIVE
- ORA A ;NON-DEDICATED?
- JZ NOND ;JUMP IF SO
- STA FCB
- ;
- NOND: LDA FCB+17 ;GET SYS OVERRIDE CHAR
- STA SYSTOO ;SAVE FOR LATER
- ;
- ;See if request to add name to list
- LXI H,FCB+1
- CALL ADDCM2
- ADDCM: DB 'ADD '
- ;
- ADDCM2: POP D ;GET TO
- LXI B,ADDCM2-ADDCM
- CALL COMPR
- JNZ NOADD
- ;
- ;Got request to add name to table
- CALL DELNAM ;FIRST, DELETE THE NAME
- CALL FINDFF ;FIND END OF TABLE
- XCHG ;ADDR TO DE
- ;
- ;Move name to table
- LXI H,FCB+17
- LXI B,11
- CALL MOVER
- MVI A,0FFH
- STAX D ;SET NEW END
- JMP WRBACK ;WRITE PROGRAM BACK
- ;
- ;See if request to lock D.COM to a drive
- ;
- NOADD: LXI H,FCB+1
- CALL NOADD3
- NOADD2: DB 'LOK '
- ;
- NOADD3: POP D ;GET TO
- LXI B,NOADD3-NOADD2
- CALL COMPR
- JNZ NOLOK
- ;
- ;Got request to lock
- LDA FCB+16
- STA DRIVE
- STA FCB
- JMP WRBACK
- ;
- ;See if request to DEL name from list
- ;
- NOLOK: LXI H,FCB+1
- CALL NOLOK3
- NOLOK2: DB 'DEL '
- ;
- NOLOK3: POP D ;GET TO
- LXI B,NOLOK3-NOLOK2
- CALL COMPR
- JNZ NODEL
- ;
- ;Got request to delete a name from the file
- CALL DELNAM ;DELETE THE NAME
- JNC WRBACK ;WRITE BACK IF OK
- CALL MSGXIT
- DB '++NAME NOT IN TABLE++$'
- ;
- ;See if request to setup table from directory
- ;
- NODEL: LXI H,FCB+1
- CALL NODEL3
- NODEL2: DB 'SET '
- ;
- NODEL3: POP D ;GET TO
- LXI B,NODEL3-NODEL2
- CALL COMPR
- JNZ NOSET
- ;
- ;Got request to setup table.
- ;Move the date (may be blank).
- LXI H,FCB+17
- LXI D,DATE
- LXI B,8
- CALL MOVER
- MVI A,1 ;TURN ON..
- STA SETFLG ;..SET FLAG
- MVI A,0FFH ;CLEAR..
- STA NAMES ;..NAMES TABLE
- CALL FILLQ ;MAKE FCB '????????.???'
- ;
- NOSET: LDA FCB+1
- SUI ' '
- STA PRTFLG
- PUSH PSW
- CZ HEAD1
- POP PSW
- JNZ GOTNAM
- CALL FILLQ ;MAKE NAME ????????.???
- ;
- GOTNAM: LDA FCB
- ORA A
- JZ NODISK
- DCR A
- MOV E,A
- MVI C,0EH
- CALL BDOS
- ;
- NODISK: MVI B,NPL ;NAMES PER LINE
- CALL LINMRK
- MVI C,SRCHF
- JMP CALLIT
- ;
- LINE: MVI B,NPL ;NAMES PER LINE
- CALL LINMRK
- ;
- NEXT: MVI C,SRCHN
- ;
- CALLIT: PUSH B
- LXI D,FCB
- CALL BDOS
- INR A
- JZ CKNONE
- DCR A
- ANI 03H
- MOV L,A
- MVI H,00H
- DAD H
- DAD H
- DAD H
- DAD H
- DAD H
- LXI D,81H
- DAD D
- ;
- ;Check for $SYS attribute, then clear all attributes
- PUSH H
- LXI D,9 ;SYS ATT OFFSET
- DAD D
- MOV A,M
- ANI 80H
- STA SYSFLG
- POP H ;RETRIEVE FILENAME PTR
- PUSH H
- MVI E,11 ;11 CHARS IN FILENAME
- ;
- ATTLP: MOV A,M ;PICK UP CHAR
- ANI 7FH ;KILL ATTRIBUTE
- MOV M,A ;PUT BACK DOWN
- INX H
- DCR E
- JNZ ATTLP
- POP H
- ;
- ;See if name is to be printed
- XCHG ;NAME POINTER TO DE
- LDA SETFLG ;REQUEST TO SETUP TABLE?
- ORA A
- JNZ SETUP ;GO SET ENTRY INTO TABLE
- LDA PRTFLG
- ORA A
- JNZ GOPRNT ;EXPLICIT REQUEST FOR ALL
- PUSH D
- LXI H,NAMES
- ;
- CKNEXT: POP D ;GET NAME POINTER
- POP B
- PUSH B
- MOV A,M ;END OF TABLE?
- INR A ;WAS IT 0FFH?
- JZ GOPRNT
- MVI B,0
- MVI C,11 ;NAME LENGTH
- PUSH D
- ;
- CKLP: LDAX D
- CMP M
- JNZ NOMACH
- INX D
- INX H
- DCR C
- JNZ CKLP ;LOOP FOR 11 CHARS
- ;
- ;Got match, mark it found and don't print it
- LXI D,-11 ;POINT BACK TO NAME
- DAD D
- MVI M,0 ;MARK IT FOUND
- POP D ;POP POINTER
- POP B
- JMP NEXT ;SKIP THE NAME
- ;
- ;Name didn't match, try next
- ;
- NOMACH: DAD B ;POINT TO NEXT NAME
- JMP CKNEXT
- ;
- ;Print the name
- ;
- GOPRNT: CALL CSTS ;KEY PRESSED?
- ORA A
- CNZ CKKB ;YES, SEE WHICH ONE
- ;
- IF NOSYS
- LDA SYSTOO
- CPI SYSOK
- JZ DONAME
- LDA SYSFLG
- RAL
- POP B
- JC NEXT
- PUSH B
- ENDIF ;NOSYS
- ;
- DONAME: MVI A,1 ;SAY WE GOT ONE
- STA GOTFLG
- MVI C,8
- XCHG ;NAME BACK TO HL
- ;
- NAMELP: MOV A,M
- CALL TYPE
- INX H
- DCR C
- JNZ NAMELP
- MVI A,'.'
- CALL TYPE
- MVI C,3
- ;
- NLP2: MOV A,M
- CALL TYPE
- INX H
- DCR C
- JNZ NLP2
- POP B
- MVI A,' '
- CALL TYPE
- MVI A,FENCE
- DCR B
- PUSH PSW
- CNZ TYPE
- MVI A,' '
- CALL TYPE
- POP PSW
- JNZ NEXT
- CALL CRLF
- JMP LINE
- ;
- CKNONE: LDA GOTFLG
- ORA A
- JNZ NOTFND
- LDA PRTFLG
- ORA A
- JNZ NOTFND
- LXI D,NONMSG ;PRINT "NONE"
- MVI C,PRINT
- CALL BDOS
- ;
- ;Print the files not found
- ;
- NOTFND: LDA SETFLG ;IS THIS 'D SET'?
- ORA A
- JNZ FINI ;DONE IF SO
- LDA PRTFLG ;ARE WE PRINTING?
- ORA A
- JNZ CKNON2 ;DONE IF NOT
- ;
- ;If this D.COM is dedicated ("DRIVE" is non-zero),
- ;then be sure to print the "FILES NOT FOUND"
- LDA DRIVE
- ORA A
- JNZ NOCHK
- LDA FCB ;DRIVE SPECIFIED?
- ORA A
- JNZ FINI ;SKIP NOT FOUND IF SO
- ;
- NOCHK: CALL HEAD2 ;PRINT NOT FND HEADER
- LXI H,NAMES ;START OF TABLE
- LXI D,11
- ;
- LINE2: CALL LINMRK
- MVI C,NPL
- ;
- NEXT2: MOV A,M ;FIRST CHAR OF NAME
- ORA A ;MARKED FOUND?
- JZ NOPRNT ;JUMP IF SO
- INR A ;CHECK FOR TABLE END
- JZ CKNON2 ;JUMP IF END
- MVI A,1
- STA GOTNF
- MVI B,8
- ;
- NAMLP2: MOV A,M
- CALL TYPE
- INX H
- DCR B
- JNZ NAMLP2
- MVI A,'.'
- CALL TYPE
- MVI B,3
- ;
- NLP3: MOV A,M
- CALL TYPE
- INX H
- DCR B
- JNZ NLP3
- MVI A,' '
- CALL TYPE
- MVI A,FENCE
- DCR C
- PUSH PSW
- CNZ TYPE
- MVI A,' '
- CALL TYPE
- POP PSW
- JNZ NEXT2
- CALL CRLF
- JMP LINE2
- ;
- NOPRNT: DAD D
- JMP NEXT2
- ;
- ;Print header
- ;
- HEAD1: LXI D,NEWMSG
- JMP HEDPRT
- ;
- HEAD2: LXI D,DELMSG
- ;
- HEDPRT: MVI C,PRINT
- CALL BDOS
- LDA DATE
- CPI ' '
- JZ NODATE
- CPI SYSOK
- JZ NODATE
- LXI D,ASOF
- MVI C,PRINT
- CALL BDOS
- ;
- NODATE: MVI A,':'
- CALL TYPE
- JMP CRLF
- ;
- NEWMSG: DB CR,LF,'-->New files$'
- ;
- DELMSG: DB CR,LF,CR,LF,'-->Deleted files$'
- ;
- CKNON2: LDA GOTNF
- ORA A
- JNZ FINI ;JMP IF GOT NO 'NOT FOUND'S
- LDA PRTFLG
- ORA A
- JNZ FINI
- LXI D,NONMSG
- MVI C,PRINT ;ELSE PRINT 'NONE'
- CALL BDOS
- JMP FINI
- ;
- ;Set up the name in the table
- ;
- SETUP:
- IF NOSYS
- LDA SYSTOO
- CPI SYSOK
- JZ SETU2
- LDA SYSFLG
- RAL
- JC SETSKP
- ENDIF ;NOSYS
- ;
- SETU2: CALL FINDFF ;FIND END OF TABLE
- XCHG ;SETUP FOR MOVE
- ;(HL = name, DE = end of table)
- LXI B,11
- CALL MOVER
- MVI A,0FFH ;GET TABLE END FLAG
- STAX D ;STORE IT
- ;
- SETSKP: POP B ;DELETE STACK GARBAGE
- JMP NEXT ;GET NEXT ENTRY
- ;
- CRLF: MVI A,CR
- CALL TYPE
- MVI A,LF
- ;
- TYPE: PUSH B
- PUSH D
- PUSH H
- MOV E,A
- MVI C,02H
- CALL BDOS
- POP H
- POP D
- POP B
- RET
- ;
- ;MOVE ROUTINE
- ;
- MOVER: MOV A,M
- STAX D
- INX D
- INX H
- DCX B
- MOV A,B
- ORA C
- JNZ MOVER
- RET
- ;
- ;Compare routine
- ;
- COMPR: LDAX D
- CMP M
- RNZ
- INX D
- INX H
- DCX B
- MOV A,B
- ORA C
- JNZ COMPR
- RET ;EQUAL
- ;
- ;Routine to find 0FFH at end of table
- ;
- FINDFF: LXI H,NAMES
- ;
- FINDLP: MOV A,M
- INX H
- INR A ;0FFH?
- JNZ FINDLP
- DCX H ;BACK UP TO TABLE END
- RET
- ;
- ;Delete the name from the table
- ;
- DELNAM: LXI H,NAMES
- ;
- DELLP: MOV A,M
- CPI 0FFH
- STC
- RZ ;NOT FOUND
- LXI D,FCB+17
- LXI B,11
- CALL COMPR
- JZ DELETE
- DAD B ;CALC NEXT
- JMP DELLP
- ;
- ;Delete the name
- ;
- DELETE: XCHG ;NEXT NAME TO DE
- LXI H,-11 ;TO BACK UP..
- DAD D ;..TO NAME TO DEL
- ;
- DELCH: LDAX D
- MOV M,A
- INX H
- INX D
- INR A ;MOVED THE 0FFH?
- JNZ DELCH
- ORA A ;SHOW FOUND
- RET
- ;
- ;Fill FCB with all '?'
- ;
- FILLQ: LXI H,FCB+1
- MVI B,8+3
- MVI A,'?'
- ;
- QMLOOP: MOV M,A
- INX H
- DCR B
- JNZ QMLOOP
- RET
- ;
- ;Write back the program - note that you may set any of the
- ;CP/M 2.x attribute bits in the file name (be sure to define
- ;all 11 characters of the name).
- ;
- WRBACK: LXI D,FCB+1
- CALL WRBK2
- WRBK1: DB 'D' ;<--PUT 'D'+80H HERE TO SET TAG
- DB ' COM' ;SEE COMMENT ABOVE
- DB 0 ;EXTENT NUMBER
- ;
- WRBK2: POP H
- LXI B,WRBK2-WRBK1
- CALL MOVER
- MVI C,ERASE
- LXI D,FCB
- CALL BDOS
- XRA A ;GET 0
- STA SETFLG ;CLEAR THE FLAGS..
- STA GOTFLG
- STA GOTNF
- STA SYSTOO
- STA FCBRNO ;ZERO RECORD NUMBER
- MVI C,MAKE
- LXI D,FCB
- CALL BDOS
- ;
- ;Before writing back, find end of table
- CALL FINDFF
- MOV B,H ;B=END PAGE
- INR B ;FOR COMPARE
- LXI D,100H ;STARTING ADDR
- ;
- WRLP: PUSH B
- PUSH D
- PUSH H
- MVI C,SETDMA
- CALL BDOS
- MVI C,WRITE
- LXI D,FCB
- CALL BDOS
- POP H
- POP D
- POP B
- ORA A ;SUCCESSFUL WRITE?
- JNZ WRERR ;..NO
- LXI H,80H ;POINT TO..
- DAD D ;..NEXT BLOCK
- XCHG ;ADDR TO DE
- MOV A,D ;GET PAGE
- CMP B ;PAST TABLE END?
- JC WRLP ;LOOP UNTIL DONE
- MVI C,CLOSE
- LXI D,FCB
- CALL BDOS
- INR A ;SUCCESSFUL CLOSE?
- JZ BADCLS ;..NO, PRINT ERR MSG
- CALL MSGXIT ;OK, EXIT W/MSG
- DB '++DONE++$'
- ;
- WRERR: CALL MSGXIT
- DB '++WRITE ERROR++$'
- ;
- BADCLS: CALL MSGXIT
- DB '++BAD CLOSE, D.COM CLOBBERED!!++$'
- ;
- ;Finished. If building table, write back
- ;
- FINI: LDA SETFLG
- ORA A
- JZ EXIT ;NOT WRITING
- JMP WRBACK
- ;
- ;Direct BIOS calls follow
- ;
- CSTS PUSH B ;CONSOLE STATUS
- PUSH D
- PUSH H
- CSTSC CALL $-$ ;SUPPLIED AT START
- POP H
- POP D
- POP B
- RET
- ;
- CI PUSH B ;CONSOLE INPUT
- PUSH D
- PUSH H
- CIC CALL $-$ ;SUPPLIED AT START
- POP H
- POP D
- POP B
- RET
- ;
- CKKB: CALL CI
- CPI 'S'-40H
- CZ CI
- CPI 'C'-40H
- JZ ABORT
- RET
- ;
- ABORT: CALL MSGXIT
- DB CR,LF,CR,LF,'++ABORTED++',CR,LF,'$'
- JMP EXIT
- ;
- ;Exit with message (error or informational)
- ;
- MSGXIT: POP D ;GET MSG
- MVI C,PRINT
- CALL BDOS
- ;
- ;Exit, restoring dma and stack, then return
- ;
- EXIT: LXI D,80H ;RESET DMA ADR TO NORMAL
- MVI C,SETDMA
- CALL BDOS
- LHLD STACK ;GET OLD STACK
- SPHL ;RESTORE IT
- RET ;TO CCP
- ;
- LINMRK: PUSH B
- PUSH D
- PUSH H
- LDA FCB ;GET DRIVE NAME FROM FCB
- ORA A ;ANY THERE?
- JNZ GOTDRV ;YES, GO PRINT IT
- MVI C,CURDSK ;ELSE GET CURRENT DISK
- CALL BDOS
- INR A ;MAKE 'A'=1
- ;
- GOTDRV: ADI 40H ;MAKE ASCII
- CALL TYPE ;PRINT DRIVE NAME
- CALL GOTDR2 ;THEN ': '
- DB ': $'
- ;
- GOTDR2: POP D ;GET MSG ADR
- MVI C,PRINT ;PRINT IT
- CALL BDOS
- POP H
- POP D
- POP B
- RET
- ;
- DS 64 ;ROOM FOR STACK
- STACK: DS 2 ;OLD STACK STORED HERE
- GOTFLG: DB 0
- GOTNF: DB 0
- SYSTOO: DB 0
- NONMSG: DB '++NONE++',CR,LF,'$'
- ASOF: DB ' since '
- DATE: DB ' '
- DB '$'
- SETFLG: DB 0 ;1 => SETUP TABLE
- PRTFLG: DB 0 ;PRINT ONLY SOME
- SYSFLG: DB 0 ;$SYS ATTRIB INDICATOR
- NAMES EQU $ ;NAMES NOT TO PRINT, STORED HERE
- ;
- ;Note the names are initially built by: D SET
- ;
- DB 0FFH ;END OF TABLE
- ;
- ;BDOS equates
- ;
- RDCON EQU 1
- DIO EQU 6
- PRINT EQU 9
- CONST EQU 11
- CLOSE EQU 16
- SRCHF EQU 17
- SRCHN EQU 18
- ERASE EQU 19
- READ EQU 20
- WRITE EQU 21
- MAKE EQU 22
- CURDSK EQU 25
- SETDMA EQU 26
- ;
- END
-