*         CTEXT CTP$DFT_LOG_ERROR
*
*         THIS DECK HOLDS ROUTINES TO LOG ERRORS TO THE
*         APPROPRIATE BUFFER CONTROL WORDS AND/OR TO THE
*         SYSTEM CONSOLE
 LOG      SPACE  4,10
**        LOG - LOG ERROR IN BUFFER CONTROL WORDS.
*
*         CALLS  ABL, CFM, CLR, FCW, IBW, IDA, INC, ISS, MMB, SET, SPB,
*                STF, URC, ZSS, *GSC*, *DSI*, *DSM*, *DSP*.


          ROUTINE LOG

*         IF THE ANALYSIS CODE IS 4XX, 5XX OR 6XX AND THE VERSION
*         OF THE *DFT* INTERFACE IN EFFECT IS LESS THAN 5, THEN
*         THE ERROR IS NOT TO BE LOGGED.

          LDN    VER5
          RJM    VCK         CHECK VERSION
          PJN    LOG0.4      IF VERSION 5 OR GREATER
          LDDL   BC+BCDA     CHECK ANALYSIS CODE
          SHN    -10
          LPN    0#F
          LMN    4
 LOG0.3   ZJP    LOGX        IF ANALYSIS CODE IS NOT TO BE LOGGED
          LMN    5&4
          ZJN    LOG0.3      IF ANALYSIS CODE IS NOT TO BE LOGGED
          LMN    6&5
          ZJN    LOG0.3      IF ANALYSIS CODE IS NOT TO BE LOGGED
 LOG0.4   LDN    0
          STM    LOGB
          LRD    DP+1
          RJM    SPB         SET PP BOUNDS
          LDDL   BC+BCDA     DFT ANALYSIS
          SHN    -BC.ANP
          STD    T1
          SBN    EPTH+1
          MJN    LOG0        IF ERROR IS .LE. TOP OF HOUR DONT INCREMENT
          LDD    T1
          SBN    EPEN
          PJN    LOG0.5      IF ERROR IS ENVIRONMENT OR SHORT DONT INC COUNTERS
          RJM    INC         INCREMENT COUNTERS
          NJN    LOG0        IF THRESHOLD NOT EXCEEDED
          LDN    1
          STM    NERR        RESET NO ERROR FLAG FOR RELEASE OF THE LAST LOGGED ENTRY
          LJM    LOG16       IF THRESHOLD EXCEEDED DONT LOG

 LOG0     LDN    VER5
          RJM    VCK         CHECK VERSION
          MJN    LOG1        IF LESS THAN VERSION 5
 LOG0.5   LDM    RTP1
          NJP    LOG3
 LOG1     LDM    FREE
          ZJP    LOG3        IF NO CURRENT ENTRY

*         IF A CURRENT ENTRY EXISTS CHECK IF WHAT IS ABOUT TO BE LOGGED
*         MATCHES WHATS ALREADY LOGGED IF IT DOES THEN SET MULTIPLE
*         OCCURRENCE BIT AND EXIT. IF NO MATCH THEN CLEAR INTERLOCK ON
*         EXISTING (FREE) ENTRY AND GET ANOTHER ENTRY TO LOG TO.

          RJM    ABL         ADJUST BUFFER LENGTH (VALID ONLY ON THETA)
          RJM    CFM         CHECK FOR MATCH
          NJP    LOG2        IF NO MATCH
          RJM    URC         UPDATE RETRY COUNTERS (VALID ONLY ON THETA)
          LDM    FREE
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          CRDL   CM          BUFFER CONTROL WORD (FREE)
          LDDL   CM+BCDA
          SHN    21-BC.MO
          MJP    LOG14       IF ALREADY SET
          LDDL   CM+BCDA
          ADK    MUOC        SET MULTIPLE OCCURRENCE BIT
          STDL   CM+BCDA
          LDM    FREE
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          CWDL   CM          REWRITE ENTRY
          RJM    STF
          LJM    LOG14       RETURN

 LOG2     LDN    CM
          RJM    SET
          LMBC   (BC.FI)     CLEAR INTERLOCK FLAG
          STDL   CM+BCFLG
          LDM    FREE
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          RDCL   CM          CLEAR INTERLOCK ON FREE BUFFER CONTROL WORD
          LDN    0
          STM    DSIF        DFT HAS REMOVED THE I/L ON THE BUFFER CONTROL WORD

