FTN4,Q,C,T
      PROGRAM INSTL() 
     $, 92071-16090 REV.2041 780728 
C     NAME:   INSTL 
C     SOURCE: 92071-18090 
C     RELOC:  92071-16090 
C     PGMR:   WWL,DLM 
C 
C 
C  **************************************************************** 
C  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  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 
      IMPLICIT INTEGER (A-Z)
      INTEGER OBUF(128) 
      INTEGER DCB(144),BUF(128),WRDCB(144)
      INTEGER DVP(8),SNAM(10),SYNAM(10),BOTNAM(10),TEMP(10) 
      INTEGER DEST(10),PROGNM(3)
      LOGICAL SAME,TIME1,LGLFL,UPDATE 
      DATA DEST/2HBO,2HOT,2HEX,0,-32767,0/
C 
C 
C 
      CALL PNAME(PROGNM)
      CALL GETST (BUF,-80,IB) 
      LOG=LOGLU(ISES) 
      IF (IB .GT. 0) GO TO 40 
   20 WRITE(LOG,30) 
   30 FORMAT(" ENTER SNAP FILE, SYSTEM FILE, DESTINATION FILE, LU," 
     $" AND SOURCE FILE ")
      CALL REIO (1,LOG+400B,BUF,-80)
      CALL ABREG (IA,IB)
      IF (IB .EQ. 0) GO TO 900
C 
   40 IV=1
      CALL NAMR (SNAM,BUF,IB,IV)
      CALL NAMR (SYNAM,BUF,IB,IV) 
      CALL NAMR (TEMP,BUF,IB,IV)
      IF (TEMP(1) .EQ. 0) GO TO 55
      DO 50 I=1,10
      DEST(I)=TEMP(I) 
   50 CONTINUE
C 
   55 CALL NAMR (TEMP,BUF,IB,IV)
      IF ((IAND(TEMP(4),3)).NE.1) GOTO 189
      IF (TEMP(1).EQ.0) GOTO 189
      LU=IABS(TEMP(1))
      IF ((DEST(6).EQ.0).AND.(SYNAM(1).EQ.0).AND.(SNAM(1).EQ.0))
     $ DEST(6)=0-LU 
C GET THE SOURCE FILE 
      SAME=.FALSE.
      CALL NAMR(BOTNAM,BUF,IB,IV) 
      IF (BOTNAM(1).NE.0) GOTO 57 
      SAME=.TRUE. 
      DO 56 I=1,10
   56 BOTNAM(I)=DEST(I) 
C 
   57 SYSTEM=OPSYS(I) 
      IF(.NOT.(((SYNAM(1).EQ.0).AND.(SNAM(1).EQ.0)) .AND. 
     $((SYSTEM.EQ.-31).OR.(SYSTEM.EQ.-29)))) GOTO 59
C 
C GET THE PARAMTERS VIA AN EXEC CALL
C 
      CALL EXEC(100015B,10000B+LU,STAT1,STAT2,DVP,8)
      GOTO 189
 1000 TYPE=(IAND(STAT1,37400B)/256) 
      IF((TYPE .LT. 30B) .OR. (TYPE .GT. 37B)) GOTO 189 
      GOTO 399
C 
C     FIRST OPEN SNAP FILE & FIND LU TABLE
C 
   59 CALL OPEN (DCB,IER,SNAM,0,SNAM(5),SNAM(6))
      IF (IER .GE. 0) GO TO 95
   60 WRITE(LOG,70)IER,(SNAM(I),I=1,3)
   70 FORMAT(" FMGR",I6," ON ",3A2) 
      GO TO 900 
C 
C NOW OPEN SNAP FILE AND GET CHECKSUMS
C 
   95 IF(IER .NE. 3) GOTO 77
      IF(READF(DCB,IER,BUF,128,LEN).LT.0) GOTO 60 
      IF(LEN .EQ. 20) GOTO 96 
   77 WRITE(LOG,78) 
   78 FORMAT(" ILLEGAL SNAP "/) 
      GOTO 900
   96 CKSM=BUF(9) 
      SCCK=BUF(10)
C 
      DO 106 J=1,4,1
  100 CALL READF (DCB,IER,BUF,128,LEN)
      IF (IER .NE. 0) GO TO 60
      IF (LEN .LT. 0) GO TO 60
      IF(BUF(2) .NE. 2H$L) GO TO 103
      IF(BUF(3) .NE. 2HUT) GO TO 103
      IF(BUF(4) .NE. 2HA ) GO TO 102
      SLUT=BUF(6) 
      GOTO 106
