*DECK DB$DSNI 
USETEXT SCANTXT 
      PROC DB$DSNI; 
      BEGIN 
 #
* *   DB$DSNI - NAME/ID RECOGNITION SEMANTICS    PAGE  1
* *   C F RICHARDS                               DATE  11/27/78 
* 
* DC  PURPOSE 
* 
*     CONTAIN THE SEMANTIC ROUTINES FOR RECOGNIZING AND SAVING AN 
*     AREA/SCHEMA NAME/ID, AND SUBSCHEMA NAME.
* 
* DC  CONTAINED ROUTINES
# 
      XDEF PROC DB$DS15;           # SAVE AREA ID/NAME                 #
      XDEF PROC DB$DS16;           # SAVE SCHEMA ID/NAME               #
      XDEF PROC DB$DS17;           # SAVE AN ID VALUE                  #
      XDEF PROC DB$DS18;           # SAVE A NAME VALUE                 #
      XDEF PROC DB$DS19;           # VALIDATE THE SCHEMA/AREA PAIR     #
      XDEF PROC DB$DS32;           # VALIDATE/SAVE SUBSCHEMA NAME      #
      XDEF PROC DB$DS33;           # VALIDATE APPEARANCE OF SC PARAM   #
      XDEF PROC DB$DS36;           # VALIDATE VERSION NAME             #
      XDEF PROC DB$DS37;           # SAVE VERSION NAME                 #
# 
* DC  GLOBAL VARIABLES
# 
      ITEM ID I;                   # TEMPORARY FOR ID VALUE            #
      ITEM NAME C(30);             # TEMPORARY FOR NAME VALUE          #
 #                                                                     #
      CONTROL EJECT;
      PROC DB$DS15; 
      BEGIN 
 #
* *   DB$DSNI                                    PAGE  1
* *   DB$DS15 - SAVE THE AREA NAME OR ID
* *   C F RICHARDS                               DATE  11/27/78 
* 
* DC  PURPOSE 
* 
*     SAVE THE NAME OR ID AS IDENTIFICATION OF AN AREA. 
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     ID - CONTAINS THE ENTERED ID, ELSE ZERO.
*     NAME - CONTAINS THE ENTERED NAME, ELSE BLANKS.
* 
* DC  EXIT CONDITIONS 
* 
*     DB$DSAI CONTAINS THE ID IF SPECIFIED, ELSE ZERO.
*     DB$DSAN CONTAINS THE NAME IF SPECIFIED, ELSE BLANKS.
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$YES;            # SUCCESS RETURN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     SAVE THE CURRENT NAME/ID IN THE CELLS FOR AREA NAME AND ID. 
*     EXIT VIA DB$YES.
* 
* DC  NON-LOCAL VARIABLES 
# 
      XREF ITEM DB$DSAI I;         # AREA-ID                           #
      XREF ITEM DB$DSAN C(30);     # AREA-NAME                         #
 #                                                                     #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 1 5            #
  
  
      DB$DSAI = ID;                # SAVE AREA ID                      #
      DB$DSAN = NAME;              # SAVE AREA NAME                    #
      DB$YES;                      # SUCCESS RETURN TO SCANNER         #
  
      END 
      CONTROL EJECT;
      PROC DB$DS16; 
      BEGIN 
 #
* *   DB$DSNI                                    PAGE  1
* *   DB$DS16 - SAVE THE SCHEMA NAME OR ID
* *   C F RICHARDS                               DATE  11/27/78 
* 
* DC  PURPOSE 
* 
*     SAVE THE NAME OR ID AS IDENTIFICATION OF A SCHEMA.
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     ID - CONTAINS THE ENTERED ID, ELSE ZERO.
*     NAME - CONTAINS THE ENTERED NAME, ELSE BLANKS.
* 
* DC  EXIT CONDITIONS 
* 
*     DB$DSSI CONTAINS THE ID IF SPECIFIED, ELSE ZERO.
*     DB$DSSN CONTAINS THE NAME IF SPECIFIED, ELSE BLANKS.
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$YES;            # SUCCESS RETURN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     SAVE THE CURRENT NAME/ID IN THE CELLS FOR SCHEMA NAME AND ID. 
*     EXIT VIA DB$YES.
* 
* DC  NON-LOCAL VARIABLES 
# 
      XREF ITEM DB$DSSI I;         # SCHEMA ID                         #
      XREF ITEM DB$DSSN C(30);     # SCHEMA NAME                       #
 #                                                                     #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 1 6            #
  
  
      DB$DSSI = ID;                # SAVE SCHEMA ID                    #
      DB$DSSN = NAME;              # SAVE SCHEMA NAME                  #
      DB$YES;                      # SUCCESS RETURN TO SCANNER         #
  
      END 
      CONTROL EJECT;
      PROC DB$DS17; 
      BEGIN 
 #
