
          EJECT
*         CTEXT  CTP$DFT_MDB_LOGGING_ROUTINES
*
*         J.M. SKOWRONEK     9/25/87.
*
*         THIS DECK IS USED WITH DECK CTC$DFT_MDB_LOGGING_CONSTANTS.

          LIST   X

**        BBC - BUILD AND WRITE MAINTINANCE BUFFER CONTROL WORD
*
*         METHOD             SET UP THE SCRATCH 0 CONTROL WORD FLAGS PORTION
*                            FOR VALID DATA.
*
*         ENTRY              SCRATCH 0 CONTROL WORD IN BC - BC+3.
*
*         USES               BC.
*
*         CALLS              BSB.
*
*         EXIT               SCRATCH 0 CONTROL WORD FLAGS PORTION SET TO
*                            VALID DATA.

 BBC      SUBR               ENTRY/EXIT

          LDDL   BC+BCFLG    BUFFER CONTROL WORD FLAG
          ADC    BCW.VD      ADD VALID DATA FLAG
          STDL   BC+BCFLG    BUFFER CONTROL WORD FLAG
          RJM    BSB         BUILD AND WRITE SSB WORD
          UJP    BBCX        EXIT
          EJECT
**        BHW - BUILD AND WRITE MDB MAIN HEADER WORD.
*
*         METHOD             SET UP THE MDB MAIN HEADER WORD WITH THE
*                            ERROR PRIORITY FOR THIS ERROR.  WRITE
*                            THE HEADER WORD.  CHECK LONG TERM INTERLOCK
*                            FLAG IN CW0.
*
*         ENTRY              MDB MAIN HEADER IN CM - CM+3.
*
*                            MDB MAIN ADDRESS IN RS+1.
*
*                            CEPR = CURRENT ERROR PRIORITY.
*
*         USES               RS - RS+2.
*
*         CALLS              NA.
*
*         EXIT               MAIN HEADER WORD WRITTEN TO MDB.
*                            UPDATED MAIN HEADER WORD IN CM - CM+3.
*                            (A) = 0 IF LOGGING TO CPU0 BUFFER
*                            (A) = 1 IF CANNOT LOG TO CPU0 BUFFER


 BHW      SUBR               ENTRY/EXIT

          LDML   MDBW
          NJN    BHW4        IF WRITING TO OVERFLOW BUFFER
          LDML   LTIF
          NJN    BHW1        IF LONGTERM INTERLOCK SET
          LDN    1
          UJN    BHW3

 BHW1     LDDL   CM+V4DHPRI  PREVIOUS PRIORITY
          LPC    0#F000
          SHN    -12D        POSITION
          SBM    CEPR        COMPARE TO CURRENT PRIORITY
          MJN    BHW2        IF CURRENT GREATER THAN OLD
          LDN    1           FLAG NOT LOGGABLE
          UJP    BHWX

 BHW2     LDN    8D          SET LTI OVERWRITE CONDITION
 BHW3     SHN    8D          POSITION LTI FLAG
          LMDL   CM+V4DHCWD  SET OTHER BITS
          STDL   CM+V4DHCWD  STORE WITH LTI FLAG SET
 BHW4     LDN    0
          STDL   CM+V4DHLTL  CLEAR LENGTH TO LOG ENTRY

          LDDL   CM+V4DHPRI  LOAD PRIORITY IN WRITE BUFFER
          LPC    0#0FFF      MASK OFF OLD PRIORITY
          STDL   CM+V4DHPRI  STORE WITHOUT PRIORITY IN WRITE BUFFER

          LDML   CEPR        LOAD CURRENT ERROR PRIORITY
          SHN    12D         SHIFT TO NEEDED POSITION
          LMDL   CM+V4DHPRI  SET OTHER BITS
          STDL   CM+V4DHPRI  STORE WITH PRIORITY IN WRITE BUFFER

