*DECK DB$DSVL 
USETEXT SCANTXT 
      PROC DB$DSVL; 
      BEGIN 
 #
* *   DB$DSVL - SYNTAX VALIDATION ROUTINES       PAGE  1
* *   C F RICHARDS                               DATE  11/29/78 
* 
* DC  PURPOSE 
* 
*     CONTAIN THE SEMANTIC ROUTINES THAT A GIVEN TOKEN OR NAME IS OF
*     A VALID TYPE OR FORMAT. 
* 
* DC  CONTAINED ROUTINES
# 
      XDEF PROC DB$DS21;           # DB$YES IF NEXT TOKEN IS *=*       #
      XDEF PROC DB$DS22;           # DB$YES IF VALID/EXISTING JOBNAME  #
      XDEF PROC DB$DS24;           # DB$YES IF NAME-STYLE KEYWORD      #
      XDEF PROC DB$DS29;           # DB$YES IF COMMAND VERB            #
 #                                                                     #
  
  
  
#**********************************************************************#
#                                                                      #
#     E M B E D D E D   P R O C E D U R E   -   D B $ D S 2 1 .        #
#                                                                      #
#**********************************************************************#
  
      PROC DB$DS21; 
      BEGIN 
 #
* *   DB$DSVL                                    PAGE  1
* *   DB$DS21 - CHECK FOR EQUALS SIGN 
* *   C F RICHARDS                               DATE  11/29/78 
* 
* DC  PURPOSE 
* 
*     IDENTIFY AN EQUALS SIGN WITHOUT ADVANCING THE SCANNER TOKENS. 
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     DB$NXID - CONTAINS LEXICAL ID OF TOKEN IN DB$NWRD.
* 
* DC  EXIT CONDITIONS 
* 
*     IF NEXT TOKEN IS *=*, EXIT VIA DB$YES.
*     EXIT VIA DB$NO. 
* 
* 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 RETURN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     IF THE NEXT TOKEN IS AN EQUALS SIGN, EXIT VIA DB$YES. 
*     ALL OTHER CASES EXIT VIA DB$NO. 
 #
#     LOCAL DEFS                                                       #
      DEF DFEQLXID # O"420" #;     # LEXICAL ID OF AN EQUALS SIGN. THIS#
                                   # IS DEFINED IN DB$DSTX.            #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 2 1            #
  
  
      IF DB$NXID EQ DFEQLXID       # IF NEXT TOKEN IS AN EQUALS SIGN   #
      THEN
        BEGIN 
        DB$YES;                    # SUCCESS RETURN TO SCANNER         #
  
        END 
      ELSE
        DB$NO;
  
  
      END 
  
  
  
#**********************************************************************#
#                                                                      #
#     E M B E D D E D   P R O C E D U R E   -   D B $ D S 2 2 .        #
#                                                                      #
#**********************************************************************#
  
      PROC DB$DS22; 
      BEGIN 
 #
* *   DB$DSVL                                    PAGE  1
* *   DB$DS22 - CHECK JOBNAME VALIDITY
* *   BOB MCALLESTER                             DATE  01/29/85 
* 
* DC  PURPOSE 
* 
*     CHECK THE GIVEN JOBNAME TO SEE IF IT MATCHES PROPER JOBNAME 
*     FORMAT
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     DB$CLNG - CONTAINS THE CHARACTER LENGTH OF THE JOBNAME. 
*     DB$CWRD - CONTAINS THE JOBNAME (ALREADY QUALIFIED AS A NAME)
* 
* DC  EXIT CONDITIONS 
* 
*     DB$DSJN - CONTAINS THE JOBNAME. 
*     IF A PROPERLY FORMATTED JOBNAME, EXIT VIA DB$YES. 
*     EXIT VIA DB$NO. 
* 
* DC  CALLING ROUTINES
* 
*     DB$DSTX - SYNGEN SPECIFICATION (THROUGH DB$DDIF)
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$DEDL;           # ENTER DIAGNOSTIC LINE TO CONSOLE  #
      XREF PROC DB$NO;             # FAILURE RETURN TO SCANNER         #
      XREF PROC DB$YES;            # SUCCESS RETURN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     IF THE STRING IS THE WRONG NUMBER OF CHARACTERS - 
*         SEND A DIAGNOSTIC,
*         EXIT VIA DB$NO. 
*     ELSE EXIT VIA DB$YES. 
* 
* DC  NON-LOCAL VARIABLES 
# 
      XREF ITEM DB$DSJN C(7);      # JOBNAME GIVEN IN OPERATOR COMMAND #
      XREF ITEM DB$NOS  B;         # TRUE IF OPERATING SYSTEM IS NOS   #
 #                                                                     #
