*DECK DB$BALJ 
USETEXT BRGENTX 
USETEXT JLPCMTX 
      PROC DB$BALJ( (EXTINDEX) ); 
      BEGIN 
 #
* *   DB$BALJ - ALLOCATE JOURNAL LOG FILES       PAGE  1
* *   E. P. JOHNSON                              DATE  03/16/81 
* * 
* 
* DC  PURPOSE 
* 
*     TO PRESET THE JOURNAL LOG FILES AND TO INITIALIZE THE HEADERS.
* 
* DC  ENTRY CONDITIONS
* 
*     PARAMETERS
# 
      ITEM EXTINDEX I;                 # INDEX INTO THE EXECUTION TABLE#
# 
*     ASSUMPTIONS 
* 
*     MDSCDIR                MD SCHEMA DIRECTORY TABLE HAS BEEN READ IN.
*     MDSCINFO               MD SCHEMA INFORMATION TABLE HAS BEEN 
*                            READ IN. 
*     PRESETBUF              THE LOCATION OF THE PRESET BUFFER IS SET.
*     SDTINDX                THE INDEX INTO THE MD SCHEMA DIRECTORY 
*                            TABLE IS SET.
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL - THE SPECIFIED NUMBER OF FILES HAVE BEEN ALLOCATED
*              WITHOUT ERROR. 
* 
*     ABNORMAL - AT LEAST ONE OF THE FILES TO BE ALLOCATED HAS
*               HAD ONE OF THE FOLLOWING ERRORS:  
* 
*               (1) IF A FILE WAS NOT SUCCESSFULLY ATTACHED, THEN 
*                  ISSUE ERROR MESSAGE DFERR05 AND CONTINUE WITH
*                  THE NEXT FILE. 
* 
*               (2) IF AN ERROR OCCURRED WHILE PRESETTING A FILE, THEN
*                  ISSUE ERROR MESSAGE DFERR03, RETURN THE FILE AND 
*                  CONTINUE WITH THE NEXT FILE. 
* 
*               (3) IF AN ERROR OCCURRED DURING A REWIND, THEN ISSUE
*                  ERROR MESSAGE DFERR02, RETURN THE FILE AND 
*                  CONTINUE WITH THE NEXT FILE. 
* 
*               (4) IF AN ERROR OCCURRED WHILE REWRITING THE HEADER,
*                  THEN ISSUE ERROR MESSAGE DFERR03, RETURN THE FILE
*                  AND CONTINUE WITH THE NEXT FILE. 
* 
*               (5) IF AN ERROR OCCURRED DURING THE EXTEND OF THE FILE, 
*                  THEN ISSUE ERROR MESSAGE DFERR04, RETURN THE FILE
*                  AND CONTINUE WITH THE NEXT FILE. 
* 
* DC  CALLING ROUTINES
* 
*     DB$BALL                ALLOCATE DIRECTIVE 
* 
* DC  CALLED ROUTINES 
# 
      XREF FUNC CLOCK C(10);           # OBTAIN SYSTEM TIME.           #
      XREF FUNC DATE C(10);            # OBTAIN SYSTEM DATE.           #
      XREF PROC DB$ATWR;               # ATTACH PROCESSOR.             #
      XREF PROC DB$BERR;               # DBREC ERROR PROCESSOR.        #
      XREF PROC DB$BURP;               # USER REPORT GENERATOR.        #
      XREF FUNC DB$CDIS C(10);         # CONVERT NUMBER TO DISPLAY CODE#
      XREF PROC DB$EXT;                # EXTEND NOS/BE PERM FILES.     #
      XREF PROC DB$IORW;               # CIO REWIND.                   #
      XREF PROC DB$IOWR;               # CIO REWRITER.                 #
      XREF PROC DB$PRST;               # WRITE PRESET.                 #
      XREF PROC DB$RCLL;               # WAIT FOR I/O TO COMPLETE.     #
      XREF PROC DB$RTN;                # RETURN A FILE.                #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     FET                    THE FET USED FOR JOURNAL LOG FILE I/O. 