C 
  102 IF(BUF(4) .NE. 2H# ) GOTO 103 
      SLUTN=BUF(6)
      GOTO 106
C 
 103  IF(BUF(2) .NE. 2H$C) GOTO 105 
      IF(BUF(3) .NE. 2HKS) GOTO 105 
      IF(BUF(4) .NE. 2HM ) GOTO 105 
      SCKSM=BUF(6)
      GOTO 106
C 
 105  IF(BUF(2) .NE. 2H$S ) GOTO 100
      IF(BUF(3) .NE. 2HCC ) GOTO 100
      IF(BUF(4) .NE. 2HK  ) GOTO 100
      SSCCK=BUF(6)
 106  CONTINUE
C 
C     NOW CLOSE THE SNAP FILE, OPEN THE SYSTEM FILE, AND
C       FIND THE DVT FOR THIS LU
C 
      CALL CLOSE (DCB)
      CALL OPEN (DCB,IER,SYNAM,4B,SYNAM(5),SYNAM(6))
      IF (IER .GE. 0) GO TO 125 
  120 WRITE(LOG,70)IER,(SYNAM(I),I=1,3) 
      GO TO 900 
C 
  125 CALL DSKAD(REC,OFSET,SCKSM) 
      IF(READF(DCB,IER,BUF,128,LEN,REC).LT.0) GOTO 120
      IF(BUF(OFSET).NE.CKSM) GOTO 140 
C 
  130 CALL DSKAD(REC,OFSET,SSCCK) 
      IF(READF(DCB,IER,BUF,128,LEN,REC).LT.0) GOTO 120
      IF(BUF(OFSET).EQ.SCCK) GOTO 150 
C 
  140 WRITE(LOG,71) 
   71 FORMAT("  SYSTEM NOT FOR THIS SNAPSHOT"/) 
      GOTO 900
C 
  150 CALL DSKAD(REC,OFSET,SLUTN) 
      IF(READF(DCB,IER,BUF,128,LEN,REC).LT.0) GOTO 120
      IF(LU .GT. BUF(OFSET)) GOTO 189 
C 
      CALL DSKAD(REC,OFSET,SLUT)
      CALL READF (DCB,IER,BUF,128,LEN,REC)
      IF (IER .NE. 0) GO TO 120 
      DVTA=BUF(OFSET)+LU
      REC=DVTA/128+1
      OFSET=MOD(DVTA,128) 
C 
      CALL READF (DCB,IER,BUF,128,LEN,REC)
      IF (IER .NE. 0) GO TO 120 
      CALL FDVT (BUF,OFSET,REC1,OFST1,6)
      CALL FDVT (BUF,OFSET,REC2,OFST2,23) 
      CALL READF (DCB,IER,BUF,128,LEN,REC1) 
      IF (IER .NE. 0) GO TO 120 
      TYPE=IAND(BUF(OFST1),37400B)/256
      IF ((TYPE .GE. 30B) .AND. (TYPE .LE. 37B)) GO TO 200
  189 WRITE(LOG,190)LU
  190 FORMAT(" LU",I4," IS NOT A DISC LU.") 
      GO TO 900 
C 
  200 N=1 
  300 CALL READF (DCB,IER,BUF,128,LEN,REC2) 
      IF (IER .NE. 0) GO TO 120 
      DO 320 I=N,8
      IF (OFST2 .GT. 128) GO TO 330 
      DVP(I)=BUF(OFST2) 
      OFST2=OFST2+1 
  320 CONTINUE
      GO TO 350 
C 
C     GO HERE IF SOME OF THE PARMS ARE IN NEXT RECORD 
C 
  330 N=I 
      REC2=REC2+1 
      OFST2=1 
      GO TO 300 
C 
C     GOT'EM ALL. NOW CLOSE SYSTEM FILE.
C 
  350 CALL CLOSE (DCB)
C 
C 
C     NOW OPEN BOOT FILE. 
C 
  399 CALL OPEN (DCB,IER,BOTNAM,0,BOTNAM(5),BOTNAM(6))
      IF (IER .GE. 0) GO TO 500 
  400 WRITE(LOG,80)IER,(BOTNAM(I),I=1,3)
      GO TO 900 
   80 FORMAT(" FMGR ",I6," ON BOOT SOURCE ",3A2)
C 
C 
  500 IF (IER .EQ. 1) GO TO 515 
      WRITE(LOG,510)
  510 FORMAT(" BOOT SOURCE FILE NOT TYPE 1. ")
      GO TO 900 
  515 IF(LOCF(DCB,IER,REC,IRB,IOFF,SIZE).LT.0) GOTO 400 
      IF (SIZE.GE.512) GOTO 518 
  517 WRITE(LOG,85) 
   85 FORMAT(" ILLEGAL SOURCE FILE ") 
      GOTO 900
C 
  518 IF(READF(DCB,IER,OBUF,128,IL,256).LT.0) GOTO 521
      LGLFL=OBUF(128).EQ.46062B 
      IF(READF(DCB,IER,OBUF,128,IL,1).LT.0)GOTO 521 
      IF(OBUF(3).NE.124003B) GOTO 517 
C 
      TIME1=.TRUE.
      DO 519 I=101B,111B,1
  519 IF(OBUF(I).NE.0) TIME1=.FALSE.
      IF((.NOT.(LGLFL)).AND.(.NOT.(TIME1))) GOTO 517
C 
C NOW OPEN DESTINATION FILE. IF NOT THERE, CREATE IT
C 
  520 IF(OPEN(WRDCB,IER,DEST,0,DEST(5),DEST(6)).EQ.-6) GOTO 526 
      IF (IER.GE.0) GOTO 523
  521 WRITE(LOG,90)IER,(DEST(I),I=1,3)
   90 FORMAT(" FMGR ",I6," ON BOOT DESTINATION FILE ",3A2)
      GOTO 900
C 
  523 IF(IER.EQ.1) GOTO 524 
      WRITE(LOG,92) 
      GOTO 900
   92 FORMAT(" DESTINATION FILE NOT TYPE 1 ") 
C 
  524 IF(LOCF(WRDCB,IER,REC,IRB,IOFF,SIZE).LT.0)GOTO 521
      IF(SIZE.GE.512)GOTO 530 
      WRITE(LOG,93) 
   93 FORMAT(" DESTINATION FILE NOT => 256 BLKS ")
      GOTO 900
C 
  526 IF(CREAT(WRDCB,IER,DEST,256,1,DEST(5),DEST(6)).LT.0)
     $GOTO 521
C 
C WRITE THE DRIVER PARAMETERS INTO THE FILE 
  530 OBUF(1)=0 
      OBUF(2)=0 
      OBUF(101B)=DVP(1) 
      OBUF(102B)=DVP(2) 
      OBUF(103B)=DVP(3) 
      OBUF(104B)=DVP(4) 
      OBUF(105B)=DVP(5) 
      OBUF(106B)=DVP(6) 
      OBUF(107B)=DVP(7) 
      OBUF(110B)=DVP(8) 
      OBUF(111B)=TYPE 
C 
  550 CALL WRITF (WRDCB,IER,OBUF,128,1) 
      IF (IER .NE. 0) GO TO 521 
C IS IT THE SAME FILE. IF SO, DON'T DO ANY MORE, BUT FIRST
C CHECK THAT THIS IS THE FIRST TIME 
      IF(SAME) I=256
      IF(SAME) GOTO 559 
C 
C CONTINUE FOR THE REST OF THE FILE 
C 
      DO 570 I=2,256,1
  559 IF(READF(DCB,IER,OBUF,128,IL,I).LT.0)GOTO 400 
      UPDATE=TIME1.AND.(I.EQ.256) 
      IF(UPDATE)OBUF(128)=46062B
      IF(UPDATE) CALL WRITF(DCB,IER,OBUF,128,I) 
      IF(UPDATE.AND.(IER.LT.0)) GOTO 400
      IF(WRITF(WRDCB,IER,OBUF,128,I).LT.0)GOTO 521
  570 CONTINUE
C 
      WRITE(LOG,590)(PROGNM(J),J=1,3),(DEST(I),I=1,3) 
  590 FORMAT(" ",3A2," END. ",3A2," IS YOUR BOOT EXTENSION FILE."/
     $" WARNING: BOOT FILE MUST BE AT CYL 0, SECTOR 0.")
C 
  900 CALL CLOSE (DCB)
      CALL CLOSE (WRDCB)
C 
      END 
C 
      SUBROUTINE FDVT (BUF,OFSET,REC,OFST1,NTRY)
      INTEGER BUF(128),REC,OFSET,OFST1,DVTA 
C 
      DVTA=BUF(OFSET) 
      REC=DVTA/128+1
      OFST1=MOD(DVTA,128)+NTRY
   10 IF (OFST1 .LE. 128) RETURN
      REC=REC+1 
      OFST1=OFST1-128 
      GO TO 10
      END 
      SUBROUTINE DSKAD(BLK,OFSET,PARM)
      INTEGER BLK,OFSET,PARM
      BLK=(PARM/128)+1
      OFSET=MOD(PARM,128)+1 
      RETURN  
      END 
      END$
                                                                          