*         WRITE CPU MDB BUFFER.

          LRD    RS+1        UPPER ADDRESS OF SELECTED MDB
          LDD    RS          OTHER OFFSET
          ADC    RR          SET BIT 18
          CWDL   CM          WRITE MDB HEADER WORD
          AOML   LTOL        INCREMENT LENGTH TO LOG COUNTER
          LDN    0
          UJP    BHWX        EXIT
          EJECT
**        BSB - BUILD AND WRITE SSB WORD.
*
*         METHOD             GET THE SSB ADDRESS AND READ THE SSB WORD.
*                            SET UP THE SSB WORD FOR LOGGABLE, OVERWRITE OR
*                            UNLOGGABLE DATA, AND WRITE THE SSB WORD.
*
*         ENTRY              BCWF = 0 IF LOGGABLE DATA.
*                                 = 1 IF OVERWRITE DATA.
*                                 = 2 IF UNLOGGABLE DATA.
*
*                            CWDO = OFFSET TO MAINTENANCE BUFFER CONTROL/
*                                   SUPPORTIVE STATUS BUFFER WORD.
*
*                            OFFF = 0 USE CPU MDB OFFSET.
*                                 = 1 USE OVERFLOW MDB OFFSET.
*
*                            OFFO = OVERFLOW OFFSET.  (2)
*
*         USES               BCWF, CM, CWDO, OFFF, RS - RS+2.
*
*         CALLS              IDA.
*
*         EXIT               SSB WORD WRITTEN WITH FLAGS SET TO REFLECT
*                            A LOGABLE, UNLOGABLE, OR OVERWRITE CONDITION.
*
*                            IF LOGGABLE DATA, SSB 0 = ORDINAL. (BCWF = 0)
*
*                            IF OVERWRITE DATA, OFFSET SSB = 2, SSB 0 =
*                            OVERFLOW ORDINAL.  (BCWF = 1)
*
*                            IF UNLOGGABLE DATA, SSB 0 = 1.  (BCWF = 2)
*

 BSB      SUBR               ENTRY/EXIT

*         READ SSB HEADER WORD.

          LDN    SSBP        LOAD SSB HEADER POINTER
          RJM    IDA         INCREMENT THE DFT ADDRESS
          CRDL   RS          READ THE SSB HEADER ADDRESS

          LRD    RS+1        UPPER SSB WORD ADDRESS
          LDD    RS
          ADC    RR          SET BIT 18
          CRDL   CM          READ SSB HEADER WORD

*         MULTIPLY SSB ELEMENT SIZE TIMES GROUP OFFSET.

          LDML   CWDO        LOAD OFFSET FOR SSB GROUP
          STML   BSBA        SAVE AS INDEX
          LDN    0
          STML   BSBB        CLEAR LOCATION
 BSB0     LDDL   CM+V4SBSIZ  LOAD SSB ELEMENT SIZE
          RAML   BSBB        ADD
          SOML   BSBA        DECREMENT GROUP OFFSET
          PJN    BSB0        IF NOT ZERO

          LDML   BCWF        WRITE FLAG
          ZJN    BSB1        IF LOGGABLE READ SSB WORD
          SBN    2
          ZJN    BSB1        IF UNLOGGABLE READ SSB WORD
          LJM    BSB6        OVERWRITE CONDITION

*         READ SSB WORD.

 BSB1     ADD    RS
          ADN    1           OFFSET FOR SSB WORD
          ADC    RR          SET BIT 18
          CRDL   CM          READ SSB WORD

          LDML   BCWF        WRITE FLAG
          ZJN    BSB2        IF LOGGABLE SET MDB ORDINAL
          SBN    2
          ZJN    BSB3        IF UNLOGGABLE SET UNLOGGABLE FLAG
          LJM    BSB7        IF OVERWRITE SET OVERWRITE FLAG

 BSB2     LDML   OFFF        OFFSET FLAG
          ZJP    BSB8        SET CPU ORDINAL

*         SET MDB OVERFLOW ORDINAL IN SSB WORD.

          LDDL   CM+V4SBLOG  SSB LOG WORD
          LPC    0#FF00      MASK OUT OLD ORDINAL
          ADN    OFFO        ADD OVERFLOW ORDINAL
          UJN    BSB4

