*DECK DB$BS20 
USETEXT BRGENTX 
USETEXT SCANTXT 
      PROC DB$BS20; 
      BEGIN 
 #
* *   DB$BS20 - SET UP EXECUTION TABLE ENTRY     PAGE  1
* *   P. A. MURRAY                               DATE  01/28/81 
* 
* DC  PURPOSE 
* 
*     TO SET UP AN ENTRY IN THE EXECUTION TABLE.
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     P<EXTABLE> POINTS TO THE CURRENT EXECUTION TABLE BLOCK. 
*     ENTRYCOUNT EQUALS THE CURRENT NUMBER OF ENTRIES IN THE EXECUTION
*         TABLE BLOCK.
*     DB$CP2 CONTAINS THE FUNCTION CODE OF THE DIRECTIVE. 
* 
* DC  EXIT CONDITIONS 
* 
*     A NEW ENTRY IS SET UP IN THE EXECUTION TABLE.  RETURN IS TO DB$NO.
* 
* 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$NO;       # SYNTAX TABLE DRIVER -NO- RETURN         #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     EXTABLE - 
*       EXFUNC               FUNCTION CODE
* 
*     ENTRYCOUNT             NUMBER OF ENTRIES IN EXECUTION TABLE BLOCK 
* 
* DC  DESCRIPTION 
* 
*     IF THE CURRENT EXTABLE BLOCK IS FULL, RESERVE AND LINK A NEW
*     MANAGED MEMORY BLOCK.  OTHERWISE, INCREMENT ENTRYCOUNT.  STORE
*     THE FUNCTION CODE (IN DB$CP2) IN EXFUNC.  IF THE NEW ENTRY IS A 
*     SCHEMA ENTRY, AND NO DIRECTIVES WERE PROCESSED FOR THE PREVIOUS 
*     SCHEMA, ISSUE DIAGNOSTIC 321.  RETURN TO DB$NO. 
* 
 #
  
  
      CONTROL EJECT;
  
# S T A R T   O F   D B $ B S 2 0   E X E C U T A B L E   C O D E      #
  
  
      IF ENTRYCOUNT EQ DFMAXENT 
      THEN
        BEGIN 
        EXNUMENT[0] = ENTRYCOUNT; 
        P<EXTABLE> = DB$LNK(P<EXTABLE>,DFEXBLKSZ);
        ENTRYCOUNT = 1; 
        END 
      ELSE
        BEGIN 
        ENTRYCOUNT = ENTRYCOUNT + 1;
        END 
  
      EXWORD0[ENTRYCOUNT] = 0;         # INITIALIZE THE ENTRY          #
      EXWORD1[ENTRYCOUNT] = 0;
  
      EXFUNC[ENTRYCOUNT] = DB$CP2;
  
      IF DB$CP2 EQ DFSCHCODE
      THEN
        BEGIN 
        IF DIRCNT EQ 0
         AND NOT FIRSTSCHEMA
        THEN
          BEGIN 
          DB$DIAG(321,SCHNAME); 
          END 
        ELSE
          BEGIN 
          DIRCNT = 0; 
          FIRSTSCHEMA = FALSE;
          END 
        END 
      ELSE
        BEGIN 
        DIRCNT = DIRCNT + 1;
        END 
  
      DB$NO;
  
      END 
      TERM