* *   DB$DSNI                                    PAGE  1
* *   DB$DS17 - SAVE AN ID VALUE
* *   C F RICHARDS                               DATE  11/27/78 
* 
* DC  PURPOSE 
* 
*     SAVE AN ID VALUE FOR LATER AREA/SCHEMA IDENTIFICATION.
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     DB$CWRD - CONTAINS THE DISPLAY CODE DECIMAL ID VALUE. 
*     DB$CLNG - CONTAINS THE CHARACTER LENGTH OF THE ID VALUE.
* 
* DC  EXIT CONDITIONS 
* 
*     ID - CONTAINS THE BINARY ID VALUE.
*     NAME - CONTAINS ALL BLANKS. 
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF FUNC DB$CBIN I;         # CONVERT DISP. CODE NUM. TO BINARY #
      XREF PROC DB$NO;             # FAILURE RETURN TO SCANNER         #
      XREF PROC DB$YES;            # SUCCESS RETURN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     SET *NAME* TO ALL BLANKS. 
*     CONVERT NUMBER IN DB$CWRD TO BINARY AN STORE IN *ID*. 
*     IF THE ID IS EQUAL TO ZERO EXIT VIA DB$NO (ILLEGAL ID) ELSE 
*     EXIT VIA DB$YES.
 #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 1 7            #
  
  
      NAME = " ";                  # CLEAR ANY PRIOR NAME              #
      ID = DB$CBIN(DB$CWRD, DB$CLNG, 10);  # CONVERT DECIMAL TO BINARY #
      IF ID EQ 0
      THEN
        BEGIN 
        DB$NO;                     # ILLEGAL ID DETECTED               #
  
        END 
      DB$YES;                      # SUCCESS RETURN TO SCANNER         #
  
      END 
      CONTROL EJECT;
      PROC DB$DS18; 
      BEGIN 
 #
* *   DB$DSNI                                    PAGE  1
* *   DB$DS18 - SAVE A NAME 
* *   C F RICHARDS                               DATE  11/28/78 
* 
* DC  PURPOSE 
* 
*     SAVE A NAME FOR LATER AREA/SCHEMA IDENTIFICATION. 
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     DB$CLNG - CONTAINS THE CHARACTER LENGTH OF THE NAME 
*     DB$CWRD - CONTAINS THE NAME 
* 
* DC  EXIT CONDITIONS 
* 
*     ID - CONTAINS ZERO
*     NAME - CONTAINS THE NAME, LEFT JUSTIFIED, BLANK FILLED. 
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$YES;            # SUCCESS RETURN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     SET *ID* TO ZERO. 
*     MOVE DB$CWRD INTO *NAME*. 
*     EXIT VIA DB$YES.
 #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 1 8            #
  
  
      ID = 0;                      # CLEAR ID                          #
      NAME = C<0,DB$CLNG>CURWORDC[0];  # SAVE THE NAME                 #
      DB$YES;                      # SUCCESS RETURN TO SCANNER         #
  
      END 
      CONTROL EJECT;
      PROC DB$DS19; 
      BEGIN 
 #
