*DECK DB$LNIF 
USETEXT JLPCMTX 
USETEXT CDCSCTX 
  PROC DB$LNIF (JLALFN,JLBLFN,LOGERR);
  BEGIN 
 #
* *   DB$LNIF                                    PAGE  1
* *   ACTIVATE LOGGING FILES
* *   W P CEAGLIO                                DATE  1/12/76
* *   A W LO (REVISION)                          DATE 10/ 1/76
* * 
* DC  PURPOSE 
* 
*     INITIALIZE THE FITS FOR THE JOURNAL LOGS AND ACTIVATE THESE FILES 
* 
* DC  ENTRY CONDITIONS
* 
*     THE ARRAY "DB$JFIT" CONTAINS THE MODEL FIT. THE CELL "SALX" IN
*     CDCS COMMON HAS BEEN SET TO THE PROPER SAL ENTRY. 
* 
*     PARAMETERS FROM THE CALLING SEQUENCE
* 
*           JLALFN   LFN OF PRIMARY JOURNAL LOG FILE
*           JLBLFN   LFN OF SECONDARY JOURNAL LOG FILE
*           LOGERR   ERROR STATUS--SET BY DB$LNIF 
* 
*     OTHER REQUIRED PARAMETERS ARE FOUND IN CDCS COMMON
* 
* 
* DC  EXIT CONDITIONS 
* 
*     THE PRIMARY JOURNAL LOG IS ACTIVATED. ALSO, IF THE SECONDARY
*     JOURNAL LOG IS SPECIFIED, IT IS ACTIVATED. "LOGERR" IS SET TO 0.
* 
*     IF ANY ERROR IS DETECTED, "LOGERR" IS SET AS FOLLOWS--
* 
*           1    ERROR INVOLVING PRIMARY/SECONDARY JOURNAL LOG
* 
* DC  CALLING ROUTINES
* 
*     DB$RUPD    RECOVERY RESTORE UPDATE ROUTINE
* 
* DC  CALLED ROUTINES 
* 
*     OPENM      JOURNAL LOG "OPEN" ROUTINE 
*     DB$STAT    CHECK CONTROL POINT STATUS OF LOG FILE 
*     DB$MFA     MEMORY MANAGER INTERFACE 
*     DB$MSG     ISSUE DAYFILE MESSAGE
*     WEOR       WRITE END-OF-SECTION (CRM) 
* 
* DC  NON-LOCAL VARIABLES 
* 
*     CDCS COMMON 
*     JOURNAL LOG COMMON
* 
* DC  DESCRIPTION 
* 
*     1.  ALLOCATE FITS FOR LOGS BY CALLING THE MEMORY MANAGER AND
*         RECORD THEIR LOCATIONS IN THE CURRENT SAL ENTRY.
*     2.  PRESET EACH ALLOCATED FIT BY COPYING OVER THE MODEL FIT.
*         FILL IN THE LOGICAL FILE NAMES USING THE LFNS SPECIFIED IN
*         THE CALLING SEQUENCE. THE MAXIMUM RECORD LENGTH IS SET TO THE 
*         VALUE SPECIFIED IN THE MD CONTROL WORDS.  OPENM IS CALLED 
*         TO OPEN THE JOURNAL LOGS.  IF A JOURNAL LOG IS AN RMS FILE, 
*         THE OPEN POSITIONS THE FILE AT END-OF-INFORMATION--THEN AN
*         END-OF-SECTION IS WRITTEN TO COMPLETE ANY PARTIAL RECORD
*         THAT MAY EXIST. 
*     3.  CHECK IF ANY OF THE LOG FILES ARE IN "DOWN" STATUS BECAUSE
*         IF BOTH OR THE ONLY JOURNAL LOG IS DOWN, DAYFILE A MESSAGE
*         AND DOWN THE SCHEMA.
*     4.  IF LOGS OKAY, ISSUE DAYFILE MESSAGE.
*     5.  ALLOCATE A MEMORY BLOCK FOR THE BASED ARRAY JLREC.
*         THIS MEMORY BLOCK IS USED TO BUILD THE LOG RECORDS FOR THE
*         NEW LOG FILE. 
* 
 #
  
  
# DEFS                                                                 #
  
      DEF DFOPFILE #O"17252420252400000000"#; 
      DEF DFJLEOI #O"05000000000000000000"#;
                                        # FOR OPENM CALL               #
  
# THE FOLLOWING PARAMETERS ARE FROM THE CALLING SEQUENCE               #
  
      ITEM JLALFN C(7);                 # LFN OF PRIMARY JOURNAL LOG   #
                                        # LEFT-JUSTIFIED,ZERO-FILLED   #
      ITEM JLBLFN C(7);                 # LFN OF SECONDARY JOURNAL LOG #
                                        # LEFT-JUSTIFIED,ZERO-FILLED   #
      ITEM LOGERR;                      # ERROR STATUS--SET BY DB$JLGI #
  
# LOCAL ITEMS AND ARRAYS                                               #
  
      ITEM FWA;                         # SCRATCH ITEM                 #
      ITEM I;                           # SCRATCH ITEM                 #
      ITEM J;                           # SCRATCH ITEM                 #
  
      ARRAY LOGMSG S(8);                # NORMAL LOG MESSAGE           #
        BEGIN 
          ITEM LOGTXT   C(0,0,80) = ["LOG FILES OPENED FOR SCHEMA   "]; 
          ITEM LOGSCNAM C(3,0,30);
        END 
  
  
      ARRAY JLMSG S(8);                 #ERROR MESSAGE (JOURNAL LOG)   #
        BEGIN 
          ITEM JLTXT    C(0,0,80) = ["JOURNAL LOG ERROR FOR SCHEMA "];
          ITEM JLSCNAM  C(3,0,30);
        END 
  
  
