*DECK DB$JLBA 
USETEXT JLPCMTX 
USETEXT CDCSCTX 
       PROC DB$JLBA(LOGTYP,PKEYWSA,PKEYL,RECWSA,RECL, 
                    ARID,FC,JBID,USID,VERSION); 
  BEGIN 
 #
* *   DB$JLBA                                    PAGE  1
* *   FORMAT "BEFORE/AFTER IMAGE" JOURNAL LOG RECORD
* *   W P CEAGLIO                                DATE  1/12/76
* *   A W LO (REVISION)                          DATE 10/ 1/76
* * 
* DC  PURPOSE 
* 
*     FORMAT THE PERTINENT PORTION OF THE JOURNAL LOG RECORD
* 
* DC  ENTRY CONDITIONS
* 
*     PARAMETERS
* 
*           LOGTYP           BEFORE/AFTER IMAGE RECORD TYPE 
*                             1 = BEFORE IMAGE
*           PKEYWSA          FWA OF THE PRIMARY KEY 
*           PKEYL            LENGTH (CHARS) OF PRIMARY KEY
*           RECWSA           FWA OF RECORD IMAGE
*           RECL             LENGTH (CHARS) OF RECORD IMAGE 
*           ARID             AREA IDENTIFIER
*           FC               FUNCTION BEING EXECUTED
*           JBID             JOB IDENTIFIER 
*           USID             USER IDENTIFIER
*           VERSION          REQUESTED VERSION NAME 
* 
*     SUMMARY OF SOURCE OF PARAMETERS 
* 
*           REQUEST TYPE     JOURNAL LOG PROCESSOR COMMON 
*           DIRECTIVE CODE   JOURNAL LOG PROCESSOR COMMON 
*           LOG TYPE         CALLING SEQUENCE 
*           KEY ADDRESS      CALLING SEQUENCE 
*           KEY LENGTH       CALLING SEQUENCE 
*           RECORD ADDRESS   CALLING SEQUENCE 
*           RECORD LENGTH    CALLING SEQUENCE 
*           AREA IDENTIFIER  PARAMETER FROM CALLING SEQUENCE
*           FUNCTN EXEC      PARAMETER FROM CALLING SEQUENCE
*           JOB IDENTIFIER   PARAMETER FROM CALLING SEQUENCE
*           USER IDENTIFIER  PARAMETER FROM CALLING SEQUENCE
*           REQUESTED VERSION PARAMETER FROM CALLING SEQUENCE 
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL--A "BEFORE/AFTER" IMAGE RECORD HAS BEEN LOGGED 
* 
*     ABNORMAL--A CRM ERROR OCCURRED IN WRITING TO THE LOG FILE 
* 
* DC  CALLING ROUTINES
* 
*     DB$RUPD    RECOVERY RESTORE UPDATE ROUTINE
* 
* DC  CALLED ROUTINES 
* 
*     DB$JLOG    JOURNAL LOG I/O INTERFACE
*     DB$CDIS    CONVERT BINARY TO DISPLAY
* 
* DC  NON-LOCAL VARIABLES 
* 
*     CDCS COMMON (CDCSCOMMN) 
*     JOURNAL LOG PROCESSOR COMMON (JLPCMDCLS)
* 
* DC  DESCRIPTION 
* 
*     1. COMPLETE THE REQUEST TYPE AND DIRECTIVE CODE ENTRIES IN THE
*        HEADER BASED ON THE VALUE OF "LOGTYP". PUT THE NUMBER OF 
*        CHARACTERS OF PADDING (TO MAKE THE LOG RECORD LENGTH A 
*        MULTIPLE OF TEN CHARACTERS) IN THE HEADER. 
*     2. CONVERT THE PRIMARY KEY TO DISPLAY CODE AND STORE IN HEADER. 
*     3. USING THE SUPPLIED PRIMARY KEY LENGTH AND ADDRESS, FORMAT THE
*        KEY IN THE RECORD STUB.
*     4. SETUP THE RECORD ADDRESS AND LENGTH IN JOURNAL LOG COMMON. 
*     5. CALL DB$JLOG TO OUTPUT THE JOURNAL LOG RECORD. 
*     6. RETURN.
* 
 #
      CONTROL EJECT;
  