* *   DB$DSNI                                    PAGE  1
* *   DB$DS19 - VALIDATE SC/AR PARAMETER COMBINATION
* *   C F RICHARDS                               DATE  11/28/78 
* *   A W ALLEN                                  DATE  12/03/79 
* *   M. E. STERMER                              DATE  11/18/80 
* 
* DC  PURPOSE 
* 
*     VALIDATE SC, AR, AND VN OPTIONS AND VALIDATE COMBINATIONS OF
*     SC, AR, VN.  ILLEGAL OPTIONS OR COMBINATIONS RESULT IN EXIT 
*     VIA DB$NO, OTHERWISE EXIT DB$YES. 
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     ALL PARAMETERS FOR THIS COMMAND HAVE BEEN PROCESSED.
*     FLAGS FOR PARAMETERS ACCEPTED ARE SET IN DB$DSFL. 
* 
* DC  EXIT CONDITIONS 
* 
*     DB$YES  IF NEITHER SC OR AR ARE SPECIFIED,
*             OR VALID SC ALONE,
*             OR (VALID SC AND VALID AR). 
*     DB$NO   IF AR ALONE,
*             OR INVALID SC,
*             OR INVALID AR.
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
*              (CALLED FOR UP, DOWN, IDLE OR STATUS COMMANDS) 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$DEDL;           # DISPLAY DIAGNOSTIC MESSAGE        #
      XREF PROC DB$DSFA;           # FIND AREA NAME OR ID              #
      XREF PROC DB$DSFS;           # FIND SCHEMA NAME OR ID            #
      XREF PROC DB$NO;             # FAILURE RETURN TO SCANNER         #
      XREF PROC DB$VEPN;           # GET PRIMARY VERSION NAME          #
      XREF PROC DB$VERL;           # VERSION NAME LOOK-UP              #
      XREF PROC DB$YES;            # SUCCESS REUTRN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     THE STATUS SWITCH VALIDATE USES 3 LABELS, CHECKFLAGS TO PROCESS 
*     SC, AR, AND VN OPTIONS, EXITOK TO PROCESS OPTIONS WHICH NEED
*     NOT BE VALIDATED, AND ILLEGAL TO PROCESS INVALID COMBINATION OF 
*     OPTIONS.
*     THE PROCESS AT CHECKFLAGS IS TO VALIDATE FIRST SCHEMA,
*     IF THE SCHEMA IS UNKNOWN ISSUE A DIAGNOSTIC AND RETURN VIA DB$NO. 
*     ELSE CHECK FOR AREA FLAG.  IF NO AREA OPTION SET AND SCHEMA 
*     VALID RETURN VIA DB$YES.  IF THERE IS AN AREA OPTION THEN 
*     THE AREA IS VALID CHECK FOR VERSION NAME FLAG, ELSE ISSUE 
*     DIAGNOSTIC AND RETURN VIA DB$NO.  IF VERSION NAME WAS NOT SET 
*     AND THE MASTER DIRECTORY ONLY USES THE VERSION *MASTER* 
*     THEN USE DEFAULT OF *MASTER*, RETURN VIA DB$YES,
*     ELSE VALIDATE VERSION NAME AND OBTAIN THE PRIMARY VERSION NAME. 
*     IF VERSION NAME IS NOT VALID ISSUE A DIAGNOSTIC AND RETURN VIA
*     DB$NO, ELSE EXIT VIA DB$YES.
* 
* DC  NON-LOCAL VARIABLES 
# 
*CALL DSFDCLS 
      XREF ITEM DB$DSAI I;         # AREA ID                           #
      XREF ITEM DB$DSSN C(30);     # SCHEMA NAME                       #
      XREF ITEM DB$DSSI I;         # SCHEMA ID                         #
      XREF ITEM DB$DSVN C(7);      # VERSION NAME                      #
 #                                                                     #
