*DECK,HPA23 
      OVCAP.
      SUBROUTINE HPA23
* 
**
*         HPA23 IS LOADED ONLY IF THE MMF PARAMETER IS INVOKED ON THE 
*         HPA CONTROL STATEMENT.  THIS OVERLAY WILL READ THE HARDWARE 
*         CONFIGURATION INFORMATION FROM THE STATISTICS RECORD OF THE 
*         OLDHF FILE AND PACK IT INTO THE ARRAY CALLED MCONFIG. 
* 
*       ENTRY    CALLED FROM HPA2 WHEN THE MMF FLAG IS SET (FLAGS(25))
* 
*       EXIT     THE VALUE OF THE MMF PARAMETER WILL DETERMINE
*                THE SPECIFIC INFORMATION TO BE PACKED INTO THE 
*                MCONFIG ARRAY. 
* 
*                THE FOLLOWING TABLE INDICATES THE CONTENT AND
*                FORMAT OF THE DATA PACKED INTO THE MCONFIG 
*                ARRAY FOR EACH OF THE POSSIBLE LEGAL VALUES
*                OF THE MMF PARAMETER.
* 
*   MMF 
*  VALUE                     FIELDS IN MCONFIG ARRAY
*         59    53          41       32    26 23 20    14 11         0
*         +-----+-----------+--------+-----+--+--+-----+--+----------+
*    1    >MFID<>    DT    <>  EST  <                     >   HUID   <
*    2    >MFID<>    DT    <         > CH <  >EQ<> UN <   >   HUID   <
*   ALL   >MFID<>    DT    <>  EST  <> CH <  >EQ<> UN <   >   HUID   <
*         +-----+-----------+--------+-----+--+--+-----+--+----------+
* 
*CALL HPACOM1 
*CALL HPACOM3 
      DIMENSION MCONFIG(400)
  
      DIMENSION TEMP(64)
      EQUIVALENCE (MCONFIG(1), STOR(1,1)) 
      EQUIVALENCE (TEMP(1), IFLD(1))
  
      DATA PTR /9/
      DATA M /0/
      DATA FLG /0/
  
* 
*         TEST FOR X=T PARAMETER
* 
      IF (FROG(6) .NE. L"T") GO TO 10 
      CP = SECOND ()
      PRINT 9,CP
    9 FORMAT ( ' ENTER HPA23, SECOND = ',F10.3) 
   10 CONTINUE
  
*     TEMPORARILY TURN ON OLDHF FOR MMF IF TURNED OFF BY HR PARAMETER 
      IF (FROP(1,1,6) .NE. 3HOFF) FILEP(OLD) = 2HON 
      CALL RMREWND (OLD)
  
      DO 50 I = 1,100 
   50 MCONFIG(I) = 0
  
  100 DO 110 I = 1,64 
  110 TEMP(I) = 0 
      CALL RMREAD (OLD,TEMP,LENGTH) 
      IF (FEOF(OLD) .EQ. 3HYES) GO TO 900 
      IF (TEMP(1) .LT. 50) GO TO 900
      IF (TEMP(1) .NE. 51) GO TO 100
      FLG = FLG + 1 
  
  200 MCH = MDT = MEQ = MEST = MFID = MUN = 0 
      HCHECK = HDIF = HUID = TCH = TEST = 0 
      IF (TEMP(PTR+6) .EQ. 2) GO TO 540 
      MFID = SHIFT(TEMP(PTR+4),30) .AND. MASK(6)
      MDT = TEMP(PTR+4) .AND. O"0000 0077 7700 0000 0000" 
      MDT = SHIFT(MDT,12) 
      DO 220 I = 1,3
      TEST = SHIFT(TEMP(PTR+4),6) .AND. O"77" 
      IF (TEST .EQ. O"55") GO TO 220
      IF (TEST .LT. O"33") GO TO 500
      TEST = TEST - O"33" 
      IF (TEST .GT. 7) GO TO 500
      MEST = SHIFT(MEST,3) .OR. TEST
  220 TEMP(PTR+4) = SHIFT(TEMP(PTR+4),6)
  
      MEST = SHIFT(MEST,33) 
      I = 1 
      DO 320 K = 1,10 
      TCH = SHIFT(TEMP(PTR+5),6) .AND. O"77"
      IF (TCH .EQ. O"55") GO TO 320 
      IF (TCH  .NE.  O"46") GO TO 300 
      I = I + 1 
      IF (I .LE. 3) GO TO 320 
      GO TO 330 
  300 IF (TCH .LT. O"33") GO TO 500 
      TCH = TCH - O"33" 
      IF (TCH .GT. 7) GO TO 500 
      IF (I .EQ. 1) MCH = SHIFT(MCH,3) .OR. TCH 
      IF (I .EQ. 2) MEQ = SHIFT(MEQ,3) .OR. TCH 
      IF (I .EQ. 3) MUN = SHIFT(MUN,3) .OR. TCH 
  320 TEMP(PTR+5) = SHIFT(TEMP(PTR+5),6)
  
  330 MCH = SHIFT((MCH .AND. O"77"),27) 
      MEQ = SHIFT((MEQ .AND. O"07"),21) 
      MUN = SHIFT((MUN .AND. O"77"),15) 
      N=0 
      DO 420 L =1,10
      HCHECK = TEMP(PTR+2) .AND. O"77"
      IF (HCHECK .EQ. O"55") GO TO 410
      IF (HCHECK .LT. O"33") GO TO 420
      HCHECK = HCHECK - O"33" 
      IF (HCHECK .GT. 9) GO TO 420
      HCHECK = HCHECK*10**N 
      N = N + 1 
      HUID = HUID + HCHECK
  410 TEMP(PTR+2) = SHIFT(TEMP(PTR+2),-6) 
  420 CONTINUE
  
      IF (HUID .LT. 4096) GO TO 500 
      HDIF = HUID - 4096
  440 IF (HDIF .LT. 4096) GO TO 450 
      HDIF = HDIF - 4096
      GO TO 440 
  450 HUID = HDIF .OR. O"4000"
  
  500 M = M+1 
      MCONFIG(M) = MFID .OR. MDT .OR. HUID
      IF (FLAGS(25) .EQ. 2) GO TO 520 
      MCONFIG(M) = MCONFIG(M) .OR. MEST 
  520 IF (FLAGS(25) .EQ. 1) GO TO 540 
      MCONFIG(M) = MCONFIG(M) .OR. MCH .OR. MEQ .OR. MUN
  540 PTR = PTR + 8 
      IF (PTR .LT. 64) GO TO 200
      PTR = 9 
      GO TO 100 
  
  900 CALL RMREWND (OLD)
*     TURN OFF OLDHF IF TURNED ON TEMPORARILY FOR MMF, DUE TO HR PARAM
      IF (FROP(1,1,6) .NE. 3HOFF) FILEP(OLD) = 3HOFF
  
      IF (FLG .EQ. 0) PRINT 1000
 1000 FORMAT (/,' --- HARDWARE CONFIGURATION NOT FOUND --- HPA23',/)
  
      END 