*     INSERTITEMI            SPECIAL MESSAGE TEXT FORMATTER INTEGER 
*                            INSERTION ITEM.
*     P<JLREC>               JOURNAL LOG RECORD BASED ARRAY POINTER.
*        THE JOURNAL LOG FILE HEADER RECORD.
*     P<MDPIT>               PERMANENT FILE INFORMATION TABLE BASED 
*                            ARRAY POINTER. 
*        MDPITNAME           PERMANENT FILE NAME. 
* 
* DC  DESCRIPTION 
* 
*     - COMPUTE THE SIZE OF THE JOURNAL LOG FILE IN WORDS.
* 
*     - COMPUTE THE SIZE, IN CHARACTERS, OF THE TRAILER PORTION OF
*       THE JOURNAL LOG HEADER RECORD.
* 
*     - SET THE BASED ARRAY POINTER OF THE JOURNAL LOG PERMANENT
*       FILE INFORMATION TABLE. 
* 
*     - IF A FILE NUMBER IS SPECIFIED IN THE EXECUTION TABLE, THEN SET
*       THE ALLOCATION LOOP LIMITS FOR THE ALLOCATION OF ONE FILE. ELSE,
*       SET THE LOOP LIMITS FOR THE ALLOCATION OF ALL FILES.
* 
*     - LOOP UNTIL THE SPECIFIED NUMBER OF FILES HAVE BEEN ALLOCATED. 
* 
*     - APPEND THE FILE NUMBER (LOOP VARIABLE) ONTO THE PERMANENT 
*       FILE NAME.
* 
*     - TRY TO ATTACH THE FILE. 
* 
*     - IF THE FILE WAS NOT SUCCESSFULLY ATTACHED, THEN ISSUE AN
*       ERROR MESSAGE AND CONTINUE WITH THE NEXT FILE.
* 
*     - INITIALIZE THE FET USING THE MODEL JOURNAL LOG FILE FET.
* 
*     - PRESET THE FILE FOR THE NUMBER OF WORDS SPECIFIED.
* 
*     - IF AN ERROR OCCURRED WHILE PRESETTING THE FILE, THEN ISSUE
*       AN ERROR MESSAGE, RETURN THE FILE AND CONTINUE WITH 
*       THE NEXT FILE.
* 
*     - REWIND THE FILE.
* 
*     - IF AN ERROR OCCURRED DURING THE REWIND, THEN ISSUE AN ERROR 
*       MESSAGE, RETURN THE FILE AND CONTINUE WITH THE NEXT FILE. 
* 
*     - INITIALIZE THE HEADER OF THE FILE.
* 
*     - REWRITE THE HEADER RECORD OF THE FILE.
* 
*     - IF AN ERROR OCCURRED WHILE REWRITING THE HEADER, THEN ISSUE AN
*       ERROR MESSAGE, RETURN THE FILE AND CONTINUE WITH THE NEXT FILE. 
* 
*     - ISSUE A SYSTEM PERMANENT FILE EXTEND REQUEST. 
* 
*     - IF AN ERROR OCCURRED DURING THE EXTEND OF THE FILE, THEN ISSUE
*       AN ERROR MESSAGE, RETURN THE FILE AND CONTINUE WITH THE 
*       NEXT FILE.
* 
*     - RETURN THE FILE.
* 
*     - PRINT A SUCCESSFUL ALLOCATION MESSAGE ON THE DBREC OUTPUT FILE. 
* 
*     - CONTINUE WITH THE NEXT FILE.
* 
*     - RETURN TO THE CALLER. 
* 
 #
  
# LOCAL VARIABLES.                                                     #
  
      ITEM ATTACHSTATUS I;             # STATUS OF AN ATTACH.          #
      ITEM DATETIME C(10);             # FOR SYSTEM DATE AND TIME      #
                                       # REQUEST.                      #
      ITEM EXTENDSTATUS I;             # STATUS OF THE EXTEND REQUEST. #
      ITEM FIRSTFILE I;                # THE NUMBER OF THE FIRST FILE  #
                                       # TO ALLOCATE.                  #
      ITEM I     I;                    # LOOP VARIABLE.                #
      ITEM INDEX I;                    # LOOP VARIABLE.                #
      ITEM LASTFILE I;                 # THE NUMBER OF THE LAST FILE   #
                                       # TO ALLOCATE.                  #
      ITEM SIZE  I;                    # JOURNAL LOG SIZE IN WORDS.    #
      ITEM TRLSIZE C(6);               # THE SIZE IN CHARACTERS OF THE #
                                       # TRAILER PORTION OF THE JOURNAL#
                                       # LOG HEADER RECORD.            #
  
