;***************************************** ; ; 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 START: PHDR -1,0,PH$REE!PH$REU!PH$L12;program header GETIMP IMPSIZ,A5 ;allocate impure area CLR D4 ;clear recovered count CHKLIN: BYP ;bypass leading spaces in cmd line LIN ;empty cmd line? BNE GETFIL ; no - branch HELP: TYPECR <? usage: .RECOVR file, file, ... file> JMP EXIT ;explain syntax and exit GETFIL: FSPEC DISK(A5),BAK ;load DDB w/spec INIT DISK(A5) ;fetch driver, allocate buffer PFILE DISK(A5) ;echo filename TYPESP ;print a space LOOKUP DISK(A5) ;does file already exist? JEQ EXISTS ; yes 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 END