*DECK DB$SNTX                                                            SNTX 
PROC DB$SNTX
                                                                         SNTX 
AREA                                0010        10        00
AFTER                               0020
ADD                                 0030         7
ACCESS                              0034
AS                                  0040
ASSIGNED                            0050
ACCOUNT                             0060         1
BEFORE                              0070
BLOCKS                              0100
CHANGE                              0110
CHARGE                              0060         1
CONTROL                             0120
CCLPROC                       *     0124
DELETE                              0130         5
DENSITY                             0140
DEVICE                        *     0150         2
DIRECT                              0154
END                                 0160
FAMILY                        *     0170         2
FILE                          *     0200         1
GE                                  0210
HD                                  0220
HI                                  0230
HY                                  0240
ID                            *     0250         2
IDENTIFIER                          0260
INDIRECT                            0264
INFORMATION                         0270
IS                                  0300
INDEX                               0310                  02
IMAGE                               0320
JOB                           *     0330         1
JOURNAL                       *     0340         1        03
LOG                           *     0350         4
LIBRARY                             0360
LIMIT                               0370
LO                                  0400
MASTER                              0410
MODIFY                              0420         6
MODS                                0430
MODIFICATIONS                       0430
MT                                  0440
NAME                                0450
NT                                  0460
OFF                                 0470
ON                                  0500
PACK                          *     0510         2
PE                                  0520
PFN                                 0530
PROCEDURE                     *     0540         1        04
PW                            *     0550         2
QUICK                         *     0560         1        05
RECORDS                             0570
RECOVERY                            0600
RESTART                       *     0610         1        06
SAME                                0620
SET                           *     0630         2
SUBSCHEMA                           0640
SCHEMA                              0650         3
SCHEMAS                             0660         3
TAPE                          *     0670
TRANSACTION                   *     0700         1        07
TYPE                                0710
UN                            *     0230         2
UNIT                                0720         1
UPDATE                              0730         1
VERSION                             0740        11
VSN                           *     0750         2
.                                   0760        12
+                                                                        SNTX 
*CALL SEMJPDCLS                                                          SEMJMP 
+                                                                        SNTX 
 #
* *   DB$SNTX - DBMSTRD SYNTAX CRACKER
* *   P A MURRAY (JOVEC)                         DATE  02/18/80 
* 
* DC  PURPOSE 
* 
*     TO CRACK THE SYNTAX OF THE INPUT TO THE DBMSTRD UTILITY 
* 
* DC  ENTRY CONDITIONS
* 
*     NONE
* 
* DC  EXIT CONDITIONS 
* 
*     THE INPUT PARAMETERS ARE PROCESSED
* 
* DC  CALLING ROUTINES
* 
*     DB$STD        SYNTAX TABLE DRIVER 
* 
* DC  CALLED ROUTINES 
* 
*     ALL INPUT SEMANTIC ROUTINES 
* 
* DC  DESCRIPTION 
* 
*     READ IN AN INPUT TOKEN AND JUMP TO THE APPROPRIATE SECTION. CALL
*     ANY SEMANTIC ROUTINES SPECIFIED (AS INDICATED BY AN * FOLLOWED BY 
*     THE ROUTINE NAME) AND ISSUE DIAGNOSTICS IF NECESSARY. READ IN NEXT
*     INPUT TOKEN AND REPEAT THE ABOVE PROCESS. 
 #
  
  
  
:START  :10   +EOT                15                                     SNTX 
          /              *DB$SR01      #ABORT RUN, EMPTY INPUT FILE    # SNTX 
        :15   *DB$SR49                 #YES IF RESTART, NO IF INITIAL  #
              INITIAL             17
          /   *DB$SR64                 #CLEAR ALL FLAGS FOR NEW SET    #
        :17   *DB$SR43            20   #YES IF CREATION RUN            #
          /   CRSCHEM                  #CRSCHEM GOES TO ENDSCAN        # SNTX 
        :20   *DB$SR51            22   #WAS LAST WRD SCHEMA            # SNTX 
          /   SCHSET                   #YES ADD SCHEMA. RETURN ONLY IF # SNTX 
                         20            #ERROR IN ADDING SCHEMA. NEXT   # SNTX 
                                       #WRD AN ADD, MOD,DEL OR SCHEMA  # SNTX 
        :22   *DB$SR42            24   #WAS LAST WRD ADD, IF NOT 24    # SNTX 
          /   ADDSET                                                     SNTX 
                         20            #RETURN FROM ADDSET IS ERROR,   # SNTX 
                                       #ADD, MOD, DEL, OR SCHEMA NEXT  # SNTX 
        :24   *DB$SR44            26   #WAS LAST WRD DELETE, IF NOT 26 # SNTX 
          /   DELSET                                                     SNTX 
              22                       #DONE WITH DELETE, SEE WHATS NXT# SNTX 
        :26   *DB$SR47            28   #WAS LAST WRD MODIFY, IF NOT 28 # SNTX 
          /   MODSET                                                     SNTX 
                         22            #RETURN FROM MODSET IS AN ERROR # SNTX 
                                       #ADD, MODIFY OR DELETE NEXT WORD# SNTX 
        :28   +EOT
                         D116          #GARBAGE IN INPUT               #
                         SCTRMMD       #RECOVER                        #
                         *DB$SR45      #WAS LAST THING EOT             #
                                  22
          /   *DB$SR14                 #END SCAN                       # SNTX 
                                                                         SNTX 
#----------------------------------------------------------------------#
                                                                         SNTX 
         # ADD SCHEMAS.  CALLED IN A MOD RUN WHEN ADD IS RECOGNIZED.     SNTX 
           EITHER EXITS TO ENDSCAN WITH A SCHEMA IN CORE OR EOT          SNTX 
           DETECTED OR RETURNS NO IF AN ERROR DETECTED.  IF NO, RETURN   SNTX 
           IS WITH CURWORD ADD, MODIFY, DELETE, OR EOT.                # SNTX 
:ADDSET :10   $SCHEMAS                                                   SNTX 
              $SCHEMA 
                         D113          #ILL-FORMED MOD HEADER          # SNTX 
                         GETADM   NO                                     SNTX 
          /   $.                                                         SNTX 
                         D102          #MISSING PERIOD                 # SNTX 
                         GETADM   NO                                     SNTX 
          /   $SCHEMA                                                    SNTX 
                         D114          #MISSING SCHEMA                 # SNTX 
                         SCTRMMD                                         SNTX 
                         *DB$SR51      #WAS LAST WRD SCHEMA            # SNTX 
                         NO            #ADD MOD OR DELETE              # SNTX 
        :20   SCHSET                                                     SNTX 
                         *DB$SR51      #WAS LAST WRD SCHEMA            # SNTX 
                         NO                                              SNTX 
          /   20                       #DO ANOTHER SCHEMA              # SNTX 
                                                                         SNTX 
#----------------------------------------------------------------------#
                                                                         SNTX 
         # CREATE A SCHEMA.  CALLED IN A CREATION RUN TO BUILD UP A      SNTX 
           SCHEMA FROM THE PARAMETER CARDS.  EXITS TO ENDSCAN.         # SNTX 
:CRSCHEM:10   SCHNTRY                                                    SNTX 
              *DB$SR50                 # IS SCFATAL SET                #
                        15             # NO, CHECK FOR ANOTHER SCHEMA  #
          /   20                       # YES, START RECOVERY           #
       :15    $SCHEMA 
              +EOT                                                       SNTX 
                         D114          #SCHEMA OR EOT REQUIRED         #
                         SCTRMCR       #FOR SCHEMA ENTRY BUT BUILD     # SNTX 
                                       #ENTRY ANYWAY AFTER FINDING TERM# SNTX 
          /   *DB$SR25                 #SET FLAGS FOR NEW SCHEMA       # SNTX 
              *DB$SR14                 #ENDSCAN                        # SNTX 
        :20   *DB$SR10                 #CLEAR ALL FLAGS FOR NEW SET    # SNTX 
              *DB$SR64                 #INITIALIZE FOR A RECOVERY      #
              $SCHEMA 
                        25             # NO, CHECK FOR END-OF-RECORD   #
          /   10
       :25    +EOT
                        30
          /   *DB$SR1I                 # SET END-OF-RECORD FLAG        #
              *DB$SR53                 # SET FINISH FLAG               #
              *DB$SR14                 # END SCAN AND RETURN TO (0,0)  #
       :30    SCTRMCR                  # GET TO SCHEMA OR EOT          #
              *DB$SR45            10   #WAS IT EOT, IF NOT GO TO 10    # SNTX 
              *DB$SR53                 # SET FINISH FLAG               #
              *DB$SR14                 # END SCAN - RETURN TO (0,0)    #
                                                                         SNTX 
#----------------------------------------------------------------------#
                                                                         SNTX 
         # DELETE SET.  CALLED WHEN DELETE IS RECOGNIZED.  IT MODIFIES   SNTX 
           THE SCHEMA DIRECTORY.  RETURN IS ALWAYS TO NO WITH ADD,       SNTX 
           MODIFY, DELETE, OR EOT AS CURWORD.                          # SNTX 
:DELSET :10   $SCHEMAS                                                   SNTX 
              $SCHEMA 
                         D113          #ILL-FORMED MOD HEADER          # SNTX 
                         GETADM   NO                                     SNTX 
          /   $.                                                         SNTX 
                         D102          #MISSING PERIOD                 # SNTX 
                         GETADM   NO                                     SNTX 
       :12    $SCHEMA 
                        D114           # KEYWORD SCHEMA MISSING        #
                        20
        :15   -NAME                                                      SNTX 
              -IS                                                        SNTX 
              +NAME                                                      SNTX 
                         D101          #ILL-FORMED SCHEMA NAME         # SNTX 
                         30                                              SNTX 
          /   *DB$SR38                 #STORE SCHEMA NAME              # SNTX 
              $.                                                         SNTX 
                         D102          #MISSING PERIOD                 # SNTX 
                         30                                              SNTX 
          /   *DB$SR12                 #DELETE SCHEMA FROM DIRECTORY   # SNTX 
                                       #DIAGNOSTICS ISSUED WITHIN      # SNTX 
                                       #DB$SR12 IF SCHEMA NOT FOUND OR # SNTX 
                                       #ALREADY MODIFIED               # SNTX 
              REINIT
              $SCHEMA 
                                  20   # GO CHECK FOR ADD/DEL/MOD      #
          /   15                       # THERE IS ANOTHER SCHEMA TO    #
                                       # BE DELETED                    #
        :20   $ADD                                                       SNTX 
              $MODIFY                                                    SNTX 
              $DELETE             21   #NOT A MOD WORD                 # SNTX 
          /   NO                                                         SNTX 
        :21   +EOT                22                                     SNTX 
          /   *DB$SR1I                 # SET END-OF-RECORD FLAG        #
              *DB$SR14                 # END SCAN                      #
        :22              D116          #GARBAGE DEL CLAUSE             # SNTX 
        :30   SCTRMMD                  #GET TO PROPER KEY WORD         # SNTX 
              *DB$SR51            NO   #WAS LAST WRD SCHEMA            # SNTX 
          /   15                       #DO ANOTHER DELETE              # SNTX 
                                                                         SNTX 
#----------------------------------------------------------------------#
                                                                         SNTX 
         # INITIALIZE.  CALLED WHEN OVERLAY (1,0) IS LOADED FOR THE      SNTX 
           FIRST TIME.  DETERMINES WHETHER THIS IS A MOD RUN OR A        SNTX 
           CREATION RUN.  RETURNS NO AFTER DOING THE PROPER INITIAL-     SNTX 
           IZATION UNLESS FIRST WORD IS NOT ADD, MODIFY, DELETE OR       SNTX 
           SCHEMA IN WHICH CASE RUN IS TERMINATED.                     # SNTX 
NITIAL:10   $SCHEMA             20
          /   *DB$SR15            NO   #INITIALIZE FOR A CREATION RUN  #
        :20   $ADD                                                       SNTX 
              $DELETE                                                    SNTX 
              $MODIFY                                                    SNTX 
                         *DB$SR03      #ABORT RUN, ILLEGAL FIRST WORD  # SNTX 
          /   *DB$SR16            NO   #INITIALIZE FOR A MOD RUN       # SNTX 
                                                                         SNTX 
#----------------------------------------------------------------------#
                                                                         SNTX 
         # SCHEMA SET.  CALLED WHEN SCHEMA IS RECOGNIZED TO BUILD UP A   SNTX 
           SCHEMA.  IF AN ERROR OCCURS, RETURN IS TO NO WITH CURWORD     SNTX 
           EQUAL TO ADD, MODIFY, DELETE, SCHEMA, OR EOT.               # SNTX 
:SCHSET :10   SCHNTRY                                                    SNTX 
              *DB$SR50                 # IS SCFATAL SET                #
                        15             # NO, CONTINUE SCAN             #
          /   20                       # YES, GO RECOVER               #
       :15    $SCHEMA 
              $ADD                                                       SNTX 
              $MODIFY                                                    SNTX 
              $DELETE                                                    SNTX 
              +EOT                                                       SNTX 
                         D113          #NEXT WORD IS INVALID           #
                         SCTRMMD       #GET TERMINATOR AND BUILD SCHEMA# SNTX 
          /   *DB$SR25                 #SET FLAGS FOR NEW SCHEMA       # SNTX 
              *DB$SR14                 #END SCAN                       # SNTX 
        :20   *DB$SR17                 #IS CURRENT WORD A MOD WORD     # SNTX 
                         SCTRMMD       #NO, SO GET THERE               # SNTX 
          /   NO                       #RETURN TO MAIN LOOP            # SNTX 
                                                                         SNTX 
#----------------------------------------------------------------------#
                                                                         SNTX 
         # GET TO ADD, DELETE, OR MODIFY.  RETURNS NO WHEN ANY OF THE 
           ABOVE OR EOT IS DETECTED.                                   # SNTX 
:GETADM :10   $ADD                                                       SNTX 
              $DELETE 
              $MODIFY                                                    SNTX 
              +EOT                                                       SNTX 
              +SNW                10                                     SNTX 
          /   REINIT
              NO
                                                                         SNTX 
#----------------------------------------------------------------------#
                                                                         SNTX 
         # GET TO SCHEMA TERMINATOR FOR CREATION RUN.  SKIPS TO NEXT     SNTX 
           SCHEMA OR EOT AND RETURNS NO.                               # SNTX 
:SCTRMCR:10 
              *DB$SR51                 # WAS LAST WORD SCHEMA          #
                        15             # NO, CONTINUE                  #
          /   NO                       # YES, RETURN TO CALLER         #
       :15    *DB$SR1J                 # WAS EOR ALREADY FOUND         #
                        20
          /   NO                       # RETURN TO CALLER              #
       :20    +SNW
              $SCHEMA 
                        30
          /   NO                       # FOUND NEXT SCHEMA - RETURN    #
       :30    +EOT
                        20             # LOOP TILL VALID WORD          #
          /   *DB$SR1I                 # SET EOR-FOUND-FLAG            #
              NO                       # RETURN TO CALLER              #
                                                                         SNTX 
#----------------------------------------------------------------------#
                                                                         SNTX 
         # GET TO SCHEMA TERMINATOR FOR MOD RUN.  SKIPS TO NEXT SCHEMA,  SNTX 
           ADD, MODIFY, DELETE OR EOT AND RETURNS NO                   # SNTX 
