.MCALL QIOW$S,QIOW$,GTSK$C,DIR$,ALUN$C,FHDOF$ .MCALL EXIT$S,QIOW$C .MCALL SUPER,OPEN$W,FSRSZ$,FDOF$L,FHDOF$,FDOP$R,FDBDF$,NMBLK$ .MCALL CLOSE$,FDAT$R,FDRC$R,FDBF$R SUPER FDOF$L FHDOF$ DEF$L ; ; PROGRAM TO READ A FILE FROM TAPE AND WRITE IT ONTO A FILES11 ; VOLUME. THE FILE ON TAPE IS ASSUMED TO BE ONE WRITTEN BY THE ; "BIG" FILE RECOVERY PROGRAM ; UICREC:: ALUN$C 2,DP,0 ALUN$C 1,MT,0 HDLUP: DIR$ #RDBLK ;READ A BUNCH OF BLOCKS MOV #BUF,RDBLK+Q.IOPL ;NEXT READ WILL READ INTO DATA BUFFER MOV #HEADER,R5 ;R5 POINTS TO THE NEXT HEADER IN CORE MOV #STRING,R0 MOV #EDIT,R1 MOV R5,R2 ;CALCULATE THE ADDRESS OF THE FILE ADD #56,R2 ;INFORMATION SECTION OF THE HEADER CALL $EDMSG ;CONVERT TO ASCII MOV R1,NAM ;SAVE LENGTH MOV #STRING,NAM+2 ;AND ADDRESS IN DSDB FOR OUTPUT FILE ; ; ;ZERO THE FDB BEFORE YOU START LET R1 := #OUTFDB ;ADDRESS OF SAME THRU R0 := #S.FDB/2 ;WORDS IN FD LET (R1)+ := #0 ;CLEAR IT END ;LOAD PARTS OF THE FDB AT RUN TIME LET R0 := #OUTFDB FDOP$R R0,#2,#NAME,#DEFNAM,#FO.WRT FDBF$R R0,#3,#1 FDAT$R R0,#R.VAR!R.FIX,#FD.CR FDRC$R R0,#FD.INS,#RBUF,#512. OPEN$W ;OPEN OUTPUT FILE LET R1 := H.UFAT+F.HIBK+2(R5) ;GET THE TOTAL FILE SIZE LET R2 := #1 ;SET FOR CONTIGUOUS CALL .EXTND ;EXTEND THE FILE TO MAKE ROOM ;HERE I HAD TO RE-INITALIZE THE FIRST 7 ;WORDS CAUSE OPEN$ ZEROED THEM FOR ME LET R0 := R5 + #H.UFAT LET R1 := #OUTFDB THRU R2 := #7 ;COPY THE USER FILE ATTRIBUTES INTO LET (R1)+ := (R0)+ ;THE FIRST 7 WORDS OF THE FDB END LET R0 := #OUTFDB LET F.EOBB(R0) := F.EFBK(R0) ;MAKE THE RUN-TIME EOF MARK EQUAL LET F.EOBB+2(R0) := F.EFBK+2(R0) LET F.NREC(R0) := F.FFBY(R0) ;THE ONE IN THE HEADER LET OUTVB := #1 ;INITALIZE THE OUTPUT BLOCK NUMBER LET R2 :B= H.MPOF(R5) ;THE HEADER. DIR$ #RDBLK ;READ THE FIRST BLOCK OFF OF TAPE REPEAT DIR$ #WRITE LET OUTVB := OUTVB +1 ;INCRIMENT TO NEXT BLOCK ON DIR$ #RDBLK UNTILB IOSTAT EQ #IE.EOF CLOSE$ QIOW$S #IO.WVB,#5,#5,,,,<#DONE,#DL,#40> EXIT$S DEFNAM:: NMBLK$ ,,,SY,0 NAME:: DEV: .WORD 0,0 DIR: .WORD 0,0 NAM:: .WORD 0,0 IOSTAT:: .WORD 0,0 RBUF: .BLKB 512. OUTFDB:: FDBDF$ WRITE:: QIOW$ IO.WVB,2,2,,IOSTAT,, OUTVBH==WRITE+Q.IOPL+6 OUTVB==WRITE+Q.IOPL+10 RDBLK: QIOW$ IO.RLB,1,1,,IOSTAT,, HEADER: .BLKB 512. BUF: .BLKB 512. EDIT: .ASCII /%X/ .WORD 0 STRING: .BLKB 32. DONE: .ASCII /I'M DONE/<7><7><7><7> DL=.-DONE ; .END UICREC