*         IF C180 ERROR OR NOS/VE LOGGING OR VALID C180 ERROR SET
*         C180 ERROR IN DFT HEADER.

          CHECK  E8

*         IF C170 ERROR OR NOS / NOS/BE LOGS OR VALID C170 ERROR SET
*         C170 ERROR IN DFT HEADER.

          CHECK  E7

          LDN    0
          STM    VOSD        CLEAR VALID OS DATA ACCUMULATOR
          STM    FREE
 LOG3     RJM    FCW         FIND A NEW CURRENT BUFFER CONTROL WORD
          LDM    LOGB
          NJN    LOG4        IF AVAILABLE ENTRY FOUND
          LDDL   BC+BCDA
          LPC    0#FFF       SET ERROR PRIORITY TO NONE (ZERO)
          STDL   BC+BCDA
          SHN    -10
          STD    T2
          SBN    6
          ZJN    LOG3.5      IF 6XX ERROR
          LDD    T2
          SBN    5
          ZJN    LOG3.5      IF 5XX ERROR
          LDD    T2
          SBN    4
          NJN    LOG3.6      IF NOT 4XX ERROR
 LOG3.5   LDN    4
          STD    ET          SET ELEMENT TYPE TO DFT INTERNAL ERROR
 LOG3.6   RJM    INC         INCREMENT UNLOGGED COUNTER
          LJM    LOG12       RETURN

*         INITIALIZE SUPPORTIVE STATUS FOR IOU, MEMORY, PROCESSOR AND
*         PAGE MAP ERRORS.  FOR ANY OTHER ERROR TYPE, A BLANK FAULT
*         SYMPTOM CODE IS GENERATED.

 LOG4     LDN    VER4
          RJM    VCK         CHECK VERSION
          MJP    LOG9.5      IF LESS THAN VERSION 4
          LDDL   BC+BCDA
          SHN    -BC.ANP
          LPN    0#F
          SBN    EPEN
          MJN    LOG4.1      IF LESS THAN ENVIRONMENT WARNING
          LDD    ET
          UJN    LOG4.2

 LOG4.1   LDDL   BC+BCDA
          SHN    -10
          LPN    0#F
 LOG4.2   NJN    LOG5        IF NOT IOU
          ERRNZ  IOUID       CODE DEPENDS ON ZERO VALUE
          CALL   GSI         GENERATE IOU FAULT SYMPTOM CODE
          UJP    LOG9        INITIALIZE SUPPORTIVE STATUS

 LOG5     SBN    CMID-IOUID
          NJN    LOG6        IF NOT CM
          CALL   GSM         GENERATE CM FAULT SYMPTOM CODE
          UJP    LOG9        INITIALIZE SUPPORTIVE STATUS

 LOG6     SBN    PROCID-CMID
          NJN    LOG7        IF NOT PROCESSOR
          CALL   GSC         GENERATE PROCESSOR FAULT SYMPTOM CODE
          UJP    LOG9        INITIALIZE SUPPORTIVE STATUS

 LOG7     SBN    DFTPMID-PROCID
          NJN    LOG8        IF NOT PAGE MAP
          CALL   GSP         GENERATE PAGE MAP FAULT SYMPTOM CODE
          UJN    LOG9        INITIALIZE SUPPORTIVE STATUS

 LOG8     LDDL   BC+BCDA
          SHN    -10
          LPN    0#F
          STD    T1
          LMN    5
          ZJN    LOG8.5      IF 5XX ANALYSIS CODE
          LDD    T1
          LMN    6
          ZJN    LOG8.5      IF 6XX ANALYSIS CODE
          LDD    T1
          LMN    4
          ZJN    LOG8.5      IF 4XX ANALYSIS CODE
          UJN    LOG8.6

 LOG8.5   CALL   GIE         GENERATE FAULT SYMPTOM CODE FOR 5XX AND 6XX MESSAGES
          UJN    LOG9

 LOG8.6   CALL   GSB         GENERATE BLANK FAULT SYMPTOM CODE
 LOG9     RJM    ISS         INITIALIZE SCRATCH SUPPORTIVE STATUS
 LOG9.5   RJM    STF
          RJM    MMB         MOVE REGISTERS FROM TEMPORARY TO LOGB
          LDN    HDRP
          RJM    IDA
          CRDL   CM          GET DFT HEADER

