*DECK DB$BSNM 
USETEXT BRGENTX 
USETEXT SCANTXT 
      PROC DB$BSNM; 
      BEGIN 
 #
* *   DB$BSNM - VALIDATE AND STORE NAMES         PAGE  1
* *   P. A. MURRAY                               DATE  10/28/80 
* 
* DC  PURPOSE 
* 
*     TO CONTAIN THE SEMANTIC ROUTINES WHICH VALIDATE NAMES AND SET 
*     FLAGS IN THE EXECUTION TABLE.  THIS PROC IS ONLY FOR USE AS A 
*     PACKAGING MODULE.  ITS ENTRY POINT WILL NOT BE REFERENCED.
* 
* DC  CONTAINED ROUTINES
# 
      XDEF PROC DB$BS10;     # VALIDATE SCHEMA NAME                    #
      XDEF PROC DB$BS11;     # VALIDATE TRF NAME                       #
      XDEF PROC DB$BS12;     # VALIDATE QRF NAME                       #
      XDEF PROC DB$BS13;     # VALIDATE RESTART ID FILE NAME           #
      XDEF PROC DB$BS14;     # VALIDATE JOURNAL LOG FILE NAME          #
# 
 #
      CONTROL EJECT;
  
*CALL FITMDDCLS 
      CONTROL EJECT;
      PROC DB$BS10; 
      BEGIN 
 #
* *   DB$BSNM                                    PAGE  1
* *   DB$BS10 - VALIDATE SCHEMA NAME
* *   P. A. MURRAY                               DATE  10/28/80 
* 
* DC  PURPOSE 
* 
*     TO VALIDATE THE SCHEMA NAME AND STORE THE SCHEMA ID IN THE
*     EXECUTION TABLE.
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     CURWORD                CURRENT SOURCE WORD
*     DB$CLNG                LENGTH (IN CHARACTERS) OF CURRENT WORD 
*     ENTRYCOUNT             NUMBER OF ENTRIES IN EXTABLE BLOCK, ALSO 
*                              USED AS AN INDEX INTO EXTABLE. 
*     P<EXTABLE>             POINTS TO CURRENT EXECUTION TABLE MM BLOCK 
*     P<SID>                 POINTS TO CURRENT SCHEMA ID TABLE MM BLOCK 
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL - THE SCHEMA NAME IS VALIDATED AND THE SCHEMA ID IS STORED 
*              IN THE EXECUTION TABLE IN EXSDTX.  THE SCHEMA ID IS ALSO 
*              STORED IN THE SCHEMA ID TABLE (SID).  RETURN IS TO 
*              DB$YES.
* 
*     ABNORMAL - (1) IF THE SCHEMA SPECIFIED IS NOT IN THE MASTER 
*                   DIRECTORY, ISSUE DIAGNOSTIC 115 AND RETURN TO DB$NO.
* 
*                (2) IF THE SCHEMA HAS BEEN PREVIOUSLY SPECIFIED, ISSUE 
*                   DIAGNOSTIC 301.  RETURN IS TO DB$YES. 
* 
* DC  CALLING ROUTINES
* 
*     DB$BSTX - BASIC RECOVERY SYNTAX CRACKER 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$DIAG;     # ISSUE DIAGNOSTIC MESSAGE                #
      XREF FUNC DB$LNK;      # RESERVE AND LINK MM BLOCK               #
      XREF PROC DB$MDER;     # MD ERROR PROCESSOR                      #
      XREF PROC DB$NO;       # SYNTAX TABLE DRIVER -NO- RETURN         #
      XREF PROC DB$WGET;     # READ WA FILE                            #
      XREF PROC DB$YES;      # SYNTAX TABLE DRIVER -YES- RETURN        #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     EXTABLE - 