# EXTERNALLY REFERENCED ARRAYS.                                        #
  
      XREF ARRAY DB$LFET;              # MODEL JOURNAL LOG FILE FET.   #
        BEGIN 
        ITEM JLFETWD U(00,00,60); 
        END 
  
  
  
  
# S T A R T   O F   D B $ B A L J   E X E C U T A B L E   C O D E      #
  
  
# COMPUTE THE SIZE OF THE JOURNAL LOG FILE IN WORDS.                   #
  
      SIZE = (EXJLSZ[EXTINDEX] * DFPRUSIZ) + DFJLFPAD;
  
# COMPUTE THE SIZE, IN CHARACTERS, OF THE TRAILER PORTION OF THE       #
# JOURNAL LOG HEADER RECORD.                                           #
  
      TRLSIZE = DB$CDIS(((DFJLHDREC * 10) - DFHDRSZ),6,10,"0"); 
  
# SET THE BASED ARRAY POINTER OF THE JOURNAL LOG PERMANENT FILE        #
# INFORMATION TABLE.                                                   #
  
      P<MDPIT> = LOC(MDSCINFO) + MDSIJLFP[0]; 
  
# IF A FILE NUMBER IS SPECIFIED IN THE EXECUTION TABLE, THEN SET THE   #
# ALLOCATION LOOP LIMITS FOR THE ALLOCATION OF ONE FILE. ELSE, SET THE #
# LOOP LIMITS FOR THE ALLOCATION OF ALL FILES.                         #
  
      IF EXJLNUM[EXTINDEX] GR 0 
      THEN                             # ONE FILE IS TO BE ALLOCATED.  #
        BEGIN 
        LASTFILE = EXJLNUM[EXTINDEX]; 
        FIRSTFILE = LASTFILE; 
        END 
      ELSE                             # ALL FILES ARE TO BE ALLOCATED.#
        BEGIN 
        LASTFILE = MDSIJLFN[0]; 
        FIRSTFILE = 1;
        END 
  
# LOOP UNTIL THE SPECIFIED NUMBER OF FILES HAVE BEEN ALLOCATED.        #
  
      FOR I = FIRSTFILE STEP 1 UNTIL LASTFILE 
      DO
        BEGIN 
  
# APPEND THE FILE NUMBER (LOOP VARIABLE) ONTO THE PERMANENT FILE NAME. #
  
        C<6,1>MDPITNAME[0] = I + O"33"; 
  
# TRY TO ATTACH THE FILE.                                              #
  
        DB$ATWR(B<0,42>MDPITNAME[0],MDPIT,ATTACHSTATUS);
  
# IF THE FILE WAS NOT SUCCESSFULLY ATTACHED, THEN ISSUE AN ERROR       #
# MESSAGE AND CONTINUE WITH THE NEXT FILE.                             #
  
        IF ATTACHSTATUS NQ 0
        THEN
          BEGIN 
          INSERTITEMI = ATTACHSTATUS; 
          DB$BERR(DFERR05); 
          TEST;                        # CONTINUE WITH THE NEXT FILE.  #
  
          END 
  
# INITIALIZE THE FET USING THE MODEL JOURNAL LOG FILE FET.             #
  
        FOR INDEX = DFFETLEN - 1 STEP - 1 UNTIL 0 
        DO
          BEGIN 
          FETLFNWD[INDEX] = JLFETWD[INDEX]; 
          END 
  
        FETLFN[0] = MDPITNAME[0]; 
  
# PRESET THE FILE FOR THE NUMBER OF WORDS SPECIFIED.                   #
  
        FETFIRST[0] = PRESETBUF;       # SET FETFIRST TO THE LOCATION  #
                                       # OF THE PRESET BUFFER.         #
  
        FETLIMIT[0] = FETFIRST[0] + DFPRESETBUF;
                                       # SET FETLIMIT TO THE LOCATION  #
                                       # OF THE PRESET BUFFER PLUS THE #
                                       # LENGTH OF THE PRESET BUFFER.  #
        DB$PRST(LOC(FET),SIZE,FALSE); 
  
