FTN4,L
      PROGRAM TXPF0(3,89),91711-16006  REV 1926  790828 
      IMPLICIT INTEGER(A-Z) 
      COMMON/EBASE/EBASE(5,1) 
      COMMON/FBAS1/FBAS1(5,1) 
      COMMON/FBAS2/FBAS2(5,1) 
      COMMON/SIS1 /SIS1 (5,1) 
      COMMON/SIS2 /SIS2 (5,1) 
      COMMON/FFP  /FFP  (5,1) 
      COMMON/FFPE1/FFPE1(5,1) 
      COMMON/FFPE2/FFPE2(5,1) 
      COMMON/FFPF1/FFPF1(5,1) 
      COMMON/FFPF2/FFPF2(5,1) 
      COMMON/DBI  /DBI  (5,1) 
      COMMON/VIS  /VIS  (5,1) 
      COMMON/EMA  /EMA  (5,1) 
C 
      DIMENSION REV(7)
      REAL FIRM(7)
C 
      EQUIVALENCE (REV(1),HFPREV),(REV(2),FFPREV),(REV(3),SISREV),
     +            (REV(4),VISREV),(REV(5),DBIREV),(REV(6),EMAREV),
     +            (REV(7),DISREV) 
C 
      DATA FIRM / 4HHFP ,4HFFP ,4HSIS ,4HVIS ,4HDBI ,4HEMA ,4HDIS / 
C*********************************************************************
C 
C     RETRIEVE OUTPUT LU
C 
      CALL RMPAR(REV) 
      LU = REV(1) 
      IF (LU.LE.0) LU = LOGLU(LU) 
C 
C*********************************************************************
C 
C     FIND OUT IF THE COMPUTER IS AN M OR AN E/F MACHINE
C 
      CALL MORFE(ICODE) 
      IF (ICODE.EQ.1) GOTO 10 
      WRITE (LU,800)
      STOP 10 
C 
C*********************************************************************
C 
C     GET INSTALLED FIRMWARE REVISION CODES 
C 
  10  DBIREV = 0
      CALL HFPVF(HFPREV)
      CALL FFPVF(FFPREV)
      CALL SISVF(SISREV)
      CALL VISVF(VISREV)
      CALL EMAVF(EMAREV)
      CALL DISVF(DISREV)
      IF(HFPREV.GT.1.AND.FFPREV.GT.1)DBIREV=FFPREV
C*********************************************************************
C*********************************************************************
C 
C     CHECK FOR FIRMWARE VERIFICATION ERRORS. (ERROR IF REV(I) < 0) 
C 
      WRITE(LU,803) 
      IERR = 0
      DO 20 I=1,7 
         IF (REV(I).GE.0) GOTO 15 
         WRITE(LU,900) FIRM(I)
         IERR = 1 
  15     IF (REV(I).EQ.0) GOTO 16 
         WRITE(LU,801) FIRM(I),REV(I) 
         GOTO 20
  16     WRITE(LU,802) FIRM(I)
  20  CONTINUE
         WRITE(LU,803)
C 
      IF (IERR.NE.0) STOP 11
C 
C*********************************************************************
C 
C     CHECK FIRMWARE-FIRMWARE COMPATIBILITY 
C 
      IF (HFPREV.LE.1.OR.FFPREV.GT.1) GOTO 30 
      WRITE(LU,803) 
      WRITE(LU,901) FIRM(1),FIRM(2) 
      IERR = 1
C 
  30  IF (SISREV.EQ.0.OR.HFPREV.NE.0) GOTO 40 
      WRITE(LU,803) 
      WRITE(LU,901) FIRM(3),FIRM(1) 
      IERR = 1
C 
  40  IF (VISREV.EQ.0.OR.HFPREV.NE.0) GOTO 50 
      WRITE(LU,803) 
      WRITE(LU,901) FIRM(4),FIRM(1) 
      IERR = 1
C 
  50  IF (IERR.NE.0) STOP 12
