;*************************** AMUS Program Label ****************************** ; Filename: ARCRES.M68 Date: 032389 ; Category: UTIL Hash Code: 746-311-455-753 Version: 1.0(103) ; Initials: ULTR/AM Name: DAVID PALLMANN ; Company: ULTRASOFT Telephone #: 5163984848 ; Related Files: WLDSCN.OBJ,ARCHIV.M68,ARCDIR.M68 ; Min. Op. Sys.: Expertise Level: BEG ; Special: Must lnklit with wldscn ; Description: Restores files which have been archived using ARCHIV. To ; restore a set of files, type .ARCRES device=archive-file. ; eg. .ARCRES dsk0=baic ;***************************************************************************** ;***************************************************************************; ; ; ; ARCRES ; ; restore an archive image to AMOS files ; ; ; ; Author: David F. Pallmann ; ; Copyright (C) 1984 by LMS Technical Services, Inc. ; ; ; ;***************************************************************************; ; ; File makes external references to MAC:SYSLIB.LIB. ; After assembly, enter this command: .LNKLIT file ; OBJNAM ARCRES.LIT VMAJOR=1 ;edit history VEDIT=100. ;06-Jan-84 DFP creation. VEDIT=101. ;07-Apr-84 DFP correct restore of 0-byte files. VEDIT=102. ;12-Apr-84 DFP add PPNs to disk if required. VEDIT=103. ;17-Apr-84 DFP correct bug introduced by 102 edit! ;universals SEARCH SYS SEARCH SYSSYM EXTERN $ADPPN ;registers IMP=A5 ;impure index ;impure area .OFINI .OFDEF FILE,D.DDB ;DDB for writing AMOS files .OFDEF ARCDIR,D.DDB ;DDB for reading archive directory .OFDEF ARCDAT,D.DDB ;DDB for reading archive data .OFDEF WRKDDB,D.DDB ;DDB for $ADPPN call .OFSIZ IMPSIZ START: PHDR -1,0,PH$REE!PH$REU ;program header GETIMP IMPSIZ,IMP ;allocate impure area ;get output device specification GETDEV: BYP LIN JEQ HELP FSPEC FILE(IMP) INIT FILE(IMP) ORB #D$ERC!D$BYP,FILE+D.FLG(IMP) ; 102 ;bypass '=' SKIP: BYP CMMB (A2)+,#'= JNE HELP ;get archive name GETARC: BYP LIN JEQ HELP SAVE A2 FSPEC ARCDIR(IMP),XXX MOVW #[MAP],ARCDIR+D.EXT(IMP) INIT ARCDIR(IMP) REST A2 FSPEC ARCDAT(IMP),XXX MOVW #[ARC],ARCDAT+D.EXT(IMP) INIT ARCDAT(IMP) ;open archive OPNARC: OPENI ARCDIR(IMP) OPENI ARCDAT(IMP) ;read archive entry LOOP: CTRLC ABORT FILINL ARCDIR(IMP) MOV D1,FILE+D.FIL(IMP) TST ARCDIR+D.SIZ(IMP) JEQ ENDARC FILINW ARCDIR(IMP) MOVW D1,FILE+D.EXT(IMP) FILINW ARCDIR(IMP) MOVW D1,FILE+D.PPN(IMP) TYPESP Restoring PFILE FILE(IMP) CRLF FILINL ARCDIR(IMP) MOV D1,D2 RESFIL: OPENO FILE(IMP) BEQ 10$ ; 102 CMMB FILE+D.ERR(IMP),#D$EILC ; 102 JNE DEVERR ; 102 CALL ADDPPN ; 102 10$: TSTW D2 ; 101 BEQ 30$ ; 101 20$: FILINB ARCDAT(IMP) FILOTB FILE(IMP) SOB D2,20$ 30$: CLOSE FILE(IMP) ; 101 JMP LOOP DEVERR: TYPESP ? FILSER error CLR D1 MOVB FILE+D.ERR(IMP),D1 OCVT 2,OT$TRM CRLF JMP LOOP HELP: TYPECR TYPECR BR EXIT ABORT: TYPECR ?aborted ENDARC: CLOSE ARCDIR(IMP) CLOSE ARCDAT(IMP) EXIT: CRLF EXIT ADDPPN: SAVE D0-D5,A0-A5 ; 103 CLR D1 ; 102 MOVW FILE+D.PPN(IMP),D1 ;PPN to add 102 CLR D2 ;password (none) 102 LEA A2,WRKDDB(IMP) ;work DDB 102 MOVW FILE+D.DEV(IMP),WRKDDB+D.DEV(IMP) ; 102 MOVW FILE+D.DRV(IMP),WRKDDB+D.DRV(IMP) ; 102 INIT WRKDDB(IMP) ; 102 CALL $ADPPN ; 102 TST D0 ; 102 BEQ 10$ ; 102 TYPECR ? error in adding PPN ; 102 10$: REST D0-D5,A0-A5 ; 103 RTN ; 102 END .