*         PREPARE TO MOVE THE SEQUENCE COUNT FROM
*         DFT HEADER TO BUFFER CONTROL WORD ENTRY.

          LDC    0#FF
          LPDL   BC+BCSEQ    CLEAR THE SEQUENCE (FOR REPETITIVE CALLS)
          STDL   BC+BCSEQ
          LDDL   CM+DHSEQ
          SHN    10
          LPC    0#FF00      INSURE JUST THE SEQUENCE NUMBER IS USED
          RADL   BC+BCSEQ
          LDM    LOGB        READ BUFFER CONTROL WORD (LOGB) FOR OFFSET
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          CRDL   CM
          LDDL   BC+BCEI     TRANSFER ELEMENT INDEX AND OS ACTION CODE
          STDL   CM+BCEI
          LDDL   BC+BCDA     TRANSFER DFT ANALYSIS AND PRIORITY
          STDL   CM+BCDA
          LDM    LOGT        CHECK IF THRESHOLD EXCEEDED
          ZJN    LOG10       IF THRESHOLD NOT EXCEEDED
          SETFLG (BC.TE)     SET THRESHOLD EXCEEDED FLAG
 LOG10    LDDL   CM+BCSEQ
          LPN    0#4         SAVE THE INTERLOCK BIT
          STDL   CM+BCSEQ
          LDDL   BC+BCSEQ    TRANSFER SEQUENCE NUMBER AND FLAGS
          RADL   CM+BCSEQ

*         NOTE: THE FOLLOWING WILL PRESERVE THE 170, 180 VALID DATA FLAGS
*         FOR THE EVENTUAL SETTING IN THE DFT CONTROL WORD. THIS IS DONE IN THE
*         CASE OF MULTIPLE CALLS TO LOG IN THE PROCESSING OF AN ERROR.

          LDDL   BC+BCSEQ    GET FLAGS
          LPN    3           ONLY CARE ABOUT V170, V180
          STDL   T1
          LCN    0
          LMDL   T1
          LPML   VOSD
          LMDL   T1
          STML   VOSD        PRESERVE ORING OF BITS ACROSS MULTIPLE CALLS


*         NOTE - KEEP THE OFFSET IN THE BUFFER CONTROL WORD INTACT.
          LDM    LOGB
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          CWDL   CM          WRITE JUST BUILT ENTRY TO (LOGB) ENTRY
          LDN    HDRP
          RJM    IDA
          CRDL   CM          GET DFT HEADER
          LDDL   CM
          ADN    1           INCREMENT HEADER SEQUENCE NUMBER
          LPC    0#FF        MOD 256
          STD    T2
          NJN    LOG11       IF COUNT HASNT ROLLED OVER
          LDN    1
          STD    T2          RESET HEADER SEQUENCE TO 1
 LOG11    LDN    CM
          RJM    SET
          LDC    0#FF00      RETAIN NUMBER OF POINTERS + HEADER VALUE
          STDL   CM+DHSEQ
          LDN    HDRP
          RJM    IDA
          RDCL   CM          CLEAR OLD SEQUENCE
          LDN    CM
          RJM    CLR
          LDDL   T2
          LMDL   CM+DHSEQ    MERGE NUMBER OF POINTERS AND NEW SEQUENCE
          STDL   CM+DHSEQ
          LDN    HDRP
          RJM    IDA
          RDSL   CM          REWRITE HEADER (*RDSL* MUST BE USED)