*         EXSDTX             SCHEMA DIRECTORY TABLE INDEX 
* 
*     SID - 
*         P<SID>             POINTER OF THE SID 
*         SCHNUM             NO. OF SCHEMA IDS IN THE TABLE 
*         SCHPRIOR           PTR TO PRIOR SID MM BLOCK - SET BY DB$LNK
*         SCHNEXT            PTR TO NEXT SID MM BLOCK  - SET BY DB$LNK
*         SCHID              SCHEMA IDENTIFIER
* 
*     SCHNAME                MOST RECENTLY PROCESSED SCHEMA NAME
* 
* DC  DESCRIPTION 
* 
*     VALIDATE THAT THE SCHEMA IS IN THE MD BY LOCATING THE SCHEMA
*     DIRECTORY TABLE (SDT).  IF NO TABLE EXISTS FOR THE SCHEMA 
*     SPECIFIED, ISSUE DIAGNOSTIC 115 AND RETURN TO DB$NO.
* 
*     READ IN THE SCHEMA INFO TABLE.
* 
*     CHECK IF THE SCHEMA HAS BEEN PREVIOUSLY SPECIFIED.  COMPARE THE 
*     SCHEMA ID WITH THE IDS IN THE SCHEMA ID TABLE (SID).  IF A MATCH
*     IS FOUND, ISSUE DIAGNOSTIC 301. 
* 
*     LOCATE THE LAST BLOCK IN THE SID TABLE. 
* 
*     INCREMENT THE TEMPORARY SCHEMA ID COUNTER (SIDCOUNT).  IF IT IS 
*     GREATER THAN THE MAXIMUM SIZE OF THE SID BLOCK (DFMAXSIDSIZE),
*     CALL DB$LNK TO RESERVE AND LINK A NEW MM BLOCK AND RESET THE
*     SCHEMA ID COUNTER TO 1. 
* 
*     STORE THE SCHEMA ID IN THE SID.  STORE THE NUMBER OF SCHEMA IDS IN
*     THE SID HEADER.  STORE THE SDT INDEX IN THE EXECUTION TABLE.
*     RETURN TO DB$YES. 
* 
 #
  
  
# L O C A L   V A R I A B L E S                                        #
  
      ITEM I;                # USED AS INDUCTION VARIABLE              #
      ITEM ID;               # SCHEMA ID                               #
      ITEM MATCHFOUND B;     # TRUE IF THE SCHEMA IS IN THE SDT, OR    #
                             # TRUE IF THE SCHEMA IS IN THE SID        #
      ITEM SIDCOUNT;         # NO. OF SCHEMA IDS IN SID TABLE          #
      CONTROL EJECT;
  
# S T A R T   O F   D B $ B S 1 0   E X E C U T A B L E   C O D E      #
  
# VALIDATE THAT THE SCHEMA IS IN THE MASTER DIRECTORY BY LOCATING THE  #
# SCHEMA DIRECTORY TABLE ENTRY                                         #
  
      SCHNAME = " ";         # STORE SCHEMA NAME, BLANK FILLED         #
      C<0,DB$CLNG>SCHNAME = C<0,DB$CLNG>CURWORDC[0];
      MATCHFOUND = FALSE; 
      SDTINDX = -1; 
  
      FOR I = 0 STEP 1
        WHILE I LS MDSDNO[0]
         AND NOT MATCHFOUND 
      DO                     # SCAN THROUGH SDT LOOKING FOR A          #
                             # MATCHING SCHEMA NAME                    #
        BEGIN 
        IF SCHNAME EQ MDSCNAME[I] 
        THEN
          BEGIN 
          SDTINDX = I;
          MATCHFOUND = TRUE;
          END 
        END 
  
      IF SDTINDX LS 0 
      THEN                   # SCHEMA IS NOT IN THE MD                 #
        BEGIN 
        DB$DIAG(115,SCHNAME); 
        DB$NO;
        END 
  