# 
* 
* DC  LOCAL VARIABLES AND DEFS
* 
# 
      ITEM FOUND B;                # PARAMETER FOR FIND SCHEMA OR AREA #
      ITEM MSG1 C(14) = "UNKNOWN SCHEMA"; 
      ITEM MSG2 C(12) = "UNKNOWN AREA"; 
      ITEM MSG3 C(30) = "INVALID COMBINATION OF OPTIONS"; 
      ITEM MSG4 C(20) = "UNKNOWN VERSION NAME"; 
      ITEM NUMOFVERS I;            # NUM OF VERSIONS THAT SHARE AREA   #
      ITEM PFOFFSET I;             # MD PERM FILE INFORMATION OFFSET   #
                                   # UNUSED IN THIS PROCEDURE          #
      ITEM PRIMARYVN C(7);         # PRIMARY VERSION NAME              #
      ITEM VNSUBSCRIPT I;          # VERSION NAME SUBSCRIPT USED TO    #
                                   # OBTAIN PRIMARY VERSION NAME       #
  
      DEF DFLGMSG1 # 14 #;         # LENGTH OF MESSAGE 1               #
      DEF DFLGMSG2 # 12 #;         # LENGTH OF MESSAGE 2               #
      DEF DFLGMSG3 # 30 #;         # LENGTH OF MESSAGE 3               #
      DEF DFLGMSG4 # 20 #;         # LENGTH OF MESSAGE 4               #
  
  
#     THE FOLLOWING SWITCH IS INDEXED BY ITEM *DSFINDEX* WHICH         #
#     OVERLAPS SOME BOOLEAN FLAGS IN THE ARRAY DB$DSFL.  THE           #
#     OVERLAP ITEM IS USED TO ALLOW EASY VALIDATION OF ORDER           #
#     INDEPENDENT SYNTAX OPTIONS.  THE LIST BELOW SHOWS THE            #
#     COMBINATIONS OF FLAGS WHICH, IF SET, WOULD SELECT THAT SWITCH    #
#     ENTRY.  THERE ARE FIVE POSSIBLE SYNTAX FLAGS BUT ONLY THREE      #
#     ARE VALID FOR THIS PROCEDURE. (SC, AR, VN)                       #
  
      SWITCH VALIDATE 
        ILLEGAL,                   #  0 - NO FLAGS                     #
        ILLEGAL,                   #  1 - ALL                          #
        ILLEGAL,                   #  2 - AR                           #
        ILLEGAL,                   #  3 - AR, ALL                      #
        CHECKFLAGS,                #  4 - SC                           #
        CHECKFLAGS,                #  5 - SC, ALL                      #
        CHECKFLAGS,                #  6 - SC, AR                       #
        ILLEGAL,                   #  7 - SC, AR, ALL                  #
        EXITOK,                    #  8 - JOBS                         #
        ILLEGAL,                   #  9 - JOBS, ALL                    #
        ILLEGAL,                   # 10 - JOBS, AR                     #
        ILLEGAL,                   # 11 - JOBS, AR, ALL                #
        CHECKFLAGS,                # 12 - JOBS, SC                     #
        ILLEGAL,                   # 13 - JOBS, SC, ALL                #
        CHECKFLAGS,                # 14 - JOBS, SC, AR                 #
        ILLEGAL,                   # 15 - JOBS, SC, AR, ALL            #
        ILLEGAL,                   # 16 - VN                           #
        ILLEGAL,                   # 17 - VN, ALL                      #
        ILLEGAL,                   # 18 - VN, AR                       #
        ILLEGAL,                   # 19 - VN, AR, ALL                  #
        ILLEGAL,                   # 20 - VN, SC                       #
        ILLEGAL,                   # 21 - VN, SC, ALL                  #
        CHECKFLAGS,                # 22 - VN, SC, AR                   #
        ILLEGAL,                   # 23 - VN, SC, AR, ALL              #
        ILLEGAL,                   # 24 - VN, JOBS                     #
        ILLEGAL,                   # 25 - VN, JOBS, ALL                #
        ILLEGAL,                   # 26 - VN, JOBS, AR                 #
        ILLEGAL,                   # 27 - VN, JOBS, AR, ALL            #
        ILLEGAL,                   # 28 - VN, JOBS, SC                 #
        ILLEGAL,                   # 29 - VN, JOBS, SC, ALL            #
        CHECKFLAGS,                # 30 - VN, JOBS, SC, AR             #
        ILLEGAL;                   # 31 - VN, JOBS, SC, AR, ALL        #
  
  
      CONTROL EJECT;
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 1 9            #
  
  
      GOTO VALIDATE[DSFINDEX[0]]; # GOTO LABEL OF OPTION COMBINATION   #
  