*         UPDATE CONSOLE LOGGING CONTROL WORD IF NECESSARY.

          LDML   CELCW       CHECK CONSOLE LOGGING STATUS
          NJN    LOG12       IF CONSOLE LOGGING IN PROGRESS
          LDDL   BC+BCFLG    CHECK CONSOLE LOGGING FLAG
          SHN    21-BC.CL
          PJN    LOG12       IF CONSOLE LOGGING NOT REQUIRED
          LDM    LOGB        RECORD MRB TO BE LOGGED TO CONSOLE
          STM    CELCW
 LOG12    RJM    ZSS         ZERO THE SUPPORTIVE STATUS SCRATCH BUFFER
          LDM    RTP1
          ZJP    LOG13       IF LOGGING TO BUFFER CONTROL WORDS
 LOG12.5  LDN    CM
          RJM    SET
          LDDL   CM+BCFLG
          LMBC   (BC.FI)     INTERLOCK FLAG
          STDL   CM+BCFLG
          LDM    LOGB
          RJM    IBW         INDEX TO BUFFER CONTROL WORD
          RDCL   CM          CLEAR INTERLOCK FLAG
          LDN    0
          STM    DSIF
          STM    RTP1
          CHECK  E7
          CHECK  E8
          UJP    LOGX        RETURN

 LOG13    LDM    LOGB
          STM    FREE        SAVE INDEX OF BUFFER CONTROL WORD USED
          LJM    LOGX        RETURN

 LOG14    RJM    ZSS         ZERO SUPPORTIVE STATUS
 LOG15    LJM    LOGX

 LOG16    RJM    ZSS         ZERO SUPPORTIVE STATUS
          LDM    RTP1
          NJP    LOG12.5     IF LOGGING TO NRSB
          UJN    LOG15       RETURN


 LOGT     CON    0           FLAG FOR THRESHOLD LOG CONDITION
 LOGA     BSSZ   4           TEMPORARY RETRY COUNTER STORAGE
 STF      SPACE  4,10
**        STF - SET THRESHOLD FLAG.
*
*         EXIT   THRESHOLD FLAG DENOTING THAT A CORRECTED OR
*                UNCORRECTED COUNT HAS EXCEEDED THE THRESHOLD
*                VALUE IS SET IN ELEMENT COUNTERS BUFFER.
*
*         USES   T3, CM - CM+3.
*
*         CALLS  IDA.


 STF      SUBR               ENTRY/EXIT
          LDN    VER2
          RJM    VCK
          PJN    STFX        IF VERSION 2 OR GREATER IGNORE
          LDM    LOGT
          ZJN    STFX        IF NOT APPLICABLE
          LDDL   BC+BCEI
          SHN    -10
          ADM    NBUF
          ADM    NUMHW
          STD    T3
          RJM    IDA
          CRDL   CM          ELEMENT COUNTER (I)
          LDDL   CM
          LMC    0#8000
          STDL   CM
          LDD    T3
          RJM    IDA
          CWDL   CM
          UJN    STFX        RETURN
 MMB      SPACE  4,10
**        MMB - MOVE MAINFRAME BUFFER.
*
*         EXIT   CONTENTS OF SCRATCH MAINTENANCE REGISTER BUFFER IS
*                MOVED TO MAINTENANCE REGISTER BUFFER (LOGB).
*                CONTENTS OF SCRATCH SUPPORTIVE STATUS BUFFER IS
*                MOVED TO SUPPORTIVE STATUS BUFFER (LOGB).
*
*         USES   T1, T2, T3, CM - CM+3, W0 - W3.
*
*         CALLS  CLR, IBW, IDA.


 MMB      SUBR               ENTRY/EXIT
          LDN    VER5
          RJM    VCK         CHECK VERSION
          MJN    MMB0        IF LESS THAN VERSION 5
          LDM    RTP1
          NJP    MMB1.5      IF VERSION 5 AND LOGGING TO NON REGISTER STATUS BUFFER
 MMB0     LDN    5
          STD    T2          NUMBER OF CM WORDS TO MOVE AS A BLOCK
          LDN    0
          STD    T3          AMOUNT MOVED
          LDN    MRBP
          RJM    IDA
          CRDL   W0          MAINTENANCE REGISTER BUFFER POINTER
          LDM    LOGB
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          CRDL   CM          GET OFFSET TO (LOGB) BUFFER ENTRY
          LRD    W1
 MMB1     LDD    W0          READ NEXT BLOCK
          ADC    RR
          CRML   MMBB,T2
          LDD    CM+3        GET THE OFFSET TO REGISTER BUFFER (LOGB)
          ADD    W0
          ADC    RR
          CWML   MMBB,T2     WRITE BLOCK TO REGISTER BUFFER (LOGB)
          LDN    5
          RAD    W0
          LDN    5
          RADL   T3
          SBM    LBUF
          NJN    MMB1        IF MORE TO MOVE

          LDN    VER4
          RJM    VCK         CHECK VERSION
          MJP    MMBX        IF LESS THAN VERSION 4
          UJN    MMB1.6

