*         CTEXT  CTP$DFT_FIND_CONTROL_WORD
 FCW      SPACE  4,10
**        FCW - FIND CONTROL WORD.
*
*         IF AN ENTRY IS OVERWRITTEN BY A HIGHER PRIORITY ERROR
*         THAT ENTRY-S UNLOGGED ERROR COUNTER WILL BE UPDATED.
*
*         IF ENOUGH (>4) BUFFERS ARE DEFINED THIS ROUTINE WILL SET ASIDE
*         THE FIRST TWO BUFFERS FOR TOP OF HOUR STATISTICS PROCESSING.
*         THIS IS SO THAT THESE ENTRIES DONT FILL THE BUFFER AND DESTROY
*         ACCUMULATED ERROR HISTORY.
*
*         ENTRY  (RTP1) = 0 IF TO USE BUFFER CONTROL WORDS
*                       = 1 IF TO USE NON REGISTER STATUS BUFFER

*         EXIT   (LOGB) <> 0 OFFSET OF OBTAINED ENTRY.
*                (LOGB) = 0 ENTRY NOT OBTAINABLE.
*
*         USES   T1, T2, T3, T4, T5, T6, T7, CM - CM+3, W0 - W0+3, *LOGB*.
*
*         CALLS  CHF, CLR, IDA.


 FCW      SUBR               ENTRY/EXIT
          LDM    RTP1
          ZJN    FCW0        IF USING BUFFER CONTROL WORDS
          LDN    3
          STD    T4          START WITH THIRD ENTRY IN NRSB
          LDML   NNRB
          SBN    4           MINUS SCRATCH AND RESERVED ENTRIES
          STDL   T1
          LDDL   BC+BCDA
          SHN    -BC.ANP
          LMN    1           1XXX CODE
          NJP    FCW2.5      IF NON TOP OF HOUR
          LDN    1
          STM    LOGB
          UJP    FCWX

 FCW0     LDN    1
          STD    T4          INITIALLY GO TO BUFFER ONE
          LDN    VER5
          RJM    VCK         CHECK VERSION AGAINST CENTRAL MEMORY LEVEL
          PJN    FCW2        IF VERSION 5 OR LATER USE ALL CONTROL WORDS
          LDM    NBUF        NUMBER OF BUFFERS DEFINED
          SBN    4
          MJN    FCW2        IF LESS THAN 4 DONT LOCK DOWN FIRST TWO
          STD    T1
          LDN    3
          STD    T4          SET FIRST BUFFER TO EXAMINE TO NUMBER THREE
          LDDL   BC+BCDA     DFT ANALYSIS CODE
          LMC    TOHE        ELEMENT COUNTERS ANALYSIS
          NJN    FCW1        IF NOT COUNTERS STATISTIC INFO
          LDN    1           ENTRY ONE IS FOR ELEMENT COUNTERS
          STM    LOGB
          UJP    FCWX        RETURN

 FCW1     LDDL   BC+BCDA     GET DFT ANALYSIS CODE
          LMC    TOHS        SECDED ID STATISTIC CODE
          NJN    FCW2.5      IF NOT SECDED STATISTIC INFO
          LDN    2           ENTRY TWO IS FOR SECDED INFO
          STM    LOGB
          UJP    FCWX        RETURN

 FCW2     LDM    NBUF
          SBN    2
          STD    T1
 FCW2.5   LDN    EPSW+1      SET MINIMUM TO ONE GREATER THAN POSSIBLE MAXIMUM
          STD    T3          SET MINIMUM ERROR LEVEL TO MAXIMUM VALUE
          LDD    T4          INITIAL BUFFER INDEX TO SEARCH FROM
          STD    T2          FIRST USABLE BUFFER CONTROL WORD INDEX
          LDN    HDRP
          RJM    IDA
          CRDL   CM          GET DFT HEADER
          LDD    CM+DHSEQ
          LPC    0#FF        GET JUST THE SEQUENCE NUMBER
          STD    T4          HEADER SEQUENCE NUMBER
 FCW3     LDM    CELCW       CHECK CONSOLE LOGGING MRB
          LPN    77
          LMD    T2
          ZJP    FCW9        IF THIS MRB BEING LOGGED TO CONSOLE
          LDD    T2          READ BUFFER CONTROL WORD (T2)
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          CRDL   CM
          RJM    CHF         CHECK IF NOT CURRENTLY USED ENTRY
          NJN    FCW4        IF CURRENTLY BEING USED
          LDN    0
          STD    T5          TEMPORARY ERROR LEVEL = NONE
          UJN    FCW5        CONTINUE

 FCW4     LDDL   CM+BCDA
          SHN    -BC.ANP
          STD    T5          TEMPORARY ERROR LEVEL
 FCW5     SBD    T3          MINIMUM ERROR LEVEL
          ZJN    FCW6        IF TEMPORARY = MINIMUM
          PJN    FCW9        IF TEMPORARY > MINIMUM ERROR LEVEL
 FCW6     LDDL   CM+BCSEQ
          SHN    -10
          STD    T6          TEMPORARY SEQUENCE NUMBER
          SBD    T4          HEADER SEQUENCE NUMBER
          PJN    FCW7        IF TEMPORARY > HEADER

