*DECK DB$JLST 
USETEXT RVRSCTX 
USETEXT JLDEFTX 
      PROC DB$JLST; 
      BEGIN 
 #
* *   DB$JLST - LIST A JOURNAL LOG RECORD        PAGE  1
* *   J E ESLER                                  DATE  09/07/76 
* *   A W ALLEN - DATABASE VERSIONS              DATE  09/19/80 
* 
* DC  PURPOSE 
* 
*     PRINT PERTINENT INFORMATION CONTAINED IN A JOURNAL LOG RECORD.
* 
* DC  ENTRY CONDITIONS
* 
*     LOG RECORD IS IN DB$RCOM. 
* 
* DC  EXIT CONDITIONS 
* 
*     LOG RECORD INFORMATION IS ON OUTPUT FILE. 
* 
* DC  CALLING ROUTINES
* 
*     DB$CREV                      CHECK FOR BEGIN/END CRITERIA 
*     DB$RSEL                      SELECT LOG FILE RECORDS FOR RECOVER/ 
*                                  RESTORE
*     DB$RUPD                      RECOVER/RESTORE UPDATE ROUTINE 
* 
* DC  CALLED ROUTINES 
# 
      XREF FUNC DB$CBIN;          #CONVERT DISPLAY CODE TO BINARY#
      XREF PROC DB$EPRT;          #PRINT A LINE#
# 
* DC  NON-LOCAL VARIABLES 
* 
*     RECOVERY/RESTORE COMMON 
# 
      XREF ITEM DB$LNLF;           #COUNT OF LINES LEFT#
 #
# 
      CONTROL NOLIST;              # VERDFDCLS - VERSION DEF-S         #
*CALL     VERDFDCLS 
      CONTROL LIST; 
# 
*     LOCAL VARIABLES 
# 
      ITEM HEADER C(120) = "1DATE    TIME        USER ID         AREA ID
     RECORD TYPE";
      ITEM KEYLENGTH;                  #KEY LENGTH# 
      ITEM LINEOUT C(137);         #PRINT LINE# 
      ITEM LINEPOS;                #LINE POSITION#
      ITEM INDEX;                      #LOOP INDEX# 
      ITEM RQTYPE C(1);                #REQUEST CODE# 
      ITEM RECTYPE C(8);               #RECORD TYPE#
#     SAL - THIS IS A LOCAL BASED ARRAY SAL.                           #
*CALL     SACSTDCLS 
*CALL     SALDCLS 
 #
* DC  DESCRIPTION 
 #
      CONTROL EJECT;
 #