*         MOVE SCRATCH SUPPORTIVE STATUS TO SUPPORTIVE STATUS BUFFER (LOGB).

 MMB1.5   LDN    NRSP
          UJN    MMB1.7

 MMB1.6   LDN    SSBP        SUPPORTIVE STATUS BUFFER POINTER
 MMB1.7   RJM    IDA
          CRDL   W0
          LRD    W1          READ SUPPORTIVE STATUS HEADER WORD
          LDD    W0
          ADC    RR
          CRDL   CM          (CM+3) = ELEMENT SIZE
          LDN    0           DETERMINE OFFSET TO (LOGB) ENTRY = (LOGB)*SIZE
          STD    T1
          LDML   LOGB
          STD    T2
 MMB2     LDDL   CM+3        MULTIPLY (LOGB) * SIZE
          RADL   T1
          SOD    T2
          NJN    MMB2        IF MULTIPLICATION NOT COMPLETE
          AODL   W0          SKIP TABLE HEADER WORD
          STDL   T2          SAVE SCRATCH BUFFER OFFSET
          ADD    T1          OFFSET TO (LOGB) BUFFER ENTRY
          STDL   CM
          LDDL   CM+3        SAVE ENTRY SIZE
          STDL   T3
 MMB3     LDD    W0          READ FROM SCRATCH BUFFER
          ADC    RR
          CRML   MMBB,ON
          LDD    CM          WRITE TO (LOGB) BUFFER
          ADC    RR
          CWML   MMBB,ON
          AODL   W0
          AODL   CM
          SOD    CM+3
          NJN    MMB3        IF MORE TO MOVE
          LJM    MMBX        RETURN

 MMBB     BSS    5*4         TEMPORARY BUFFER
 ISS      SPACE  4,10
**        ISS - INITIALIZE SUPPORTIVE STATUS.
*
*         EXIT   FIRST TWO WORDS OF SCRATCH SUPPORTIVE STATUS BUFFER
*                INITIALIZED.
*
*         USES   T1,T2,T3, CM - CM+3.
*
*         CALLS  IDA, IIB.


 ISS      SUBR               ENTRY/EXIT
          LDN    VER5
          RJM    VCK         CHECK VERSION
          MJN    ISS0        IF LESS THAN VERSION 5
          LDM    RTP1
          NJP    ISS4        IF TO LOG TO THE NON REGISTER STATUS
 ISS0     LDN    SSBP        READ HEADER WORD
          RJM    IDA
          CRDL   CM
          AODL   CM          SKIP TO SCRATCH ENTRY HEADER WORD
          LRD    CM+1
          ADC    RR
          CRML   ISSA,ON

*         SET UP ENTRY HEADER WORD.

          LDDL   BC+BCDA     GET ELEMENT TYPE
          SHN    -10
          LPN    0#F
          STD    T2
          LMN    7
          NJN    ISS0.5      IF NOT TOP OF HOUR
          LDN    4
          SHN    10
          LMML   ISSA
          STML   ISSA
          UJN    ISS2

 ISS0.5   LDM    ETYP,T2
          STD    T3          SAVE HARDWARE ELEMENT TYPE CONVERSION
          LDM    OTYP,T2
          ZJN    ISS1        IF NO ORDINAL POSSIBLE
          STD    T1
          LDI    T1          GET ORDINAL NUMBER
          SHN    4
 ISS1     LMDL   T3          OR IN ORDINAL + TYPE
          SHN    10
          LMML   ISSA        OR INTO ELEMENT TYPE FIELD IN SUPPORTIVE STATUS
          STML   ISSA
          LDD    T2          RESTORE ELEMENT ID
          SBN    PROCID
          NJN    ISS2        IF NOT PROCESSOR ERROR
          LDN    6           SET LENGTH FOR PROCESSOR SUPPORTIVE STATUS
          UJN    ISS3        SET LENGTH

 ISS2     LDN    3           SET LENGTH FOR NON-PROCESSOR SUPPORTIVE STATUS
 ISS3     STM    ISSA+1

