FTN4,Q,C PROGRAM RESTR(4,60),92067-16346,REV.2026 800501 C C C SOURCE PART NO.: 92067-18346 C RELCO. PART NO.: 92067-16346 C NAME: RESTR - ON LINE RESTORE PROGRAM C C C FILE NAME: %RESTR C C C PROGRAMMER: J.S.W.,JRS C C *************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * C * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * C * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* C * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C *************************************************************** C C C C THIS PROGRAM RESTORES A TAPE FILE WHICH WAS SAVED BY C LSAVE OR USAVE UTILITY PROGRAMS. C THE MAG TAPE MUST HAVE BEEN POSITIONED TO THE CORRECT FILE C NO SPARING IS DONE DURING ON-LINE RESTORE C C RU FORMAT: C RU,RESTR,[], , [], [DE] C WHERE: C ::= LU OF LOG DEVICE C < DISC LU>::= DESTINATION DISC LU TO RESTORE TO, OR DISC C DRIVE UNIT ASSOCIATED WITH THIS LU C ::= MAG TAPE LU C DE ::= DEFAULT, NO CONFIRMATION OF HEADER C C SEQUENCE OF OPERATIONS: C C 1. GET PARAMETERS FROM RUN STRING OR INTERACTIVELY AND CHECK C EACH LU TO SEE IF VALID C 2. REQUEST MT LOCK C 3. READ HEDER RECORD FROM MT AND PRINT TIME,DATE AND RUN STRING C 4. CHECK HEADER TO SEE IF LSAVE (LSAVEN=1) OF USAVE (NOT=1) TAPE C 5. SEE IF OPTION = DEFAULT OR NOT C IF YE, GO ON, IF NOT ASK "OK?". C IF OK TO PROCEED NEXT STEP, ELSE FORWARD SPACE NEXT FILE AND ASK C "OK?" AGAIN. REPEAT UNTIL "/E,EX OR EN" C 6. REPEAT THE FOLLOWING FOR "LSAVEN" SUBCHANNELS C 7. IF USAVE, COMPARE TRACK MAP TABLES (FROM THE TAPE AND CURRENT SYSTEM C BY IDLU) C IF NOT EQUAL CANNOT RESTORE. C IF NOT USAVE(MUST BE LSAVE), SEE IF DEST. LU IS LU 2 OR 3. IF YES C CANNOT RESTOR. C IF USAVE TAPE AND LU 2 OR 3 INCLUDED, GET TRACK MAP TABLE (TMT) C ENTRY FOR LU 2 OR 3 AND COMPARE WITH CURRENT TMT ENTRY FROM C MAG TAPE HEADER. IF EQUAL SKIP THIS SUBCHANNEL. IF NOT NEXT STEP C 8. COMPUTE TRACK SIZE, LAST TRACK, SECTOR PER TRACK AND CHECK C IF SOURCE AND DEST. SUBCHANNEL HAS SAME NO. OF TRACKS. C IF NOT THE SAME, ASK IF OK TO PROCEED. IF YES, SET TRACK COUNT C EQUAL TO SMALLER OF THE TWO SUBCHNNELS. C 9. FOR TRACK# FROM 0 TO LAST TRACK, READ ONE TRACK FORM TAPE, CHECK C STATUS AND WRITE IT ONTO DISC. C 10. READ HEADER FOR NEXT SUBCHANNEL, REPEAT STEPS 6 TO 10 AND STOP. C C C C C DIMENSION IREG(2),IBUF(1),IXBUF(8208),ISTR(80),IVBUF(128), X IHDR(247),ITME(15),ITX32(161),ISUBMP(5),ITEMP(5), X LU2MP(5),LU3MP(5),MSGTAP(5),MSG2(20),MSG3(11) X ,MSG4(15),IPARM(5) C C EQUIVALENCE (REG,IA,IREG),(IB,IREG(2)), X (ITME,IHDR(1)), X (ISUBMP(1),IHDR(239)), X (LU2,IHDR(244)), X (ISTR(1),IHDR(16)), X (ITX32,IHDR(77)), X (LSAVEN,IHDR(245)), X (IBUF(1),IXBUF(16)), X (LUSUB,IHDR(246)), X (ITAPE,IHDR(247)) C DATA MSGTAP/2HTA,2HPE,2H #,2H / DATA MSG2/2HNO,2H. ,2HOF,2H S,2HUB,2HCH,2HAN,2HNE,2HLS, X 2H B,2HEI,2HNG,2H R,2HES,2HTO,2HRE,2HD / DATA MSG3/2HRE,2HST,2HOR,2HIN,2HG ,2HSU,2HBC,2HHN,2HL / DATA MSG4/2HNO,2H. ,2HOF,2H T,2HRA,2HCK,2HS ,2HRE,2HST, X 2HOR,2HED,2H / CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C ON LINE RESTORE UTILITY C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C ISTR- RUN STRING C N=0 INDICATES RESTORE C LOG - LOG LU C IDLU- DEST. DISC LU C MTLU- MAG TAPE LU C IVRFY- 1 FOR DEFAULT 0 FOR NO C C C N=0 CALL XGTPM(ISTR,N,LOG,IDLU,MTLU,IVRFY) C C CLEAR 10G RETURN VALUE C IPARM(1)=2H C C LOCK PROGRAM IN MEMORY TO PREVENT DEADLOCK C CALL EXEC(22+100000B,1) GO TO 3 2 GO TO 4 3 CALL EXEC(2,LOG,33H UNABLE TO LOCK PROGRAM IN MEMORY,-33) CALL EXEC(2,LOG,32H WARNING: DEADLOCKS MAY OCCUR!,-32) 4 CONTINUE C C UNBUFFER THE MAGTAPE,RESTORE IT WHEN DONE C IFLAG = 0 CALL XMTBU(MTLU,IFLAG) C C REQUEST MT LOCK C 1000 CALL LURQ(140001B,MTLU,1) GO TO 1500 1100 CONTINUE 1500 CALL ABREG(IA,IB) IF(IA.EQ.0) GO TO 2500 CALL EXEC(2,LOG+200B,19HWAITING FOR MT LOCK,-19) CALL LURQ(1,MTLU,1) 2500 CONTINUE C IUSAVE=0 FOR LSAVE, ELSE LSAVE C INIT TO LSAVE C IUSAVE=0 C C C INTERACTIVE DEVICE LU C ITTY=LOGLU(ISESS) C C READ HEADER AND PRINT TIME,DATE,DAY AND TITLE C 10 CALL EXEC(1,MTLU,IHDR,247) CALL ABREG(IA,IB) IF(IAND(IA,2).EQ.2) GO TO 960 D WRITE(1,999) IA,IB D999 FORMAT(2@8) DO 11 I=1,75 11 IHDR(77-I) = IHDR(76-I) IHDR(1) = 2H CALL EXEC(2,LOG+200B,IHDR,-76) CALL XDCAS(MSGTAP(5),1,ITAPE) CALL EXEC(2,LOG+200B,MSGTAP,-10) C C IF(ITTY.EQ.LOG) GO TO 15 CALL EXEC(2,ITTY,IHDR,-76) CALL EXEC(2,ITTY,MSGTAP,-10) 15 IF(LSAVEN.GT.1) IUSAVE=1 C C C IF DE OPTION IS MISSING ASK IF OK, C IF YES CONTINUE C IF NO FORWARD SPACE NXT FILE C IF NON OF ABOVE ASK AGAIN C IF(IVRFY.EQ.1)GO TO 30 20 CALL EXEC(2,ITTY,3HOK?,-3) CALL EXEC(1,ITTY+400B,ITEMP,-2) IF(ITEMP.EQ.2HYE) GO TO 30 IF(ITEMP.EQ.2H/E.OR.ITEMP.EQ.2HEX.OR.ITEMP.EQ.2HEN)STOP 77 IF(ITEMP.NEQ.2HNO) GO TO 20 CALL EXEC(3,MTLU+1300B) GO TO 10 C C C************************************************************************* C C NOW WE HAVE THE HEADER INFO ,TMT. GET TMT FOR LU 2 OR 3 C C********************************************************************** C C C C CLEAR OUT LU2 AND 3 TRACK MAPS IN CASE SYSTEM IS A 7900 C 30 DO 25 I=1,5 LU2MP(I) = 0 25 LU3MP(I) = 0 C C CHECK TYPE OF SYSTEM DISCS C CALL EXEC(13,2,IEQT5) IF (IAND(IEQT5,37400B)-15000B) 32,31,32 31 CALL EXEC(1,2202B,LU2MP,5,0,5) 32 CALL EXEC(13,3,IEQT5) IF (IAND(IEQT5,37400B)-15000B) 35,34,35 34 CALL EXEC(1,2203B,LU3MP,5,0,5) C C C COMPARE WHOLE TMT FORM TAPE WITH CURRENT SYSTEM C IF NOT EQUAL AND USAVE FILE, CANNOT RESTORE C C C SET UP # OF SUBCHANNELS TO BE COMPARED C 35 ICNT=-ITX32 CALL EXEC(13,IDLU,IEQT5) IF (IAND(IEQT5,37400B)-15000B) 980,36,980 36 CALL EXEC(1,IDLU+2200B,IBUF, 161,0,5) CALL COMPR(IBUF,ITX32,ICNT,IER) IF(IER.NEQ.0.AND.IUSAVE.EQ.1) GO TO 950 C C C LSAVEN = NO. OF LSAVE'S IN THE FILE BEFORE EOF MARK C LASTSB=LSAVEN CALL XDCAS(MSG2(18),3,LASTSB) CALL EXEC(2,LOG+200B,MSG2,-40) C C********************************************************************* C C RESTORING ALL SUBCHANNELS (1 TO LASTSB) C C********************************************************************* C DO 6000 LSUBN=1,LASTSB MXTRK=ISUBMP(4) MXSEC=ISUBMP(1) C C CHECK IF DESTINATION SUBCHNNEL IS LU 2 OR 3 BY COMPARING C TMT ENTRY OF LU 2 OR 3 WITH THAT OF THE TAPE. C IF USAVE FILE AND EQUAL (IER=0) SKIP RESTORING THIS SUBCHNNL C IF LSAVE FILE AND EQUAL (IER=0) ERROR- CANNOT RESTORE. STOP. C C ISKIP=0 CALL COMPR(ISUBMP,LU2MP,5,IER1) CALL COMPR(ISUBMP,LU3MP,5,IER2) IER=IER1+IER2 IF(IER.EQ.0.AND.IUSAVE.EQ.0) GO TO 900 IF(IER.EQ.0.AND.IUSAVE.EQ.1) ISKIP=1 IF(ISKIP.EQ.1) CALL EXEC(2,LOG, X 25H SKIP RESTORING LU 2 OR 3,-25) C C C C IF LSAVE TAPE CHECK IF # OF TRACKS IN DEST LU THE SAME C IF NOT THE SAME, PRINT # OF TRACKS IN SOURCE AND DEST. LU C AND ASK IF OK TO PROCEED. C IF(IUSAVE.EQ.1) GO TO 50 IF(IDLU.EQ.2.OR.IDLU.EQ.3) GO TO 900 CALL EXEC(1,IDLU+2200B,ISUBMP,5,0,5) IF(MXSEC.NEQ.ISUBMP(1)) GO TO 970 IF(MXTRK.EQ.ISUBMP(4)) GO TO 50 C C 40 CALL XDCAS(IBUF(1),3,MXTRK) IBUF(4)=20137B CALL EXEC(2,ITTY,IBUF,-8) CALL EXEC(2,ITTY,20H TRACKS IN SOURCE LU,-20) CALL XDCAS(IBUF(1),3,ISUBMP(4)) CALL EXEC(2,ITTY,IBUF,-8) CALL EXEC(2,ITTY,20H TRACKS IN DEST. LU ,-20) CALL EXEC(2,ITTY,15HOK TO PROCEED?_,-15) C CALL EXEC(1,ITTY+400B,I,-2) IF(I.EQ.2HNO) STOP IF(I.EQ.2HYE) GO TO 50 GO TO 40 C C COMPUTE TRACK SIZE AND SET LAST TRACK TO THE SMALLER OF TWO IN C SOURCE OR DEST. SUBCHANNELS. C 50 ISIZE=ISUBMP(1)*64+1 MXSEC=ISUBMP(1) IF(MXTRK.GT.ISUBMP(4)) MXTRK=ISUBMP(4) C C FOR TRACK# = 0 TO LAST TRACK READ ONE RECORD FROM MT, WRITE IT TO DISC C PRINT SUBCHNNL # BEING RESTORED C IF(ISKIP.EQ.1.OR.IUSAVE.EQ.0) GO TO 80 C C PRINT "RESTORING SUBCNL XX" C CALL XDCAS(MSG3(10),2,LUSUB) CALL EXEC(2,LOG+200B,MSG3,-22) C 80 DO 100 LTRK=0,MXTRK-1 CALL EXEC(1,MTLU,IBUF,ISIZE) CALL ABREG(IS1,IB) IF(IB.EQ.0) GO TO 960 IF(IAND(IS1,2).EQ.2) GO TO 960 IF(IAND(IS1,40B).EQ.40B) CALL EOTAP(ITTY,MTLU,IHDR,IBUF,ISIZE) IF(IAND(IS1,200B).EQ.200B) GO TO 850 IF(IAND(IBUF(1),37777B).NEQ.LTRK) GO TO 800 C C IF ISKIP=1 SKIP RESTORING LU 2 OR 3 FOR USAVE FILE C IF(ISKIP.EQ.1) GO TO 100 CALL WRTRK(IDLU,LTRK,ISUBMP,IXBUF,LOG,IBT) C C IF BAD TRACK EXIST (IBT=1) SET 10G TO -1 C IF(IBT.EQ.1) IPARM(1)=2H-1 100 CONTINUE C C PRINT # OF TRACKS RESTORED C IF(ISKIP.EQ.1.) MXTRK=0 CALL XDCAS(MSG4(13),3,MXTRK) CALL EXEC(2,LOG+200B,MSG4,-30) CC C C C READ NEXT HEADER, DO RESTORING FOR NEXT SUBCHANNEL C CALL EXEC(1,MTLU,IHDR,247) C 6000 CONTINUE C C DONE RESTORING C C********************************************************************* C C UNLOCK MT LU CALL LURQ(0,MTLU,1) C C RETURN 10G VALUE C CALL PRTN(IPARM) C C RESTORE MAGTAPE BUFFERING TO PRE-PROGRAM STATE C CALL XMTBU(MTLU,IFLAG) C UNLOCK PROGRAM C CALL EXEC(22+100000B,0) GO TO 750 700 STOP 77 750 STOP 77 900 CALL EXEC(2,LOG+200B,27HCANNOT RESTORE TO LU 2 OR 3,-27) GO TO 990 800 CALL EXEC(2,LOG+200B,17HTAPE FORMAT ERROR,-17) GO TO 990 C C 850 CALL EXEC(2,LOG+200B,16HTAPE EOF ILLEGAL,-16) GO TO 990 950 CALL EXEC(2,LOG+200B,29HTRACK MAP TABLES DO NOT MATCH,-29) GO TO 990 960 CALL EXEC(2,LOG+200B,15HMT PARITY ERROR,-15) GO TO 990 970 CALL EXEC(2,LOG+200B,21HTRACK SIZES NOT EQUAL,-21) GO TO 990 980 CALL EXEC(2,LOG+200B,17H UNSUPPORTED DISC,-17) 990 CALL XMTBU(MTLU,IFLAG) STOP 66 END