*DECK DB$B10B 
USETEXT BRGENTX 
      PROC DB$B10B; 
      BEGIN 
 #
* *   DB$B10B - MAIN FOR 1,0 OVERLAY OF DBREC    PAGE  1
* *   P. A. MURRAY                               DATE  01/06/80 
* 
* DC  PURPOSE 
* 
*     TO INITIALIZE SYNTAX SCAN OF DBREC. 
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     INPUT AND OUTPUT FILES ARE OPEN.  MASTER DIRECTORY FILE IS OPEN.
* 
* DC  EXIT CONDITIONS 
* 
*     THE EXECUTION TABLE IS BUILT IN CORE.  THE MASTER DIRECTORY 
*     CONTROL WORDS AND THE SCHEMA DIRECTORY TABLE ARE READ INTO CORE.
* 
* DC  CALLING ROUTINES
* 
*     DBREC - BASIC RECOVERY MAIN ROUTINE 
* 
* DC  CALLED ROUTINES 
# 
      XREF FUNC DB$LNK;      # RESERVE AND LINK MM BLOCK               #
      XREF PROC DB$LNKD;     # DELETE LINKED BLOCK                     #
      XREF PROC DB$MDER;     # MD ERROR PROCESSOR                      #
      XREF PROC DB$MFA;      # ALLOCATE A FIXED POSITION CMM BLOCK     #
      XREF PROC DB$MINI;     # INITIALIZE SCANNER                      #
      XREF PROC DB$STD;      # SYNTAX TABLE DRIVER                     #
      XREF PROC DB$WGET;     # READ WA FILE                            #
  
                             # SEMANTIC ROUTINES                       #
      XREF PROC DB$BS01;     # END SCAN -- EMPTY INPUT FILE            #
      XREF PROC DB$BS02;     # END SCAN -- ILLEGAL FIRST WORD ON INPUT #
      XREF PROC DB$BS10;     # VALIDATE SCHEMA NAM                     #
      XREF PROC DB$BS11;     # VALIDATE TRF NAME                       #
      XREF PROC DB$BS12;     # VALIDATE QRF NAME                       #
      XREF PROC DB$BS13;     # VALIDATE RID FILE NAME                  #
      XREF PROC DB$BS14;     # VALIDATE JOURNAL LOG FILE NAME          #
      XREF PROC DB$BS20;     # SET UP ENTRY IN EXECUTION TABLE         #
      XREF PROC DB$BS30;     # CHECK IF CURRENT WORD IS -SCHEMA-       #
      XREF PROC DB$BS31;     # CHECK IF ALLOCATE OPTIONS WERE SPECIFIED#
      XREF PROC DB$BS50;     # TEST AND SET JOURNAL LOG FLAG           #
      XREF PROC DB$BS70;     # VALIDATE AND STORE SIZE                 #
      XREF PROC DB$BS99;     # END SYNTAX SCANNING                     #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     THE FOLLOWING ITEMS ARE INITIALIZED TO 0: 
*       DIRCNT               NO. OF DIRECTIVES FOR CURRENT SCHEMA 
*       ENTRYCOUNT           NUMBER OF ENTRIES IN EXTABLE BLOCK 
*       FIRSTEXT             POINTER TO FIRST EXTABLE BLOCK 
*       FIRSTSCHEMA          FIRST SCHEMA CLAUSE FLAG - SET TO TRUE 
* 
*       SID - 
*         P<SID>             POINTER OF THE SID 
*         SCHNUM             NUMBER OF IDS IN SCHEMA ID TABLE (SID) 
* 
*       P<EXTABLE>           POINTER OF THE EXECUTION TABLE 
* 
* DC  DESCRIPTION 
* 
*     READ IN THE MD CONTROL WORDS AND THE SCHEMA DIRECTORY TABLE.
*     INITIALIZE THE FIXED POSITION BLOCK FOR THE EXECUTION TABLE.
*     INITIALIZE THE FIXED POSITION BLOCK FOR THE SCHEMA ID TABLE (SID).
*     INITIALIZE VARIABLES NEEDED DURING SYNTAX SCAN.  CALL DB$MINI TO
*     INITIALIZE THE SCANNER.  CALL DB$STD TO START THE SYNTAX SCAN.
*     ON RETURN FROM DB$STD, DELETE THE ENTIRE SID, AS IT IS NO LONGER
*     NEEDED.  RETURN TO THE CALLING ROUTINE. 
* 
 #
  
  
*CALL FITMDDCLS 
  
# LOCAL VARIABLES                                                      #
  
      ITEM NEXTSID;          # PTR TO NEXT SID BLOCK                   #
      ITEM SDTSIZE;          # LENGTH (WORDS) OF THE SDT               #
      CONTROL EJECT;
  
# S T A R T    O F   D B $ B 1 0 B   E X E C U T A B L E   C O D E     #
  
  
# READ IN THE MD CONTROL WORDS                                         #
  
      DB$WGET(DB$FTMD,MDCONWD,DFMDNUMCW,1,DB$MDER); 
  
# READ IN THE SCHEMA DIRECTORY TABLE (SDT)                             #
  
      SDTSIZE = DFMDSCDESIZE * MDSDNO[0]; 
      DB$MFA(SDTSIZE,P<MDSCDIR>); 
      DB$WGET(DB$FTMD,MDSCDIR,SDTSIZE,MDSDWA[0],DB$MDER); 
  
# INITIALIZE THE FIXED POSITION BLOCK FOR THE EXECUTION TABLE          #
  
      P<EXTABLE> = LOC(FIRSTEXT); 
      FIRSTEXT = 0; 
      P<EXTABLE> = DB$LNK(P<EXTABLE>,DFEXBLKSZ);
  
# INITIALIZE THE FIXED POSITION BLOCK FOR THE SCHEMA ID TABLE (SID)    #
  
      P<SID> = LOC(FIRSTSID); 
      FIRSTSID = 0; 
      P<SID> = DB$LNK(P<SID>,DFMAXSIDSIZE); 
  
# INITIALIZE VARIABLES NEEDED DURING SYNTAX SCAN                       #
  
      SCHNUM[0] = 0;
      ENTRYCOUNT = 0; 
      DIRCNT = 0; 
      FIRSTSCHEMA = TRUE; 
  
# CALL DB$MINI TO INITIALIZE THE SCANNER.  CALL DB$STD TO START THE    #
# SYNTAX SCAN.                                                         #
  
      DB$MINI;
      DB$STD(DB$SYSW);
  
# DELETE THE ENTIRE SID, AS IT IS NO LONGER NEEDED                     #
  
      P<SID> = FIRSTSID;
      FOR FIRSTSID = FIRSTSID 
          WHILE P<SID> NQ 0 
      DO
        BEGIN 
        DB$LNKD(P<SID>);
        END 
  
# RETURN TO THE CALLING ROUTINE                                        #
  
      RETURN; 
  
# THE SEMANTIC ROUTINE JUMP TABLE IS INCLUDED HERE                     #
  
DB$SYSW:  
*CALL BSMJPDCLS 
  
      END 
      TERM