*         SET DATE AND TIME.

          LDN    DFCM+7
          RJM    IIB
          CRML   ISSA+4,ON

*         WRITE ENTRY TO SCRATCH SUPPORTIVE STATUS BUFFER.

          LDN    2           SET NUMBER OF CM WORDS TO WRITE
          STD    T2
          LDDL   CM
          LRD    CM+1
          ADC    RR
          CWML   ISSA,T2     WRITE TO SCRATCH BUFFER
          LJM    ISSX        RETURN

 ISS4     LDN    NRSP        READ HEADER WORD
          RJM    IDA
          CRDL   CM
          AODL   CM          SKIP TO SCRATCH ENTRY HEADER WORD
          AODL   CM          SKIP PAST BUFFER CONTROL WORD
          LRD    CM+1
          ADC    RR
          CRML   ISSA,ON

*         SET UP ENTRY HEADER WORD.

          LDDL   BC+BCDA     GET ELEMENT TYPE
          SHN    -10
          LPN    0#F
          STD    T2
          LMN    7
          NJN    ISS4.01     IF NOT TOP OF HOUR
          LDDL   BC+BCDA
          SHN    -BC.ANP
          SBN    EPEN
          PJN    ISS4.1      IF ENVIRONMENT WARNING
          LDM    LLOG
          STM    ISSA+3      LENGTH TO LOG
          LDN    4
          SHN    10
          LMML   ISSA+2
          STML   ISSA+2      SET NO ASSOCIATED ELEMENT ID
          UJP    ISS6        IF TOP OF HOUR NO CONVERSION

 ISS4.01  LDD    T2
          LMN    6
          ZJN    ISS4.1      IF 6XX ANALYSIS CODE
          LDD    T2
          LMN    5
          ZJN    ISS4.1      IF 5XX ANALYSIS CODE
          LDD    T2
          LMN    4
          ZJN    ISS4.1      IF 4XX CODE
          LDD    T2
          LMN    2
          NJN    ISS4.5      IF NOT CPU RELATED CODE
 ISS4.1   LDN    MTNRB
          STM    ISSA+2
          LDDL   BC+BCDA
          LMC    0#2407
          ZJN    ISS4.4      IF 407 ANALYSIS
          LDDL   BC+BCDA
          LMC    0#2408
          NJN    ISS4.5      IF 407 0R 408 ANALYSIS
 ISS4.4   LDN    6           SET DATA TYPE TO EPM DATA
          UJP    ISS4.6

 ISS4.5   LDN    4           SET DATA TYPE TO DFT INTERNAL
 ISS4.6   SHN    10
          LMML   ISSA+2      OR INTO ELEMENT TYPE FIELD IN SUPPORTIVE STATUS
          STML   ISSA+2
          LDM    LLOG        GET LENGTH TO LOG
          STM    ISSA+3

*         SET DATE AND TIME.

 ISS6     LDN    DFCM+7
          RJM    IIB
          CRML   ISSA+4,ON

*         WRITE ENTRY TO SCRATCH SUPPORTIVE STATUS BUFFER.

          LDN    2           SET NUMBER OF CM WORDS TO WRITE
          STD    T2
          LDDL   CM
          LRD    CM+1
          ADC    RR
          CWML   ISSA,T2     WRITE TO SCRATCH BUFFER
          LJM    ISSX        RETURN

 ISSA     BSS    4*2         SCRATCH BUFFER HEADER AND TIME WORDS
 CTV      SPACE  4,10