# READ IN THE SCHEMA INFO TABLE (SIT)                                  #
  
      SITSZ = MDSCSISZ[SDTINDX];
      SITWA = MDSCWASC[SDTINDX];
      DB$WGET(DB$FTMD,MDSCINFO,SITSZ,SITWA,DB$MDER);
  
# COMPARE THE SCHEMA ID WITH THE IDS IN THE SCHEMA ID TABLE (SID) TO   #
# CHECK IF THE SCHEMA HAS BEEN PREVIOUSLY SPECIFIED.  IF SO, ISSUE A   #
# DIAGNOSTIC.                                                          #
  
      ID = MDSCIDNT[SDTINDX]; 
      MATCHFOUND = FALSE; 
      P<SID> = LOC(FIRSTSID); 
  
      FOR I=I WHILE SCHNEXT[0] NQ 0 
        AND NOT MATCHFOUND
      DO                           # STEP THRU SID BLOCKS              #
        BEGIN 
        P<SID> = SCHNEXT[0];
        FOR I = 1 STEP 1
          WHILE I LQ SCHNUM[0]
        DO                         # STEP THRU IDS IN A SID BLOCK      #
          BEGIN 
          IF ID EQ SCHID[I] 
          THEN                     # SCHEMA WAS PREVIOUSLY SPECIFIED   #
            BEGIN 
            DB$DIAG(301,SCHNAME); 
            MATCHFOUND = TRUE;
            I = SCHNUM[0] + 1;
            END 
          END 
        END 
  
# FIND THE LAST BLOCK IN THE SID TABLE                                 #
  
      FOR I=I WHILE SCHNEXT[0] NQ 0 
      DO
        BEGIN 
        P<SID> = SCHNEXT[0];
        END 
  
# INCREMENT THE TEMPORARY SCHEMA ID COUNTER.  IF IT IS GREATER THAN    #
# THE MAXIMUM SIZE OF THE SID BLOCK, CALL DB$LNK TO RESERVE AND LINK A #
# NEW MANAGED MEMORY BLOCK.                                            #
  
      SIDCOUNT = SCHNUM[0] + 1; 
  
      IF SIDCOUNT EQ DFMAXSIDSIZE 
      THEN
        BEGIN 
        P<SID> = DB$LNK(P<SID>,DFMAXSIDSIZE); 
        SIDCOUNT = 1; 
        END 
  
# STORE THE SCHEMA ID IN THE SID.  STORE THE NUMBER OF SCHEMA IDS      #
# IN THE SID HEADER.                                                   #
  
      SCHID[SIDCOUNT] = ID; 
      SCHNUM[0] = SIDCOUNT; 
  
# STORE THE SCHEMA ID IN THE EXECUTION TABLE.                          #
  
      EXSDTX[ENTRYCOUNT] = SDTINDX; 
  
      DB$YES; 
  
      END 
      CONTROL EJECT;
      PROC DB$BS11; 
      BEGIN 
 #
* *   DB$BSNM                                    PAGE  1
* *   DB$BS11 - VALIDATE TRF NAME 
* *   P. A. MURRAY                               DATE  10/28/80 
* 
* DC  PURPOSE 
* 
*     TO VALIDATE THE TRF NAME AND SET THE TRF FLAG IN THE EXECUTION
*     TABLE.
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     CURWORD                CURRENT SOURCE WORD
*     DB$CLNG                LENGTH (IN CHARACTERS) OF CURRENT WORD 
*     ENTRYCOUNT             NUMBER OF ENTRIES IN EXTABLE BLOCK, ALSO 
*                            USED AS AN INDEX INTO EXTABLE. 
*     P<EXTABLE>             POINTS TO CURRENT EXECUTION TABLE MM BLOCK 
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL - THE TRF NAME IS VALIDATED AND THE TRF FLAG IN THE
*              EXECUTION TABLE IS TRUE.  RETURN IS TO DB$NO.
* 
*     ABNORMAL - (1) IF THE TRF IS NOT PRESENT FOR THE CURRENT SCHEMA,
*                   ISSUE DIAGNOSTIC 307. 
* 
*                (2) IF THE FIRST 6 CHARACTERS OF THE TRF NAME ARE NOT
*                   IN THE MASTER DIRECTORY, ISSUE DIAGNOSTIC 308.
* 
*                (3) IF THE TRF HAS BEEN PREVIOUSLY SPECIFIED, ISSUE
*                   DIAGNOSTIC 316. 
* 
*                (4) IF THE LENGTH OF THE TRF NAME DOES NOT EQUAL 7,
*                   ISSUE DIAGNOSTIC 323. 
* 
*                (5) IF THE SEVENTH CHARACTER IS NOT A "1", ISSUE 
*                   DIAGNOSTIC 322. 
* 
* DC  CALLING ROUTINES
* 
*     DB$BSTX - BASIC RECOVERY SYNTAX CRACKER 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$DIAG;     # ISSUE DIAGNOSTIC MESSAGE                #
      XREF PROC DB$NO;       # SYNTAX TABLE DRIVER -NO- RETURN         #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     EXTRFLG                TRANSACTION RECOVERY FILE FLAG 