*     GENERATE BASIC HEADER INFORMATION FOR OUTPUT LINE.
 #
      LINEOUT = " ";
      LINEPOS = 1;
      C<LINEPOS, 5>LINEOUT = JLHDDATE;
      LINEPOS = LINEPOS + 5;
      C<LINEPOS,10>LINEOUT = JLHDTIME;
      LINEPOS = LINEPOS + 11; 
      C<LINEPOS, 7>LINEOUT = JLHDJBID;
      LINEPOS = LINEPOS + 8;
      C<LINEPOS,10>LINEOUT = JLHDUSID;
      LINEPOS = LINEPOS + 11; 
      C<LINEPOS, 4>LINEOUT = JLHDSCID;
      LINEPOS = LINEPOS + 4;
      C<LINEPOS, 1>LINEOUT = "/"; 
      LINEPOS = LINEPOS + 1;
      C<LINEPOS, 4>LINEOUT = JLHDARID;
      LINEPOS = LINEPOS + 5;
  
      P<SAL>=LOC(DUMMYSAL);        # SET LOCAL SAL POINTER.            #
      IF SASCNOVER[0] GR 1         # IF SCHEMA HAS VERSIONS...         #
      THEN
        BEGIN                      # WRITE VERSION NAME.               #
        C<LINEPOS,7>LINEOUT = JLHDVENM[0];
        END 
      LINEPOS = LINEPOS + 8;       # BLANKS WHEN VERSION IS "MASTER"   #
  
      RQTYPE = JLHDTYPE;
      IF RQTYPE EQ DFJLRQBI THEN
        RECTYPE = "  BEFORE"; 
      ELSE IF RQTYPE EQ DFJLRQAI THEN 
        RECTYPE = "   AFTER"; 
      ELSE IF RQTYPE EQ DFJLRQRP THEN 
        RECTYPE = "RECOV PT"; 
      ELSE IF RQTYPE EQ DFJLRQOP THEN 
        RECTYPE = "OPEN"; 
      ELSE IF RQTYPE EQ DFJLRQPV THEN 
        RECTYPE = "PRIVACY";
      ELSE IF RQTYPE EQ DFJLRQCL THEN 
        RECTYPE = "CLOSE";
      ELSE IF RQTYPE EQ DFJLRQIN THEN 
        RECTYPE = "INVOKE"; 
      ELSE IF RQTYPE EQ DFJLRQTM THEN 
        RECTYPE = "TERMNATE"; 
      ELSE IF RQTYPE EQ DFJLRQCP THEN 
        RECTYPE = "CHKPOINT"; 
      ELSE
        RECTYPE = RQTYPE; 
  
      C<LINEPOS, 8>LINEOUT = RECTYPE; 
      LINEPOS = LINEPOS + 9;
  
      RQTYPE = JLHDDIRC;
      IF RQTYPE EQ DFJLDCD THEN 
        RECTYPE =  "WRITE"; 
      ELSE IF RQTYPE EQ DFJLDCE THEN
        RECTYPE =  "REWRITE"; 
      ELSE IF RQTYPE EQ DFJLDCF THEN
        RECTYPE =  "DELETE";
      ELSE IF RQTYPE EQ DFJLDCA THEN
        RECTYPE = "OPN/RTRV"; 
      ELSE IF RQTYPE EQ DFJLDCB THEN
        RECTYPE = "OPN/UPDT"; 
      ELSE IF RQTYPE EQ DFJLDCC THEN
        RECTYPE = "READ"; 
      ELSE IF RQTYPE EQ DFJLDCZ THEN
        RECTYPE = " ";
      ELSE
        RECTYPE = RQTYPE; 
  
      C<LINEPOS, 8>LINEOUT = RECTYPE; 
      LINEPOS = LINEPOS + 9;
 #
*     ADD KEY FOR BEFORE/AFTER RECORDS. 
 #
      IF JLHDTYPE EQ DFJLRQBI OR JLHDTYPE EQ DFJLRQAI THEN
        BEGIN 
        C<LINEPOS, 5>LINEOUT = "KEY=";
        LINEPOS = LINEPOS + 6;
        KEYLENGTH = DB$CBIN(JLHDKEYL,3,10); 
        IF KEYLENGTH LQ 137 - LINEPOS THEN   #KEY WILL FIT ON LINE# 
          BEGIN 
          C<LINEPOS,KEYLENGTH>LINEOUT = C<0,KEYLENGTH>JLBARKEY; 
          LINEPOS = LINEPOS + KEYLENGTH;
          DB$EPRT(LINEOUT,LINEPOS); 
          RETURN; 
          END 
        ELSE
          BEGIN 
          DB$EPRT(LINEOUT,LINEPOS); 
          C<0,10>LINEOUT = " "; 
          IF KEYLENGTH GR 120 THEN
            BEGIN 
            C<10,120>LINEOUT = C<0,120>JLBARKEY;
            DB$EPRT(LINEOUT,130); 
            KEYLENGTH = KEYLENGTH - 120;
            C<10,120>LINEOUT = C<120,KEYLENGTH>JLBARKEY;
            END 
          ELSE
            BEGIN 
            C<10,120>LINEOUT = C<0,KEYLENGTH>JLBARKEY;
            END 
          LINEPOS = KEYLENGTH + 10; 
          END 
        END 
 #
*     FOR RECOVERY POINT RECORDS, ADD NUMBER AND TEXT TO OUTPUT.
 #
      IF JLHDTYPE EQ DFJLRQRP THEN
        BEGIN 
        C<LINEPOS,10>LINEOUT = JLRPNUMB;
        LINEPOS = LINEPOS + 11; 
        C<LINEPOS,30>LINEOUT = JLRPUTXT;
        LINEPOS = LINEPOS + 31; 
        END 
      DB$EPRT(LINEOUT,LINEPOS); 
      RETURN; 
      END 
      TERM