# PARAMETERS FROM THE CALLING SEQUENCE                                 #
  
      ITEM LOGTYP C(1);                 # BEFORE/AFTER IMAGE CODE      #
      ITEM PKEYWSA;                     # FWA OF THE PRIMARY KEY       #
      ITEM PKEYL;                       # LENGTH (CHARS) OF PRIMARY KEY#
      ITEM RECWSA;                      # FWA OF RECORD IMAGE          #
      ITEM RECL;                        # LENGTH(CHARS) OF RECORD IMAGE#
      ITEM ARID ;                       # AREA ID                      #
      ITEM FC C(1);                     # FUNCTION BEING EXECUTED      #
      ITEM  JBID        C(7);           # JOB IDENTIFIER               #
      ITEM USID         C(10);          # USER IDENTIFIER              #
      ITEM VERSION      C(07);          # REQUESTED VERSION NAME       #
  
  
# LOCAL ITEMS                                                          #
  
      ITEM I;                           # SCRATCH                      #
      ITEM J;                           # SCRATCH                      #
      BASED ARRAY KEYBUF;               # FOR FORMATTING PRIMARY KEY   #
        ITEM KEYVAL  C(0,0,240);
  
  
# EXTERNAL REFERENCES                                                  #
  
      XREF PROC DB$JLOG;                # OUTPUT JOURNAL LOG RECORD    #
      XREF FUNC DB$CDIS C(10);          # CONVERT BINARY TO DISPLAY    #
  
      CONTROL EJECT;
  
# START OF "DB$JLBA" EXECUTABLE CODE                                   #
  
      IF NOT SASCJAFG [SALX]  THEN      # RETURN IF NO JOURNAL LOGGING #
        BEGIN 
  
  
        RETURN; 
        END 
  
# FORMAT PERTINENT ENTRIES IN THE LOG RECORD HEADER                    #
  
      JLHDTYPE[0] = LOGTYP; 
  
# SET DIRECTIVE CODE ACCORDING TO FUNCTION CODE IN TQT ENTRY           #
  
      JLHDDIRC[0] = FC; 
  
#     FORMAT THE RECORD HEADER                                         #
  
      JLHDKEYL [0] = DB$CDIS(PKEYL,3,10,"0"); 
                                        # STORE CONVERTED KEY IN HEADER#
  
# FORMAT THE PRIMARY KEY IMMEDIATELY FOLLOWING THE RECORD HEADER       #
  
      P<PRIMKEY> = LOC(JLBARKEY[0]);    # SET LOCATION IN RECORD       #
      P<KEYBUF> = PKEYWSA;
      PRKEY[0] = C<0,PKEYL>KEYVAL[0]; 
                                        # MOVE KEY FOLLOWING HEADER    #
  
# SETUP PARAMETERS IN LOG COMMON FOR OUTPUT OF LOG RECORD              #
  
      PARLEN = (DFHDRSZ + (PKEYL + 9)/10*10); 
                                        # LENGTH OF RECORD STUB        #
      TRLRLEN = ( RECL + 9 ) / 10 * 10; # TRAILER LENGTH ROUNDED UP    #
                                        # TO NEAREST WORD              #
      JLHDPAD [0] = DB$CDIS(TRLRLEN -   # NUMBER OF UNUSED CHARS       #
                        RECL,1,10," "); # AFTER RECORD IMAGE           #
      WSA = LOC(RECWSA);                # RECORD IMAGE ADDRESS         #
  
# COMPLETE AND OUTPUT THE LOG RECORD                                   #
  
      DB$JLOG(ARID,JBID,USID,VERSION);
  
  END 
      TERM