*     EXTRNUM                NUMBER OF THE TRANSACTION RECOVERY FILE
*     P<MDPIT>               POINTER OF THE MD PFINFO TABLE 
* 
* DC  DESCRIPTION 
* 
*     IF EXTRFLG IS TRUE, ISSUE DIAGNOSTIC 316 AND RETURN.  SET EXTRFLG 
*     TO TRUE.
* 
*     IF THE TRF FLAG IN THE SCHEMA DIRECTORY TABLE IS FALSE, ISSUE 
*     DIAGNOSTIC 307 AND RETURN.
* 
*     IF THE LENGTH OF THE TRF NAME DOES NOT EQUAL 7, ISSUE DIAGNSOTIC
*     323 AND RETURN. 
* 
*     LOCATE THE PERMANENT FILE INFORMATION FOR THE TRF IN THE SCHEMA 
*     INFO TABLE.  IF THE FIRST 6 CHARACTERS OF THE TRF NAME ARE NOT
*     THE SAME AS THE PFN IN THE MD, ISSUE DIAGNOSTIC 308 AND RETURN. 
* 
*     IF THE SEVENTH CHARACTER OF THE TRF NAME IS NOT A "1", ISSUE
*     DIAGNOSTIC 322.  STORE THE TRF NUMBER (INDICATED BY THE SEVENTH 
*     CHARACTER) IN EXTRNUM.  RETURN TO DB$NO.
* 
 #
      CONTROL EJECT;
  
# S T A R T   O F   D B $ B S 1 1   E X E C U T A B L E   C O D E      #
  
# IF TRANSACTION WAS PREVIOUSLY SPECIFIED, ISSUE A DIAGNOSTIC AND      #
# RETURN.                                                              #
  
      IF EXTRFLG[ENTRYCOUNT]
      THEN
        BEGIN 
        DB$DIAG(316); 
        DB$NO;
        END 
  
# SET THE TRF FLAG IN THE EXECUTION TABLE.                             #
  
      EXTRFLG[ENTRYCOUNT] = TRUE; 
  
# IF NO TRF IS SPECIFIED FOR THE SCHEMA IN THE MD, ISSUE A DIAGNOSTIC  #
# AND RETURN.                                                          #
  
      IF NOT MDSCTRFG[SDTINDX]
      THEN
        BEGIN 
        DB$DIAG(307); 
        DB$NO;
        END 
  
# IF THE LENGTH OF THE TRF NAME DOES NOT EQUAL 7, ISSUE A DIAGNOSTIC   #
# AND RETURN.                                                          #
  
      IF DB$CLNG NQ 7 
      THEN
        BEGIN 
        DB$DIAG(323); 
        DB$NO;
        END 
  