# IF AN ERROR OCCURRED WHILE PRESETING THE FILE, THEN ISSUE AN ERROR   #
# MESSAGE, RETURN THE FILE AND CONTINUE WITH THE NEXT FILE.            #
  
        IF FETNOSAT[0] NQ 0 
        THEN
          BEGIN 
          DB$BERR(DFERR03); 
          DB$RTN(FETLFNU[0]); 
          TEST;                        # CONTINUE WITH THE NEXT FILE.  #
  
          END 
  
# REWIND THE FILE.                                                     #
  
        DB$IORW(LOC(FET));
        DB$RCLL(LOC(FET));             # WAIT FOR THE REWIND TO        #
                                       # COMPLETE.                     #
  
# IF AN ERROR OCCURRED DURING THE REWIND, THEN ISSUE AN ERROR MESSAGE, #
# RETURN THE FILE AND CONTINUE WITH THE NEXT FILE.                     #
  
        IF FETNOSAT[0] NQ 0 
        THEN
          BEGIN 
          DB$BERR(DFERR02); 
          DB$RTN(FETLFNU[0]); 
          TEST;                        # CONTINUE WITH THE NEXT FILE.  #
  
          END 
  
# INITIALIZE THE HEADER OF THE FILE.                                   #
  
        P<JLREC> = PRESETBUF; 
  
        JLHDTRLS[0] = TRLSIZE;
        JLFRSCNAM[0] = MDSCNAME[SDTINDX]; 
        JLFRCDATE[0] = DATE(DATETIME);
        JLFRCTIME[0] = CLOCK(DATETIME); 
        JLFRDDATE[0] = "0000000000";
        JLFRDTIME[0] = "0000000000";
        JLFRFLIM[0] = DB$CDIS(EXJLSZ[EXTINDEX],10,10,"0");
        JLFRMBLOK[0] = "00000"; 
        JLFRSTAT[0] = "0";
        JLFRLRPT[0] = "0000000000"; 
        JLFRLRPTL[0] = "0000000002";
        JLFRPFN[0] = MDPITNAME[0];
  
# REWRITE THE HEADER RECORD OF THE FILE.                               #
  
        DB$IOWR(LOC(FET),P<JLREC>,DFJLHDREC); 
        DB$RCLL(LOC(FET));             # WAIT FOR THE REWRITE TO       #
                                       # COMPLETE.                     #
  
# IF AN ERROR OCCURRED WHILE REWRITING THE HEADER, THEN ISSUE AN ERROR #
# MESSAGE, RETURN THE FILE AND CONTINUE WITH THE NEXT FILE.            #
  
        IF FETNOSAT[0] NQ 0 
        THEN
          BEGIN 
          DB$BERR(DFERR03); 
          DB$RTN(FETLFNU[0]); 
          TEST;                        # CONTINUE WITH THE NEXT FILE.  #
  
          END 
  
# ISSUE A SYSTEM PERMANENT FILE EXTEND REQUEST. AN EXPLICIT EXTEND     #
# REQUEST IS ONLY REQUIRED ON NOS/BE. ON NOS THIS ROUTINE DOES NOTHING.#
  
        EXTENDSTATUS = 0; 
        DB$EXT(FETLFN[0],EXTENDSTATUS); 
  
# IF AN ERROR OCCURRED DURING THE EXTEND OF THE FILE, THEN ISSUE AN    #
# ERROR MESSAGE, RETURN THE FILE AND CONTINUE WITH THE NEXT FILE.      #
  
        IF EXTENDSTATUS NQ 0
        THEN
          BEGIN 
          INSERTITEMI = EXTENDSTATUS; 
          DB$BERR(DFERR04); 
          DB$RTN(FETLFNU[0]); 
          TEST;                        # CONTINUE WITH THE NEXT FILE.  #
  
          END 
  
# RETURN THE FILE.                                                     #
  
        DB$RTN(FETLFNU[0]); 
  
# PRINT A SUCCESSFUL ALLOCATION MESSAGE ON THE DBREC OUTPUT FILE.      #
  
        DB$BURP(DFURP04); 
  
        END                            # END OF ALLOCATION LOOP.       #
  
# RETURN TO THE CALLER.                                                #
  
      RETURN; 
  
      END 
      TERM