*         SET UNLOGGABLE DATA FLAG.

 BSB3     LDDL   CM+V4SBLOG  SSB LOG WORD
          LPC    0#00FF      MASK OFF OLD LOGGING BITS
          ADC    SSB.UL      SET UNLOGGABLE BIT
 BSB4     STDL   CM+V4SBLOG  STORE TO WRITE BUFFER
          LDD    RS
          ADN    1           OFFSET FOR SSB WORD
 BSB5     ADC    RR          ADD BIT 18
          CWDL   CM          WRITE SSB WORD
          UJP    BSBX        EXIT

*         READ SSB WORD.

 BSB6     LDD    RS
          ADN    1           OFFSET FOR SSB WORD
          ADC    RR          SET BIT 18
          CRDL   CM          READ SSB WORD

*         SET MDB OVERFLOW ORDINAL IN SSB WORD FOR OVERWRITE CONDITION.

          LDDL   CM+V4SBLOG  SSB LOG WORD
          LPC    0#FF00      MASK OUT OLD ORDINAL
          ADN    OFFO        ADD OVERFLOW ORDINAL
          STDL   CM+V4SBLOG  STORE TO WRITE BUFFER
          LDD    RS
          ADN    1           OFFSET FOR SSB WORD
          ADC    RR          ADD BIT 18
          CWDL   CM          WRITE SSB WORD

          LDML   BSBB        SSB OFFSET
          LJM    BSB1        READ OFFSET SSB

*         OVERWRITE DATA

 BSB7     LDDL   CM+V4SBLOG  SSB WORD
          LPC    0#00FF      MASK OFF OLD LOGGING BITS
          ADC    SSB.OW      SET OVERWRITE BIT
          STDL   CM+V4SBLOG  WRITE BUFFER
          LDML   BSBB        SSB OFFSET
          ADD    RS
          ADN    1           OFFSET FOR SSB WORD
          LJM    BSB5

*         SET CPU ORDINAL IN SSB WORD.

 BSB8     LDDL   CM+V4SBLOG  SSB LOG WORD
          LPC    0#FF00      MASK OUT OLD ORDINAL
          ADML   CPUO        ADD CPU ORDINAL
          LJM    BSB4

 BSBA     BSS    1
 BSBB     BSS    1


          EJECT
**        DLC - DETERMINE LOGGING CONDITIONS.
*
*         METHOD             UPON CPU ERROR, DETERMINE IF THE ERROR CAN BE
*                            LOGGED IN THE MODEL DEPENDENT BUFFER, THE
*                            OVERFLOW BUFFER, OVERWRITTEN, OR IF IT IS
*                            UNLOGGABLE.
*
*         ENTRY              CURRENT ERROR PRIORITY IN LOCATION CEPR.
*
*         USES               BCWF, CWDC, CWDO, DSIF, EPRO, INTB, LTOL,
*                            MDBW, MFLG.
*
*         CALLS              BBC, BHW, ITUF, RCH, RBC, ROH, TDE, VCK.
*
*         EXIT               IF A LOGGABLE ERROR EXISTS:
*                            THE ERROR PRIORITY WILL BE INSERTED IN THE MAIN
*                            HEADER WORD, THE MAINTENANCE BUFFER CONTROL WORD
*                            WILL BE VALIDATED AND THE SUPPORTIVE STATUS
*                            BUFFER WORD WILL REFLECT A LOGGABLE ERROR.
*                            THE ADDRESS OF THE MDB MAIN HEADER WORD WILL BE
*                            IN RS - RS+2.
*
*                            IF AN OVERWRITE CONDITION EXISTS:
*                            THE ERROR PRIORITY WILL BE INSERTED IN THE MAIN
*                            HEADER WORD, THE MAINTENANCE BUFFER CONTROL WORD
*                            WILL BE VALIDATED AND THE SUPPORTIVE STATUS
*                            BUFFER WORD WILL REFLECT AN OVERWRITE CONDITION.
*                            THE ADDRESS OF THE MDB MAIN HEADER WORD WILL BE
*                            IN RS - RS+2.
*
*                            IF AN UNLOGGABLE ERROR EXISTS, THE SUPPORTIVE
*                            STATUS BUFFER WORD WILL REFLECT AN UNLOGGABLE
*                            CONDITION.
*
*                            BCWF = 0 IF LOGGABLE DATA.
*                                 = 1 IF OVERWRITE DATA.
*                                 = 2 IF UNLOGGABLE DATA.

          ROUTINE DLC        ENTRY/EXIT

          LDN    VER4        MINIMUM VERSION NUMBER THAT CAN BE USED
          RJM    VCK         CHECK VERSION
          PJN    DLC0.1      IF VERSION 4 OR GREATER