# VALIDATE THAT THE FIRST 6 CHARACTERS ARE IN THE MD.  IF NOT, ISSUE A #
# DIAGNOSTIC.                                                          #
  
      P<MDPIT> = LOC(MDSCINFO[0]) + MDSITRFP[0];
  
      IF C<0,6>CURWORDC[0] NQ C<0,6>MDPITNAME[0]
      THEN
        BEGIN 
        DB$DIAG(308); 
        DB$NO;
        END 
  
# IF THE SEVENTH CHARACTER IS NOT A 1, ISSUE A DIAGNOSTIC AND RETURN.  #
  
      TRFNUM = C<6,1>CURWORDC[0] - O"33"; 
  
      IF TRFNUM NQ 1
      THEN
        BEGIN 
        DB$DIAG(322); 
        DB$NO;
        END 
  
# STORE THE TRF NUMBER (INDICATED BY THE SEVENTH CHARACTER) IN THE     #
# EXECUTION TABLE.                                                     #
  
      EXTRNUM[ENTRYCOUNT] = TRFNUM; 
  
# RETURN TO THE CALLING ROUTINE.                                       #
  
      DB$NO;
  
      END 
      CONTROL EJECT;
      PROC DB$BS12; 
      BEGIN 
 #
* *   DB$BSNM                                    PAGE  1
* *   DB$BS12 - VALIDATE QRF NAME 
* *   P. A. MURRAY                               DATE  12/15/80 
* 
* DC  PURPOSE 
* 
*     TO VALIDATE THE QRF NAME AND SET THE QRF FLAG IN THE EXECUTION
*     TABLE.
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     CURWORD                CURRENT SOURCE WORD
*     DB$CLNG                LENGTH (IN CHARACTERS) OF CURRENT WORD 
*     ENTRYCOUNT             NUMBER OF ENTRIES IN EXTABLE BLOCK, ALSO 
*                              USED AS AN INDEX INTO EXTABLE. 
*     P<EXTABLE>             POINTS TO CURRENT EXECUTION TABLE MM BLOCK 
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL - THE QRF NAME IS VALIDATED AND THE QRF FLAG IN THE
*              EXECUTION TABLE IS TRUE. FILECLAUSE IS SET TO DFQUICK. 
*              RETURN IS TO DB$NO.
* 
*     ABNORMAL - (1) IF THE QRF IS NOT PRESENT FOR THE CURRENT SCHEMA,
*                   ISSUE DIAGNOSTIC 309. 
* 
*                (2) IF THE QRF NAME IS NOT IN THE MASTER DIRECTORY,
*                   ISSUE DIAGNOSTIC 310. 
* 
*                (3) IF THE QRF HAS BEEN PREVIOUSLY SPECIFIED, ISSUE
*                   DIAGNOSTIC 317. 
* 
* DC  CALLING ROUTINES
* 
*     DB$BSTX - BASIC RECOVERY SYNTAX CRACKER 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$DIAG;     # ISSUE DIAGNSOTIC MESSAGE                #
      XREF PROC DB$NO;       # SYNTAX TABLE DRIVER -NO- RETURN         #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     EXQRFLG                QUICK RECOVERY FILE FLAG 
*     P<MDPIT>               POINTER OF THE MD PFINFO TABLE 
* 
* DC  DESCRIPTION 
* 
*     IF EXQRFLG IS TRUE, ISSUE DIAGNOSTIC 317 AND RETURN.  SET EXQRFLG 
*     TO TRUE. SET FILECLAUSE TO DFQUICK. IF THE QRF FLAG IN THE SCHEMA 
*     DIRECTORY TABLE IS FALSE, ISSUE DIAGNOSTIC 309 AND RETURN. LOCATE 
*     THE PERMANENT FILE INFORMATION FOR THE QRF IN THE SCHEMA INFO 
*     TABLE. IF THE QRF NAME IS NOT THE SAME AS THE PFN IN THE MD, ISSUE
*     DIAGNOSTIC 310. RETURN IS TO DB$NO. 
* 
 #
      CONTROL EJECT;
  
