:ST,S,$TC19,5 FTN4,L,T PROGRAM RECOV C B C THIS PROGRAM IS USED TO PROCESS MTO LOG TAPES AND C TO BRING A COPY DISC TO THE STATE THAT THE LIVE ONE B C WAS WHEN RECOVERY BECAME NECESSARY. B C B COMMON IB(20) COMMON ID(1000) COMMON IL,IX,IRX DIMENSION IR(5),ISUB(8) ITI=0 IRX = -1 IX=0 1 WRITE(1,900) B 900 FORMAT(" INPUT LOG TAPE IDENTIFIER._") READ(1,910)(IR(K),K=1,5) 910 FORMAT(5A2) WRITE(1,920) B 920 FORMAT(" INPUT LOG TAPE LU#._") READ(1,*)IL WRITE(1,700) 700 FORMAT(" INPUT # OF SUBCHANNELS TO BE UPDATED._") READ(1,*) INS IF(INS .LT. 1 .OR. INS .GT. 8) STOP DO 172 I=1,INS WRITE(1,710) 710 FORMAT(" INPUT SUBCHANNEL #._") READ(1,*) ISUB(I) 172 CONTINUE C B C NOW HAVE LOG TAPE ID AND LU, SO DO A C ONE RECORD READ AND VERIFY IT B C B CALL EXEC(3,400B+IL) 70 CALL EXEC(1,100B+IL,IB,20) B CALL EXEC(13,IL,IS,ILOG) B IF(IAND(IS,200B) .NE. 0) GOTO 40 IF(IAND(IS,40B) .EQ. 0) GOTO 71 CALL NTAPE GOTO 70 C B C NOW COMPARE LOG TAPE ID C B 71 DO 10 I=1,5 IF(IR(I).NE.IB(I)) GOTO 20 10 CONTINUE GOTO 30 B C B C LOG TAPE ID INCORRECT C B 20 WRITE(1,930)(IB(K),K=1,5) 930 FORMAT(" LOG TAPE IDENTIFIER INCORRECT -",/ * " IDENTIFIER ON TAPE IS: ",5A2) IF(ITI.EQ.0)GOTO 1 72 WRITE(1,931) 931 FORMAT(" ABORT RECOVERY?_") READ(1,980)IC IF(IC.EQ.2HYE) GOTO 55 IF(IC.EQ.2HNO) GOTO 70 GOTO 72 C C VERIFY THE SUBCHANNEL C 30 ISA = IAND(IB(11),177B) ISB = 0 DO 175 I=1,INS IF(ISA .EQ. ISUB(I)) ISB = 1 175 CONTINUE IF(ISB .NE. 0) GOTO 19 IF(IB(8) .EQ. 15) CALL EXEC(1,IL,ID(1),IB(13)) GOTO 70 C B C NOW CHECK WHAT IS ON LOGGING TAPE,SHOULD BE A HEADER BLOCK B C B 19 CONTINUE IT = IB(8) ITI=1 801 IF(IT .NE. 15) GOTO 805 CALL WRTE GOTO 40 805 CONTINUE C C AT THIS STAGE WE CANNOT UNDERSTAND THE HEADER B C B WRITE(1,940) B 940 FORMAT(" CANNOT DECIPHER HEADER, HEADER IS") WRITE(6,940) B WRITE(1,950)IB B 950 FORMAT(2(8O7/)) WRITE(6,950)IB B C C NOW SEE WHAT THE OPERATOR WANTS TO DO C 80 WRITE(1,970) 970 FORMAT(" ABORT RECOVERY?_") READ(1,980)IC 980 FORMAT(A2) IF(IC.EQ.2HNO) GOTO 70 IF(IC.NE.2HYE) GOTO 80 C C NOW ABORT RECOVERY C WRITE(1,990) WRITE(6,990) 990 FORMAT(//" RECOVERY ABORTED AT OPERATOR'S REQUEST."//) GOTO 55 C B C COME HERE AFTER PROCESSING RECORD B C B C SEE IF ITS END OF TAPE B C B 40 CALL EXEC(13,IL,ISTAT,ILOG) B IF(IAND(ISTAT,40B) .NE. 0) GOTO 45 IF(IAND(ISTAT,200B) .EQ. 0) GOTO 50 GOTO 47 45 CALL NTAPE GOTO 801 C B C NOW ITS AN END OF FILE SO TELL OPERATOR B C B 47 WRITE(1,990) WRITE(6,960) B 960 FORMAT(" END OF FILE - END OF PROGRAM.") 55 IX=1 C C CHECK FOR PROGRAM ABORT B C 50 IF(IX.NE.0) CALL EXEC(6) B GOTO 70 B END B SUBROUTINE PERR(IE) B C B C THIS SUBROUTINE CHECKS FOR LOG PARITY ERRORS B C B COMMON IB(20) COMMON ID(1000) COMMON IL,IX IE=0 C B C GET STATUS OF LU B C B CALL EXEC(13,IL,ISTAT,ILOG) B IF(IAND(ISTAT,40042B).NE.0)IE=1 B C B C HAVE SET ERROR INDICATOR 0=GOOD 1=BAD B C B RETURN B END B SUBROUTINE WRTE B COMMON IB(20) COMMON ID(1000) COMMON IL,IX,IRX C B C THIS SUBROUTINE PROCESSES DISK WRITES B C B CALL PERR(I) B C B C FIX UP FILE NAME C IDA = IOR(IAND(IB(11),177400B),40B) IF(I.EQ.0) GOTO 20 WRITE(1,900)IB B WRITE(6,900)IB B 900 FORMAT(" ERROR ON LOG READ - DATA IS:"//,5(4@10/)) C B C NOW SEE WHAT THE OPERATOR WANTS TO DO B C B 30 WRITE(1,910) B 910 FORMAT(" ABORT RECOVERY?_") READ(1,920)IC 920 FORMAT(A2) C B IF(IC.EQ.2HYE)GOTO 10 B IF(IC.EQ.2HNO)GOTO 70 GOTO 30 C B C NOW SET FOR ABORT B C B 10 IX=1 WRITE(1,930) B WRITE(6,930) B 930 FORMAT(" LOG ERROR:",//" ABORTED AT OPERATOR'S REQUEST.") 40 RETURN B C B C B 70 WRITE(1,940) B 940 FORMAT(" TRY THE WRITE?_") C B READ(1,920)IC B IF(IC.EQ.2HYE) GOTO 20 IF(IC.EQ.2HNO)GOTO 60 B GOTO 70 B C B C DOESNT WANT TO RISK THE WRITE SO WILL RETURN B C B 60 GOTO 40 C B C OK ITS HIS DISK GET THE DATA B C B 20 CALL EXEC(1,IL,ID(1),IB(13)) C B C SEE IF WE READ IT OK B C B CALL PERR(IE) B IF(IE.EQ.0)GOTO 80 B C B C NOW HAVE A READ ERROR B C IR=IAND(IB(11),177B) B WRITE(1,950) B WRITE(6,950) B 950 FORMAT(" READ ERROR ON DATA TO BE WRITTEN ON DISC.") WRITE(1,960) IB(9),IB(10),IDA,IB(12),IR WRITE(6,960) IB(9),IB(10),IDA,IB(12),IR 960 FORMAT(" DISC FILE NAME:",3A2,/" SECT:",I5,/" UD: ",I2,/////) C B C NOW OUTPUT THE DATA B C B WRITE(6,970) B 970 FORMAT(" DATA:"//) DO 90 I=1,IB(13) B WRITE(1,980)I,ID(I) B 90 WRITE(6,980)I,ID(I) B 980 FORMAT(" WORD ",I4," = ",@7) C B C SEE WHAT HE WANTS TO DO B C B 100 WRITE(1,990) B 990 FORMAT(" TRY THE WRITE?_") READ(1,920)IC B IF(IC.EQ.2HYE)GOTO 110 B IF(IC.EQ.2HNO)GOTO 120 B GOTO 100 B C B C DOESNT WANT IT WRITTEN SO RETURN B C B 120 GOTO 40 B C B C OK ITS STILL HIS DISK B C B C GET TO CORRECT SUBCHANNEL B C B 80 CONTINUE 110 IR = IAND(IB(11),177B) IF(IR .EQ. IRX) GOTO 888 IRX = IR CALL EXEC(23,0,IR,1) C C CHECK THAT FILE EXISTS C 888 CONTINUE CALL EXEC(18,IB(9),ISEC) C C SEE IF FILE EXISTS C IF(ISEC.NE.0) GOTO 150 C C TELL OPERATOR FILE DOESN'T EXIST C WRITE(1,991)IB(9),IB(10),IDA 991 FORMAT(" FILE ",3A2," DOES NOT EXIST!") WRITE(6,991)IB(9),IB(10),IDA C C SEE WHAT HE WANTS TO DO C 175 WRITE(1,910) 130 READ(1,920)IC IF(IC.EQ.2HYE) GOTO 10 IF(IC.NE.2HNO)GOTO 175 GOTO 40 C C FILE EXISTS SO CHECK LENGTH C 150 CONTINUE ILEN=IB(13)/128 ILET=ILEN*128 IF(ILET.NE.IB(13))ILEN=ILEN+1 ILEN=ILEN+IB(12) IF(ILEN.GT.ISEC) GOTO 170 C C LENGTH OK SO DO THE WRITE C C B C NOW DO THE WRITE B C B CALL EXEC(15,3,ID(1),IB(13),IB(9),IB(12)) B C B C NOW RETURN B C B GOTO 40 B C C FILE NOT LARGE ENOUGH SO TELL OPERATOR C 170 CONTINUE WRITE(1,992) IB(9),IB(10),IDA 992 FORMAT(" NOT ENOUGH ROOM IN ",3A2," TO WRITE!") C C SEE WHAT HE WANTS TO DO C 155 WRITE(1,910) READ(1,920)IC IF(IC.EQ.2HYE) GOTO 10 IF(IC.NE.2HNO) GOTO 155 GOTO 40 END B SUBROUTINE NTAPE COMMON IB(20) COMMON ID(1000) COMMON IL,IX CALL EXEC(3,IL+500B) 10 WRITE(1,100) 100 FORMAT(" MOUNT NEXT TAPE - TYPE 'READY'._") READ(1,110) IS 110 FORMAT(A2) IF(IS .NE. 2HRE) GOTO 10 RETURN END END$ :: :CO MOUNT TAPE #13, TYPE :GO :PA