:SCTRMMD:10 
              *DB$SR1J                 # WAS EOR ALREADY FOUND         #
                        20
          /   NO                       # RETURN TO CALLER              #
       :20    +SNW
              +EOT
                        30
          /   *DB$SR1I                 # SET EOR-FOUND FLAG            #
              NO                       # AND RETURN TO CALLER          #
       :30    $SCHEMA 
              $ADD
              $MODIFY 
              $DELETE 
              $.
                        40
          /   NO                       # VALID KEYWORD FOUND - RETURN  #
       :40    +EOT
                        20             # CONTINUE SEARCH FOR VALID WORD#
          /   *DB$SR1I                 # SET EOR-FOUND FLAG            #
              NO                       # RETURN TO CALLER              #
#EJECT# 
 #
* *   BASIC - CRACK BASIC RECOVERY FILE ENTRY    PAGE  1
* *   R. M. PAPPE                                DATE  06/26/80 
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE BASIC RECOVERY FILE CLAUSE
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -BASIC- HAS BEEN DETECTED BY DB$STD AND STORED
*     INTO CURWORD
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS WERE DETECTED, APPROPRIATE DIAGNOSTICS HAVE BEEN
*     ISSUED AND RETURN IS -NO-. OTHERWISE RETURN IS -YES-. 
* 
*  DC CALLING ROUTINES
* 
*     MODSET  - MODIFY SCHEMA ENTRY 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
* 
* DC  CALLED ROUTINES 
* 
*     PFINFO  - ANALYZE PERMANENT FILE INFORMATION
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     SKIP OVER OPTIONAL WORDS -RECOVERY FILE-. CALL PFINFO TO
*     ANALYZE THE PERMANENT FILE INFORMATION. IF ANY ERRORS WERE
*     DETECTED BY PFINFO, RETURN -NO-. OTHERWISE, RETURN -YES-. 
* 
 #
  
:BASIC :10
              -RECOVERY 
              -FILE 
              PFINFO                   # ANALYZE PERM FILE INFORMATION #
                                  NO   # ERRORS DETECTED               #
          /             YES            # NORMAL EXIT                   #
#EJECT# 
 #
* *   CCLPROC - ANALYZE THE CCLPROC SUBENTRY     PAGE  1
* *   KIM H. NGUYEN                              DATE  11/09/84 
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE CCLPROC CLAUSE. 
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -CCLPROC- HAS BEEN ENCOUNTERED AND STORED INTO CURWORD BY 
*     DB$STD. 
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS ARE DETECTED, APPROPRIATE DIAGNOSTICS ARE ISSUED. 
*     RETURN IS ALWAYS "NO".
* 
* DC  CALLING ROUTINES
* 
*     JOB - ANALYZE JOB CONTROL INFORMATION 
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR1M - SET CCLPROC CLAUSE SEEN FLAG. 
*     DB$SR1N - VALIDATE AND STORE CCLPROC PERMANENT FILE NAME
*     DB$SR1O - SET ACCESS SEEN CLAUSE. 
*     DB$SR1P - SET ACCESS IS DIRECT FLAG.
*     DB$SR1Q - SET ACCESS IS INDIRECT FLAG.
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE. 
* 
* DC  DESCRITION
* 
*     1.  SKIP OPTIONAL WORDS "NAME" AND "IS".
*     2.  CHECK FOR LITERAL.  IF NOT FOUND, ISSUE DIAGNOSTIC 174 AND
*         RETURN TO CALLER. 
*     3.  CALL DB$SR1M TO SET PROCFLAG, AND CALL DB$SR1N TO STORE JOB 
*         CONTROL CCLPROC PERMANENT FILE NAME.
*     4.  CHECK FOR KEYWORD "ACCESS".  IF NOT FOUND, ASSUME THE PROCEDURE 
*         FILE IS AN INDIRECT PERMANENT FILE. 
*     5.  SKIP KEYWORD "IS".
*     6.  CALL DB$SR1O TO SET ACCESS CLAUSE SEEN FLAG.
*     7.  CHECK FOR KEYWORD "DIRECT".  IF NOT FOUND, GO TO 8, ELSE
*         CALL DB$SR1P TO SET THE DIRECT ACCESS FLAG AND EXIT FROM
*         ROUTINE.
*     8.  CHECK FOR KEYWORD "INDIRECT".  IF NOT FOUND, ISSUE DIAGNOSTIC 
*         173 AND EXIT FROM ROUTINE, ELSE CALL DB$SR1Q TO SET THE 
*     9.  INDIRECT ACCESS FLAG AND EXIT FROM ROUTINE. 
* 
 #
:CCLPROC     :01                       # ENTRY                         #
             -NAME                     # SKIP OPTIONAL WORDS           #
             -IS
             +LIT                      # ANALIZE PERM FILE INFORMATION #
                       D174            # ERROR - INVALID CCLPROC NAME  #
                       NO              # ERRORS DETECTED               #
          /  *DB$SR1M                  # SET CCLPROC CLAUSE SEEN FLAG  #
             *DB$SR1N                  # STORE CCLPROC FILE NAME       #
                       NO              # ERROR DETECTED                #
          /  $ACCESS                   # CHECK IF ACCESS CLAUSE        #
                       30              # DEFAULT IS INDERECT FILE      #
          /  -IS                       # SKIP OPTIONAL WORD            #
             *DB$SR1O                  # SET ACCESS CLAUSE SEEN FLAG   #
             $DIRECT                   # CHECK IF ACCESS IS DIRECT     #
                       20              # GO TO 20                      #
          /  *DB$SR1P                  # SET DIRECT ACCESS FLAG        #
                       NO              # EXIT FROM ROUTINE             #
       :20   $INDIRECT                 # CHECK IF ACCESS IS INDIRECT   #
                       D173            # ERROR - NEITHER DIR NOR INDIR #
                       NO              # EXIT FROM ROUTINE             #
       :30   *DB$SR1Q                  # SET INDIRECT ACCESS FLAG      #
                       NO              # EXIT FROM ROUTINE             #
#EJECT# 
 #
* *   DEVICE - ANALYZE DEVICE TYPE SUBENTRY      PAGE  1
* *   J. G. SERPA                                DATE  06/24/80 
* 
* DC  PURPOSE 
* 
*     TO ANALYZE THE DEVICE TYPE SUBENTRY 
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -DEVICE- HAS BEEN DETECTED BY DB$STD AND STORED 
*     INTO CURWORD
* 
* DC  EXIT CONDITIONS 
* 
*     DEVICE TYPE HAS BEEN VALIDATED, STORED, AND APPROPRIATE 
*     DIAGNOSTICS ISSUED. 
* 
* DC  CALLING ROUTINES
* 
*     PFINFO - ANALYZE PERMANENT FILE INFORMATION 
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR40 - VALIDATE AND STORE DEVICE TYPE
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     SKIP OPTIONAL WORDS -TYPE IS- THEN CHECK THAT THE DEVICE TYPE 
*     SPECIFIED IS A LEGAL NAME (AS DEFINED BY SYNGEN). IF NOT A LEGAL
*     NAME ISSUE DIAGNOSTIC 160, OTHERWISE CALL ROUTINE DB$SR40 TO
*     VALIDATE AND STORE THE DEVICE TYPE. A VALID DEVICE TYPE IS
*     COMPOSED OF TWO ALPHABETIC CHARACTERS FOLLOWED BY AN OPTIONAL 
*     INTEGER IN THE RANGE 1 THRU 8.
* 
 #
  
:DEVICE   :10 
              -TYPE 
              -IS 
              +NAME 
                        +SNW
                        D160           # ILL-FORMED DEVICE TYPE        #
                                  NO   # ERROR                         #
          /   *DB$SR40                 # VALIDATE AND STORE DEVICE TYPE#
                        D160           # ILL-FORMED DEVICE TYPE        #
          /                       NO   # RETURN                        #
#EJECT# 
                                                                         SNTX 
#----------------------------------------------------------------------#
                                                                         SNTX 
         # RE-INITALIZE OOINTERS AND ETC FOR RE-START AFTER ERROR 
           RECOVERY                                                    #
:REINIT :10   *DB$SR10                 #FREE UP CMM BLOCK POINTERS     #
              *DB$SR64                 #RE-INITALIZE FOR RE-START      #
                         NO 
  
#**********************************************************************#
  
         # FOLLOWING SECTIONS ARE USED TO CRACK THE CLAUSE SPECIFIED BY  SNTX 
           THE NAME OF THE SECTION.  RETURNS ARE YES IF SUCESSFUL, NO IF SNTX 
           AN ERROR OCCURS.                                            # SNTX 
  
  
#----------------------------------------------------------------------#
  
:FILE   :10   -NAME                                                      SNTX 
              -IS                                                        SNTX 
              +NAME                                                      SNTX 
                         +SNW 
                         D120          #ILL-FORMED LFN                 # SNTX 
                         NO                                              SNTX 
          /   *DB$SR57                 # STORE FILE NAME               #
                         D120          #ILL-FORMED LFN                 # SNTX 
                         NO                                              SNTX 
          /   YES                                                        SNTX 
  
#----------------------------------------------------------------------#
  
D     :10 
              UN                       # VALIDATE ID CLAUSE            #
                         NO                                              SNTX 
  
#----------------------------------------------------------------------#
#EJECT# 
 #
* *   FAMILY - CRACK FAMILY SUBENTRY             PAGE  1
* *   J. G. SERPA                                DATE  06/25/80 
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE FAMILY SUBENTRY 
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -FAMILY- HAS BEEN DETECTED BY DB$STD AND STORED 
*     INTO CURWORD
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS WERE DETECTED, APPROPRIATE DIAGNOSTICS HAVE BEEN
*     ISSUED. RETURN IS -NO-. 
* 
* DC  CALLING ROUTINES
* 
*     PFINFO - ANALYZE PERMANENT FILE INFORMATION 
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR39 - SET FAMILY FLAG FOR CURRENT FILE TYPE 
*     PACK    - ANALYZE FAMILY SUBENTRY 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     CALL DB$SR38 TO SET THE FAMILY FLAG FOR THE CURRENT FILE
*     TYPE. SINCE BOTH FAMILY AND PACK HAVE THE SAME SYNTAX, ROUTINE
*     PACK IS CALLED TO ANALYZE THE SYNTAX FOR THE SUBENTRY. RETURN 
*     IS -NO-.
* 
 #
  
:FAMILY   :10 
              *DB$SR39                 # SET FAMILY FLAG               #
              PACK                     # ANALYZE FAMILY SUBENTRY       #
                        NO             # RETURN                        #
#EJECT# 
 #
* *   INDEX - CRACK INDEX FILE CLAUSE            PAGE  1
* *   R. M. PAPPE                                DATE  06/26/80 
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE INDEX FILE CLAUSE 
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -INDEX- HAS BEEN DETECTED BY DB$STD AND STORED
*     INTO CURWORD
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS WERE DETECTED, APPROPRIATE DIAGNOSTICS HAVE BEEN
*     ISSUED, AND RETURN IS -NO-, OTHERWISE RETURN IS -YES-.
* 
* DC  CALLING ROUTINES
* 
*     MODSET  - MODIFY SCHEMA ENTRY 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
*     VRSNTRY - ANALYZE VERSION ENTRIES 
* 
* DC  CALLED ROUTINES 
* 
*     PFINFO  - VALIDATE PERMANENT FILE INFORMATION 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     SKIP OVER OPTIONAL WORDS -FILE ASSIGNED-. 
*     CALL PFINFO TO VALIDATE THE PERMANENT FILE
*     INFORMATION. IF ERRORS WERE DETECTED BY PFINFO, RETURN IS -NO-, 
*     OTHERWISE RETURN IS -YES-.
* 
 #
  
NDEX :10
              -FILE 
              -ASSIGNED 
              PFINFO                   # ANALYZE PERMANENT FILE INFO   #
                        NO             # ERROR DETECTED                #
          /             YES            # NORMAL EXIT                   #
  
  
#EJECT# 
 #
* *   JOB - ANALYZE JOB CONTROL INFORMATION      PAGE  1
* *   J. G. SERPA                                DATE  01/30/81 
* *   R. M. PAPPE                                DATE  06/25/81 
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE JOB CONTROL INFORMATION ENTRY 
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -JOB- HAS BEEN DETECTED BY DB$STD AND STORED
*     INTO CURWORD. 
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS WERE DETECTED, APPROPRIATE DIAGNOSTICS HAVE BEEN
*     ISSUED. RETURN IS -YES-.
* 
* DC  CALLING ROUTINES
* 
*     MODSET  - MODIFY SCHEMA ENTRY 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR26  - STORE UN 
*     DB$SR58  - STORE PW 
*     DB$SR59  - STORE FAMILY 
*     DB$SR83  - STORE CHARGE/ACCOUNT 
*     DB$SR93  - VALIDATE JOB CONTROL INFORMATION 
*     TAPE     - ANALYZE TAPE SUBENTRY
*     CCLPROC  - ANALYZE CCLPROC SUBENTRY 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     1.  SKIP OVER OPTIONAL WORDS -CONTROL- AND -INFORMATION-. 
*     2.  CHECK FOR KEYWORD -UN-. IF NOT FOUND, GO TO 4.
*     3.  CHECK FOR A LITERAL. IF NOT FOUND, SKIP THE NEXT WORD, ISSUE
*         DIAGNOSTIC 169 AND GO TO 4.  OTHERWISE, CALL DB$SR26 TO 
*         VALIDATE AND STORE THE -UN- PARAMETER, AND GO TO 2. 
*     4.  CHECK FOR KEYWORD -PW-. IF NOT FOUND, GO TO 6.
*     5.  CHECK FOR A LITERAL. IF NOT FOUND, SKIP THE NEXT WORD, ISSUE
*         DIAGNOSTIC 171 AND GO TO 6. OTHERWISE, CALL DB$SR58 TO
*         VALIDATE AND STORE THE -PW- PARAMETER. IF DB$SR58 RETURNS 
*         YES, GO TO 2. 
*     6.  CHECK FOR KEYWORD -FAMILY-. IF NOT FOUND, GO TO 8.
*     7.  CHECK FOR A NAME. IF NOT FOUND, SKIP THE NEXT WORD, ISSUE 
*         DIAGNOSTIC 170 AND GO TO 8.  OTHERWISE, CALL DB$SR59 TO 
*         VALIDATE AND STORE THE -FAMILY- NAME. IF DB$SR59 RETURNS
*         YES, GO TO 2. 
*     8.  CHECK FOR KEYWORD -ACCOUNT- OR -CHARGE-. IF NOT PRESENT,
*         GO TO 10. 
*     9.  CHECK FOR A LITERAL. IF NOT FOUND, SKIP TO THE NEXT WORD, 
*         ISSUE DIAGNOSTIC 121 AND GO TO 2. OTHERWISE CALL DB$SR83
*         TO STORE THE LITERAL. 
*         GO TO 2.
*     10. CHECK FOR KEYWORD -TAPE-. IF NOT PRESENT, GO TO 12. 
*     11. CALL SYNTACTIC ROUTINE -TAPE- TO ANALYZE THE TAPE 
*         SUBENTRY, AND GO TO 2.
*     12. CHECK FOR KEYWORD -CCLPROC-. IF NOT PRESENT, GO TO 14.
*     13. CALL SYNTACTIC ROUTINE -CCLPROC- TO ANALYZE THE CCLPROC 
*         SUBENTRY, AND GO TO 2.
*     14. CALL DB$SR93 TO VALIDATE THE JOB CONTROL INFORMATION. 
*         IF DB$SR93 RETURNS -YES- (MEANING NO ERRORS WERE ENCOUNTERED) 
*         RETURN -YES- TO CALLER. IF DB$SR93 ENCOUNTERS ANY ERRORS, 
*         IT WILL ISSUE THE APPROPRIATE DIAGNOSTICS AND RETURN -NO-.
*         IN THIS CASE RETURN -NO- TO CALLER. 
 #
  