# S T A R T   O F   D B $ B S 1 2   E X E C U T A B L E   C O D E      #
  
# IF QUICK WAS PREVIOUSLY SPECIFIED, ISSUE A DIAGNOSTIC AND RETURN.    #
  
      IF EXQRFLG[ENTRYCOUNT]
      THEN
        BEGIN 
        DB$DIAG(317); 
        DB$NO;
        END 
  
# SET THE QRF FLAG IN THE EXECUTION TABLE.                             #
  
      EXQRFLG[ENTRYCOUNT] = TRUE; 
  
# SET FILECLAUSE TO DFQUICK.                                           #
  
      FILECLAUSE = DFQUICK; 
  
# IF NO QRF IS SPECIFIED FOR THE SCHEMA IN THE MD, ISSUE A DIAGNOSTIC  #
# AND RETURN.                                                          #
  
      IF NOT MDSCQRFG[SDTINDX]
      THEN
        BEGIN 
        DB$DIAG(309); 
        DB$NO;
        END 
  
# VALIDATE THAT THE QRF SPECIFIED IS IN THE MD.  IF NOT, ISSUE A       #
# DIAGNOSTIC.                                                          #
  
      P<MDPIT> = LOC(MDSCINFO[0]) + MDSIQRFP[0];
  
      IF DB$CLNG GR 7 
        OR C<0,DB$CLNG>CURWORDC[0] NQ C<0,DB$CLNG>MDPITNAME[0]
      THEN
        BEGIN 
        DB$DIAG(310); 
        END 
  
      DB$NO;
  
      END 
      CONTROL EJECT;
      PROC DB$BS13; 
      BEGIN 
 #
* *   DB$BSNM                                    PAGE  1
* *   DB$BS13 - VALIDATE RIF NAME 
* *   P. A. MURRAY                               DATE  10/28/80 
* 
* DC  PURPOSE 
* 
*     TO VALIDATE THE RESTART IDENTIFIER FILE NAME AND SET THE RIF FLAG 
*     IN THE EXECUTION TABLE. 
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     CURWORD                CURRENT SOURCE WORD
*     DB$CLNG                LENGTH (IN CHARACTERS) OF CURRENT WORD 
*     ENTRYCOUNT             NUMBER OF ENTRIES IN EXTABLE BLOCK, ALSO 
*                              USED AS AN INDEX INTO EXTABLE. 
*     P<EXTABLE>             POINTS TO CURRENT EXECUTION TABLE MM BLOCK 
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL - THE RID FILE NAME IS VALIDATED AND THE RIF FLAG IN THE 
*              EXECUTION TABLE IS TRUE.  RETURN IS TO DB$NO.
* 
*     ABNORMAL - (1) IF THE RID FILE IS NOT PRESENT FOR THE CURRENT 
*                   SCHEMA, ISSUE DIAGNOSTIC 311. 
* 
*                (2) IF THE RID FILE NAME IS NOT IN THE MASTER DIRECTORY
*                   ISSUE DIAGNOSTIC 312. 
* 
*                (3) IF THE RID FILE HAS BEEN PREVIOUSLY SPECIFIED, 
*                   ISSUE DIAGNOSTIC 318. 
* 
* DC  CALLING ROUTINES
* 
*     DB$BSTX - BASIC RECOVERY SYNTAX CRACKER 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$DIAG;     # ISSUE DIAGNOSTIC MESSAGE                #
      XREF PROC DB$NO;       # SYNTAX TABLE DRIVER -NO- RETURN         #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     EXRIFLG                RESTART IDENTIFIER FILE FLAG 