*         CANNOT LOG DATA.

 DLC0     LDN    2
          STML   BCWF        SET UNLOGGABLE DATA FLAG
          UJP    DLCX        EXIT

 DLC0.1   CALL   TDE         TEST FOR DUPLICATE ENTRY
          LDML   MFLG        MATCH FLAG
          ZJN    DLC0        IF NEW ERROR MATCHES PREVIOUS

          LDN    0
          STML   LTOL        INITIALIZE LENGTH OF DATA TO LOG COUNTER
          STML   ITUF        INITIALIZE ISSUE TIME OUT UNLOGGABLE FLAG
          STML   BCWF        SET UP FOR POSSIBLE LOGGABLE CONDITION

          RJM    RCH         FIND CPU MDB, READ MAIN HEADER, SAVE CW WORD

          RJM    ROH         FIND OVERFLOW MDB, READ MAIN HEADER, SAVE CW WORD

          LDML   CWDC        LOAD CPU MDB CW WORD
          ZJN    DLC1        IF CPU MDB CW WORD = 00, LOG ENTRY CAN BE MADE

 DLC0.5   LDML   CWDO        LOAD OVERFLOW MDB CW WORD
          ZJN    DLC2        IF OVERFLOW MDB CW WORD = 00, LOG ENTRY CAN BE MADE

          UJN    DLC4        TEST FOR UNLOGGABLE CONDITION

*         LOG ENTRY CAN BE MADE.

 DLC1     STML   MDBW        ZERO = WRITE TO CPU MDB
          RJM    RCH         FIND CPU MDB AND GET MDB BASE ADDRESS
          UJN    DLC3

 DLC2     LDN    1
          STML   MDBW        ONE = WRITE TO OVERFLOW MDB

*         INSERT ERROR PRIORITY IN MAIN HEADER WORD AND WRITE TO MDB.

 DLC3     RJM    BHW         BUILD AND WRITE MAIN HEADER WORD FOR MDB IN USE
          ZJN    DLC3.5      IF LOGGING TO CPU0 BUFFER
          RJM    ROH         FIND OVERFLOW MDB, READ MAIN HEADER, SAVE CW WORD
          UJP    DLC0.5      GO BEGIN OVERFLOW BUFFER LOGGING

 DLC3.5   RJM    BBC         WRITE SCRATCH 0, BUILD AND WRITE NEW SSB WORD

          LJM    DLC7        GET MDB MAIN HEADER ADDRESS

*         BOTH MDB'S HAVE DATA SO TEST FOR UNLOGGABLE CONDITION.

 DLC4     LDN    1           SET UP FOR POSSIBLE OVERWRITE CONDITION
          STML   BCWF        BUFFER CONTROL WORD WRITE FLAG SAY OVERWRITE
          LDML   DSIF
          NJN    DLC4.1      IF INTERLOCK SET BY DFT AND NOT OS

          RJM    RBC         GET INTERLOCK FROM BUFFER CONTROL WORD
          SHN    15D         SHIFT
          MJN    DLC5        IF INTERLOCK SET

*         TEST FOR OVERWRITE CONDITION.

 DLC4.1   LDML   EPRO        ERROR PRIORITY OF OVERFLOW MDB
          SBML   CEPR        CURRENT ERROR PRIORITY
          MJN    DLC6        IF OVERWRITE CONDITION