:JOB          :10                      # ENTRY                         #
              -CONTROL
              -INFORMATION
       :20    $UN 
                        30             # GO CHECK FOR PW               #
          /   -IS 
              +LIT
                        D169           # INVALID UN SPECIFIED          #
                        30             # GO CHECK FOR PW               #
          /   *DB$SR26                 # VALIDATE AND STORE UN         #
                        D169           # INVALID UN SPECIFIED          #
          /   20                       # GO CHECK FOR UN               #
       :30    $PW 
                        40             # GO CHECK FOR FAMILY           #
          /   -IS 
              +LIT
                        D171           # INVALID PW SPECIFIED          #
                        40             # GO CHECK FOR FAMILY           #
          /   *DB$SR58                 # VALIDATE AND STORE PW         #
                        D171           # INVALID PW SPECIFIED          #
          /   20                       # GO CHECK FOR UN               #
       :40    $FAMILY 
                        50             # GO CHECK FOR CHARGE/ACCOUNT   #
          /   -NAME 
              -IS 
              +NAME 
                        D170           # INVALID FAMILY SPECIFIED      #
                        50             # GO CHECK FOR CHARGE/ACCOUNT   #
          / 
              *DB$SR59                 # VALIDATE AND STORE FAMILY NAME#
                        D170           # INVALID FAMILY NAME           #
          /   20                       # GO CHECK FOR UN               #
       :50    $ACCOUNT
              $CHARGE 
                        60             # GO CHECK FOR TAPE             #
          /   -IS 
              +LIT
                        D121           # INVALID CHARGE/ACCOUNT        #
                        60             # GO CHECK FOR TAPE             #
          /   *DB$SR83                 # STORE CHARGE/ACCOUNT          #
                        D121           # INVALID CHARGE/ACCOUNT        #
          /   20                       # GO CHECK FOR UN               #
       :60    $TAPE 
                       70              # GO TO CHECK CCLPROC           #
          /   TAPE                     # ANALYZE TAPE SUBENTRY         #
              20
       :70   $CCLPROC                  # CHECK IF CCLPROC SPECIFIED    #
                       80              # GO TO VALIDATE JOB CONTROL    #
          /  CCLPROC                   # ANALYZE CCLPROC SUBENTRY      #
             20 
       :80   *DB$SR93                  # VALIDATE JOB CONTROL ENTRIES  #
                                       # INFORMATION                   #
                        NO
          /   YES                      # EXIT                          #
#EJECT# 
 #
* *   JOURNAL - CRACK JOURNAL LOG FILE CLAUSE    PAGE  1
* *   R. M. PAPPE                                DATE  06/26/80 
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE JOURNAL LOG CLAUSE
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -JOURNAL- HAS BEEN DETECTED BY DB$STD AND STORED
*     INTO CURWORD
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS WERE DETECTED, APPROPRIATE DIAGNOSTICS HAVE BEEN
*     ISSUED, AND RETURN IS -NO-, OTHERWISE RETURN IS -YES-.
* 
* DC  CALLING ROUTINES
* 
*     MODSET  - MODIFY SCHEMA ENTRY 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
* 
* DC  CALLED ROUTINES 
* 
*     PFINFO  - ANALYZE PERMANENT FILE INFORMATION
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     SKIP OVER OPTIONAL WORDS -LOG FILE- AND CALL PFINFO TO ANALYZE
*     THE PERMANENT FILE INFORMATION. IF ERRORS WERE DETECTED BY
*     PFINFO, RETURN IS -NO-. OTHERWISE, RETURN IS -YES-. 
*     OTHERWISE RETURN IS -YES-.
* 
 #
  
:JOURNAL  :10 
              -LOG                     # SKIP OVER OPTIONAL WORDS      #
              -FILE 
              PFINFO                   # ANALYZE PERMANENT FILE INFO   #
                        NO             # ERROR DETECTED                #
          /             YES            # NORMAL EXIT                   #
#EJECT# 
  
#----------------------------------------------------------------------#
  
:LOG    :10   $BEFORE             20                                     SNTX 
        :11   -IMAGE                                                     SNTX 
              $BLOCKS             12                                     SNTX 
          /   *DB$SR21                 # SET LOG BEFORE IMAGE BLOCK    #
              $OFF
              -ON                 30
          /   *DB$SR80                 # CLEAR LOG BEFORE IMAGE BLOCK  #
                                  30
        :12   $RECORDS                                                   SNTX 
                         D125          #KEY WORD ERROR IN LOG OPTIONS  # SNTX 
                         +SNW 
                         NO                                              SNTX 
          /   *DB$SR22                 # SET LOG BEFORE IMAGE RECORD   #
              $OFF
              -ON                 30
          /   *DB$SR85                 # CLEAR LOG BEFORE IMAGE RECORD #
                                  30
        :20   $AFTER                                                     SNTX 
                         D125          #KEY WORD ERROR IN LOG OPTIONS  # SNTX 
                         +SNW 
                         NO                                              SNTX 
        :21   -IMAGE                                                     SNTX 
              $RECORDS                                                   SNTX 
                         D125          #KEY WORD ERROR IN LOG OPTIONS  # SNTX 
                         +SNW 
                         NO                                              SNTX 
          /   *DB$SR20                 # SET LOG AFTER IMAGE RECORD    #
              $OFF
              -ON                 30
          /   *DB$SR86                 # CLEAR LOG AFTER IMAGE RECORD  #
        :30   $BEFORE             35                                     SNTX 
          /   11                                                         SNTX 
        :35   $AFTER
                        NO
          /   21                                                         SNTX 
#EJECT# 
 #