CHECKFLAGS: 
  
      IF (DB$DSSI EQ 0 AND DB$DSSN EQ " ")
        AND (DSFINDEX[0] EQ 4 OR DSFINDEX[0] EQ 5)
      THEN
        BEGIN 
        DB$YES;                    # JUST SC FLAGS USED IN DB$DS27     #
  
        END 
  
#     PROCESS SCHEMA INFORMATION                                       #
  
      DB$DSFS(FOUND);              # LOOK FOR SCHEMA IN SAL            #
      IF NOT FOUND                 # IF SCHEMA IS NOT FOUND            #
      THEN
        BEGIN 
        DB$DEDL(MSG1,DFLGMSG1);    # DIAGNOSE UNKNOWN SCHEMA           #
        DB$NO;                     # FAILURE RETURN TO SCANNER         #
  
        END 
      ELSE
        BEGIN 
        IF NOT DSFAR[0]            # IF ONLY SCHEMA SPECIFIED          #
        THEN
          BEGIN 
          DB$YES;                  # RETURN SUCCESS TO SCANNER         #
  
          END 
        END 
  
#     PROCESS AREA INFORMATION                                         #
  
      DB$DSFA(FOUND,NUMOFVERS);    # LOOK FOR AREA IN MASTER DIRECTORY #
      IF NOT FOUND                 # IF AREA NOT FOUND                 #
      THEN
        BEGIN 
        DB$DEDL(MSG2,DFLGMSG2);    # DIAGNOSE UNKNOWN AREA             #
        DB$NO;                     # FAILURE RETURN TO SCANNER         #
  
        END 
  
#     PROCESS VERSION INFORMATION                                      #
  
      IF NOT DSFVN[0]              # IF NO VERSION SPECIFIED           #
      THEN
        BEGIN 
        DB$DSVN = "MASTER";        # DEFAULT VERSION NAME MASTER USED  #
        DB$YES;                    # SUCCESS RETURN TO SCANNER         #
  
        END 
  
      DB$VERL(DB$DSVN,VNSUBSCRIPT); # OBTAIN VERSION NAME SUBSCRIPT    #
  
      IF VNSUBSCRIPT EQ 0          # IF VERSION NAME SUBSCRIPT IS ZERO #
      THEN
        BEGIN 
        DB$DEDL(MSG4,DFLGMSG4);    # DIAGNOSE UNKNOWN VERSION NAME     #
        DB$NO;                     # FAILURE RETURN TO SCANNER         #
  
        END 
  
#     OBTAIN PRIMARY VERSION NAME                                      #
  
      DB$VEPN(VNSUBSCRIPT,DB$DSAI,PRIMARYVN,PFOFFSET);
      DB$DSVN = PRIMARYVN;         # SET VERSION NAME TO PRIMARY NAME  #
  
EXITOK: 
  
      DB$YES;                      # SUCCESS RETURN TO SCANNER         #
  
ILLEGAL:  
  
      DB$DEDL(MSG3,DFLGMSG3);      # DIAGNOSE ILLEGAL OPTION           #
      DB$NO;                       # FAILURE RETURN TO SCANNER         #
  
      END                          # END OF DB$DS19                    #
  
      CONTROL EJECT;
      PROC DB$DS32; 
      BEGIN 
 #
* *   DB$DSNI                                    PAGE  1
* *   DB$DS32 -- SAVE SB PARAMETER
* *   W P CEAGLIO                                DATE  05/01/79 
* 
* DC  PURPOSE 
* 
*     VALIDATE AND SAVE THE SUBSCHEMA NAME FOR RETAIN/RETURN
* 
* DC  ENTRY CONDITIONS
* 
*     DB$CWRD - CONTAINS SUBSCHEMA NAME 
*     DB$CLNG - CONTAINS NAME LENGTH
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL--CELL *DB$DSSB* CONTAINS THE SUBSCHEMA NAME AND EXIT IS
*     TO *DB$YES* 
* 
*     ABNORMAL--EXIT IS TO *DB$NO*
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX      SYNGEN SPECIFICATION (THRU DB$DDIF)
* 
* DC  CALLED ROUTINES 
* 
# 
      XREF PROC DB$NO;             # FAILURE RETURN TO SCANNER         #
      XREF PROC DB$YES;            # SUCCESS RETURN TO SCANNER         #