*         UNLOGGABLE DATA.

 DLC5     LDN    2           UNLOGGABLE CONDITION
          STML   BCWF        BUFFER CONTROL WORD WRITE FLAG SAY UNLOGGABLE
          STML   ITUF        UNLOGGABLE FLAG FOR ISSUE TIME OUT
          RJM    BBC         BUILD AND WRITE NEW MAINTENANCE BUFFER CONTROL WORD
          UJN    DLC9        EXIT

*         DEFINITE OVERWRITE.

 DLC6     RJM    ROH         FIND OVERFLOW MDB AND READ MAIN HEADER
          LJM    DLC2        CONTINUE AS LOGGABLE ERROR

*         GET THE MAIN HEADER ADDRESS OF THE MDB IN USE.

 DLC7     LDML   MDBW        MDB WRITE FLAG
          NJN    DLC8        IF WRITE TO OVERFLOW MDB
          RJM    RCH         FIND CPU MDB AND GET MAIN HEADER ADDRESS
          UJN    DLC9

 DLC8     RJM    ROH         FIND OVERFLOW MDB AND GET MAIN HEADER ADDRESS
 DLC9     UJP    DLCX        EXIT


          EJECT
**        FDB - FIND DEPENDENT BUFFER, READ HEADER WORD AND SAVE NEEDED
*               INFORMATION.
*
*         METHOD             READ THE ADDRESS OF THE MODEL DEPENDENT BUFFER
*                            FROM THE DFT POINTER BLOCK.  USING THIS ADDRESS
*                            AND THE OFFSET OF THE CPU OR OVERFLOW MDB, READ
*                            THE MAIN HEADER WORD AND SAVE NECESSARY
*                            INFORMATION.
*
*         ENTRY              CPUO = CPU ORDINAL.
*
*                            OFFO = OVERFLOW OFFSET. (2)
*
*                            OFFF = 0 READ CPU MDB HEADER.
*                                 = 1 READ OVERFLOW MDB HEADER.
*
*         USES               CM, CPUO, CWDC, CWDO, EPRO, MDLP, OFFF,
*                            RS - RS+2.
*
*
*         CALLS              IDA, RDH.
*
*         EXIT               CWDC = 0 IF CPU MDB NOT BEING LOGGED, AND
*                                   OFFF = 0.
*                                 = GREATER THEN 0 IF CPU MDB IS BEING LOGGED,
*                                   AND OFFF = 0.
*
*                            CWDO = 0 IF OVERFLOW MDB NOT BEING LOGGED, AND
*                                   OFFF = 1.
*                                 = GREATER THEN 0 IF OVERFLOW MDB IS BEING
*                                   LOGGED, AND OFFF = 1.
*
*
*                            MDB BASE ADDRESS IN RS - RS+2.
*
*                            CURRENT MDB MAIN HEADER IN CM - CM+3.
*
*                            EPRO = OVERFLOW ERROR PRIORITY.


 FDB      SUBR               ENTRY/EXIT

*         SET UP RS - RS+2 TO CONTAIN THE ADDRESS OF CPU0 MDB.

          LDN    MDLP        LOAD MODEL DEPENDENT BUFFER POINTER
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   RS          READ ADDRESS OF MODEL DEPENDENT BUFFER

          LRD    RS+1        UPPER MDB ADDRESS FROM LAST READ
          LDML   OFFF        LOAD OFFSET USE FLAG
          NJP    FDB0        READ OVERFLOW MDB HEADER

*         READ CPU MDB HEADER.

          LDML   CPUO        LOAD CPU ORDINAL
          RJM    RDH         READ CPU HEADER WORD
          STML   CWDC        SAVE CPU MDB CW WORD
          UJP    FDBX        EXIT

 FDB0     LDN    OFFO        LOAD OVERFLOW MDB OFFSET
          RJM    RDH         READ OVERFLOW HEADER WORD
          STML   CWDO        SAVE OVERFLOW MDB CW WORD
          LDDL   CM+V4DHPRI  ERROR PRIORITY
          SHN    -12D
          STML   EPRO        SAVE FOR OVERWRITE CONDITION
          UJP    FDBX        EXIT
          EJECT