* *   MODSET - PROCESS MODIFY SCHEMA             PAGE  1
* *   J. G. SERPA                                DATE  08/01/80 
* 
* DC  PURPOSE 
* 
*     ANALYZE AND VALIDATE THE MODIFY SCHEMA SYNTAX 
* 
* DC  ENTRY CONDITIONS
* 
*     NONE
* 
* DC  EXIT CONDITIONS 
* 
*     NO  - IF ERRORS WERE ENCOUNTERED
*     YES - IF NO ERRORS WERE ENCOUNTERED 
* 
* DC  CALLING ROUTINES
* 
*     START - MAIN ROUTINE WITHIN DB$SNTX 
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR04    - ADD SUBSCHEMA TO DIRECTORY 
*     DB$SR05    - CHECK IF NEXT WORD IS PF-TYPE WORD 
*     DB$SR08    - CHECK IF BOTH PFN AND ID WERE SPECIFIED
*     DB$SR13    - DELETE SUBSCHEMA FROM DIRECTORY
*     DB$SR14    - END SCAN, AND RETURN TO (0,0) OVERLAY
*     DB$SR18    - READ IN NECESSARY SCHEMA TABLES
*     DB$SR23    - SET MODIFY ERROR FLAG
*     DB$SR25    - SET SCHEMA IN CORE FLAG
*     DB$SR27    - STORE AREA NAME
*     DB$SR30    - STORE UNIT LIMIT 
*     DB$SR31    - STORE CURRENT FILE TYPE
*     DB$SR37    - STORE SUBSCHEMA NAME 
*     DB$SR38    - STORE SCHEMA NAME
*     DB$SR41    - STORE UPDATE LIMIT 
*     DB$SR46    - CHECK IF MODIFY IS ERROR FREE
*     DB$SR52    - CHANGE AREA TO SAME AS MASTER
*     DB$SR54    - STORE VERSION NAME 
*     DB$SR56    - CHECK IF THIS IS DUPLICATE CHANGE
*     DB$SR94    - STORE COUNTS IN SCHEMA DIRECTORY TABLE.
*     DB$SR61    - RESET AREA LEVEL VARIABLES 
*     DB$SR62    - RESET SUBSCHEMA LEVEL VARIABLES
*     DB$SR63    - REPLACE PF INFO FOR TRANSACTION FILE 
*     DB$SR68    - DELETE VERSION FROM DIRECTORY
*     DB$SR69    - REPLACE PF INFO FOR PROCDURE LIBRARY 
*     DB$SR71    - REPLACE PF INFO FOR AREA 
*     DB$SR72    - REPLACE PF INFO FOR INDEX FILE 
*     DB$SR74    - CHECK IF AREA HAS ALREADY BEEN CHANGED 
*     DB$SR75    - CLEAR CHANGED AREA FLAGS 
*     DB$SR76    - CHECK IF AREA WAS CHANGED AT ALL 
*     DB$SR77    - SET FLAG SCHEMA FILE HAS BEEN SEEN 
*     DB$SR78    - CHECK IF SCHEMA FILE HAS BEEN SEEN 
*     DB$SR81    - CHECK IF NEXT WORD IS AREA-TYPE WORD 
*     DB$SR84    - REPLACE ACCOUNTING DATA
*     DB$SR89    - VERIFY THAT SPECIFIED VERSION EXISTS IN THE VDT
*     DB$SR90    - REPLACE PF INFO FOR CURRENT FILE TYPE
*     DB$SR91    - CHECK IF CURRENT AREA IS IN MASTER VERSION 
*     DB$SR92    - CHECK THAT BOTH SETNAME AND VSN WERE SPECIFIED 
*     DB$SR1H    - REPLACE LOG OPTIONS FOR CHANGE AREA CLAUSE 
*     FILE       - ANALYZE SYNTAX OF FILE SUBENTRY
*     GETADM     - GET TO ADD, DELETE OR MODIFY KEYWORD 
*     INDEX      - ANALYZE SYNTAX OF INDEX FILE ENTRY 
*     JOB        - ANALYZE SYNTAX OF JOB CONTROL INFORMATION
*     PFN        - ANALYZE SYNTAX OF PFN SUBENTRY 
*     REINIT     - REINITIALIZE POINTERS FOR A RESTART AFTER ERRORS 
*     SUBS       - EXECUTE SYNTACTIC ROUTINE WHOSE NAME IS IN CURWORD 
*     VRSNTRY    - ANALYZE VERSION ENTRY
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*      1. SKIP OVER OPTIONAL WORDS "SCHEMA NAME IS". CHECK FOR A VALID
*         NAME. IF THE NAME IS INVALID, ISSUE DIAGNOSTIC 101 AND RETURN 
*         -NO-. 
*         CALL DB$SR38 TO STORE THE SCHEMA NAME.
*         CHECK FOR "FILE". IF NOT PRESENT, GO TO 3.
*         CALL DB$SR77 TO SET A FLAG INDICATING THAT THE SCHEMA FILE
*         CLAUSE HAS BEEN DETECTED, AND CALL SYNTACTIC ROUTINE -FILE- 
*         TO ANALYZE THE FILE SUBENTRY. IF ERRORS ARE DETECTED BY -FILE-
*         (-NO- RETURN), GO TO 59.
*      3. CHECK FOR ".". IF NOT FOUND ISSUE DIAGNOSTIC 102. 
*         CALL DB$SR18 TO READ IN THE NECESSARY SCHEMA TABLES FROM THE
*         OLD MASTER DIRECTORY FILE. IF THE SCHEMA IS NOT FOUND, OR 
*         HAS ALREADY BEEN MODIFIED, GO TO 59.
*         CALL DB$SR25 TO SET THE SCHEMA IN CORE FLAG.
*         CALL DB$SR62 TO INITIALIZE CELLS FOR SUBSCHEMA PROCESSING.
*      5. CHECK FOR "ADD". IF NOT PRESENT, GO TO 11.
*      7. CHECK FOR "VERSION". IF NOT PRESENT, GO TO 9. 
*         CALL SYNTACTIC ROUTINE -VRSNTRY- TO ANALYZE THE VERSION ENTRY.
*         GO TO 5.
*      9. CHECK FOR "SUBSCHEMA". IF NOT PRESENT, ISSUE DIAGNOSTIC 118,
*         AND GO TO 59. 
*         SKIP OVER OPTIONAL WORDS "NAME IS", AND CHECK FOR A VALID NAME
*         IF THE NAME IS INVALID, ISSUE DIAGNOSTIC 110, AND GO TO 59. 
*         CALL DB$SR37 TO STORE THE SUBSCHEMA NAME. 
*         CALL DB$SR78 TO VERIFY THAT THE SCHEMA LFN HAS BEEN SPECIFIED.
*         IF IT HAS NOT, ISSUE DIAGNOSTIC 156 AND GO TO 59. 
*         CHECK FOR "FILE". IF NOT PRESENT, ISSUE DIAGNOSTIC 111 AND GO 
*         TO 59.
*         CALL SYNTACTIC ROUTINE -FILE- TO ANALYZE THE FILE SUBENTRY. 
*         IF ERRORS ARE DETECTED BY -FILE- (-NO- RETURN), GO TO 59. 
*         CHECK FOR ".". IF NOT PRESENT, ISSUE DIAGNOSTIC 102.
*         CALL DB$SR04 TO ADD THE SUBSCHEMA TO THE DIRECTORY. 
*         CALL DB$SR62 TO INITIALIZE CELLS FOR PROCESSING THE NEXT
*         SUBSCHEMA, AND GO TO 5. 
*         CALL SYNTACTIC ROUTINE -VRSNTRY- TO ANALYZE THE VERSION ENTRY.
*         GO TO 5.
*     11. CHECK FOR "DELETE". IF NOT PRESENT, GO TO 17. 
*     13. CHECK FOR "VERSION". IF NOT PRESENT, GO TO 15.
*         SKIP OVER OPTIONAL WORDS "NAME IS", AND CHECK FOR A VALID 
*         NAME. IF THE NAME IS INVALID, ISSUE DIAGNOSTIC 129 AND
*         GO TO 59. 
*         CALL DB$SR54 TO STORE THE VERSION NAME. IF THE NAME IS INVALID
*         (-NO- RETURN FROM DB$SR54), ISSUE DIAGNOSTIC 129. 
*         CHECK FOR ".". IF NOT PRESENT, ISSUE DIAGNOSTIC 102.
*         CALL DB$SR68 TO DELETE THE VERSION FROM THE DIRECTORY.
*         GO TO 5.
*         SKIP OVER OPTIONAL WORDS "NAME IS" AND CHECK FOR A VALID NAME.
*         IF THE NAME IS INVALID, ISSUE DIAGNOSTIC 110, AND GO TO 59. 
*         CALL DB$SR37 TO STORE THE SUBSCHEMA NAME. 
*         CHECK FOR ".". IF NOT PRESENT, ISSUE DIAGNOSTIC 102.
*         CALL DB$SR13 TO DELETE THE SUBSCHEMA ENTRY FROM THE SUBSCHEMA 
*         DIRECTORY, AND GO TO 5. 
*     15. CHECK FOR "SUBSCHEMA". IF NOT PRESENT, ISSUE DIAGNOSTIC 118,
*         AND GO TO 59. 
*     17. CHECK FOR "CHANGE". IF NOT PRESENT, GO TO 51. 
*     19. CHECK FOR "JOURNAL", "QUICK" OR "RESTART". IF NONE
*         FOUND, GO TO 20.
*         CALL DB$SR31 TO STORE THE CURRENT FILE TYPE.
*         CALL DB$SR56 TO CHECK IF THIS IS A DUPLICATE CHANGE ENTRY.
*         IF CHANGE IS DUPLICATE, ISSUE DIAGNOSTIC 149 AND TO TO 59.
*         ISSUE A +SUBS TO EXECUTE THE APPROPRIATE SYNTACTIC ROUTINE
*         WHOSE NAME IS IN CURWORD. IF A -NO- IS RETURNED, INDICATING 
*         AN ERROR, GO TO 59. 
*         CHECK FOR ".". IF NOT FOUND, ISSUE DIAGNOSTIC 102.
*         CALL DB$SR90 TO REPLACE THE PERMANENT FILE INFORMATION FOR
*         THE CURRENT FILE TYPE, AND GO TO 5. 
*     20. CHECK FOR "PROCEDURE". IF NOT FOUND, GO TO 21.
*         CALL DB$SR31 TO STORE THE CURRENT FILE TYPE (PROCEDURE).
*         CALL DB$SR56 TO CHECK IF THIS IS A DUPLICATE CHANGE CLAUSE. 
*         IF IT IS, ISSUE DIAGNOSTIC 149 AND GO TO 59.
*         CALL SYNTACTIC ROUTINE -PROCEDURE- TO ANALYZE THE PROCEDURE 
*         CLAUSE. IF ERRORS ARE DETECTED (-NO- RETURN), GO TO 59. 
*         CALL DB$SR69 TO CHANGE THE PERMANENT FILE INFORMATION FOR 
*         THE PROCEDURE LIBRARY.
*         CHECK FOR ".". IF NOT PRESENT, ISSUE DIAGNOSTIC 102.
*         GO TO 5.
*     21. CHECK FOR "TRANSACTION". IF NOT PRESENT, GO TO 32.
*         SKIP OVER OPTIONAL WORDS "RECOVERY FILE", AND CALL DB$SR31 TO 
*         STORE THE CURRENT FILE TYPE (TRANSACTION).
*         CALL DB$SR56 TO CHECK IF THIS IS A DUPLICATE CHANGE CLAUSE. 
*         IF IT IS, ISSUE DIAGNOSTIC 149 AND GO TO 59.
*     22. CHECK FOR "UNIT". IF NOT PRESENT, GO TO 23. 
*         SKIP OVER OPTIONAL WORDS "LIMIT IS", AND CHECK FOR A VALID
*         INTEGER. IF NOT SPECIFIED, OR INVALID, ISSUE DIAGNOSTIC 158.
*         GO TO 23. 
*         CALL DB$SR30 TO VALIDATE AND STORE THE UNIT LIMIT VALUE. IF 
*         THE VALUE IS ILLEGAL, ISSUE DIAGNOSTIC 158. 
*     23. CHECK FOR "UPDATE". IF NOT PRESENT, GO TO 25. 
*         SKIP OVER OPTIONAL WORDS "LIMIT IS", AND CHECK FOR A VALID
*         INTEGER. IF NOT SPECIFIED, OR INVALID, ISSUE DIAGNOSTIC 159.
*         GO TO 22. 
*     25. CHECK FOR "PFN". IF NOT PRESENT, GO TO 31.
*         CALL SYNTACTIC ROUTINE -PFN- TO ANALYZE THE PFN CLAUSE. 
*     27. CALL DB$SR05 TO CHECK IF THE NEXT WORD IS A PF-TYPE WORD. 
*         IF IT IS NOT, GO TO 29. OTHERWISE, ISSUE A +SNW FOLLOWED BY 
*         A +SUBS TO EXECUTE THE APPROPRIATE SYNTACTIC ROUTINE. 
*         GO TO 27. 
*     29. CALL DB$SR08 TO VALIDATE THAT BOTH THE PFN AND THE ID 
*         WERE SPECIFIED. IF NOT, ISSUE DIAGNOSTIC 107. 
*         CALL DB$SR92 TO CHECK THAT BOTH SET NAME AND VSN WERE SPECIFIED.
*         IF NOT, ISSUE DIAGNOSTIC 155. 
*         GO TO 22. 
*     31. CALL DB$SR63 TO CHANGE THE TRANSACTION RECOVERY FILE
*         INFORMATION IN THE SCHEMA INFORMATION TABLE.
*         CHECK FOR ".". IF MISSING, ISSUE DIAGNOSTIC 102.
*         GO TO 5.
*     32. CHECK FOR "JOB". IF NOT PRESENT, GO TO 33. CALL SYNTACTIC 
*         ROUTINE -JOB- TO ANALYZE THE SYNTAX OF THE JOB CONTROL
*         INFORMATION ENTRY.
*         CALL DB$SR84 TO REPLACE THE JOB CONTROL INFORMATION IN THE
*         SCHEMA INFORMATION TABLE. 
*         CHECK FOR ".". IF NOT PRESENT, ISSUE DIAGNOSTIC 102.
*         GO TO 5.
*     33. CHECK FOR "AREA". IF NOT PRESENT, ISSUE DIAGNOSTIC 151, AND 
*         GO TO 59. 
*         CALL DB$SR31 TO STORE THE CURRENT FILE TYPE (AREA). 
*         SKIP OVER OPTIONAL WORDS "NAME IS", AND CHECK FOR VALID NAME. 
*         IF INVALID, ISSUE DIAGNOSTIC 106, AND GO TO 59. 
*         CALL DB$SR27 TO STORE THE AREA NAME.
*         CHECK FOR "VERSION". IF NOT SPECIFIED, GO TO 35.
*         SKIP OVER OPTIONAL WORDS "NAME IS", AND CHECK FOR "MASTER". IF
*         NOT PRESENT, CHECK FOR A VALID NAME. IF NAME IS INVALID,
*         ISSUE DIAGNOSTIC 129, AND GO TO 59. 
*         CALL DB$SR54 TO STORE THE VERSION NAME. IF THE NAME IS INVALID
*         ISSUE DIAGNOSTIC 129, AND GO TO 59. 
*         CALL DB$SR89 TO VERIFY THAT THE SPECIFIED VERSION NAME EXISTS.
*         IF A NON-EXISTENT VERSION NAME IS SPECIFIED, ISSUE DIAGNOSTIC 
*         163, AND GO TO 59.
*     35. CALL DB$SR74 TO CHECK IF THIS AREA HAS ALREADY BEEN CHANGED.
*         IF IT HAS, GO TO 59.
*         CHECK FOR "SAME". IF NOT SPECIFIED, GO TO 37. 
*         SKIP OVER OPTIONAL WORD "AS", AND CHECK FOR "MASTER". IF NOT
*         PRESENT, ISSUE DIAGNOSTIC 139 AND GO TO 59. 
*         CALL DB$SR91 TO CHECK THAT THIS AREA DOES NOT BELONG TO 
*         MASTER. IF IT BELONGS TO MASTER, ISSUE DIAGNOSTIC 139, AND
*         GO TO 59. 
*         CALL DB$SR52 TO CHANGE THIS AREA TO SAME AS MASTER. 
*         GO TO 49. 
*     37. CAL DB$SR81 TO CHECK IF THE NEXT WORD IS AN AREA-TYPE 
*         WORD. IF IT IS NOT AN AREA-TYPE WORD, GO TO 39. 
*         ISSUE A +SNW FOLLOWED BY A +SUBS TO EXECUTE THE APPROPRIATE 
*         SYNTACTIC ROUTINE. CALL DB$SR1H TO REPLACE THE LOG OPTION 
*         FLAGS. GO TO 37.
*     39. CHECK FOR "PFN". IF NOT SPECIFIED, GO TO 46.
*         CALL SYNTACTIC ROUTINE -PFN- TO ANALYZE THE PFN CLAUSE. 
*     41. CALL DB$SR05 TO CHECK IF THE NEXT WORD IS A PF-TYPE 
*         WORD. IF IT IS NOT, GO TO 45. 
*         ISSUE A +SNW FOLLOWED BY A +SUBS TO EXECUTE THE APPROPRIATE 
*         SYNTACTIC ROUTINE.
*         GO TO 41. 
*     45. CALL DB$SR08 TO CHECK IF BOTH PFN AND ID WERE SPECIFIED.
*         IF NOT, ISSUE DIAGNOSTIC 107. 
*         GO TO 37. 
*     46. CALL DB$SR71 TO REPLACE THE AREA INFORMATION. 
*     47. CHECK FOR "INDEX". IF NOT PRESENT, GO TO 49.
*         CALL SYNTACTIC ROUTINE -INDEX- TO ANALYZE THE INDEX CLAUSE. 
*         IF ERRORS ARE DETECTED BY -INDEX- (-NO- RETURN), GO TO 59.
*         CALL DB$SR72 TO REPLACE THE INDEX PERMANENT FILE ENTRY. 
*     49. CALL DB$SR76 TO CHECK IF THE AREA HAS BEEN CHANGED AT ALL.
*         IF IT HAS NOT, ISSUE DIAGNOSTIC 154 AND TO GO 59. 
*     50. CALL DB$SR81 TO CHECK IF THE NEXT WORD IN THE INPUT STREAM
*         IS AN AREA-TYPE-WORD. IF IT IS, POSITION TO IT, AND ISSUE 
*         A +SUB TO EXECUTE THE APPROPRIATE SYNTACTIC ROUTINE.
*         CALL DB$SR1H TO REPLACE THE LOG OPTION FLAGS. 
*         CHECK FOR ".". IF NOT PRESENT, ISSUE DIAGNOSTIC 102.
*         GO TO 5.
*     51. CHECK FOR "END". IF NOT PRESENT, ISSUE DIAGNOSTIC 116,
*         AND GO TO 59. 
*     53. CHECK FOR "MODS". IF NOT PRESENT, ISSUE DIAGNOSTIC 119, 
*         AND GO TO 57. 
*         CHECK FOR ".". IF NOT PRESENT, ISSUE DIAGNOSTIC 102, AND
*         GO TO 57. 
*         CHECK FOR "ADD", "DELETE", "MODIFY" OR EOT. IF NONE FOUND,
*         ISSUE DIAGNOSTIC 118, AND EXECUTE SYNTACTIC ROUTINE -GETADM-. 
*     55. CALL DB$SR46 TO CHECK IF ANY ERRORS WERE ENCOUNTERED IN 
*         THIS MODIFICATION RUN. IF YES, CALL SYNTACTIC ROUTINE REINIT
*         AND RETURN -NO-.
*         CALL DB$SR75 TO CLEAR ALL CHANGED AREA FLAGS. 
*         CALL DB$SR94 TO STORE THE NEW COUNTS IN THE SCHEMA DIRECTORY
*         TABLE.
*         CALL DB$SR14 TO RETURN TO THE (0,0) OVERLAY.
*     57. CHECK FOR ".", "ADD", "DELETE", "MODIFY" OR EOT. IF NONE
*         FOUND, ISSUE A +SNW AND GO TO 57. 
*         GO TO 55. 
*     59. CALL DB$SR23 TO SET A FLAG INDICATING THAT AN ERROR HAS 
*         BEEN ENCOUNTERED IN THIS MODIFICATION RUN.
*         CALL DB$SR62 TO INITIALIZE CELLS FOR PROCESSING THE NEXT
*         SUBSCHEMA.
*     61. CHECK FOR "ADD". IF FOUND, GO TO 7. 
*         CHECK FOR "DELETE". IF FOUND, GO TO 13. 
*         CHECK FOR "CHANGE". IF FOUND, GO TO 19. 
*         CHECK FOR "END". IF FOUND, GO TO 53.
*         CHECK FOR EOT. IF NOT FOUND, ISSUE A +SNW, AND GO TO 61.
*         CALL DB$SR14 TO RETURN TO THE (0,0) OVERLAY.
* 
 #
  
  