*     P<MDPIT>               POINTER OF THE MD PFINFO TABLE 
* 
* DC  DESCRIPTION 
* 
*     IF EXRIFLG IS TRUE, ISSUE DIAGNOSTIC 318 AND RETURN. SET
*     EXRIFLG TO TRUE. IF THE RIF FLAG IN THE SCHEMA DIRECTORY TABLE
*     IS FALSE, ISSUE DIAGNOSTIC 311 AND RETURN.  LOCATE THE PERMANENT
*     FILE INFORMATION FOR THE RIF IN THE SCHEMA INFO TABLE. IF THE RIF 
*     NAME IS NOT THE SAME AS THE PFN IN THE MD, ISSUE DIAGNSOTIC 312.
*     RETURN IS TO DB$NO. 
* 
 #
      CONTROL EJECT;
  
# S T A R T   O F   D B $ B S 1 3   E X E C U T A B L E   C O D E      #
  
# IF RESTART WAS PREVIOUSLY SPECIFIED, ISSUE A DIAGNOSTIC AND RETURN.  #
  
      IF EXRIFLG[ENTRYCOUNT]
      THEN
        BEGIN 
        DB$DIAG(318); 
        DB$NO;
        END 
  
# SET THE RIF FLAG IN THE EXECUTION TABLE.                             #
  
      EXRIFLG[ENTRYCOUNT] = TRUE; 
  
# IF NO RIF IS SPECIFIED FOR THE SCHEMA IN THE MD, ISSUE A DIAGNOSTIC  #
# AND RETURN.                                                          #
  
      IF NOT MDSCRIFG[SDTINDX]
      THEN
        BEGIN 
        DB$DIAG(311); 
        DB$NO;
        END 
  
# VERIFY THAT THE RIF SPECIFIED IS IN THE MD. IF NOT, ISSUE A          #
# DIAGNOSTIC.                                                          #
  
      P<MDPIT> = LOC(MDSCINFO[0]) + MDSIRIFP[0];
  
      IF DB$CLNG GR 7 
        OR C<0,DB$CLNG>CURWORDC[0] NQ C<0,DB$CLNG>MDPITNAME[0]
      THEN
        BEGIN 
        DB$DIAG(312); 
        END 
  
      DB$NO;
  
      END 
      CONTROL EJECT;
      PROC DB$BS14; 
      BEGIN 
 #
* *   DB$BSNM                                    PAGE  1
* *   DB$BS14 - VALIDATE JOURNAL LOG NAME 
* *   P. A. MURRAY                               DATE  10/28/80 
* 
* DC  PURPOSE 
* 
*     TO VALIDATE THE JOURNAL LOG FILE NAME AND STORE THE JLF NUMBER
*     IN THE EXECUTION TABLE. 
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     CURWORD                CURRENT SOURCE WORD
*     DB$CLNG                LENGTH (IN CHARACTERS) OF CURRENT WORD 
*     ENTRYCOUNT             NUMBER OF ENTRIES IN EXTABLE BLOCK, ALSO 
*                              USED AS AN INDEX INTO EXTABLE. 
*     P<EXTABLE>             POINTS TO CURRENT EXECUTION TABLE MM BLOCK 
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL - THE JOURNAL LOG FILE NAME IS VALIDATED AND THE NUMBER
*              OF THE JLF IS STORED IN THE EXECUTION TABLE.  RETURN IS
*              TO DB$NO.
* 
*     ABNORMAL - (1) IF JOURNAL LOGGING IS NOT SPECIFIED FOR THE CURRENT
*                   SCHEMA, RETURN TO DB$NO.
* 
*                (2) IF THE LENGTH OF THE JOURNAL LOG FILE NAME DOES NOT
*                   EQUAL 7, ISSUE DIAGNOSTIC 302 AND RETURN TO DB$NO.
* 
*                (3) IF THE FIRST 6 CHARACTERS OF THE JOURNAL LOG FILE
*                   DO NOT MATCH THE JOURNAL LOG NAME IN THE MD, ISSUE
*                   DIAGNOSTIC 314 AND RETURN TO DB$NO. 
* 
*                (4) IF THE SEVENTH CHARACTER IS NOT A "1" OR A "2",
*                   ISSUE DIAGNOSTIC 315 AND RETURN TO DB$NO. 
* 
* DC  CALLING ROUTINES
* 
*     DB$BSTX - BASIC RECOVERY SYNTAX CRACKER 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$DIAG;     # ISSUE DIAGNOSTIC MESSAGE                #
      XREF PROC DB$NO;       # SYNTAX TABLE DRIVER -NO- RETURN         #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     EXTABLE - 
