FTN,L,C C * SUBROUTINE VVALD (IA,IB,OFSET,LEN,TA,SA,ILNTH,FLAG,IERR) & ,92067-1X503 REV.2026 800522 C * C * C * C ******************************************************************* C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS RESERVED. C * NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, REPRODUCED, OR C * TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR WRITTEN C * CONSENT OF HEWLETT-PACKARD COMPANY. C ******************************************************************* C * C * C * NAME: VVALD C * SOURCE: 92067-18503 C * RELOC: 92067-16503 C * PGMR : R.D C * C * C * C ****************************************************************** C * C * C * C * C * C C THIS SUBROUTINE CHECKS FOR POSSIBLE PROBLEMS UPON READING FROM C MAG TAPE (INITIATED BY READT) BEFORE THE DATA IS RESTORED TO THE C DISC AND AFTER WRITING IT TO THE DISC. C IF END OF TAPE IS FOUND, THE USER WILL BE REQUESTED TO MOUNT THE NEXT C TAPE OR ABORT THE PROGRAM. C C THE PARAMETERS ARE: C C IA,IB - CONTENTS OF A AND B REGISTER IMMEDIATELY AFTER ATTEMPT C TO READ. C OFSET - FIRST POSITION OF THE BUFFER THAT IS TO BE RESTORED TO C THE DISC. C < 0 IF WRITE CHECK, >0 IF READ CHECK C LEN - NUMBER OF WORDS TO BE RESTORED. C TA - TRACK ADDRESS C SA - SECTOR ADDRESS C ILNTH - WORD/TRACK VALUE OF MAG TAPE C FLAG - CATCHES FMGR ERROR NUMBER C IERR - ERROR CODE C = 0 NO PROBLEMS C = 1 END OF FILE ENCOUNTERED C =-1 ABORT MAIN PROGRAM (READT) C =-2 PARITY ERROR FOUND C C IMPLICIT INTEGER (A-Z) DIMENSION JBUF(8192),MRR2(14),MRR8(12),MRR15(32),MRR16(29) COMMON/COMRD/ ILU,ITAPE,NDIR,IDISC,MTLU,TSIZE,IBUF(8193) EQUIVALENCE (JBUF,IBUF(2)) DATA MRR2/6412B,2HRE,2HAD,2H 0,2H02,2H ,2HBA,2HD ,2HTA,2HPE, & 2H F,2HOR,2HMA,2HT / DATA MRR8/6412B,2HRE,2HAD,2H 0,2H08,2H ,2HEN,2HD ,2HOF,2H T,2HAP, & 2HE / DATA MRR15/6412B,2HRE,2HAD,2H 0,2H15,2H B,2HAD,2H T,2HRA,2HNS, & 2HMI,2HSS,2HIO,2HN-,2H-M,2HEM,2HOR,2HY ,2HTO,2H D,2HIS, & 2HC ,2HTR,2HK ,2H ,2H ,2H ,2HSE,2HC ,2H ,2H ,2H / DATA MRR16/6412B,2HRE,2HAD,2H 0,2H16,2H B,2HAD,2H T,2HRA,2HNS, & 2HMI,2HSS,2HIO,2HN-,2H-M,2HAG,2H T,2HAP,2HE ,2HTO,2H M,2HEM, & 2HOR,2HY ,2HRE,2HC ,2H ,2H ,2H / C C WHAT KIND OF CHECK - READ FROM TAPE OR WRITE TO DISC? C IF(OFSET.LT.0) GOTO 500 C C END OF FILE ENCOUNTERED? C IF(IAND(IA,200B).EQ.0) GOTO 480 IERR=1 RETURN C C CHECK TO MAKE SURE TRANSMISSION LENGTH WAS ACCURATE. C (IBUF(1)=RECORD NUMBER) C 480 IF((IB.EQ.ILNTH+1).OR.(IAND(IA,200B).EQ.200B)) GOTO 481 CALL CNUMD(IBUF(1),MRR16(27)) CALL EXEC(2,ILU,MRR16,29) CALL PTERR(MRR16(2),FLAG) C C CHECK A REGISTER FOR PARITY ERROR. C 481 IF((IAND(IA,2B).NE.2)) GOTO 485 GOTO 204 C C CHECK FOR END OF TAPE. (A REGISTER HAS EQT STATUS WORD FIVE). C 485 IF((IAND(IA,00040B).NE.40B)) RETURN C C REWIND MAG TAPE. C CALL EXEC(3,MTLU+500B) C C ASK TO MOUNT ANOTHER TAPE C CALL EXEC(2,ILU,MRR8,12) CALL PTERR(MRR8(2),FLAG) 482 CALL EXEC(2,ILU,28HPLEASE MOUNT SUBSEQUENT TAPE,-28) 483 CALL EXEC(2,ILU,25HAFTER MOUNTING ENTER "GO",-25) CALL REIO(1,ILU,INBF,1) IF(INBF.EQ.2HAB) GOTO 91 IF(INBF.NE.2HGO) GOTO 483 C C SET UP TAPE COUNTER C ITAPE=ITAPE+1 C C READ FIRST RECORD OF THE FOLLOWING TAPE C CALL EXEC(1,MTLU,INBUF,1) CALL ABREG(IA,IB) C C THE FIRST RECORD SHOULD BE THE TAPE COUNT. IS IT WHAT WAS EXPECTED? C IF YES, CONTINUE ON; ELSE ASK TO MOUNT ANOTHER TAPE. C IF(INBUF.NE.ITAPE) GOTO 490 C C WRITE BUFFER TO DISC (IT MAY BE REDUNDANT). C CALL EXEC(2,IDISC+74000B,JBUF(OFSET),LEN,TA,SA) GOTO 500 C C WRONG TAPE, ASK AGAIN. C 490 CALL EXEC(2,ILU,MRR2,14) CALL PTERR(MRR2(2),FLAG) ITAPE=ITAPE-1 GOTO 482 C C WRITE CHECK - TRANSMISSION LENGTH O.K. AND ERROR BIT CLEAR? C 500 IF(IAND(IA,1).NE.1)RETURN CALL CNUMD(TA,MRR15(25)) CALL CNUMD(SA,MRR15(30)) CALL EXEC(2,ILU,MRR15,32) CALL PTERR(MRR15(2),FLAG) RETURN C C ABORT REQUESTED. C 91 IERR=-1 RETURN C C PARITY ERROR. C 204 IERR=-2 RETURN END END$