# 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
# 
      XREF ITEM DB$DSSB C(30);     # RETAIN/RETURN SUBSCHEMA NAME      #
# 
* 
* DC  DESCRIPTION 
* 
*     IF NOT A DUPLICATE SUBSCHEMA PARAMETER, MOVE THE NAME TO *DB$DSSB*
*     AND EXIT VIA *DB$YES*--ELSE EXIT VIA *DB$NO*. 
* 
 #
  
#     S T A R T  O F  D B $ D S 3 2  E X E C U T A B L E  C O D E      #
  
#     IF SUBSCHEMA NAME WAS NOT ALREADY SPECIFIED, MOVE THE NAME TO THE#
#     RESERVED CELL *DB$DSSB* AND EXIT TO *DB$YES* (SUCCESS).  ELSE    #
#     EXIT TO *DB$NO* (FAILURE)                                        #
  
      IF DB$DSSB EQ " " 
      THEN
        BEGIN 
        DB$DSSB = C<0,DB$CLNG>CURWORDC[0];
        DB$YES; 
        END 
  
      DB$NO;
  
      END 
      CONTROL EJECT;
      PROC DB$DS33; 
      BEGIN 
 #
* *   DB$DSNI                                    PAGE  1
* *   DB$DS33 - VALIDATE APPEARANCE OF SC PARAMETER 
* *   R J PARK                                   DATE  11/15/79 
* 
* DC  PURPOSE 
* 
*     VALIDATE APPEARANCE OF SC PARAMETER 
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     ALL PARAMETERS FOR THIS COMMAND HAVE BEEN PROCESSED.
*     FLAGS FOR PARAMETERS ACCEPTED ARE SET IN DB$DSFL. 
* 
* DC  EXIT CONDITIONS 
* 
*     DB$YES IF SC SPECIFIED
*     DB$NO  IF SC NOT SPECIFIED. 
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$NO;             # FAILURE RETURN TO SCANNER         #
      XREF PROC DB$YES;            # SUCCESS REUTRN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     IF SC WAS SPECIFIED, EXIT VIA DB$YES. 
*     EXIT VIA DB$NO. 
* 
* DC  NON-LOCAL VARIABLES 
# 
*CALL DSFDCLS 
 #                                                                     #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 3 3            #
  
  
      IF DSFSC[0]                  # IF *SC* PARAMETER SPECIFIED       #
      THEN
        BEGIN 
        DB$YES;                    # SUCCESS RETURN TO SCANNER         #
        END 
  
      DB$NO;                       # FAILURE RETURN TO SCANNER         #
  
      END 
  
  
      CONTROL EJECT;
      PROC DB$DS36; 
      BEGIN 
 #
* *   DB$DS36 - VALIDATE CURRENT TOKEN AS NAME  PAGE  1 
* *   M. E. STERMER                             DATE  11/05/80
* 
* DC  PURPOSE 
* 
*     VALIDATE CURRENT TOKEN AS A 7 CHARACTERS OR LESS NAME.
*     THE FIRST CHARACTER OF THE NAME MUST BE GQ TO "A" AND LQ TO "Z".
*     THE REMAINING CHARACTERS OF THE NAME MUST BE GQ TO "A"
*     AND LQ TO "9".
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     DB$CLNG - CONTAINS LENGTH IN CHARACTERS OF CURRENT TOKEN
*     DB$CWRD - CONTAINS THE CURRENT TOKEN
* 
* DC  EXIT CONDITIONS 
* 
*     IF THE TOKEN QUALIFIES EXIT VIA DB$YES,  ELSE EXIT VIA DB$NO. 
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATIONS (THROUGH DB$DDIF) 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$NO;             # FAILURE RETURN TO SCANNER         #
      XREF PROC DB$YES;            # SUCCESS RETURN TO SCANNER         #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     IF TOKEN IS GR SEVEN CHARACTERS LONG