C 
C*********************************************************************
C 
C     CHECK E-SERIES BASE SET 
C 
      CALL PRSNT(EBASE,IERR,LU) 
C 
C     IF E-SERIES, TEST FOR ABSENCE OF HFP ENTRY POINTS 
C 
      IF (HFPREV.EQ.0) CALL ABSNT(FBAS2,IERR,LU)
C 
C     IF F-SERIES, TEST FOR PRESENCE OF HFP ENTRY POINTS
C 
      IF (HFPREV.GT.0) CALL PRSNT(FBAS1,IERR,LU)
C 
C*********************************************************************
C*********************************************************************
C 
C     IF NO FFP, TEST FOR ABSENCE OF ALL FFP ENTRY POINTS 
C 
      IF (FFPREV.GT.0) GOTO 60
      CALL ABSNT(FFP,IERR,LU) 
      CALL ABSNT(FFPE1,IERR,LU) 
      CALL ABSNT(FFPE2,IERR,LU) 
      CALL ABSNT(FFPF1,IERR,LU) 
      CALL ABSNT(FFPF2,IERR,LU) 
      GOTO 80 
C 
C     FFP PRESENT, SO TEST COMMON ROUTINES
C 
   60 CALL PRSNT(FFP,IERR,LU) 
C 
C     IF E-SERIES, TEST E-SERIES FFP
C 
      IF (HFPREV.GT.0) GOTO 70
      CALL PRSNT(FFPE1,IERR,LU) 
      CALL PRSNT(FFPE2,IERR,LU) 
      CALL ABSNT(FFPF1,IERR,LU) 
      CALL ABSNT(FFPF2,IERR,LU) 
      GOTO 80 
C 
C     F-SERIES, SO TEST F-SERIES FFP
C 
   70 CALL PRSNT(FFPF1,IERR,LU) 
      CALL ABSNT(FFPE2,IERR,LU) 
C     IF OLD FFP, TEST FOR ABSENCE OF NEW ENTRY POINTS
      IF (FFPREV.EQ.1) CALL ABSNT(FFPF2,IERR,LU)
C     IF NEW FFP, TEST FOR PRESENCE OF NEW ENTRY POINTS 
      IF (FFPREV.GT.1) CALL PRSNT(FFPF2,IERR,LU)
C 
C*********************************************************************
C 
C     IF NO SIS, TEST FOR ABSENCE OF SIS ENTRY POINTS 
C 
   80 IF (SISREV.GT.0) GOTO 90
      CALL ABSNT(SIS1,IERR,LU)
      CALL ABSNT(SIS2,IERR,LU)
      GOTO 100
C 
C     SIS PRESENT, TEST COMMON ROUTINES 
C 
   90 CALL PRSNT(SIS1,IERR,LU)
C 
C     IF OLD SIS, TEST FOR ABSENCE OF NEW ENTRY POINTS
      IF (SISREV.EQ.1) CALL ABSNT(SIS2,IERR,LU) 
C 
C     IF NEW SIS, TEST FOR PRESENCE OF NEW ENTRY POINTS 
C 
      IF (SISREV.GT.1) CALL PRSNT(SIS2,IERR,LU) 
C 
C*********************************************************************
C*********************************************************************
C 
C     IF NO VIS, TEST FOR ABSENCE OF VIS ENTRY POINTS 
C 
  100 IF (VISREV.EQ.0) CALL ABSNT(VIS,IERR,LU)
C 
C     IF VIS PRESENT, TEST FOR PRESENCE OF VIS ENTRY POINTS 
C 
      IF (VISREV.GT.0) CALL PRSNT(VIS,IERR,LU)
C 
C*********************************************************************
C 
C     IF NO DBI, TEST FOR ABSENCE OF DBI ENTRY POINTS 
C 
      IF (DBIREV.EQ.0) CALL ABSNT(DBI,IERR,LU)