:MODSET  :01                           # ENTRY                         #
  
              -SCHEMA 
              -NAME 
              -IS 
              +NAME 
                        D101           # INVALID SCHEMA NAME           #
                                  NO   # EXIT, FATAL ERROR             #
          /   *DB$SR38                 # STORE SCHEMA NAME             #
              $FILE 
                        03             # GO CHECK FOR A TERMINATOR     #
          /   *DB$SR77                 # SET FLAG INDICATING THAT THE  #
                                       # SCHEMA FILE HAS BEEN SEEN     #
              FILE                     # ANALYZE FILE CLAUSE           #
                        59             # ERROR                         #
       :03    $.
                        D102           # PERIOD MISSING                #
          /   *DB$SR18                 # READ IN NECESSARY SCHEMA      #
                                       # TABLES                        #
                        59             # ERROR                         #
          /   *DB$SR25                 # SET SCHEMA IN CORE FLAG       #
              *DB$SR62                 # INITIALIZE CELLS FOR SUBSCHEMA#
                                       # PROCESSING                    #
       :05    $ADD
                        11             # GO CHECK FOR DELETE           #
       :07    $VERSION
                        09             # GO CHECK FOR SUBSCHEMA        #
          /   VRSNTRY                  # ANALYZE VERSION ENTRIES       #
                        05             # GO CHECK FOR AN ADD DIRECTIVE #
       :09    $SUBSCHEMA
                        D118           # INVALID ADD OPTION            #
                        59             # ERROR                         #
          /   -NAME 
              -IS 
              +NAME 
                        D110           # INVALID SUBSCHEMA NAME        #
                        59             # ERROR                         #
          /   *DB$SR37                 # STORE SUBSCHEMA NAME          #
              *DB$SR78                 # CHECK IF SCHEMA FILE PRESENT  #
                        D156           # SCHEMA FILE CLAUSE MISSING    #
                        59             # ERROR                         #
          /   $FILE 
                        D111           # SUBSCHEMA FILE CLAUSE MISSING #
                        59             # ERROR                         #
          /   FILE                     # ANALYZE FILE CLAUSE           #
                        59             # ERROR                         #
          /   $.
                        D102           # PERIOD MISSING                #
          /   *DB$SR04                 # ADD SUBSCHEMA TO DIRECTORY    #
              *DB$SR62                 # INITIALIZE FOR NEXT SUBSCHEMA #
                        05             # GO CHECK FOR AN ADD DIRECTIVE #
       :11    $DELETE 
                        17             # GO CHECK FOR CHANGE           #
       :13    $VERSION
                        15             # GO CHECK FOR SUBSCHEMA        #
          /   -NAME 
              -IS 
              +NAME 
                        D129           # INVALID VERSION NAME          #
                        59             # ERROR                         #
          /   *DB$SR54                 # STORE VERSION NAME            #
                        D129           # INVALID VERSION NAME          #
          /   $.
                        D102           # PERIOD MISSING                #
          /   *DB$SR68                 # DELETE VERSION FROM DIRECTORY #
                        D163           # NON-EXISTENT VERSION SPECIFIED#
                        59             # ERROR                         #
          /             05             # GO CHECK FOR AN ADD DIRECTIVE #
       :15    $SUBSCHEMA
                        D118           # INVALID DELETE OPTION         #
                        59             # ERROR                         #
          /   -NAME 
              -IS 
              +NAME 
                        D110           # INVALID SUBSCHEMA NAME        #
                        59             # ERROR                         #
          /   *DB$SR37                 # STORE SUBSCHEMA NAME          #
              $.
                        D102           # PERIOD MISSING                #
          /   *DB$SR13                 # DELETE SUBSCHEMA FROM THE     #
                                       # MASTER DIRECTORY              #
                        05             # GO CHECK FOR AN ADD DIRECTIVE #
       :17    $CHANGE 
                        51             # GO CHECK FOR AN END DIRECTIVE #
       :19    $JOURNAL
              $QUICK
              $RESTART
                        20             # GO CHECK FOR PROCEDURE        #
          /   *DB$SR31                 # STORE CURRENT FILE TYPE       #
              *DB$SR56                 # CHECK FOR A DUPLICATE CHANGE  #
                        D149
                        59             # ERROR                         #
          /   +SUBS 
                        59             # ERROR                         #
          /   *DB$SR55                 # CHECK THAT TRF WAS SPECIFIED  #
                                       # IF RIF WAS SPECIFIED          #
                        D161           # ERROR                         #
          /   $.
                        D102           # PERIOD MISSING                #
          /   *DB$SR90                 # REPLACE PF INFO               #
                        05             # GO CHECK FOR AN ADD DIRECTIVE #
       :20    $PROCEDURE
                        21             # GO CHECK FOR TRANSACTION      #
          /   *DB$SR31                 # STORE CURRENT FILE TYPE       #
              *DB$SR56                 # CHECK IF DUPLICATE CHANGE     #
                        D149           # DUPLICATE CHANGE CLAUSE       #
                        59             # ERROR                         #
          /   PROCEDURE                # ANALYZE PROCEDURE CLAUSE      #
                        59             # ERROR                         #
          /   *DB$SR69                 # REPLACE PROC PF INFO          #
              $.
                        D102           # PERIOD MISSING                #
          /             05             # GO CHECK FOR AN ADD           #
       :21    $TRANSACTION
                        32             # GO CHECK FOR JOB              #
          /   *DB$SR31                 # STORE CURRENT FILE TYPE       #
              *DB$SR56                 # CHECK FOR DUPLICATE CHANGE    #
                        D149           # DUPLICATE CHANGE ENTRY        #
                        59             # ERROR                         #
          /   -RECOVERY 
              -FILE 
       :22    $UNIT 
                        23             # GO CHECK FOR UPDATE           #
          /   -LIMIT
              -IS 
              +INT
                        D158           # INVALID UNIT LIMIT            #
                        23             # GO CHECK FOR UPDATE LIMIT     #
          /   *DB$SR30                 # STORE UNIT LIMIT              #
                        D158           # INVALID UNIT LIMIT            #
       :23    $UPDATE 
                        25             # GO CHECK FOR PFN              #
          /   -LIMIT
              -IS 
              +INT
                        D159           # INVALID UPDATE LIMIT          #
                        22             # GO CHECK FOR UNIT LIMIT       #
          /   *DB$SR41                 # STORE UPDATE LIMIT            #
                        D159           # INVALID UPDATE LIMIT          #
          /   22                       # GO CHECK FOR UNIT LIMIT       #
       :25    $PFN
                        31             # GO REPLACE TRANSACTION INFO   #
          /   PFN                      # ANALYZE PF INFORMATION        #
       :27    *DB$SR05                 # CHECK IF NEXT WORD IS PF-TYPE #
                        29             # GO CHECK IF ALL PF INFO IS IN #
          /   +SNW
              +SUBS 
                        27             # GO CHECK NEXT WORD            #
       :29    *DB$SR08                 # CHECK IF BOTH PFN AND ID WERE #
                                       # SPECIFIED                     #
                        D107           # NOT ALL PF INFO WAS SPECIFIED #
          /   22                       # GO CHECK FOR UNIT LIMIT       #
       :31    *DB$SR63                 # REPLACE TRANSACTION INFO      #
              $.
                        D102           # PERIOD MISSING                #
          /   05                       # GO CHECK FOR MORE DIRECTIVES  #
       :32   $JOB 
                        33             # GO CHECK FOR AREA             #
          /  JOB                       # ANALYZE JOB CONTROL INFO      #
          /  *DB$SR84                  # REPLACE JOB CONTROL INFO      #
              $.
                        D102           # PERIOD MISSING                #
          /   05                       # GO CHECK FOR MORE DIRECTIVES  #
       :33    $AREA 
                        D151           # INVALID CHANGE OPTION         #
                        59             # ERROR                         #
          /   *DB$SR61                 # INITIALIZE AREA CELLS         #
              *DB$SR31                 # STORE CURRENT FILE TYPE       #
              -NAME 
              -IS 
              +NAME 
                        D106           # INVALID AREA NAME             #
                        59             # ERROR                         #
          /   *DB$SR27                 # STORE AREA NAME               #
          /   $VERSION
                        35             # GO CHECK FOR SAME             #
          /   -NAME 
              -IS 
              $MASTER 
              +NAME 
                        D129           # INVALID VERSION NAME          #
                        59             # ERROR                         #
          /   *DB$SR54                 # STORE VERSION NAME            #
                        D129           # INVALID VERSION NAME          #
                        59             # ERROR                         #
          /   *DB$SR89                 # VERIFY THAT VERSION EXISTS    #
                        D163           # NON-EXISTENT VERSION SPECIFIED#
                        59             # ERROR                         #
       :35    *DB$SR74                 # CHECK IF AREA HAS BEEN CHANGED#
                        59             # ERROR                         #
          /   $SAME 
                        37             # CHECK IF AREA-TYPE WORD       #
          /   -AS 
              $MASTER 
                        D130           # VERSION NAME MASTER EXPECTED  #
                        59             # ERROR                         #
          /   *DB$SR91                 # CHECK IF CURRENT VERSION NAME #
                                       # IS MASTER                     #
                        D139           # SAME AS MASTER NOT ALLOWED    #
                                       # AREA IN MASTER VERSION        #
                        59             # ERROR                         #
          /   *DB$SR52                 # CHANGE AREA TO SAME AS MASTER #
                        50
       :37    *DB$SR81                 # CHECK IF NEXT WORD IS AN      #
                                       # AREA-TYPE WORD                #
                        38             # GO CHECK FOR PFN              #
          /   +SNW
              +SUBS 
              *DB$SR1H                 # REPLACE LOG OPTIONS FLAGS     #
                        37             # CHECK NEXT WORD FOR AREA-TYPE #
       :38    $PFN
                        42             # GO CHECK IF AREA CHANGED      #
          /   PFN                      # ANALYZE PFN ENTRY             #
       :40    *DB$SR05                 # CHECK IF NEXT WORD IS PF-TYPE #
                        41             # GO CHECK IF BOTH PFN AND ID   #
                                       # WERE SPECIFIED                #
          /   +SNW
              +SUBS 
                        40             # CHECK NEXT WORD FOR PF-TYPE   #
       :41    *DB$SR08                 # CHECK IF BOTH PFN  AND ID WERE#
                                       # SPECIFIED                     #
                        D107           # NOT ALL REQUIRED PF INFO WAS  #
                                       # SPECIFIED                     #
          /   *DB$SR92                 # CHECK SET/VSN COMBINATION     #
                        D155           # ERROR - SET NAME WITHOUT VSN  #
                                       # OR VICE VERSA                 #
          /             37             # CHECK FOR NEXT WORD AREA TYPE #
       :42    *DB$SR71                 # REPLACE AREA INFORMATION      #
       :43    $INDEX
                        44             # GO CHECK IF AREA HAS BEEN     #
                                       # CHANGED AT ALL                #
          /   *DB$SR31                 # STORE CURRENT FILE-TYPE       #
              INDEX                    # ANALYZE INDEX ENTRY           #
                        59             # ERROR                         #
          /   *DB$SR72                 # REPLACE INDEX PF INFO         #
                        37             # CHECK IF WORD IS AREA-TYPE    #
       :44    *DB$SR76                 # CHECK IF AREA HAS BEEN CHANGED#
                                       # AT ALL                        #
                        D154           # INVALID CHANGE AREA CLAUSE    #
                        59             # ERROR                         #
       :45    *DB$SR81                 # CHECK FOR AREA-TYPE WORD      #
                        46             # NOT AREA-TYPE                 #
          /   +SNW
              +SUBS 
                        45             # CHECK NEXT WORD FOR AREA-TYPE #
       :46    *DB$SR1H                 # REPLACE LOG OPTIONS           #
       :50    $.
                        D102           # PERIOD MISSING                #
          /             05             # GO CHECK FOR AN ADD DIRECTIVE #
       :51    $END
                        D116           # UNKNOWN SOURCE WORD IN CHANGE #
                                       # CLAUSE                        #
                        59             # ERROR                         #
       :53    $MODS 
                        D119           # ILL FORMATTED END MODS CLAUSE #
                        57
          /   $.
                        D102           # PERIOD MISSING                #
                        57             # KEEP CHECKING FOR KEYWORD     #
          /   $ADD
              $MODIFY 
              $DELETE 
              +EOT
                        D118           # ILLEGAL KEYWORD IN MOD RUN    #
                        GETADM         # SCAN UNTIL THE CORRECT ONE OR #
                                       # EOT IS FOUND                  #
       :55    *DB$SR46                 # CHECK IF THIS MOD RUN IS      #
                                       # ERROR FREE                    #
                        REINIT         # REINIITIALIZE VARIABLES FOR A #
                        NO             # RETURN                        #
          /   *DB$SR75                 # CLEAR ALL CHANGED AREA FLAGS  #
              *DB$SR94                 # STORE COUNTS IN SDT           #
              *DB$SR14                 # RETURN TO (0,0) OVERLAY       #
       :57    $.
              $ADD
              $DELETE 
              $MODIFY 
              +EOT
                        +SNW
                        57
          /   55                       # GO CHECK IF THIS MOD RUN      #
                                       # IS ERROR FREE                 #
       :59    *DB$SR23                 # SET FLAG INDICATING MOD       #
                                       # RUN ERROR                     #
              *DB$SR62                 # INITIALIZE CELLS FOR          #
                                       # SUBSCHEMA PROCESSING          #
       :61    $ADD
                        63             # GO CHECK FOR DELETE           #
          /   07                       # GO CHECK FOR VERSION          #
       :63    $DELETE 
                        65             # GO CHECK FOR CHANGE           #
          /   13                       # GO CHECK FOR VERSION          #
       :65    $CHANGE 
                        67             # GO CHECK FOR END              #
          /   19                       # GO CHECK FOR RECOVERY         #
       :67    $END
                        69             # GO CHECK FOR EOT              #
          /   53                       # GO CHECK FOR MODS             #
       :69    +EOT
                        +SNW
                        61             # LOOP                          #
          /   *DB$SR14                 # RETURN TO (0,0) OVERLAY       #
#EJECT# 
  
#----------------------------------------------------------------------#
  
:PFN    :10   -IS                                                        SNTX 
              +LIT                                                       SNTX 
                         +SNW 
                         D122          #ILL-FORMED PFN                 # SNTX 
                         NO                                              SNTX 
          /   *DB$SR32                 # STORE PERMANENT FILE NAME     #
                         D122          #ILL-FORMED PFN                 # SNTX 
          /   NO
  
#----------------------------------------------------------------------#
  
#EJECT# 
 #
* *   PFINFO - ANALYZE PERM FILE INFORMATION     PAGE  1
* *   J. G. SERPA                                DATE  04/24/80 
* 
* DC  PURPOSE 
* 
*     VALIDATE PERMANENT FILE INFORMATION 
* 
* DC  ENTRY CONDITIONS
* 
*     NONE
* 
* DC  EXIT CONDITIONS 
* 
*     PERMANENT FILE INFORMATION HAS BEEN VALIDATED AND APPROPRIATE 
*     DIAGNOSTICS HAVE BEEN ISSUED. IF ERRORS WERE DETECTED, RETURN 
*     IS -NO-, OTHERWISE RETURN IS -YES-. 
* 
* DC  CALLING ROUTINES
* 
*     BASIC       - CRACK BASIC RECOVERY FILE ENTRY 
*     JOURNAL     - CRACK JOURNAL LOG FILE ENTRY
*     PROCEDURE   - CRACK PROCEDURE LIBRARY FILE ENTRY
*     QUICK       - CRACK QUICK RECOVERY FILE ENTRY 
*     RESTART     - CRACK RESTART IDENTIFIER FILE ENTRY 
*     TRANSACTION - CRACK TRANSACTION RECOVERY FILE ENTRY 
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR05 - CHECK IF NEXT WORD IS PF-TYPE WORD
*     DB$SR08 - CHECK IF ENOUGH PERM FILE INFO HAS BEEN SPECIFIED 
*     DB$SR92 - CHECK FOR LEGAL VSN/SN COMBINATION
*     PFN     - ANALYZE PFN SUBENTRY
*     SUBS    - EXECUTE ROUTINE WHOSE NAME IS IN CURWORD
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     1 - CHECK FOR KEYWORD -PFN-. IF MISSING, ISSUE DIAGNOSTIC 157 
*         AND RETURN -NO-.
*     2 - CALL ROUTINE PFN TO ANALYZE THE PFN SUBENTRY. 
*     3 - CALL ROUTINE DB$SR05 TO CHECK IF NEXT WORD IS A PF-TYPE 
*         WORD. IF NOT, CALL DB$SR08 TO CHECK THAT BOTH PFN AND ID
*         HAVE BEEN SPECIFIED. IF NOT, ISSUE DIAGNOSTIC 107 AND RETURN
*         -NO-. OTHERWISE, CALL DB$SR92 TO CHECK FOR VALID VSN/SET
*         COMBINATION. IF THE COMBINATION IS NOT VALID (-NO- RETURN), 
*         ISSUE DIAGNOSTIC 155 AND RETURN -YES-.
*     4 - ISSUE A +SUBS.
*     5 - GO TO 3.
* 
 #
  
:PFINFO   :01 
              $PFN
                        +SNW
                        D157           # KEYWORD -PFN- MISSING         #
                        NO
          /   PFN                      # ANALYZE PFN SUBENTRY          #
       :10    *DB$SR05                 # IS NEXT WORD PF-TYPE WORD     #
                        20
          /   30
       :20    *DB$SR08                 # WERE BOTH PFN AND ID SPECIFIED#
                        D107           # PFN OR ID MISSING             #
          /   *DB$SR92                 # CHECK FOR VALID VSN/SN COMBO  #
                        D155           # ILLEGAL COMBINATION           #
          /   YES                      # EXIT                          #
       :30    +SNW
              +SUBS 
              10                       # CHECK NEXT WORD               #
#EJECT# 
 #