*         ADD 256 (OVERFLOW QUANTITY) TO ALL ENTRIES BELOW THE VALUE
*         IN THE HEADER.  THIS WILL NORMALIZE VALUES SO CORRECT SEQUENCE
*         CAN BE MAINTAINED.

          LDD    T6
          ADC    0#100
          STD    T6
 FCW7     LDD    T5          TEMPORARY ERROR LEVEL
          SBD    T3          MININUM ERROR LEVEL
          PJN    FCW8        IF MININUM > TEMPORARY
          ZJN    FCW8        IF MININUM = TEMPORARY

*         IF TEMPORARY IS LESS THAN MININUM ERROR LEVEL THEN MININUM
*         ERROR LEVEL WILL BE SET LOWER.  THIS DRIVES TOWARDS THE LEAST
*         IMPORTANT ERROR IN THE BUFFER.

          LDD    T5
          STD    T3          UPDATE MININUM ERROR LEVEL
          LDD    T6
          ADN    1
          STD    T7          LOW SEQUENCE + 1
 FCW8     LDD    T6          TEMPORARY SEQUENCE
          SBD    T7          LOW SEQUENCE
          MJN    FCW10       IF LOW SEQUENCE > TEMPORARY SEQUENCE
 FCW9     AOD    T2          INCREMENT BUFFER INDEX
          SOD    T1          NBUF
          PJP    FCW3        IF MORE TO EXAMINE
          UJN    FCW11       CONTINUE

*         SINCE TEMPORARY SEQUENCE IS LESS THAN LOW SEQUENCE THIS
*         TEMPORARY ENTRY IS THE CURRENT BEST CANDIDATE.  UPDATE LOW
*         SEQUENCE WITH THIS VALUE FOR FURTHER COMPARISON PURPOSES.

 FCW10    LDD    T2
          STM    LOGB        THE CURRENT BEST CANDIDATE IS THIS INDEX
          LDD    T6
          STD    T7          LOW SEQUENCE
          UJN    FCW9        CONTINUE

*         AT THIS POINT WE HAVE OUR BEST CANDIDATE AT *LOGB*.  NEXT,
*         READ IN BUFFER CONTROL WORD (LOGB).  IF IT IS AVAILABLE,
*         ASSIGN IT AND LEAVE.  IF IT IS NOT AVAILABLE, DETERMINE IF
*         IT CAN BE OVERWRITTEN.  IF SO, UPDATE THE UNLOGGED COUNTER
*         FOR THE ENTRY BEING OVERWRITTEN AND USE THE ENTRY FOR THIS
*         HIGHER PRIORITY ENTRY.  IF IT CANNOT BE OVERWRITTEN, SET
*         *LOGB* TO ZERO TO INDICATE THAT THIS ERROR CANNOT BE LOGGED.

 FCW11    LDM    LOGB
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          CRDL   CM          GET CONTROL WORD TO BE REPLACED
          RJM    CHF         CHECK IF WAS A LOGB ENTRY
          ZJP    FCW14       IF IT WAS
          LDDL   BC+BCDA
          SHN    -BC.ANP
          SBD    T3
          MJP    FCW15       IF NOT SUFFICIENT PRIORITY TO OVERWRITE
          ZJP    FCW15
          LDN    VER4
          RJM    VCK         CHECK VERSION
          PJN    FCW12
          LDDL   CM+BCEI
          SHN    -10         GET SAVED ELEMENT INDEX TO COUNTERS BUFFER
          ADM    NUMHW
          ADM    NBUF
          STD    T3
          RJM    IDA
          CRDL   CM          GET MAINFRAME ELEMENT COUNTER ENTRY
          AOD    CM+MEUL
          LDD    T3
          RJM    IDA
          CWDL   CM          UPDATE UNLOG FIELD OF OVERWRITTEN ENTRY
          UJN    FCW14

 FCW12    LDDL   CM+BCDA
          SHN    -10
          LPN    0#F
          STD    T3
          LDM    ETYP,T3
          STD    T1
          LDM    OTYP,T3
          STD    T2
          ZJN    FCW13
          LDI    T2
          SHN    4
          LMD    T1
          STD    T1
 FCW13    RJM    GCE         GET COUNTER ENTRY
          AODL   CM+1
          LDD    W0
          LRD    W1
          ADC    RR
          CWDL   CM
 FCW14    LDN    W0
          RJM    CLR         CLEAR AREA FOR INTERLOCK WORD
          LDBC   BC.FI
          STDL   W0+BCFLG
          LDM    LOGB
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          RDSL   W0          SET INTERLOCK ON BUFFER CONTROL WORD
          LDDL   W0+BCFLG
          SHN    21-BC.FI
          MJN    FCW14       IF NEED TO TRY AGAIN
          LDN    1
          STM    DSIF        SET DFT SET I/L FLAG
          LJM    FCWX        RETURN

 FCW15    LDN    0
          STM    LOGB        COULDNT GET AN ENTRY
          LJM    FCWX        RETURN
 CHF      SPACE  4,10
**        CHF - CHECK FLAGS IN BUFFER CONTROL WORD.
*
*         ENTRY  (CM - CM+3) = BUFFER CONTROL WORD.
*
*         EXIT (A) > 0 IF FLAG(S) IS/ARE SET.
*              (A) = 0 IF NO FLAG IS SET.


 CHF      SUBR               ENTRY/EXIT
          LDDL   CM+BCFLG
          LPBC   (BC.CL,BC.FL,BC.FV7,BC.FV8)
          UJN    CHFX        RETURN

*         END    CTP$DFT_FIND_CONTROL_WORD