#     LOCAL VARIABLES                                                  #
  
      ITEM LENGTH  I;              # REQUIRED LENGTH OF STRING         #
      ITEM MSG1 C(34) = " JOBNAME MUST HAVE 7 CHARACTERS";
      DEF DFLGMSG1  #32#; 
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 2 2            #
  
  
      DB$DSJN = C<0,7>CURWORDC[0];  # A SEVEN CHARACTER JOB NAME       #
      LENGTH = 7; 
      C<19,1>MSG1 = "7";
      IF DB$NOS 
      THEN
        BEGIN 
        LENGTH = 4; 
        C<19,1>MSG1 = "4";
        B<24,18>DB$DSJN = 0;
        END 
      IF DB$CLNG NQ LENGTH
      THEN
        BEGIN 
        DB$DEDL(MSG1,DFLGMSG1); 
        DB$NO;
  
        END 
      DB$YES; 
  
      END 
  
  
  
#**********************************************************************#
#                                                                      #
#     E M B E D D E D   P R O C E D U R E   -   D B $ D S 2 4 .        #
#                                                                      #
#**********************************************************************#
  
      PROC DB$DS24; 
      BEGIN 
 #
* *   DB$DSVL                                    PAGE  1
* *   DB$DS24 - CHECK FOR NAME-STYLE KEYWORD
* *   C F RICHARDS                               DATE  11/29/78 
* 
* DC  PURPOSE 
* 
*     TO RECOGNIZE KEYWORDS WHICH ARE OF VALID FORMAT TO BE NAMES.
* 
* DC  ENTRY CONDITIONS
* 
*     DB$NXID - CONTAINS LEXICAL ID OF CANDIDATE TOKEN
* 
* DC  EXIT CONDITIONS 
* 
*     EXIT VIA DB$YES IF IT IS A KEYWORD THAT QUALIFIES AS A NAME.
*     ALL OTHER CASES EXIT VIA DB$NO. 
* 
* 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 RETURN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     CHECK THE LEXICAL ID TO INSURE IT IS LESS THAN THE LOWEST NON-NAME
*     KEYWORD LEXICAL ID (YET NON-ZERO). IF IT IS, EXIT VIA DB$YES. 
*     OTHERWISE EXIT VIA DB$NO. 
 #
  
  
#     LOCAL DEFS                                                       #
  
      DEF DFNONMINID # O"400" #;   # MINIMUM LEXICAL ID VALUE FOR A NON#
                                   # NAME-STYLE KEYWORD. THIS VALUE IS #
                                   # DEFINED IN DB$DSTX.               #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 2 4            #
  
  
      IF DB$NXID NQ 0              # IF SOME KIND OF KEY WORD          #
         AND DB$NXID LS DFNONMINID # AND BELOW ALL NON NAME KEYWORDS   #
      THEN
        BEGIN 
        DB$YES;                    # SUCCESS RETURN TO SCANNER         #
  
        END 
  
      DB$NO;                       # FAILURE RETURN TO SCANNER         #
  
      END 
  
  
  
#**********************************************************************#
#                                                                      #
#     E M B E D D E D   P R O C E D U R E   -   D B $ D S 2 9 .        #
#                                                                      #
#**********************************************************************#
  
      PROC DB$DS29; 
      BEGIN 
 #
* *   DB$DSVL                                    PAGE  1
* *   DB$DS29 - CHECK FOR COMMAND VERB
* *   C F RICHARDS                               DATE  12/10/78 
* 
* DC  PURPOSE 
* 
*     RECOGNIZE A KEYWORD WHICH IS A COMMAND VERB.
* 
* DC  ENTRY CONDITIONS
* 
*     DB$NP1 - CONTAINS THE P1 VALUE FOR THE KEYWORD (0 IF NOT A KEYWORD
*              AND 1 IF A KEYWORD WHICH IS A COMMAND VERB). 
* 
* DC  EXIT CONDITIONS 
* 
*     EXIT VIA DB$YES IF A COMMAND VERB.
*     ALL OTHER CASES EXIT VIA DB$NO. 
* 
* 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 RETURN TO SCANNER         #
# 
* DC  DESCRIPTION 
* 
*     IF THE P1 VALUE FOR THE *NEXT* TOKEN IS 1, THEN EXIT VIA DB$YES 
*     FOR A COMMAND VERB KEYWORD. OTHERWISE, EXIT VIA DB$NO.
 #
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S 2 9            #
  
  
      IF DB$NP1 EQ 1               # IF A COMMAND VERB KEYWORD         #
      THEN
        BEGIN 
        DB$YES;                    # SUCCESS RETURN TO SCANNER         #
  
        END 
  
      DB$NO;                       # FAILURE RETURN TO SCANNER         #
  
      END 
  
      END 
  
      TERM