* *   PROCEDURE - CRACK PROCEDURE LIBRARY CLAUSE PAGE  1
* *   R. M. PAPPE                                DATE  06/26/80 
* 
* DC  PURPOSE 
* 
*     VALIDATE PROCEDURE LIBRARY CLAUSE 
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -PROCEDURE- HAS BEEN DETECTED BY DB$STD AND STORED
*     INTO CURWORD
* 
* DC  EXIT CONDITIONS 
* 
*     PROCEDURE LIBRARY CLAUSE HAS BEEN VALIDATED, AND APPROPRIATE
*     DIAGNOSTICS HAVE BEEN ISSUED. IF ERRORS WERE DETECTED, RETURN 
*     IS -NO-, OTHERWISE RETURN IS -YES-. 
* 
* DC  CALLING ROUTINES
* 
*     MODSET  - MODIFY SCHEMA 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
* 
* DC  CALLED ROUTINES 
* 
*     PFINFO  - VALIDATE PERMANENT FILE INFORMATION 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     SKIP OVER OPTIONAL WORDS -LIBRARY FILE-. CALL PFINFO TO ANALYZE 
*     PERMANENT FILE INFORMATION. IF ANY ERRORS WERE DETECTED BY
*     PFINFO, RETURN IS -NO-, OTHERWISE RETURN IS -YES-.
*     ANY DIAGNOSTICS, IF APPROPRIATE, ARE ISSUED BY PFINFO.
* 
 #
  
:PROCEDURE :10
              -LIBRARY
              -FILE 
              PFINFO                   # CRACK PERM FILE INFO          #
                        NO             # ERRORS DETECTED               #
          /             YES            # NORMAL EXIT                   #
#EJECT# 
 #
* *   PW - CRACK PW SUBENTRY                     PAGE  1
* *   J. G. SERPA                                DATE  07/09/80 
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE PW (PASSWORD) SUBENTRY
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -PW- HAS BEEN DETECTED BY DB$SNTX AND STORED
*     INTO CURWORD
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS WERE DETECTED, APPROPRIATE DIAGNOSTICS HAVE BEEN
*     ISSUED. RETURN IS -NO-. 
* 
* DC  CALLING ROUTINES
* 
*     PFINFO - ANALYZE PERMANENT FILE INFORMATION ENTRY 
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR28 - CHECK THAT THE NUMBER OF PASSWORDS IS LESS THAN SIX 
*     DB$SR34 - VALIDATE AND STORE PASSWORDS
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     1 - SKIP OVER OPTIONAL WORD -IS-. CHECK THAT A LITERAL FOLLOWS. 
*       IF NOT, ISSUE DIAGNOSTIC 124. 
*     2 - CALL DB$SR28 TO CHECK THAT THE NUMBER OF PASSWORDS DOES NOT 
*       EXCEED FIVE. IF IT DOES, ISSUE DIAGNOSTIC 112 AND RETURN. 
*     3 - CALL DB$SR34 TO VALIDATE AND STORE PASSWORD. IF INVALID,
*       ISSUE DIAGNOSTIC 124. 
*     4 - CHECK IF ANOTHER PW (LITERAL) FOLLOWS. IF IT DOES, GO TO 2, 
*       OTHERWISE RETURN. 
* 
 #
  
:PW    :01
              -IS 
              +LIT
                        D124           # ILL-FORMED PASSWORD           #
                        20             # CHECK FOR ANOTHER PASSWORD    #
       :10    *DB$SR28                 # CHECK NUMBER OF PASSWORDS     #
                        D112           # TOO MANY PASSWORDS            #
                        NO             # EXIT                          #
          /   *DB$SR34                 # VALIDATE AND STORE PASSWORD   #
                        D124           # ILL-FORMED PASSWORD           #
       :20    +LIT                     # ANOTHER LITERAL               #
                                  NO   # NO, EXIT                      #
          /             10             # YES, VALIDATE IT              #
#EJECT# 
 #
* *   QUICK - CRACK QUICK RECOVERY FILE ENTRY    PAGE  1
* *   R. M. PAPPE                                DATE  06/26/80 
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE QUICK RECOVERY SUBENTRY 
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -QUICK- HAS BEEN DETECTED BY DB$STD AND STORED
*     INTO CURWORD
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS WERE DETECTED, APPROPRIATE DIAGNOSTICS HAVE BEEN
*     ISSUED, AND RETURN IS -NO-, OTHERWISE RETURN IS -YES-.
* 
* DC  CALLING ROUTINES
* 
*     MODSET  - MODIFY SCHEMA ENTRY 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
* 
* DC  CALLED ROUTINES 
* 
*     PFINFO  - ANALYZE PERMANENT FILE INFORMATION
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     SKIP OVER OPTIONAL WORDS -RECOVERY FILE-. CALL PFINFO TO ANALYZE
*     THE PERMANENT FILE INFORMATION. IF ANY ERRORS ARE DETECTED
*     BY PFINFO, RETURN IS -NO-, OTHERWISE RETURN IS -YES-. 
* 
 #
:QUICK :10
              -RECOVERY                # SKIP OVER OPTIONAL WORDS      #
              -FILE 
              PFINFO                   # ANALYZE PERMANENT FILE INFO   #
                        NO             # ERROR DETECTED                #
          /             YES            # NORMAL EXIT                   #
#EJECT# 
 #
* *   RECOVER - ANALYZE THE RECOVER SUBENTRY     PAGE  1
* *   J. G. SERPA                                DATE 07/14/80
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE RECOVER SUBENTRY
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -RECOVER- HAS BEEN DETECTED BY DB$STD WHILE ANALYZING 
*     THE AREA ENTRY
* 
* DC  EXIT CONDITIONS 
* 
*     THE RECOVER SUBENTRY HAS BEEN VALIDATED 
* 
* DC  CALLING ROUTINES
* 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
*     VRSNTRY - ANALYZE VERSION ENTRIES 
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR58 - SET RECOVER FLAG
*     DB$SR84 - CLEAR RECOVER FLAG
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     CALL DB$SR58 TO SET THE RECOVER FLAG. CHECK FOR -OFF-, AND IF 
*     PRESENT, CALL DB$SR84 TO CLEAR THE RECOVER FLAG. IF -OFF- IS
*     NOT PRESENT, SKIP OPTIONAL WORD -ON-. IN EITHER CASE RETURN -NO-. 
* 
 #
  
:RECOVER  :01                          # ENTRY                         #
              *DB$SR58                 # SET THE RECOVER FLAG          #
              $OFF
              -ON 
                        NO             # NORMAL EXIT                   #
          /   *DB$SR84                 # CLEAR THE RECOVER FLAG        #
                        NO             # NORMAL EXIT                   #
#EJECT# 
 #
* *   RECVR - RECOVER FROM ERRORS IN SCHEMA      PAGE  1
* *   J. G. SERPA                                DATE  06/30/80 
* 
* DC  PURPOSE 
* 
*     RECOVER FROM ERRORS ENCOUNTERED IN THE SCHEMA ENTRY 
* 
* DC  ENTRY CONDITIONS
* 
*     NONE
* 
* DC  EXIT CONDITIONS 
* 
*     NEXWORD CONTAINS EITHER A SCHEMA-TYPE WORD, EOT OR PERIOD 
* 
* DC  CALLING ROUTINES
* 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR19 - CHECK IF NEXT WORD IS A SCHEMA-TYPE WORD
*     DB$SR45 - CHECK IF NEXT WORD IS EOT 
*     DB$SR79 - CHECK IF NEXT WORD IS PERIOD
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     SKIP ALL WORDS IN INPUT UNTIL NEXWORD IS EITHER A SCHEMA-TYPE 
*     WORD, A PERIOD PERIOD OR EOT. WHEN FOUND, RETURN -NO-.
* 
 #
  
:RECVR :10
              *DB$SR19                 # IS NEXWORD A SCHEMA-TYPE WORD #
              *DB$SR45                 # IS NEXWORD  EOT               #
              *DB$SR79                 # IS NEXWORD A (.)              #
              +SNW                10   # GET NEXT WORD                 #
       /                NO
#EJECT# 
 #
* *   RESTART - CRACK RESTART IDENTIFIER FILE    PAGE  1
* *   R. M. PAPPE                                DATE  06/26/80 
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE RESTART RECOVERY FILE CLAUSE
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -RESTART- HAS BEEN DETECTED BY DB$STD AND STORED
*     INTO CURWORD
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS WERE DETECTED, APPROPRIATE DIAGNOSTICS HAVE BEEN
*     ISSUED, AND RETURN IS -NO-, OTHERWISE RETURN IS -YES-.
* 
* DC  CALLING ROUTINES
* 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
*     MODSET  - ANALYZE MODIFY SCHEMA 
* 
* DC  CALLED ROUTINES 
* 
*     PFINFO  - ANALYZE PERMANENT FILE INFORMATION
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     SKIP OVER OPTIONAL WORDS -IDENTIFIER FILE-. CALL PFINFO TO ANALYZE
*     FILE INFORMATION. IF ERRORS WERE DETECTED BY PFINFO, RETURN 
*     IS -NO-. OTHERWISE RETURN IS -YES-. ANY DIAGNOSTICS WILL HAVE 
*     BEEN ISSUED BY PFINFO.
* 
 #
  
:RESTART   :10
              -IDENTIFIER              # SKIP OVER OPTIONAL WORDS      #
              -FILE 
              PFINFO                   # ANALYZE PERM FILE INFO        #
                        NO             # ERRORS DETECTED               #
          /             YES            # NORMAL EXIT                   #
#EJECT# 
 #
* *   SCHNTRY - ANALYZE A COMPLETE SCHEMA ENTRY  PAGE  1
* *   R. M. PAPPE                                DATE  07/16/80 
* 
* DC  PURPOSE 
* 
*     ANALYZE A COMPLETE SCHEMA ENTRY FROM SCHEMA TO LAST SUBSCHEMA.
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD "SCHEMA" WAS DETECTED BY CRSCHEM OR SCHSET. 
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS ARE ENCOUNTERED, APPROPRIATE DIAGNOSTICS ARE ISSUED.
*     RETURN IS ALWAYS -NO-.
* 
* DC  CALLING ROUTINES
* 
*     CRSCHEM - CREATE A SCHEMA 
*     SCHSET  - BUILD UP A SCHEMA 
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR04  -  ADD SUBSCHEMA TO DIRECTORY
*     DB$SR06  -  BUILD AREA DIRECTORY AND AREA INFORMATION TABLES
*     DB$SR07  -  BUILD SCHEMA INFORMATION TABLE
*     DB$SR09  -  CHECK FOR MINIMUM SCHEMA INFORMATION (NAME AND FILE)
*     DB$SR10  -  RELEASE CMM BLOCKS AND CLEAR ALL FLAGS
*     DB$SR11  -  CLOSE SCHEMA FILE 
*     DB$SR19  -  CHECK IF NEXT WORD IS A SCHEMA-TYPE WORD
*     DB$SR27  -  STORE AREA NAME 
*     DB4SR31  -  STORE CURRENT FILE TYPE 
*     DB$SR37  -  STORE SUBSCHEMA NAME
*     DB$SR38  -  STORE SCHEMA NAME 
*     DB$SR48  -  STORE "MASTER" IN THE VERSION INFORMATION TABLE 
*     DB$SR55  -  CHECK THAT "TRF" WAS SELECTED IF "RIF" WAS SELECTED 
*     DB$SR60  -  STORE NUMBER OF AREAS IN ADT AND SDT HEADERS
*     DB$SR61  -  INITIALIZE AREA CELLS 
*     DB$SR62  -  INITIALIZE TEMPORARY CELLS USED IN SS PROCESSING
*     DB$SR64  -  RE-INITIALIZE CELLS FOR RE-START
*     DB$SR65  -  CHECK IF NEXT WORD IS KEYWORD "AREA"
*     DB$SR66  -  BUILD CONSTRAINT USE TABLE (CUT)
*     DB$SR81  -  CHECK IF NEXT WORD IS AN AREA-TYPE WORD 
*     FILE     -  ANALYZE FILE CLAUSE 
*     INDEX    -  ANALYZE INDEX FILE SUBENTRY 
*     PFINFO   -  ANALYZE PERMANENT FILE INFORMATION ENTRY
*     RECVR    -  RECOVER FROM ERRORS IN SCHEMA 
*     SUBS     -  EXECUTE SYNTACTIC ROUTINE WHOSE NAME IS IN CURWORD
*                  JOB
*                  JOURNAL
*                  PROCEDURE
*                  QUICK
*                  RESTART
*                  TRANSACTION
*     VRSNTRY  -  ANALYZE VERSION ENTRIES (EXCLUDING MASTER)
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     1.  SKIP OVER OPTIONAL WORDS "NAME IS" AND VALIDATE 
*         SCHEMA NAME.
*         IF THE SCHEMA NAME IS INVALID, ISSUE DIAGNOSTIC 101 
*         AND RETURN -NO-.
*         IF THE SCHEMA NAME IS VALID, CALL DB$SR38 TO STORE THE
*         SCHEMA NAME.
*     2.  CALL DB$SR19 TO CHECK IF THE NEXT WORD IS A SCHEMA-TYPE WORD. 
*         IF THE NEXT WORD IS A SCHEMA-TYPE WORD, CALL DB4SR31 TO STORE 
*         THE CURRENT FILE TYPE, AND EXECUTE A +SUBS TO EXECUTE THE 
*         APPROPRIATE SYNTACTIC ROUTINE. IF ERRORS ARE ENCOUNTERED (-NO-
*         RETURN FROM CALLED ROUTINE), EXECUTE ROUTINE RECVR. THIS
*         ROUTINE WILL +SNW UNTIL A VALID SCHEMA-TYPE WORD, PERIOD, OR
*         END OF RECORD IS FOUND. IF NO ERRORS ARE DETECTED, GO TO 2. 
*         IF THE NEXT WORD IS NOT A SCHEMA-TYPE WORD, CHECK FOR A PERIOD
*         IF A PERIOD IS NOT FOUND, ISSUE DIAGNOSTIC 102. 
*     3.  CALL DB$SR09 TO CHECK IF THE MINIMUM SCHEMA INFORMATION WAS 
*         SPECIFIED. IF THE MINIMUM SCHEMA INFORMATION WAS NOT
*         SPECIFIED, ISSUE DIAGNOSTIC 103 AND RETURN -NO-. IF THE 
*         MINIMUM SCHEMA INFORMATION WAS SPECIFIED, CALL DB$SR55 TO CHEC
*         THAT IF RESTART IDENTIFIER FILE WAS SPECIFIED, TRANSACTION
*         RECOVERY FILE WAS ALSO SPECIFIED. IF DB$SR55 RETURNS -NO-,
*         ISSUE DIAGNOSTIC 161. 
*     4.  CALL DB$SR07 TO BUILD THE SCHEMA INFORMATION TABLE
*         (SIT) AND THE SCHEMA DIRECTORY TABLE (SDT) AND CALL 
*         DB$SR62 TO INITIALIZE THE SCHEMA CELLS FOR THE NEXT SCHEMA. 
*         IF THE NEXT WORD IS NOT "VERSION" GO TO STEP 5. 
*         IF THE NEXT WORD IS "VERSION" SKIP OPTIONAL WORDS 
*         "NAME IS". CHECK IF THE NEXT WORD IS "MASTER". IF THE NEXT
*         WORD IS NOT "MASTER", ISSUE DIAGNOSTIC 130. 
*         CALL DB$SR48 TO STORE "MASTER" INTO THE VDT.
*     5 - CHECK IF NEXT WORD IN INPUT IS "AREA".
*         IF KEYWORD "AREA" IS NOT SPECIFIED, ISSUE DIAGNOSTIC 105. 
*         IF "AREA" WAS SPECIFIED CALL DB$SR61 TO INITIALIZE AREA CELLS.
*     6.  SKIP OPTIONAL WORDS "NAME IS" AND VALIDATE THE AREA NAME. 
*         IF THE AREA NAME IS INVALID, ISSUE DIAGNOSTIC 106 . 
*         IF THE AREA NAME IS VALID, CALL DB$SR27 TO STORE THE AREA NAME
*         AND THEN CALL DB$SR31 TO STORE THE CURRENT FILE TYPE (AREA).
*         CALL SYNTACTIC ROUTINE PFINFO TO ANALYZE THE AREA PERMANENT 
*         FILE INFORMATION. 
*     7.  CALL DB$SR81 TO CHECK IF THE NEXT WORD IS AN AREA-TYPE
*         WORD. IF IT IS AN AREA TYPE WORD, ISSUE A +SUBS TO EXECUTE
*         THE APPROPRIATE SYNTACTIC ROUTINE. IF THE NEXT WORD IS NOT
*         AN AREA-TYPE WORD, CHECK IF IT IS "INDEX".
*         IF IT IS "INDEX", CALL DB$SR31 TO STORE THE CURRENT FILE TYPE 
*         (INDEX) AND THEN CALL SYNTACTIC ROUTINE -INDEX- TO ANALYZE THE
*         INDEX FILE ENTRY.  GO TO 7. 
*      8. CALL DB$SR06 TO BUILD THE AREA INFORMATION TABLE, AREA
*         DIRECTORY TABLE, KEY INFORMATION TABLE AND MAKE AN ENTRY FOR
*         THIS AREA IN THE PERMANENT FILE INFORMATION TABLE.
*         CHECK FOR A ".". IF NOT PRESENT, ISSUE DIAGNOSTIC 102.
*     9.  CALL DB$SR65 TO CHECK IF THE NEXT WORD IS "AREA". 
*         IF THE NEXT WORD IS "AREA" GO TO STEP 6. IF THE NEXT
*         WORD IS NOT "AREA", GO TO 10. 
*     10. CALL DB$SR66 TO BUILD THE CONSTRAINT USE TABLE. 
*         CHECK IF THE NEXT WORD IS VERSION. IF IT IS NOT, GO TO 11.
*         OTHERWISE, CALL SYNTACTIC ROUTINE VRSNTRY TO ANALYZE ALL THE
*         VERSION ENTRIES FOR THE CURRENT SCHEMA BEING PROCESSED. 
*     11. IF THE NEXT WORD IS NOT "SUBSCHEMA" ISSUE 
*         DIAGNOSTIC 109 AND RETURN -NO- TO THE CALLING ROUTINE.
*         IF THE NEXT WORD IS "SUBSCHEMA" CALL DB$SR60 TO 
*         STORE THE AREA COUNT IN THE ADT HEADER AND THE SDT. 
*     12. SKIP OPTIONAL WORDS "NAME IS" AND VALIDATE THE SUBSCHEMA NAME.
*         ISSUE DIAGNOSTIC 110 IF THE SUBSCHEMA NAME IS INVALID AND 
*         RETURN -NO- TO CALLING ROUTINE. 
*         IF THE SUBSCHEMA NAME IS VALID, CALL DB$SR37 TO STORE 
*         THE SUBSCHEMA NAME. CHECK IF THE KEYWORD "FILE" IS
*         SPECIFIED. IF "FILE" IS NOT SPECIFIED ISSUE DIAGNOSTIC 111
*         AND RETURN -NO- TO CALLING ROUTINE. 
*         IF "FILE" WAS SPECIFIED, VALIDATE FILE NAME. IF FILE NAME 
*         IS INVALID (NO RETURN FROM -FILE-), RETURN -NO- TO
*         CALLING ROUTINE.
*         IF THE FILE NAME SPECIFIED IS VALID, CHECK FOR TERMINATOR 
*         (.). IF THE TERMINATOR WAS NOT SPECIFIED, ISSUE DIAGNOSTIC
*         102.
*         CALL DB$SR04 TO ADD THE SUBSCHEMA TO THE DIRECTORY. 
*         CALL DB$SR62 TO RE-INITIALIZE SUBSCHEMA CELLS.
*     13. IF THE NEXT WORD IS "SUBSCHEMA" GO TO STEP 12.
*         OTHERWISE CALL DB$SR11 TO CLOSE THE SCHEMA FILE.
*         RETURN -NO-.
 #
  
