;*****************************************
;
; RECOVR - recovers erased disk files
;
;*****************************************
;1.0 18-Oct-84 DFP written by D. Pallmann.
;
; File makes external references to MAC:SYSLIB.LIB.
; After assembly, enter this command: .LNKLIT file
;
VMAJOR=1
SEARCH SYS
SEARCH SYSSYM
EXTERN $FNPPN
.OFINI
.OFDEF DISK,D.DDB ;DDB for disk I/O
.OFSIZ IMPSIZ
LKPUFD: MOVW DISK+D.PPN(A5),D1 ;set up registers D1
BNE 10$ ;branch if specified
JOBIDX A0 ;index JCB
MOVW JOBUSR(A0),D1 ;use log default PPN
10$: SAVE A2 ;save line index
LEA A2,DISK(A5) ; and A2 for $FNPPN call
CALL $FNPPN ;find PPN in appropriate MFD
REST A2 ;restore line index
TST D0 ;successful?
BNE NOTFND ; no - branch
CLR D5 ;set link
MOVW 2(A1),D5 ; to first block of UFD
REDUFD: CTRLC EXIT ;branch on ^C
MOV D5,DISK+D.REC(A5) ;set link into DDB record number
BEQ NOTFND ; branch if zero (end of UFD)
READ DISK(A5) ;read disk block
MOV DISK+D.BUF(A5),A0 ;point A0 to buffer
CLR D5 ;load link
MOVW (A0)+,D5 ; into D5
SEARCH: MOV #42.,D0 ;scan 42 file entries
10$: CTRLC EXIT ;branch on ^C
CMM 2(A0),DISK+D.FIL+2(A5) ;is this our file?
BEQ RECOVR ; yes - go restore it
ADD #14,A0 ; no - try next file in UFD
SOB D0,10$ ; until end-of-block
BR REDUFD ;go scan next block of UFD
RECOVR: MOVW DISK+D.FIL(A5),@A0 ;restore filename
WRITE DISK(A5) ;re-write UFD block
TYPECR recovered ;tell user we did it
INC D4 ;remember that we did a recovery
BR NXTFIL
NOTFND: TYPECR not found ;tell user file does not exist
BR NXTFIL ;go process next file
EXISTS: TYPECR has not been erased ;tell user file already exists
NXTFIL: CMPB (A2)+,#', ;are there more files on the cmd line?
BNE EXIT ; no
BYP ; yes - bypass leading spaces
JMP GETFIL ; and process the next file
EXIT: TST D4 ;did we recover any files?
BEQ 10$ ; no
TYPECR % run DSKANA immediately; yes - tell user he MUST run DSKANA
10$: CRLF ;newline
EXIT ;exit