*         EXJLNUM            NUMBER OF THE JOURNAL LOG FILE 
*         EXJLFLG            JOURNAL LOG FLAG 
* 
*     P<MDPIT>               POINTER OF THE MD PFINFO TABLE 
* 
* DC  DESCRIPTION 
* 
*     IF THE JLF FLAG IN THE SCHEMA DIRECTORY TABLE IS FALSE, THEN
*     RETURN TO DB$NO.
* 
*     IF DB$CLNG DOES NOT EQUAL 7, ISSUE DIAGNOSTIC 302 AND RETURN TO 
*     DB$NO.
* 
*     LOCATE THE PERMANENT FILE INFORMATION FOR THE JOURNAL LOG FILE
*     IN THE SCHEMA INFO TABLE.  IF THE FIRST 6 CHARACTERS OF THE JLF 
*     NAME ARE NOT THE SAME AS THE PFN IN THE MD, ISSUE DIAGNOSTIC 314
*     AND RETURN TO DB$NO.
* 
*     CHECK IF THE SEVENTH CHARACTER OF THE LOG FILE NAME IS EITHER A 
*     "1" OR A "2" AND IF NOT, ISSUE DIAGNOSTIC 315.  STORE THE JOURNAL 
*     LOG FILE NUMBER (INDICATED BY THE SEVENTH CHARACTER) IN EXJLNUM.
* 
*     RETURN TO DB$NO.
* 
 #
  
  
# S T A R T   O F   D B $ B S 1 4   E X E C U T A B L E   C O D E      #
  
  
# IF JOURNAL LOGGING IS NOT SPECIFIED FOR THE SCHEMA IN THE MD, THEN   #
# RETURN TO DB$NO.                                                     #
  
      IF NOT MDSCJLFG[SDTINDX]
      THEN
        BEGIN 
        DB$NO;
        END 
  
# IF THE LENGTH OF THE JLF NAME DOES NOT EQUAL 7, ISSUE A DIAGNOSTIC   #
# AND RETURN.                                                          #
  
      IF DB$CLNG NQ 7 
      THEN
        BEGIN 
        DB$DIAG(302); 
        DB$NO;
        END 
  
# VALIDATE THAT THE FIRST 6 CHARACTERS ARE IN THE MD.  IF NOT, ISSUE A #
# DIAGNOSTIC AND RETURN.                                               #
  
      P<MDPIT> = LOC(MDSCINFO[0]) + MDSIJLFP[0];
  
      IF C<0,6>CURWORDC[0] NQ C<0,6>MDPITNAME[0]
      THEN
        BEGIN 
        DB$DIAG(314); 
        DB$NO;
        END 
  
# IF THE SEVENTH CHARACTER IS NOT A 1 OR A 2, ISSUE A DIAGNOSTIC AND   #
# RETURN.                                                              #
  
      LOGNUM = C<6,1>CURWORDC[0] - O"33"; 
  
      IF LOGNUM LS 1
        OR LOGNUM GR DFMDNJLF 
      THEN
        BEGIN 
        DB$DIAG(315); 
        DB$NO;
        END 
  
# STORE THE JOURNAL LOG NUMBER (INDICATED BY THE SEVENTH CHARACTER) IN #
# THE EXECUTION TABLE.                                                 #
  
      EXJLNUM[ENTRYCOUNT] = LOGNUM; 
  
      DB$NO;
  
      END 
  
      END    #DB$BSNM#
      TERM