:SCHNTRY :01
              -NAME                    # SKIP OVER OPTIONAL WORDS      #
              -IS 
              +NAME                    # CHECK FOR VALID NAME          #
                        D101           # INVALID SCHEMA NAME           #
                        NO             # RETURN, FATAL ERROR           #
          /   *DB$SR38                 # STORE SCHEMA NAME             #
       :05    *DB$SR19                 # IS NEXT WORD SCHEMA-TYPE WORD #
                        10             # NO, CHECK FOR TERMINATOR      #
          /   +SNW
              *DB$SR31                 # STORE CURRENT FILE TYPE       #
              +SUBS 
                        RECVR          # ERRORS DETECTED, RECOVER      #
              /         05
       :10    $.                       # CHECK FOR PERIOD              #
                        D102           # PERIOD MISSING                #
          /   *DB$SR09                 # CHECK IF SCHEMA LFN SPECIFIED #
                        D103           # MISSING SCHEMA LFN            #
                                  NO   # RETURN, FATAL ERROR           #
          /   *DB$SR55                 # CHECK THAT TRF IS SPECIFIED   #
                                       # IF RIF IS ALSO SPECIFIED      #
                        D161           # TRF MUST BE SELECTED WITH RIF #
       :15    *DB$SR07                 # BUILD SCHEMA DIRECTORY AND    #
                                       # SCHEMA INFORMATION TABLES     #
              *DB$SR62                 # INITIALIZE FOR SUBSCHEMA      #
              $VERSION                 # CHECK FOR MASTER VERSION      #
                        17             # VERSION NOT SPECIFIED         #
          /   -NAME                    # SKIP OVER OPTIONAL WORDS      #
              -IS 
              $MASTER 
                        +SNW
                        D130           # VERSION NAME MASTER EXPECTED  #
       :17    *DB$SR48                 # ENTER "MASTER" INTO THE VDT   #
       :20    $AREA                    # CHECK FOR AREA                #
                        D105           # AT LEAST ONE AREA MUST BE     #
                        27             # SPECIFIED                     #
          /   *DB$SR61                 # INITIALIZE AREA CELLS         #
              -NAME                    # SKIP OVER OPTIONAL WORDS      #
              -IS 
              +NAME 
                        D106           # AREA NAME IS INVALID          #
          /   *DB$SR27                 # STORE AREA NAME               #
              *DB$SR31                 # STORE CURRENT FILE TYPE       #
          /   PFINFO                   # ANALYZE AREA PF INFORMATION   #
       :27    *DB$SR81                 # IS NEXT WORD AREA-TYPE WORD   #
                        30
          /   +SNW
              +SUBS 
                        27
       :30    $INDEX                   # CHECK FOR INDEX               #
                        35
          /   *DB$SR31                 # STORE CURRENT FILE TYPE       #
              INDEX                    # ANALYZE INDEX SUBENTRY        #
                        27
          /   27                       # GO BACK AND CHECK IF THE NEXT #
                                       # WORD IS AN AREA-TYPE WORD     #
       :35    *DB$SR06                 # BUILD AREA DIRECTORY, AREA    #
                                       # INFO, AND AREA KEY TABLES     #
              $.
                        D102           # PERIOD MISSING                #
          /   *DB$SR65                 # CHECK IF NEXT WORD IS AREA    #
                        45
          /   20
       :45    *DB$SR66                 # BUILD CONSTRAINT USE TABLE    #
              $VERSION
                        50             # GO CHECK FOR SUBSCHEMA        #
          /   VRSNTRY                  # ANALYZE VERSION ENTRIES       #
       :50    $SUBSCHEMA
                        D109           # AT LEAST ONE SUBSCHEMA MUST   #
                                       # BE SPECIFIED                  #
                                  NO   # RETURN, FATAL ERROR           #
          /   *DB$SR60                 # STORE COUNTS AND LENGTHS IN   #
                                       # THE SHEMA DIRECTORY TABLE     #
       :55    -NAME                    # SKIP OVER OPTIONAL WORDS      #
              -IS 
              +NAME 
                        D110           # INVALID SUBSCHEMA NAME        #
                                  NO   # RETURN, FATAL ERROR           #
          /   *DB$SR37                 # STORE SUBSCHEMA NAME          #
              $FILE                    # CHECK FOR FILE                #
                        D111           # KEYWORD -FILE- MISSING        #
                                  NO   # RETURN, FATAL ERROR           #
          /   FILE                     # ANALYZE FILE CLAUSE           #
                        NO             # RETURN, FATAL ERROR           #
          /   $.
                        D102           # PERIOD MISSING                #
          /   *DB$SR04                 # ADD SUBSCHEMA TO THE DIRECTORY#
              *DB$SR62                 # INITIALIZE FOR NEXT SUBSCHEMA #
              +EOT                     # IS IT END-OF-RECORD           #
                        57
          /   *DB$SR1I                 # SET END-OF-RECORD FOUND FLAG  #
              60
       :57    $SUBSCHEMA               # CHECK FOR ANOTHER SUBSCHEMA   #
                        60             # NO                            #
          /   55                       # ANALYZE SUBSCHEMA ENTRY       #
       :60    *DB$SR11                 # CLOSE SCHEMA FILE             #
              NO
#EJECT# 
 #
* *   TAPE - ANALYZE TAPE SUBENTRY               PAGE  1
* *   R. M. PAPPE                                DATE  06/29/81 
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE TAPE CLAUSE.
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -TAPE- HAS BEEN DETECTED AND STORED INTO CURWORD BY 
*     DB$STD. 
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS ARE DETECTED, APPROPRIATE DIAGNOSTICS ARE ISSUED. 
*     RETURN IS ALWAYS -NO-.
* 
* DC  CALLING ROUTINES
* 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
*     MODSET  - MODIFY SCHEMA 
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR95  - SET MT FLAG
*     DB$SR96  - SET NT FLAG
*     DB$SR97  - SET LO DENSITY FLAG
*     DB$SR98  - SET HI DENSITY FLAG
*     DB$SR99  - SET HY DENSITY FLAG
*     DB$SR1A  - SET HD DENSITY FLAG
*     DB$SR1B  - SET PE DENSITY FLAG
*     DB$SR1C  - SET GE DENSITY FLAG
*     DB$SR1D  - SET TYPE-CLAUSE-SEEN FLAG
*     DB$SR1E  - SET DENSITY-CLAUSE SEEN FLAG 
*     DB$SR1F  - CHECK FOR DUPLICATE TYPE CLAUSE
*     DB$SR1G  - CHECK FOR DUPLICATE DENSITY CLAUSE 
*     DB$SR1K  - SET TAPE CLAUSE SEEN FLAG
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     1.  IF PROCFLAG HAS BEEN SET THEN IGNORE THE TAPE CLAUSE, 
*         ELSE SET THE TAPE SEEN FLAG.
*     2.  CHECK FOR KEYWORD -TYPE-. IF NOT PRESENT, GO TO 9.
*     3.  CALL DB$SR1F TO CHECK IF THIS CLAUSE WAS PREVIOUSLY 
*         SPECIFIED. IF DB$SR1F RETURNS -NO-, SKIP TO NEXT WORD,
*         ISSUE DIAGNOSTIC 168, GO TO 9.
*     4.  CALL DB$SR1D TO SET THE TYPE-CLAUSE-SEEN FLAG. SKIP 
*         OPTIONAL WORD -IS-. 
*     5.  CHECK FOR KEYWORD -MT-. IF NOT PRESENT, GO TO 7.
*     6.  CALL DB$SR95 TO SET THE MT FLAG, GO TO 9. 
*     7.  CHECK FOR KEYWORD -NT-. IF NOT PRESENT, SKIP TO NEXT WORD,
*         ISSUE DIAGNOSTIC 147, GO TO 9.
*     8.  CALL DB$SR96 TO SET THE NT FLAG.
*     9.  CHECK FOR KEYWORD -DENSITY-. IF NOT PRESENT, GO TO 2. 
*    10.  CALL DB$SR1G TO CHECK IF THIS CLAUSE WAS PREVIOUSLY 
*         SPECIFIED. IF DB$SR1G RETURNS -NO-, SKIP TO NEXT WORD,
*         ISSUE DIAGNOSTIC 168, GO TO 2.
*    11.  CALL DB$SR1E TO SET THE DENSITY-CLAUSE-SEEN FLAG. 
*         SKIP OPTIONAL WORD -IS-.
*    12.  CHECK FOR KEYWORD -LO-. IF NOT PRESENT, GO TO 14. 
*    13.  CALL DB$SR97 TO SET THE LO DENSITY FLAG. GO TO 2. 
*    14.  CHECK FOR KEYWORD -HI-. IF NOT PRESENT, GO TO 16. 
*    15.  CALL DB$SR98 TO SET THE HI DENSITY FLAG. GO TO 2. 
*    16.  CHECK FOR KEYWORD -HY-. IF NOT PRESENT, GO TO 18. 
*    17.  CALL DB$SR99 TO SET THE HY DENSITY FLAG. GO TO 2. 
*    18.  CHECK FOR KEYWORD -HD-. IF NOT PRESENT, GO TO 20. 
*    19.  CALL DB$SR1A TO SET THE HD DENSITY FLAG. GO TO 2. 
*    20.  CHECK FOR KEYWORD -PE-. IF NOT PRESENT, GO TO 22. 
*    21.  CALL DB$SR1B TO SET THE PE DENSITY FLAG. GO TO 2
*    22.  CHECK FOR KEYWORD -GE-. IF NOT PRESENT, SKIP TO NEXT WORD,
*         ISSUE DIAGNOSTIC 166 AND GO TO 2
*    23.  CALL DB$SR1C TO SET THE GE DENSITY FLAG, AND GO TO 2
* 
 #
  