**        RBC - READ MAINTENANCE BUFFER CONTROL WORD.
*
*         METHOD             GET THE MAINTENANCE BUFFER CONTROL WORD ADDRESS,
*                            READ THE BUFFER CONTROL WORD AND GET THE
*                            INTERLOCK STATUS.
*
*         ENTRY              BCWF = 0 USE PHANTOM SCRATCH 0 LOCATION.
*                                   (LOGGABLE CONDITION)
*
*                                 = 1 USE SCRATCH 0 ADDRESS PLUS OFFSET.
*                                   (OVERWRITE CONDITION)
*
*                            CWDO = BUFFER CONTROL WORD OFFSET.
*
*         USES               BC, BCWF, CM, CWDO, RS - RS+2.
*
*         CALLS              IDA.
*
*         EXIT               INTERLOCK STATUS IN A REGISTER.
*
*                            MAINTENANCE BUFFER CONTROL WORD IN CM - CM+3.
*                            SCRATCH 0 ADDRESS IN RS+1.


 RBC      SUBR               ENTRY/EXIT

          LDN    BCWP        LOAD MAINTENANCE BUFFER CONTROL WORD POINTER
          RJM    IDA         INCREMENT THE DFT ADDRESS
          CRDL   RS          READ ADDRESS

          LRD    RS+1        UPPER MAINTENANCE BUFFER CONTROL WORD ADDRESS
          LDML   BCWF        BUFFER CONTROL WORD WRITE FLAG
          SBN    1
          ZJN    RBC0        IF OVERWRITE CONDITION

*         LOGGABLE CONDITION.

          LDDL   BC+BCFLG    PHANTOM SCRATCH 0 FLAG WORD
          UJN    RBC1        MASK INTERLOCK BIT

 RBC0     LDML   CWDO        LOAD MAINTENANCE BUFFER CONTROL WORD OFFSET
          ADD    RS
          ADC    RR          SET BIT 18
          CRDL   CM          READ MAINTENANCE BUFFER CONTROL WORD

          LDDL   CM+BCFLG    LOAD FLAG WORD
 RBC1     LPN    BCW.IT      JUST INTERLOCK BIT
          UJP    RBCX        EXIT
          EJECT
**        RCH - READ CPU MDB HEADER WORD.
*
*         METHOD             SET FLAG TO READ CPU MDB.
*
*         ENTRY              NA.
*
*         USES               OFFF.
*
*         CALLS              FDB.
*
*         EXIT               OFFF = 0.


 RCH      SUBR               ENTRY/EXIT

          LDN    0
          STML   OFFF        FLAG TO USE CPUO ORDINAL
          RJM    FDB         FIND MDB AND READ MAIN HEADER WORD
          UJP    RCHX        EXIT
          EJECT
**        RDH - READ MDB HEADER WORD.
*
*         METHOD             READ THE MDB HEADER WORD TO LOCATION CM AND
*                            EXTRACT THE CW WORD.
*
*         ENTRY              MDB OFFSET IN A.
*                            MDB BASE ADDRESS IN RS - RS+2.
*
*         USES               CM, HDAH - HDAH+2, RS - RS+2.
*
*         CALLS              NA.
*
*         EXIT               MDB CW WORD IN A.
*
*                            MDB ADDRESS SAVED IN HDAH - HDAD+2.

 RDH      SUBR               ENTRY/EXIT


          ADD    RS          ADD OTHER OFFSET
          ADC    RR          SET BIT 18
          CRDL   RS          READ MDB ADDRESS POINTER

          LRD    RS+1        UPPER MDB ADDRESS FROM LAST READ
          LDD    RS          LOWER MDB ADDRESS FROM LAST READ
          STM    HDAD        SAVE
          ADC    RR          SET BIT 18
          CRDL   CM          READ MDB PRIMARY HEADER WORD TO LOCATION CM
          LDD    RS+1        UPPER MDB ADDRESS
          STM    HDAD+1      SAVE
          LDD    RS+2        UPPER MDB ADDRESS
          STM    HDAD+2      SAVE
          LDDL   CM
          LPC    0#0F00
          STML   LTIF        SAVE LONGTERM INTERLOCK FLAG
          LDDL   CM+V4DHCWD  LOAD THE CW WORD
          LPC    0#FF        JUST CW WORD
          UJN    RDHX        EXIT

 LTIF     CON    0           LONG TERM INTERLOCK FLAG

          EJECT