**        CTV - CALCULATE THRESHOLD VALUE.
*
*         ENTRY  (A) <> 0 UNCORRECTED PRIORITY.
*                (A) = 0 CORRECTED PRIORITY.
*
*         EXIT   (A) = CALCULATED THRESHOLD VALUE.
*
*         USES   T1, T2.
*
*         NOTE   A DONT CARE CASE EXISTS IF THRESHOLD EXCEEDED  IS SET.


 CTV      SUBR               ENTRY/EXIT
          NJN    CTV1        IF UNCORRECTED
          LDDL   CM          GET CORRECTED ERROR THRESHOLD
          SHN    -10
          LPC    0#7F        GET EXPONENT VALUE
          UJN    CTV2        CONTINUE

 CTV1     LDD    CM
          LPC    0#7F        GET UNCORRECTED THRESHOLD
 CTV2     STD    T1
          ZJN    CTVX        IF ZERO THRESHOLD LOG ALL ERRORS
          SHN    21-6
          MJN    CTVX        IF DONT WANT ANY ERRORS LOGGED
          LDN    1
          STD    T2          RESULTING POWER OF TWO VALUE
          SOD    T1          ACCOUNT FOR COUNTING FROM ZERO
 CTV3     LDDL   T2
          SHN    1           I := I * 2**1
          STD    T2
          SOD    T1
          PJN    CTV3        IF NOT THRU MULTIPLYING POWERS OF TWO
          LDDL   T2          RETURN RESULT
          UJN    CTVX        RETURN
 PTF      SPACE  4,10
**        PTF - PROCESS DUAL STATE TRANSITION FLAG.
*
*         ENTRY  DUAL STATE TRANSITION BACK TO 170 STANDALONE FLAG IS
*                SET IN THE DFT HEADER WORD.
*
*         EXIT   ALL BUFFER CONTROL WORD ENTRIES WITH VALID 180 FLAGS
*                SET WILL HAVE THOSE FLAGS CLEARED.
*
*         CALLS  CLR, IDA, SET, SPB.
*
*         NOTE   INTERLOCKING THE ENTRY IS NOT NECESSARY BECAUSE NOS/VE
*                IS NOT LOGGING; HOWEVER, *RDCL* IS USED TO CLEAR THE
*                FLAG.

          ROUTINE PTF

          LRD    DP+1
          RJM    SPB         SET PP BOUNDS
          LDN    1
          STD    T2          FIRST USABLE BUFFER CONTROL WORD
          LDM    NBUF
          SBN    2
          STD    T1          NUMBER OF CONTROL WORDS - 1 - SCRATCH ENTRY
 PTF1     LDD    T2
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          CRDL   CM          BUFFER CONTROL WORD (I)
          LDDL   CM+BCFLG
          SHN    21-BC.FV8   180 VALID DATA FLAG
          PJN    PTF2        IF NOT PRESENT

*         WE HAVE AN ENTRY WITH VALID DATA FOR NOS/VE, BUT NOS/VE IS
*         DOWN.  PERFORM A READ AND CLEAR LOCK ON VALID 180 DATA BIT
*         TO MAKE THE ENTRY AVAILABLE.

          LDN    CM
          RJM    SET
          LDN    1
          SHN    BC.FV8
          LMDL   CM+BCFLG    CLEAR VALID 180 DATA BIT
          STDL   CM+BCFLG
          LDD    T2
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          RDCL   CM
 PTF2     AOD    T2
          SOD    T1
          PJN    PTF1        LOOP

*         NEXT CLEAR THE TRANSITION BIT IN THE DFT HEADER
*         ALSO, CLEAR THE C180 ERROR FLAG AND SET THE
*         C170 ERROR FLAG TO CHECK FOR ANY LOGGING REMAINING.

          LDN    CM
          RJM    SET
          LDN    1
          SHN    DH.DT       POSITION TO TRANSITION BIT
          LMDL   CM+DHFLG
          STDL   CM+DHFLG
          LDN    1
          SHN    DH.FE8      POSITION TO C180 ERROR FLAG
          LMDL   CM+DHFLG
          STDL   CM+DHFLG    CLEAR C180 ERROR FLAG
          LDN    HDRP
          RJM    IDA
          RDCL   CM
          LDN    CM
          RJM    CLR         CLEAR FOR SETTING C170 ERROR FLAG
          LDN    1
*         SHN    DH.FE7      POSITION TO C170 ERROR FLAG
          STD    CM+DHFLG
          LDN    HDRP
          RJM    IDA
          RDSL   CM          SET C170 ERROR FLAG
          LJM    PTFX        RETURN

*         END CTP$DFT_LOG_ERROR
