home *** CD-ROM | disk | FTP | other *** search
- .TITLE 'FM File Directory Map Catalog Utility'
-
- .remark ' ADAPTED FROM FMAP.COM in CP/M Users Group
- Tony Nicholson - initial dissassembly and conversion
- to TDL mnemonics and commenting.
- Modified to look at all user areas on the
- specified drive.
- Last edited 11-Mar-1982
- '
- .XLINK
- .PABS
- .PHEX
- .LOC 0100H
-
- .INSERT CPMLIB.ASM
- ;
- CPM = 00000H
- BDOS = 00005H
- FCB1 = 0005CH
- PARAM2 = 0006DH
- DMAADR = 00080H
- CR = 0DH
- LF = 0AH
- CTRLZ = 1AH
- $getdk == 25
- ;
- FM: LXI H,0 ;save stack pointer
- DAD SP
- SHLD STACK
- LXI SP,STACK; and set up program stack
- lxi d,dmaadr
- mvi c,$dma
- call bdos
- ; LDA PARAM2
- mvi a,'F' ;force write of 'names.sub' file
- STA SWITCH
- mvi c,$getdk;get current disk no
- call bdos
- sta cdisk
- lda fcb1 ;get specified disk no
- ora a
- jnz login
- lda cdisk
- jmp logcur
- login: dcr a
- logcur: mov e,a ; and login this drive
- mvi c,$lgin
- call bdos
- LXI H,fcb1
- inx h
- MOV A,M
- dcx h
- CPI ' ' ;Was a filename specified ?
- JNZ FNAME ;Yes
- MVI B,12
- FILLQ: MVI M,'?'
- INX H
- DCR B
- JNZ FILLQ
- FNAME: MVI C,$SERCH;Search directory for
- LXI D,FCB1 ; the filename
- CALL BDOS
- INR A
- STA RELPOS
- JNZ FOUND
- NOTFND: LXI D,NFMSG
- CALL PMSG
- JMP ABORT
- ;
- NFMSG: .ASCII '++NOT FOUND$'
- ;
- FOUND: LDA RELPOS
- JMP GETSIZ
- ;
- NEXT: MVI C,$NEXT
- LXI D,FCB1
- CALL BDOS
- INR A
- JZ DONE
- GETSIZ: DCR A
- ANI 3
- ADD A
- ADD A
- ADD A
- ADD A
- ADD A
- LXI H,DMAADR
- ADD L
- MOV L,A
- mvi a,0e5h ;check if file has
- cmp m ; deleted.
- jz next ;yes, ignore it
- push h
- lxi d,12 ;check if this is the
- dad d ; zero extent record
- mov a,m
- pop h
- ora a
- jnz next ;yes, ignore it
- XCHG
- LHLD FREEAD
- MVI B,32 ;Copy directory info
- COPYD: LDAX D ; to memory
- MOV M,A
- INX D
- INX H
- DCR B
- JNZ COPYD
- SHLD FREEAD
- LDA FREENM
- INR A
- STA FREENM
- JMP NEXT
- ;
- DONE: lda cdisk ;reset default disk
- mov e,a
- mvi c,$lgin
- call bdos
- LDA FREENM
- LXI H,FREPTR
- LXI D,FREE
- LXI B,32
- COPYFR: MOV M,E
- INX H
- MOV M,D
- INX H
- XCHG
- DAD B
- XCHG
- DCR A
- JNZ COPYFR
- LDA FREENM
- STA D03F5
- DCR A
- JZ OUTPUT
- A01DF: XRA A
- STA D03F6
- LDA D03F5
- DCR A
- STA RELPOS
- STA D03F5
- JZ OUTPUT
- LXI H,FREPTR
- A01F3: CALL COMPARE
- CM SWAP
- INX H
- INX H
- LDA RELPOS
- DCR A
- STA RELPOS
- JNZ A01F3
- LDA D03F6
- ORA A
- JNZ A01DF
- OUTPUT: LXI D,HDMSG
- CALL PMSG
- CALL CRLF
- LXI H,FREPTR
- SHLD FREEAD
- LDA SWITCH
- CPI 'F'
- JNZ NOTFSW
- LXI D,NAMFCB
- MVI C,$DELET
- CALL BDOS
- LXI D,NAMFCB
- MVI C,$MAKE
- CALL BDOS
- INR A
- JNZ NOTFSW
- CALL PRINT
- ;
- .ASCII '++FILE MAKE ERROR$'
- ;
- NOTFSW: MVI C,$CSTS
- CALL BDOS
- DCR A
- JZ CIEXIT
- LHLD FREEAD
- MOV E,M
- INX H
- MOV D,M
- INX H
- SHLD FREEAD
- XCHG
- inx h
- MVI B,8
- CALL PUTCM ;print filename
- CALL PUTDOT
- MVI B,3
- CALL PUTCM ; type
- CALL PUTNL
- mov a,m ; extent
- call phexbs
- INX H
- INX H
- INX H
- MOV A,M ;get RC
- DCR A
- RAR
- RAR
- RAR
- ANI 01FH
- INR A
- MOV B,A
- MOV A,M ;get RC and print it
- CALL PHEXBS
- INX H
- MVI C,0
- A027A: MOV A,M
- ORA A
- JZ pnl
- CALL PHEXB
- INR C
- A0283: MOV A,C
- ANI 3
- A0286: CZ SPACE
- INX H
- DCR B
- JNZ A027A
- pnl: CALL CRLF
- A028E: LDA NFILES
- INR A
- DAA
- STA NFILES
- jnz lt100
- lda nf100
- inr a
- sta nf100
- lt100: LDA FREENM
- DCR A
- STA FREENM
- JNZ NOTFSW
- lda nf100
- ora a
- jz ptens
- adi '0'
- call co
- ptens: LDA NFILES
- CALL PHEXBS
- LXI D,FLMSG
- CALL PMSG
- LDA SWITCH
- CPI 'F'
- JNZ ABORT
- MVI A,CTRLZ
- CALL PUTC
- CALL WRITE
- LXI D,NAMFCB
- MVI C,$CLOSE
- CALL BDOS
- JMP ABORT
- ;
- FLMSG: .ASCII 'FILES$'
- ;
- PHEXBS: CALL PHEXB
- JMP SPACE
- ;
- PHEXB: PUSH PSW
- RAR
- RAR
- RAR
- RAR
- CALL PHEXC
- POP PSW
- PHEXC: ANI 00FH
- CPI 10
- JC PHEX1
- ADI 7
- PHEX1: ADI '0'
- CO: PUSH B
- PUSH D
- PUSH H
- MOV E,A
- MVI C,$CO
- CALL BDOS
- POP H
- POP D
- POP B
- RET
- ;
- PMSG: MVI C,$PRINT
- JMP BDOS
- ;
- PUTCM: MOV A,M
- CALL PUTC
- CALL CO
- INX H
- DCR B
- JNZ PUTCM
- RET
- ;
- SPACE: MVI A,' '
- JMP CO
- ;
- CRLF: MVI E,CR
- MVI C,$CO
- CALL BDOS
- MVI E,LF
- MVI C,$CO
- JMP BDOS
- ;
- RELPOS: .BYTE 0
- ;
- PRINT: POP D
- MVI C,$PRINT
- JMP BDOSEX
- ;
- CIEXIT: MVI C,$CI
- BDOSEX: CALL BDOS
- ABORT: lda cdisk
- mov e,a
- mvi c,$lgin
- call bdos
- LHLD STACK
- SPHL
- RET
- ;
- PUTC: CPI ' '
- RZ
- ani 07fh
- PUSH PSW
- LDA SWITCH
- CPI 'F'
- JNZ A034A
- POP PSW
- PUSH PSW
- PUSH H
- LHLD D03F8
- MOV M,A
- INX H
- SHLD D03F8
- MOV A,H
- DCR A
- CZ WRITE
- POP H
- A034A: POP PSW
- RET
- ;
- WRITE: PUSH B
- PUSH D
- LXI D,NAMFCB
- MVI C,$WRITE
- CALL BDOS
- ORA A
- JZ WROK
- CALL PRINT
- ;
- .ASCII '++WRITE ERROR$'
- ;
- WROK: LXI H,DMAADR
- SHLD D03F8
- POP D
- POP B
- RET
- ;
- PUTDOT: MVI A,'.'
- CALL PUTC
- JMP SPACE
- ;
- PUTNL: MVI A,CR
- CALL PUTC
- MVI A,LF
- CALL PUTC
- JMP SPACE
- ;
- COMPARE:PUSH H
- MOV E,M
- INX H
- MOV D,M
- INX H
- MOV C,M
- INX H
- MOV B,M
- XCHG
- inx h ;don't compare user no
- inx b
- A0392: LDAX B
- CMP M
- INX H
- INX B
- JZ A0392
- POP H
- RET
- ;
- SWAP: MVI A,1
- STA D03F6
- MOV C,M
- INX H
- PUSH H
- MOV B,M
- INX H
- MOV E,M
- MOV M,C
- INX H
- MOV D,M
- MOV M,B
- POP H
- A03AB: MOV M,D
- DCX H
- MOV M,E
- RET
- ;
- HDMSG: .ASCII 'FILENAME TYP EX RC -----EXTENT-----$'
- ;
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- ;
- STACK: .BLKB 2
- NFILES: .BYTE 0
- nf100: .byte 0
- cdisk: .byte 0
- FREEAD: .WORD FREE
- FREENM: .BYTE 0
- D03F5: .BYTE 0
- D03F6: .BYTE 0
- SWITCH: .BYTE 0
- D03F8: .WORD DMAADR
- ;
- NAMFCB: .ASCII [0]'NAMES SUB'
- .BYTE 0,0,0,0,0,0,0,0
- .BYTE 0,0,0,0,0,0,0,0
- .BYTE 0,0,0,0,0
- ;
- FREPTR: .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
- .WORD 0,0,0,0,0,0,0,0
-
- FREE:
- .END FM
-