:TAPE  :05                             # ENTRY                         #
             *DB$SR1K                  # IF THE PROCFLAG HAS BEEN      #
                                       # SPECIFIED THEN THE TAPEFLAG IS#
                                       # SET TO FALSE, ELSE TO TRUE    #
       :10   $TYPE
                       30              # CHECK FOR DENSITY             #
          /  *DB$SR1F                  # CHECK FOR DUPLICATE CLAUSE    #
                        +SNW           # SKIP OVER -NT- OR -MT-        #
                       D168            # DUPLICATE TYPE CLAUSE         #
                        +SNW           # SKIP TO NEXT KEYWORD          #
                       30              # CHECK FOR DENSITY             #
       :15   *DB$SR1D                  # SET TYPE CLAUSE SEEN FLAG     #
             -IS
             $MT
                        20             # GO CHECK FOR NT               #
          /  *DB$SR95                  # SET MT FLAG                   #
             30                        # GO CHECK FOR DENSITY          #
       :20   $NT
                       +SNW 
                       D147            # ILLEGAL TAPE TYPE             #
                       30              # GO CHECK FOR DENSITY          #
          /  *DB$SR96                  # SET NT FLAG                   #
       :30   $DENSITY 
                       NO              # RETURN TO CALLER              #
          /  *DB$SR1G                  # CHECK FOR DUPLICATE CLAUSE    #
                        +SNW           # SKIP OVER DENSITY KEYWORDS    #
                       D168            # DUPLICATE DENSITY CLAUSE      #
                        +SNW           # SKIP TO NEXT KEYWORD          #
                       NO              # RETURN TO CALLER              #
       :35   *DB$SR1E                  # SET DENSITY CLAUSE SEEN FLAG  #
             -IS
             $LO
                       40              # CHECK FOR HI                  #
          /  *DB$SR97                  # SET LO DENSITY FLAG           #
             10                        # GO CHECK FOR TYPE             #
       :40   $HI
                       45              # CHECK FOR HY                  #
          /  *DB$SR98                  # SET HI DENSITY FLAG           #
             10                        # GO CHECK FOR TYPE             #
       :45   $HY
                       50              # CHECK FOR HD                  #
          /  *DB$SR99                  # SET HY DENSITY FLAG           #
             10                        # GO CHECK FOR TYPE             #
       :50   $HD
                       55              # CHECK FOR PE                  #
          /  *DB$SR1A                  # SET HD DENSITY FLAG           #
             10                        # GO CHECK FOR TYPE             #
       :55   $PE
                       60              # CHECK FOR GE                  #
          /  *DB$SR1B                  # SET PE DENSITY FLAG           #
             10                        # GO CHECK FOR TYPE             #
       :60   $GE
                       +SNW 
                       D166            # ILLEGAL TAPE DENSITY          #
                       10              # GO CHECK FOR TYPE             #
          /  *DB$SR1C                  # SET GE DENSITY FLAG           #
             10                        # GO CHECK FOR TYPE             #
#EJECT# 
 #
* *   TRANSACTION - CRACK TRANSACTION RECOVERY   PAGE  1
* *   R. M. PAPPE                                DATE 06/26/80
* 
* DC  PURPOSE 
* 
*     ANALYZE THE SYNTAX OF THE TRANSACTION RECOVERY FILE 
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -TRANSACTION- HAS BEEN DETECTED BY DB$STD WHILE CRACKING
*     THE SCHEMA ENTRY, AND STORED INTO CURWORD 
* 
* DC  EXIT CONDITIONS 
* 
*     IF ERRORS WERE DETECTED, APPROPRIATE DIAGNOSTICS HAVE BEEN
*     ISSUED, AND RETURN IS -NO-, OTHERWISE RETURN IS -YES-.
* 
* DC  CALLING ROUTINES
* 
*     MODSET  - MODIFY SCHEMA 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR30 - STORE UNIT LIMIT
*     DB$SR41 - STORE UPDATE LIMIT
*     PFINFO  - ANALYZE PERMANENT FILE INFORMATION
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     1 - SKIP OVER OPTIONAL WORDS -RECOVERY FILE-. CALL PFINFO TO
*         ANALYZE THE PERMANENT FILE INFORMATION. IF ANY ERRORS WERE
*         DETECTED BY PFINFO, RETURN -NO-.
*     2 - CHECK FOR -UNIT-. IF NOT PRESENT GO TO 3. OTHERWISE, SKIP 
*         OVER OPTIONAL WORDS -LIMIT IS- AND CHECK FOR AN INTEGER. IF 
*         NOT PRESENT, ISSUE DIAGNOSTIC 158 AND GO TO 3. IF THE UNIT
*         LIMIT VALUE IS AN INTEGER, CALL DB$SR30 TO VALIDATE AND 
*         AND STORE IT. IF THE UNIT LIMIT VALUE IS NOT WITHIN 
*         THE ALLOWED LIMITS, ISSUE DIAGNOSTIC 158. 
*     3 - CHECK FOR -UPDATE-. IF NOT PRESENT, RETURN -YES-. OTHERWISE,
*         SKIP OVER OPTIONAL WORDS -LIMIT IS- AND CHECK FOR AN INTEGER. 
*         IF NOT PRESENT, ISSUE DIAGNOSTIC 159 AND GO TO 2. OTHERWISE,
*         CALL DB$SR41 TO VALIDATE AND STORE IT. IF IT IS NOT WITHIN THE
*         ALLOWED LIMITS, ISSUE DIAGNOSTIC 159 AND GO TO 2. 
* 
 #
  
:TRANSACTION  :01 
              -RECOVERY                # SKIP OVER OPTIONAL WORDS      #
              -FILE 
              PFINFO                   # ANALYZE PERM FILE INFO        #
                                  NO   # ERROR DETECTED                #
       :10    $UNIT                    # CHECK FOR UNIT LIMIT          #
                                  20   # CHECK FOR UPDATE LIMIT        #
          /   -LIMIT
              -IS 
              +INT                D158 # INVALID UNIT LIMIT            #
                                  20   # CHECK FOR UPDATE              #
          /   *DB$SR30                 # VALIDATE AND STORE LIMIT      #
                                  D158 # INVALID UNIT LIMIT            #
       :20    $UPDATE                  # CHECK FOR UPDATE LIMIT        #
                        YES            # EXIT                          #
          /   -LIMIT
              -IS 
              +INT                D159 # INVALID UPDATE LIMIT          #
                        10             # CHECK FOR UNIT LIMIT          #
          /   *DB$SR41                 # VALIDATE UPDATE LIMIT         #
                        D159           # INVALID UPDATE LIMIT          #
          /             10             # GO CHECK FOR UNIT LIMIT       #
#EJECT# 
  
#----------------------------------------------------------------------#
  
:SET    :10 
              *DB$SR70                 # SET SETNAME FLAG              #
              PACK                     # ANALYZE SETNAME CLAUSE        #
              NO
  
#----------------------------------------------------------------------#
  
:PACK   :10   -NAME 
              -IS 
              +NAME 
                        +SNW
                         D142          #ILL-FORMED PACK NAME           #
                        NO
          /   *DB$SR35                 # STORE FAMILY/PACK/SET NAME    #
                        D142           # ILL-FORMED FAMILY/PACK/SET NAM#
          /             NO
  
#----------------------------------------------------------------------#
  
:UN     :10   -IS                                                        SNTX 
              +LIT                                                       SNTX 
                         +SNW 
                         D123          #ILL-FORMED UN/ID               # SNTX 
                         NO                                              SNTX 
          /   *DB$SR33                 # STORE UN/ID                   #
                         D123          #ILL-FORMED UN/ID               # SNTX 
          /   NO
  
#EJECT# 
 #
* *   VRSNTRY - ANALYZE VERSION ENTRIES          PAGE  1
* *   J. G. SERPA                                DATE  07/11/80 
* 
* DC  PURPOSE 
* 
*     ANALYZE VERSION ENTRIES (EXCLUDES MASTER) 
* 
* DC  ENTRY CONDITIONS
* 
*     KEYWORD -VERSION- HAS BEEN DETECTED BY DB$STD WHILE ANALYZING A 
*     SCHEMA ENTRY
* 
* DC  EXIT CONDITIONS 
* 
*     ALL THE VERSION ENTRIES FOR A PARTICULAR SCHEMA HAVE BEEN 
*     ANALYZED, AND APPROPRIATE DIAGNOSTICS ISSUED. RETURN IS -NO-. 
* 
* DC  CALLING ROUTINES
* 
*     MODSET  - MODIFY SCHEMA ENTRY 
*     SCHNTRY - ANALYZE SCHEMA ENTRY
* 
* DC  CALLED ROUTINES 
* 
*     DB$SR24 - ENTER VERSION NAME INTO VDT 
*     DB$SR27 - STORE AREA NAME 
*     DB$SR29 - PROCESS SAME AS MASTER
*     DB$SR31 - STORE FILE TYPE 
*     DB$SR54 - STORE VERSION NAME
*     DB$SR61 - INITIALIZE TEMPORARY CELLS USED IN AREA PROCESSING
*     DB$SR67 - CHECK THE CONSTRAINT USE TABLE
*     DB$SR73 - COMPLETE VIT FOR CURRENT VERSION
*     DB$SR81 - CHECK IF NEXT WORD IS AN AREA-TYPE WORD 
*     DB$SR82 - INITIALIZE TEMPORARY CELLS USED IN VERSION PROCESSING 
*     DB$SR87 - CHECK IF AREA EXISTS
*     DB$SR88 - CREATE PIT AND UPDATE VIT FOR CURRENT AREA
*     INDEX   - ANALYZE SYNTAX OF THE INDEX ENTRY 
*     PFINFO  - ANALYZE PERMANENT FILE INFORMATION ENTRY
*     SUBS    - EXECUTE SYNTACTIC ROUTINE WHOSE NAME IS IN CURWORD
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     1 - SKIP OVER OPTIONAL WORD -NAME IS-, AND CALL DB$SR82 TO
*         INITIALIZE ALL CELLS RELATED TO VERSIONS. 
*     2 - VALIDATE VERSION NAME. IF INVALID ISSUE DIAGNOSTIC 129. 
*         CALL DB$SR54 TO STORE THE VERSION NAME. IF THE NAME IS
*         INVALID, ISSUE DIAGNOSTIC 129.
*         CALL DB$SR24 TO ENTER THE VERSION NAME INTO THE VERSION 
*         DIRECTORY TABLE. IF THE NAME IS DUPLICATE, ISSUE DIAGNOSTIC 
*         133.
*     3 - CHECK FOR AREA. IF NOT PRESENT, GO TO 11. 
*     4 - SKIP OVER OPTIONAL WORDS -NAME IS-, AND CALL ROUTINE DB$SR61
*         TO INITIALIZE ALL CELLS RELATED TO AREA PROCESSING. 
*     5 - VALIDATE AREA NAME. IF INVALID ISSUE DIAGNOSTIC 106. CALL 
*         DB$SR27 TO STORE THE AREA NAME. CALL DB$SR87 TO CHECK THAT
*         THE AREA EXISTS AND HAS NOT ALREADY BEEN SPECIFIED IN THIS
*         VERSION. IF THE AREA NAME DOES NOT EXIST, ISSUE DIAGNOSTIC
*         126. CHECK FOR -SAME-. IF NOT SPECIFIED GO TO 7.
*     6 - SKIP OVER OPTIONAL WORD -AS-. CHECK FOR -MASTER-. IF NOT
*         FOUND, ISSUE DIAGNOSTIC 130. CALL DB$SR29 TO SET THIS AREA
*         THE SAME AS MASTER.  GO TO 8. 
*     7 - CALL DB$SR31 TO STORE THE CURRENT FILE TYPE (AREA), AND CALL
*         SYNTACTIC ROUTINE -PFINFO- TO ANALYZE THE AREA PERMANENT
*         FILE INFORMATION. 
*     8 - CALL DB$SR81 TO CHECK IF THE NEXT WORD IS AN AREA-TYPE WORD.
*         IF IT IS NOT, GO TO 9.
*         ISSUE A +SNW FOLLOWED BY A +SUBS TO EXECUTE THE APPROPRIATE 
*         SYNTACTIC ROUTINE.  GO TO 8.
*     9 - CHECK FOR "INDEX". IF NOT PRESENT, GO TO 10.
*         CALL SYNTACTIC ROUTINE -INDEX- TO ANALYZE THE SYNTAX OF THE 
*         INDEX ENTRY.
*     10- CALL DB$SR88 TO UPDATE THE VERSION INFORMATION TABLE AND
*         CREATE A PERMANENT FILE INFORMATION TABLE ENTRY FOR THIS AREA.
*     11- CHECK FOR A ".". IF NOT PRESENT, ISSUE DIAGNOSTIC 102.
*         CHECK FOR "AREA". IF PRESENT, GO TO 4.
*         CALL DB$SR73 TO COMPLETE THE VERSION INFORMATION TABLE ENTRY
*         FOR THIS VERSION. CALL DB$SR67 TO CHECK THE CONSRAINT USE 
*         TABLE FOR CONSTRAINT INCONSISTENCIES. 
*         CHECK FOR "VERSION". IF PRESENT, GO TO 1, ELSE, RETURN -NO-.
* 
 #
  
:VRSNTRY  :01                          # ENTRY                         #
              -NAME                    # SKIP OVER OPTIONAL WORDS      #
              -IS 
              *DB$SR82                 # INITIALIZE VERSIONS CELLS     #
              +NAME                    # CHECK NAME                    #
                        +SNW
                        D129           # INVALID VERSION NAME          #
          /   *DB$SR54                 # STORE VERSION NAME            #
                        D129           # INVALID VERSION NAME          #
          /   *DB$SR24                 # ENTER VERSION NAME INTO VDT   #
                        D133           # DUPLICATE VERSION NAME        #
          /   $AREA                    # CHECK FOR AREA                #
                        20             # CHECK FOR TERMINATOR          #
       :05    -NAME                    # SKIP OVER OPTIONAL WORDS      #
              -IS 
              *DB$SR61                 # INITIALIZE AREA CELLS         #
              +NAME                    # CHECK NAME                    #
                        D106           # INVALID AREA NAME             #
          /   *DB$SR27                 # STORE AREA NAME               #
              *DB$SR87                 # CHECK THAT AREA EXISTS        #
                        D126           # NON-EXISTENT AREA NAME GIVEN  #
          /   $SAME                    # CHECK FOR SAME                #
                        10             # ANALYZE PF INFO               #
          /   -AS                      # SKIP OVER OPTIONAL WORD       #
              $MASTER                  # CHECK FOR MASTER              #
                        D130           # VERSION NAME MASTER EXPECTED  #
          /   *DB$SR29                 # PROCESS SAME AS MASTER        #
                        20             # CHECK FOR A FOLLOWING AREA    #
       :10    *DB$SR31                 # STORE CURRENT FILE TYPE       #
              PFINFO                   # ANALYZE PERMANENT FILE INFO   #
       :12    *DB$SR81                 # IS NEXT WORD AREA-TYPE WORD   #
                        17
          /   +SNW
              +SUBS 
                        12
       :17    $INDEX
                        18             # GO UPDATE VIT AND PIT         #
          /   *DB$SR31                 # STORE FILE TYPE               #
              INDEX                    # ANALYZE INDEX ENTRY           #
       :18    *DB$SR88                 # UPDATE VIT AND CREATE PIT     #
                                       # FOR THIS AREA                 #
       :20    $.
                        D102           # PERIOD MISSING                #
          /   $AREA 
                        25             # COMPLETE THIS VERSION         #
  
          /   05                       # ANALYZE AREA ENTRY            #
       :25    *DB$SR73                 # COMPLETE VIT FOR THIS VERSION #
              *DB$SR67                 # CHECK CONSTRAINT USE TABLE    #
              $VERSION
                        NO             # EXIT                          #
          /   01                       # ANALYZE NEXT VERSION ENTRY    #
#EJECT# 
#----------------------------------------------------------------------#
  
:VSN    :10   -IS 
              +LIT
                        +SNW
                         D143          #ILL-FORMED VSN                 #
                         NO 
          /   *DB$SR36                 # STORE VSN                     #
                        D143           # ILL-FORMED VSN                #
          /   NO                       # EXIT                          #
END 