*     THEN
*       THE TOKEN DOES NOT QUALIFY,  RETURN VIA DB$NO.
* 
*     IF FIRST CHARACTER OF TOKEN IS LS THAN "A" OR GR "Z"
*     THEN
*       THE TOKEN DOES NOT QUALIFY,  RETURN VIA DB$NO.
* 
*     IF ANY CHARACTER OF THE TOKEN IS GREATER THAN "9" 
*     OR LESS THAN "A"
*     THEN
*       THE TOKEN DOES NOT QUALIFY,  RETURN VIA DB$NO.
*     ELSE
*       THE TOKEN QUALIFIES,   EXIT VIA DB$YES. 
* 
 #
  
  
#     LOCAL VARIABLES                                                  #
  
      ITEM INDEX U;                # INDEX VARIABLE IN FOR LOOP        #
  
  
#     E X E C U T A B L E    C O D E    F O R    D B $ D S 3 6         #
  
  
      IF DB$CLNG GR 7 
      THEN
        BEGIN 
        DB$NO;
        END 
  
#     CHECK THAT FIRST CHARACTER OF TOKEN IS NOT LESS THAN "A"         #
#     AND NOT GREATER THAN "Z".                                        #
  
      IF C<0,1>CURWORDC[0] LS "A" 
        OR C<0,1>CURWORDC[0] GR "Z" 
      THEN
        BEGIN 
        DB$NO;                     # FIRST CHAR IS NOT "A" THRU "Z"    #
                                   # TOKEN DOES NOT QUALIFY AS VERSION #
        END 
  
#     CHECK THAT EACH OF THE REMAINING CHARACTERS ARE                  #
#     NOT GREATER THAN "9" OR LESS THAN "A".                           #
  
      FOR INDEX = 1 STEP 1 UNTIL DB$CLNG -1 DO
      BEGIN 
        IF C<INDEX,1>CURWORDC[0] LS "A" 
          OR C<INDEX,1>CURWORDC[0] GR "9" 
        THEN
          BEGIN 
          DB$NO;                   # CHARACTER DOES NOT QUALIFY        #
  
          END 
      END                          # END OF CHARACTER CHECK LOOP       #
  
      DB$YES;                      # TOKEN QUALIFIES AS NAME           #
  
      END                          # END DB$DS36                       #
  
  
      CONTROL EJECT;
      PROC DB$DS37; 
      BEGIN 
 #
* *   DB$DS37 - SAVE THE VERSION NAME            PAGE  1
* *   M. E. STERMER                              DATE  11/05/80 
* 
* DC  PURPOSE 
* 
*     SAVE THE NAME IDENTIFICATION OF A VERSION 
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     DB$CLNG - CONTAINS THE LENGTH IN CHARACTERS OF CURRENT TOKEN
*     DB$CWRD - CONTAINS THE CURRENT TOKEN
* 
*     THE CURRENT TOKEN HAS QUALIFIED AS A POSSIBLE VERSION NAME. 
* 
* DC  EXIT CONDITIONS 
* 
*     DB$DSVN CONTAINS THE VERSION NAME 
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$YES;            # SUCCESS RETURN TO SCANNER         #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
# 
      XREF ITEM DB$DSVN C(7);      # VERSION NAME                      #
# 
* DC  DESCRIPTION 
* 
*     SAVE THE CURRENT TOKEN IN THE CELL FOR THE VERSION NAME.
*     EXIT VIA DB$YES.
* 
 #
  
  
#     E X E C U T A B L E    C O D E    F O R    D B $ D S 3 7         #
  
  
      DB$DSVN = C<0,DB$CLNG>CURWORDC[0]; # SAVE THE TOKEN FOR VERSION  #
  
      DB$YES;                      # SUCCESS RETURN TO SCANNER         #
  
      END                          # END DB$DS37                       #
  
  
      END 
  
      TERM
