home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
utils
/
dirutl
/
edir.lbr
/
EDIR.AZM
/
EDIR.ASM
Wrap
Assembly Source File
|
1987-12-24
|
5KB
|
177 lines
;EDIR AS OF 11/28/87
;COPYRIGHT (C) 1987 BY ROBERT GREENLEE, P.O. BOX 23286, SAN DIEGO CA 92123
;PHONE VOICE 619-268-0112
; MODEM 619-569-8613.
;
;THIS PROGRAM LOGS YOU INTO THE ERASED FILE DIRECTORY ON A CP/M 2.2
; COMPUTER DISK AND CHANGES THE CP/M ERA COMMAND SO THAT IT UNERASES FILES
; AND CAUSES THE REN COMMAND TO RENAME JUST ONE DUPLICATE FILE
; INSTEAD OF ALL FILES HAVING THE SAME NAME. YOU CAN USE
; THE CP/M DIR COMMAND TO SEE WHICH FILES ON A DISK ARE ERASED.
;
;THE NAME EDIR STANDS FOR FOR "ERASED DIRECTORY" WHICH IS SHORT FOR
; "ERASED FILE DIRECTORY."
;
;ON MOST COMPUTERS THE PROGRAM ONLY LASTS UNTIL THE NEXT WARM BOOT.
;
;TO CREATE THE EDIR.COM FILE FROM THIS SOURCE USE ASM.COM AND LOAD.COM
; LIKE SO:
;
; A>ASM EDIR
; A>LOAD EDIR
;
;
ORG 0100H
JMP START
MESSAGE:
DB 0DH,0AH
DB 'EDIR v1.0 (C) 1987 by Robert Greenlee, P.O. Box 23286,',0DH,0AH
DB 'San Diego CA 92123. 619-268-0112 Voice, Modem 619-569-8613.',0DH,0AH
DB 'Please send for free CP/M & MSDOS product listings.',0DH,0AH
DB 0DH,0AH
DB 'You are now logged into the mystical Erased File Directory.',0DH,0AH
DB 'While in this directory the ERA command will unerase files.',0DH,0AH
DB 'To see which files are erased on this disk you can use DIR.',0DH,0AH
DB 'You may also use the TYPE command to view the erased files.',0DH,0AH
DB 'From here REN can change duplicate filenames one at a time.',0DH,0AH
DB 'Refer to EDIR.DOC for more information.',0DH,0AH
DB 0DH,0AH
DB 'On most computers you can usually exit back to normal space',0DH,0AH
DB 'by typing Control-C to cause a Warm Boot. Good luck.',0DH,0AH
DB '$'
SAYOOPS:
DB 0DH,0AH
DB 'Oh darn nothing happened! It seems you''re not using the real',0DH,0AH
DB 'CP/M 2.2 BDOS which EDIR v1.0 needs in order for it to work.',0DH,0AH
DB '$'
START:
LHLD 1 ;GET START OF BIOS (EG.'S BELOW ASSUME EA00)
DCR H ;GO DOWN INTO BDOS
DCR H
MVI L,7FH ;POINT TO CP/M 2.2 VERSION NUMBER, 22H (EG. E87F)
MVI A,22H
CMP M
MVI C,9 ;IF NOT CP/M 2.2 BDOS THEN SAY SO AND ABORT.
LXI D,SAYOOPS
JNZ 5
; NOW UPDATE CODE LISTS BELOW WITH REAL MSB OF BDOS MEMORY LOCATIONS
MOV A,H
STA LIST2A ;EG. E8
SUI 4
STA LIST1A ;EG. E4
DCR A
;;;STA LIST1B ;EG. E3. DON'T INCLUDE THIS IF YOU WANT TO BE
; ABLE TO unERA AMBIGUOUS FILENAMES (LIKE ERA *.*).
STA LIST1D
SUI 2 ;EG. E1
PUSH PSW
SUI 2 ;EG. DF
STA LIST1C ;MSB OF ADDR OF USERNO IN BDOS
;
MVI L,59H ;EG. HL=E859
LXI D,LIST1
MVI B,LIST2-LIST1
CALL BMOVEL
POP PSW
MOV H,A
MVI L,48H ;EG. HL=E148
;;;LXI D,LIST2 ;DON'T NEED THIS SINCE DE ALREADY POINTS TO LIST2
MVI B,LIST3-LIST2
CALL BMOVEL
MVI C,9
LXI D,MESSAGE
JMP 5 ;DISPLAY SIGNON MESSAGE AND RETURN TO CCP
BMOVEL:
LDAX D
MOV M,A
INX D
INX H
DCR B
JNZ BMOVEL
RET
;ROUTINE IN LIST1 REPLACES AUTOSEL ROUTINE
;EG. E859
LIST1:
MVI M,0E5H ;SET USERS FCB BYTE 0 TO E5H FOR ERASED FILES ONLY
DB 3AH ;LDA USERNO (GET CURRENT USER NUMBER INTO A).
DB 41H
LIST1C: DB 0 ;EG. DF41
DB 32H ;STA. MAKES ERA ROUTINE USE CUR. USER NUMBER INSTEAD OF E5.
DB 0AFH
LIST1D: DB 0 ;EG. E3AF
;;
;RESET THE "JUST ONE FILE PLEASE" TRICK IN ERA/REN ROUTINES
MVI A,0C8H
DB 01H ;OPCODE FOR LXI B
;IF ENTRY IS MADE AT POKEC9 THEN "JUST ONE" TRICK GOES INTO EFFECT
POKEC9:
MVI A,0C9H
POKEC:
DB 32H
DB 2AH ;CAUSES RENAME COMMAND TO STOP AFTER ONE FILE
LIST1A: DB 0 ;EG. E42A
;;;DB 32H ;CAUSES ERA COMMAND TO STOP AFTER ONE FILE
;;;DB 0A7H ; WHICH ALSO MEANS NO ERA *.* ETC. ALLOWED.
;;;LIST1B: DB 0 ;EG. E3A7
RET
;;;
;ROUTINE IN LIST2 REPLACES "CHECK FOR READ ONLY FILE ROUTINE"
; WHICH IS CALLED BEFORE DIRECTORY WRITE TAKES PLACE
;EG. E148
LIST2:
DB 0FH ;LOOK AT 16TH BYTE IN DIRECTORY
DB 0
DAD D
MOV A,M
DCR A ;DECREMENT IT (IF E5H IT WILL GO TO E4H)
RPE ;RETURNS ONLY IF ACCUMULATOR WAS 80H PRIOR TO DCR A
;IF ACC WAS E5H THEN THAT'S THE END OF DIRECTORY
;IF ACC WAS NOT E5H OR 80H THEN ALLOW THIS DIRECTORY
; ENTRY TO BE RENAMED/UNERASED BUT CAUSE THIS TO BE THE LAST
; DIRECTORY ENTRY FOR THIS FILE BY POKING RETURN OPCODES INTO
; REN AND ERA ROUTINES USING OUR POKEC9 ROUTINE
CPI 0E5H-1
DB 0C2H ;OPCODE FOR JNZ (JUMPS IF NEITHER 80H OR E5H)
DB POKEC9-LIST1+59H
LIST2A: DB 0 ;EG. E864
;OK IT WAS E5H SO PREVENT ANYTHING FROM HAPPENING TO THIS DIRECTORY
; ENTRY BY TERMINATING ERA/REN ROUTINES NOW.
POP PSW ;TAKE RETURN OFF STACK AND TERMINATE ERA/REN ROUTINE
; (ACTUALLY ONLY ERA COULD EVER BE TERMINATED SINCE
; REN DOESN'T ACCEPT AMBIGUOUS FILENAMES).
RET
LIST3 EQU $
END