**        ROH - READ OVERFLOW MDB HEADER WORD.
*
*         METHOD             SET FLAG TO READ OVERFLOW MDB.
*
*         ENTRY              NA.
*
*         USES               OFFF.
*
*         CALLS              FDB.
*
*         EXIT               OFFF = 1.

 ROH      SUBR               ENTRY/EXIT

          LDN    1
          STML   OFFF        FLAG TO USE OVERFLOW BUFFER OFFSET
          RJM    FDB         FIND MDB AND READ OVERFLOW HEADER WORD
          UJP    ROHX        EXIT
          EJECT
**        SCW - SET THE CONTROL WORD OFFSET AND SEQUENCE NUMBER IN THE
*               MDB MAIN HEADER WORD.
*
*         METHOD             READ THE MDB HEADER AND SET THE NECESSARY
*                            DATA.
*
*         ENTRY              LOCATIONS FREE AND BC+BCSEQ PRESET.
*
*         USES               BC, BCWF, CM, FREE.
*
*         CALLS              VCK.
*
*         EXIT               CWO AND SEQ SET IN MDB HEADER WORD.

          ROUTINE SCW        ENTRY/EXIT

          LDN    VER4        MINIMUM VERSION NUMBER THAT CAN BE USED
          RJM    VCK         CHECK VERSION
          MJP    SCWX        IF NOT AT LEAST VERSION 4

          LDML   BCWF        LOGGABLE DATA FLAG
          SBN    2           UNLOGGABLE DATA
          ZJP    SCWX        IF UNLOGGABLE

*         LOAD MAIN HEADER WORD FOR UPDATES.

          LDM    HDAD+1      SAVED UPPER MDB MAIN HEADER ADDRESS  (ROUTINE RDH)
          STD    RS+1
          LDM    HDAD+2      SAVED UPPER MDB MAIN HEADER ADDRESS  (ROUTINE RDH)
          STD    RS+2
          LDM    HDAD        SAVED LOWER MDB MAIN HEADER ADDRESS  (ROUTINE RDH)
          ADC    RR          ADD BIT 18
          LRD    RS+1
          CRDL   CM          READ MAIN HEADER WORD

*         INSERT CWO IN MAIN HEADER WORD.

          LDDL   CM+V4DHCWD  LOAD CWO WORD
          LPC    0#FF00      MASK OFF OLD CWO WORD
          ADM    FREE        ADD NEW CWO WORD
          STDL   CM+V4DHCWD  STORE TO WRITE BUFFER

*         INSERT SEQ IN MAIN HEADER WORD.


          LDDL   CM+V4DHPRI  LOAD PRI/SEQ WORD
          LPC    0#F00F      MASK OUT OLD SEQ
          STDL   CM+V4DHPRI  STORE WITHOUT SEQ NUMBER
          LDDL   BC+BCSEQ    CURRENT SEQ NUMBER FROM PHANTOM SCRATCH 0
          LPC    0#FF00      JUST SEQUENCE NUMBER
          SHN    -4          SHIFT OVER FOR USE
          LMDL   CM+V4DHPRI  SET OTHER BITS
          STDL   CM+V4DHPRI  STORE WITH SEQ NUMBER

          LDM    HDAD        SAVED LOWER MDB MAIN HEADER ADDRESS  (ROUTINE RDH)
          ADC    RR          ADD BIT 18
          CWDL   CM          WRITE MDB HEADER WORD
          UJP    SCWX        EXIT
          EJECT