# EXTERNAL REFERENCES                                                  #
  
      XREF PROC OPENM;                  # OPEN JOURNAL LOG             #
      XREF PROC DB$MFA;                 # ALLOCATE FIXED-POS MM BLOCK  #
      XREF PROC DB$MSG;                 # ISSUE DAYFILE MESSAGE        #
      XREF PROC DB$RA0;                 # TERMINATE PARAMETER SEQUENCE #
      XREF FUNC DB$STAT;                # CHECK CP STATUS OF LOG FILE  #
      XREF PROC WEOR;                   # WRITE END-OF-SECTION (CRM)   #
      XREF ARRAY DB$JFIT;               # MODEL FIT FOR JOURNAL LOG    #
        BEGIN 
          ITEM LOGFITWD;
        END 
  
  
  
  
#     B E G I N   D B $ L N I F   E X E C U T A B L E   C O D E .      #
  
  
# INITIALIZE ERROR CODE REGISTER                                       #
  
      LOGERR = 0; 
  
  
  
# OBTAIN FITS IN MANAGED MEMORY FOR JOURNAL LOGS. PRESET THE FITS BY   #
# COPYING OVER THE CONTENTS OF FIT AND THEN COMPLETING THE LOGICAL     #
# FILE NAME AND MAXIMUM ENTRIES.                                       #
  
  
      IF JLALFN NQ 0 THEN 
       BEGIN
          DB$MFA (DFFITSIZE,FWA);       # ALLOCATE FIT IN MM           #
          SAJLFPTR[SALX] = FWA;         # RECORD FIT LOCATION IN SAL   #
          P<JLFIT> = FWA;               # POINT TO ALLOCATED FIT       #
          J = DFFITSIZE - 1;
          FOR I=0 STEP 1 UNTIL J DO 
            JLFITWD [I] = LOGFITWD [I]; # COPY OVER MODEL FIT          #
          JLFLFN [0] = JLALFN;          # FILL IN LFN                  #
          JLFMRL[0] = SASCMAXLOG[SALX]; # FILL IN MAX LOG RECORD SIZE  #
  
# IF LOG FILE IS PERMANENT FILE, POSITION TO EOI AT OPEN TIME          #
  
      IF DB$STAT(JLALFN) EQ 2 THEN
          BEGIN 
          OPENM (JLFIT,DFOPFILE,DFJLEOI,DB$RA0);
          WEOR (JLFIT,DB$RA0);
          END 
      ELSE
          OPENM (JLFIT,DFOPFILE,DB$RA0);
  
      IF JLFES[0] NQ 0                  # OPEN ERROR. MESSAGE AND ABORT#
      THEN
        BEGIN 
        LOGERR = 1; 
        JLSCNAM[0] = SASCNAME[0]; 
        SAJLSWF[SALX] = FALSE;          # SET NO FURTHER LOGGING       #
        DB$MSG (JLMSG); 
        RETURN; 
        END 
  
#     IF SECONDARY JOURNAL LOG IS PRESENT, PROCESS IT                  #
  
      IF JLBLFN NQ 0 THEN 
       BEGIN
          DB$MFA (DFFITSIZE,FWA);       # ALLOCATE FIT IN MM           #
          SAJLBPTR [SALX] = FWA;        # RECORD FIT LOCATION IN SAL   #
          P<JLFIT> = FWA;               # POINT TO ALLOCATED FIT       #
          J = DFFITSIZE - 1;
          FOR I=0 STEP 1 UNTIL J DO 
            JLFITWD [I] = LOGFITWD [I]; # COPY OVER MODEL FIT          #
          JLFLFN [0] = JLBLFN;          # FILL IN LFN                  #
          JLFMRL[0] = SASCMAXLOG[SALX]; # FILL IN MAX LOG RECORD SIZE  #
  
  
# IF LOG FILE IS PERMANENT FILE, POSITION TO EOI AT OPEN TIME          #
  
      IF DB$STAT(JLBLFN) EQ 2 THEN
          BEGIN 
          OPENM (JLFIT,DFOPFILE,DFJLEOI,DB$RA0);
          WEOR (JLFIT,DB$RA0);
          END 
      ELSE
          OPENM (JLFIT,DFOPFILE,DB$RA0);
  
          IF JLFES [0] NQ 0  THEN       # IF OPEN ERROR, DOWN LOG FILE #
          SAJLBST[SALX] = FALSE;
       END
  
      IF NOT SAJLSWF[SALX]
        AND (NOT SAJLBST[SALX]
          OR SAJLBPTR[SALX] EQ 0) 
      THEN
        BEGIN 
              LOGERR = 1; 
              JLSCNAM [0] = SASCNAME [SALX] ; 
              DB$MSG (JLMSG); 
              RETURN; 
            END 
        END 
  
      LOGSCNAM [0] = SASCNAME [SALX]; 
      DB$MSG (LOGMSG);                  # LOG FILES OPEN MESSAGE       #
  
#     ALLOCATE A MEMORY BLOCK FOR THE BASED ARRAY JLREC.               #
#     THIS MEMORY BLOCK IS USED TO BUILD THE LOG RECORDS FOR THE       #
#     NEW LOG FILE.                                                    #
  
      DB$MFA(DFJLHDSZ,P<JLREC>);
  
      END 
      TERM