C 
C     IF DBI, TEST FOR PRESENCE OF DBI ENTRY POINTS 
C 
      IF (DBIREV.GT.0) CALL PRSNT(DBI,IERR,LU)
C 
C*********************************************************************
C 
C     IF NO EMA, TEST FOR ABSENCE OF EMA ENTRY POINTS 
C 
      IF (EMAREV.EQ.0) CALL ABSNT(EMA,IERR,LU)
C 
C     IF EMA, TEST FOR PRESENCE OF EMA ENTRY POINTS 
C 
      IF (EMAREV.GT.0) CALL PRSNT(EMA,IERR,LU)
C 
C*********************************************************************
C 
C     PRINT COMPLETION MESSAGE
C 
      IF (IERR.NE.0) STOP 77
      WRITE(LU,902) 
C 
C*********************************************************************
C 
C     MESSAGE FORMATS 
C 
 800  FORMAT("  TXPF0 - PROGRAM CAN ONLY RUN IN AN E OR F MACHINE") 
 801  FORMAT("  TXPF0 - MODULE ",A4," WITH REV NUMBER ",I6, 
     +" INSTALLED") 
 802  FORMAT("  TXPF0 - MODULE ",A4," NOT INSTALLED") 
 803  FORMAT(" ") 
 900  FORMAT("  TXPF0 - VERIFICATION FAILURE IN FIRMWARE",
     +       " MODULE ",A4) 
 901  FORMAT("  TXPF0 - ERROR. MODULE ",A4,"INCOMPATIBLE WITH", 
     +       " MODULE ",A4) 
 902  FORMAT("  TXPF0 - FIRMWARE VERIFICATION SUCCESSFUL")
C 
C 
C*********************************************************************
      END 
C*********************************************************************
C 
C 
      SUBROUTINE PRSNT(TABLE,IERR,LU),91711-16006 REV 1926  790606
      INTEGER TABLE(5,1)
C 
C 
      INSTR = 1 
C 
   10 IF (TABLE(4,INSTR).EQ.TABLE(5,INSTR)) GOTO 40 
C 
      IF (TABLE(4,INSTR).EQ.0) GOTO 20
      JSB = (TABLE(4,INSTR).AND.074000B) - 014000B
      IF (JSB.NE.0) GOTO 30 
C 
   20 WRITE (LU,900)  (TABLE(I,INSTR),I=1,3)
      IERR = 1
      GOTO 40 
C 
   30 WRITE (LU,901)  (TABLE(I,INSTR),I=1,5)
      IERR = 1
C 
   40 INSTR = INSTR + 1 
      IF (TABLE(1,INSTR).NE.0) GOTO 10
      RETURN
C 
C 
  900 FORMAT ("  TXPF0 - WARNING - ENTRY POINT ",A2,A2,A2,
     +        " INSTALLED BUT NOT DECLARED")
C 
  901 FORMAT ("  TXPF0 -  ERROR  - ENTRY POINT ",A2,A2,A2,
     +        " DECLARED AS ",O6,", SHOULD BE ",O6) 
C 
C*********************************************************************
      END 
C*********************************************************************
C 
C 
      SUBROUTINE ABSNT(TABLE,IERR,LU),91711-16006 REV 1926  790606
      INTEGER TABLE(5,1)
C 
C 
      INSTR = 1 
C 
   10 IF ((TABLE(4,INSTR).AND.074000B).EQ.014000B) GOTO 20
      IF (TABLE(4,INSTR).EQ.0) GOTO 20
C 
      WRITE (LU,900)  (TABLE(I,INSTR),I=1,4)
      IERR = 1
C 
   20 INSTR = INSTR + 1 
      IF (TABLE(1,INSTR).NE.0) GOTO 10
      RETURN
C 
C 
  900 FORMAT ("  TXPF0 - ERROR - ENTRY POINT ",A2,A2,A2,
     +        " DECLARED (",O6,") BUT NOT INSTALLED") 
C 
C*********************************************************************
      END 
                                                        