**        WSH - WRITE THE MDB SUB HEADER WORD TO THE SELECTED MDB.
*             - RE-WRITE THE MAIN HEADER WORD WITH LENGTH OF DATA TO LOG.
*
*         METHOD             WRITE THE SUB HEADER WORD IF ERROR DATA OR
*                            RE-WRITE THE MAIN HEADER WORD WITH THE LENGTH
*                            OF DATA TO LOG LOGGED.
*
*         ENTRY              THE ADAJUSTED MAIN HEADER ADDRESS OF THE SELECTED
*                            MDB IS IN RS - RS+2 ON THE FIRST CALL TO THIS
*                            ROUTINE.  AFTER THAT, THE ADDRESS WILL POINT TO THE
*                            LAST LOCATION WRITTEN IN THE SELECTED MDB.
*
*                            SHWD = LENGTH OF DATA ASSOCIATED WITH THIS DATA
*                                   ERROR, OR ZERO IF INSERTING LENGTH OF DATA
*                                   TO LOG.
*
*                            SHWD+1 = ZERO.
*
*                            SHWD+2 = PFS ERROR ID IF APPLICABLE, OR ZERO IF
*                                     INSERTING LENGTH OF DATA TO LOG.
*
*                            SHWD+3 = ID OF NEXT REGION OF DATA, OR ZERO IF
*                                     INSERTING LENGTH OF DATA TO LOG.
*
*         USES               CM, HDAD - HDAD+2, LTOL, RS - RS+2, SHWD - SHWD+3.
*
*         CALLS              NA.
*
*         EXIT               IF ALL ERROR INFORMATION IS NOT LOGGED, THE
*                            SUB HEADER WORD, FOR THE INFORMATION TO BE
*                            WRITTEN, IS WRITTEN TO THE SELECTED MDB AND
*                            THE LAST SELECTED MDB ADDRESS WILL BE IN
*                            RS - RS+2.
*
*                            IF SHWD EQUALS ZERO, THE MAIN HEADER WORD WILL
*                            BE RE-WRITTEN WITH THE LENGTH OF DATA TO LOG
*                            AND THE ADDRESS OF THE SELECTED MDB MAIN
*                            HEADER WORD WILL BE IN RS - RS+2.
*

          ROUTINE WSH        ENTRY/EXIT

          LDM    SHWD
          ZJN    WSH1        IF WRITE MAIN HEADER WITH LTOL

*         WRITE THE SUB HEADER.

          LDN    1
          STDL   CM          WORD LENGTH FOR MEMORY WRITE
          AOML   LTOL        INCREMENT LENGTH TO LOG COUNTER
          AOD    RS          INCREMENT THE OFFSET BY 1
          LRD    RS+1        UPPER ADDRESS OF MDB MAIN HEADER WORD
          ADC    RR          SET BIT 18
          CWML   SHWD,CM     WRITE SUB HEADER WORD
 WSH0     UJP    WSHX        EXIT

*         LOAD MAIN HEADER WORD FOR LTOL UPDATE.

 WSH1     LDM    HDAD+1      SAVED UPPER MDB MAIN HEADER ADDRESS  (ROUTINE RDH)
          STD    RS+1
          LDM    HDAD+2      SAVED UPPER MDB MAIN HEADER ADDRESS  (ROUTINE RDH)
          STD    RS+2
          LDM    HDAD        SAVED LOWER MDB MAIN HEADER ADDRESS  (ROUTINE RDH)
          ADC    RR          ADD BIT 18
          LRD    RS+1
          CRDL   CM          READ MAIN HEADER WORD

*         INSERT LENGTH TO LOG IN MAIN HEADER WORD AND WRITE TO MDB.

          LDML   LTOL        LENGTH TO LOG COUNTER
          STDL   CM+V4DHLTL  STORE TO WRITE BUFFER
          LDM    HDAD        SAVED LOWER MDB MAIN HEADER ADDRESS  (ROUTINE RDH)
          ADC    RR          ADD BIT 18
          CWDL   CM          WRITE MDB HEADER WORD
          UJN    WSH0        EXIT

*         END    CTP$DFT_MDB_LOGGING_ROUTINES




