1  DCL_CHECK
      The DCL_CHECK procedure detects a variety of DCL coding errors and
      displays  diagnostic  messages  that  allow  you  to  correct  the
      problems. See "Diagnostics" for a list of the types of errors that
      DCL_CHECK can detect. See "Problems" for information on the limits
      of DCL_CHECK.

      When  you  execute  DCL_CHECK  with  "HELP" as the first parameter,
      DCL_CHECK invokes the DCL Help utility.  If you provide additional
      parameters, they are passed to the Help utility.

      To exit the Help utility, press Return one or more times until the
      prompt "enter name of file:"  is displayed.


  Additional information available:

  DCL_CHECK  Diagnostics           Examples   Format     Installation
  Line_counts           Modifications         Output     Problems   Version
1 Version
      This is version B2.1 of the DCL_CHECK help file.
1 Format
      DCL_CHECK  is  a  DCL  command  procedure.   It is executed by the
      following DCL command:

          $ @[<disk>:][<directory>]DCL_CHECK.COM [<input> [<list>]]
          $ @[<disk>:][<directory>]DCL_CHECK.COM HELP [<topic>...]

      <disk>  and/or  <directory>  may  be omitted; the current defaults
      will be used.

      The   file   DCL_CHECK.HLB  must  be  in  the  same  directory  as
      DCL_CHECK.COM if you use the HELP function in DCL_CHECK. The files
      may be in any directory to which you have read access.

      If  you  use DCL_CHECK frequently, you may wish to assign a symbol
      in your LOGIN.COM file to execute DCL_CHECK.  For example, if  the
      DCL_CHECK.COM  and  .HLB files are in you login default directory,
      you might put the following in your LOGIN.COM:

          $ DCL_CHECK :== "@SYS$LOGIN:DCL_CHECK"

      Alternativevly,  if  you  put  DCL_CHECK.COM  and DCL_CHECK.HLB in
      SYS$SYSTEM, you might put the following in your SYS$SYLOGIN (which
      is normally SYS$MANAGER:SYLOGIN.COM):

          $ DCL_CHECK :== "@SYS$SYSTEM:DCL_CHECK"
2 Parameters
      Parameters  may  be  entered  on the command line; if there are no
      parameters on the command line, the  procedure  will  display  the
      prompt for parameters.

      The first parameter is either the file-name of a command procedure
      file to be checked, or one of the keywords "HELP" or "EXIT".

      If  a  file  name is entered, it will be checked.  If a device and
      directory are not supplied, the current default is used. If a file
      extension is not supplied, ".COM" is used.

      If  a  file  name is entered, the second parameter may provide the
      name of a listing file to contain the list of errors detected.  If
      a  device  and  directory are not supplied, the current default is
      used.  If a file extension is not supplied, ".LIS"  is  used.   If
      second parameter is not supplied, errors are listed on sys$output.

      If  the  first  parameter contains "HELP", the DCL Help utility is
      used to provide information  about  the  DCL_CHECK  utility.   Any
      additional parameters are passed to the HELP utility.

      If  the first parameter contains "EXIT", any additional parameters
      are ignored and the procedure exits.
1 Output
      If the second parameter (see HELP FORMAT PARAMETERS) is blank, all
      output of DCL_CHECK is displayed on the terminal.  If  the  second
      parameter  is a listing file name, some output is displayed on the
      terminal and diagnostic information  is  written  to  the  listing
      file.
2 Terminal_output
      Terminal output depends on whether or not there is a listing file.
3 Listing_file
      If there is a listing file, output similar to the following is
      displayed:


      -*- Charlie Hammond's unsupported DCL checker (Version 1.0) -*-
      Checking file <file-name>;

      Starting Pass 1 -- <date-time>...
      ...processing line number xxx...
        ...
      Starting Pass 2 -- <date-time>...
      ...processing line number xxx...
        ...
      Starting Pass 3 -- <date-time>...

      Creating errors listing in <listing-file>;
      <date-time>


      For  Pass  1,  the  numbers  in  the  "processing line number xxx"
      displays will be in increments of 500.  Occasionally they will not
      be exact multiples of 500.

      For  Pass  2,  the  numbers  in  the  "processing line number xxx"
      displays will be in approximate increments of 1000. Because pass 2
      is processing an abbreviated file (comment lines removed) the line
      numbers will seldom be exact multiples of 1000.

      If no errors are found, the last two lines will be replaced to
      indicate this:

      No errors found
      ...listing file not created    <date-time>
3 No_listing_file
      If there is no listing file, output similar to the following is
      displayed:


      -*- Charlie Hammond's unsupported DCL checker (Version 1.0) -*-
      Checking file <file-name>;

      Starting Pass 1 -- <date-time>...
      ...processing line number xxx...
        ...
      Starting Pass 2 -- <date-time>...
      ...processing line number xxx...
        ...
      Starting Pass 3 -- <date-time>...

      Procedure contains:   nnnn total lines
                            nnnn code lines (including nn lines w/ comments)
                             nnn continuation lines
                              nn lines w/i $DECK/$EOD pairs
                             nnn comment only lines
                             nnn blank lines

       LINE  CODE  --DIAGNOSTIC MESSAGE--
          .
          .
          .
      -*- END OF LISTING -*-   13-OCT-1997 10:57:28.07


      For  Pass  1,  the  numbers  in  the  "processing line number xxx"
      displays will be in increments of 500.  Occasionally they will not
      be exact multiples of 500.

      For  Pass  2,  the  numbers  in  the  "processing line number xxx"
      displays will be in approximate increments of 1000. Because pass 2
      is processing an abbreviated file (comment lines removed) the line
      numbers will seldom be exact multiples of 1000.
2 File_output
      If a listing file is being used, it contains information similar
      to the following.

      -*- Charlie Hammond's unsupported DCL checker (Version R1.0 -*-)
      Checking file WORK8:[HAMMOND]DCL_CHECK.COM_SOURCE;
      <date_time>

      Procedure contains:   nnnn total lines
                            nnnn code lines (including nn lines w/ comments)
                             nnn continuation lines
                              nn lines w/i $DECK/$EOD pairs
                             nnn comment only lines
                             nnn blank lines

       LINE  CODE  --DIAGNOSTIC MESSAGE--
          .
          .
          .
      -*- END OF LISTING -*-
1 Line_counts
      DCL_CHECK displays (or lists to a file) the following line counts.

      Procedure contains:   nnnn total lines
                            nnnn code lines
                              nn of the code lines include comments
                             nnn continuation lines
                              nn deck lines
                             nnn comment lines
                             nnn blank lines

      There is an explanation for each of these.
2 total_lines
      Total lines is a count of every physical line in the file being
      checked.  It is the same as the number of records in the file.
2 code_lines
      Code  lines  is  a  count  of  lines of code.  It does not include
      continuation lines, lines within a $DECK/$EOD pair, comment  lines
      or blank lines.

      Immediately  following  the  count of code lines is a count of the
      number of code lines that also include comments. Note that this is
      included in the count of code lines.
2 continuation_lines
      Continuation  lines is a count of the number of lines of code that
      are continued from a code line.  A continued code line ends with a
      hyphen  (-) that is not a comment (i.e., not preceeded by an "!");
      lines   following   continued   line   are   continuation   lines.
      Continuation  lines  may  be  continued.   i.e. a code line may be
      continued on two or more continuation lines.
2 deck_lines
      Deck  lines is a count of lines that are within a $DECK/$EOD pair.
      These lines are input to  programs  or  utilities.   They  may  be
      commands or text used by the program or utility.
2 comment_lines
      Comment lines are lines that are not within $DECK/$EOD pairs which
      Contain only comments.  i.e. the  first  non-blank  following  the
      dollar  sign  ($)  is an exclamation point (!).  Comments may also
      appear on code lines following DCL commands;  these  comments  are
      not counted.
2 blank_lines
      Blank lines are lines which are totally blank (which also generate
      diagnostic messages) or which contain only a blank comment. (Blank
      comments   are  often  used  to  insert  white  space  to  improve
      readability.)
1 Problems
      DCL_CHECK does not and cannot catch all DCL problems.

          Not all syntax errors are detected.
          Miss-spelled commands and variable names are not detected.
          Logic errors cannot be detected.
          Errors that result from execution time symbol substitution
              cannot be detected.
          See help on diagnostics LND additional_information
              for information on problems detecting lines that
              do not start with "$".

      In  addition, the detection of one problem may obscure one or more
      other  problems  --  or  may  cause  problems  to  be  erroneously
      detected.   For  this  reason,  you should always re-run DCL_CHECK
      after correcting errors.
2 Single_quote
      DCL_CHECK  is  imperfect  in  its checking for use of single-qoute
      characters.  For this reason it list such errors as "probable"  or
      "possible".

      Uses  of  a  single-quote  (')  as  an  apostrophe within a quoted
      string, for possessives ("The car's exhaust.") will be detected as
      possible errors.

      It  is  also possible that some syntactically invalid lines may be
      missed.  (Lines containing an even number of  errors  may  "cancel
      out".

      If  one single quote is used to start symbol substitution within a
      quoted string (instead of two single quotes) DCL_CHECK  will  flag
      this  as an error, and will also flag the single quote used to end
      the symbol substitution.  Although this may  seem  like  a  single
      error, DCL_CHECK sees it as two possible single quote errors.
3 Contractions

      DCL_CHECK  removes  the following contractions before checking for
      single-quotes. Note that this is case sensative -- only lower case
      versions  of  these  contractions  are  removed.   Upper  case and
      capitalized or other mixed case version of these contractions will
      not be removed.

      (Exception:  The personal pronoun I" is upper case.)

          aren't      he'll       she's       we've
          can't       he's        shouldn't   weren't
          couldn't    I'd         that's      what's
          didn't      I'll        they'd      who's
          doesn't     I'm         they'll     won't
          don't       I've        they're     wouldn't
          hadn't      isn't       wasn't      you'd
          hasn't      it's        we'd        you'll
          haven't     she'd       we'll       you're
          he'd        she'll      we're       you've
2 Angle_brackets
      DCL_CHECK  will  detect  angle  brackets  ("<"  and  ">")  used to
      delineate directories as invalid comparison  operators.   You  can
      either  ignore  this  error or change the angle brackets to square
      brackets ("[" and "]").
2 Lexicals
      DCL_CHECK  assumes  that  every  instance  of  "F$"  that  is  not
      immediately preceeded by a letter or a digit introduces a  lexical
      function.   If  "F$"  is used as part of a symbol or logical name,
      this  may  be  reported  as  a  possible  truncated  or   possible
      misspelled lexical.
1 Examples
  EXAMPLE 1:  This example checks the file MY_COMMAND.COM in the current
              default directory and displays any errors found on the terminal.

      $ @DCL_CHECK MY_COMMAND


  EXAMPLE 2:  This example checks the file MY_COMMAND.TEST in a directory
              "TEST" located under the users login directory, and creates a
              file TEST.LIS in the current directory if any errors are found.

      $ @DCL_CHECK SYS$LOGIN:[TEST]MY_COMMAND.TEST TEST


  EXAMPLE 3:  This example check the file MY_COMMAND.COM in the current
              default directory and creates a file ERROR.REPORT in the users
              login directory if any errors are found.  Detection of lines
              not starting with "$" is suppressed.

      $ @DCL_CHECK MY_COMMAND ERROR.REPORT $


  EXAMPLE 4:  This example request general help

      $ @DCL_CHECK HELP


  EXAMPLE 5:  This example request help on know problems

      $ @DCL_CHECK HELP PROBLEMS


  The following shows how the above examples could be entered by typing
  only @DCL_CHECK at the DCL prompt and then answering the procedures prompt.
  Note that line-wrap will occur differently than shown.

  Example 1:
  enter name of procedure file to be checked (or HELP or EXIT): MY_COMMAND

  Example 2:
  enter name of procedure file to be checked (or HELP or EXIT):
                                      SYS$LOGIN:[TEST]MY_COMMAND.TEST TEST
  Example 3:
  enter name of procedure file to be checked (or HELP or EXIT):
                                      MY_COMMAND ERROR.REPORT $
  Example 4:
  enter name of procedure file to be checked (or HELP or EXIT): HELP

  Example 5:
  enter name of procedure file to be checked (or HELP or EXIT): HELP PROBLEMS

1 Diagnostics
      Diagnostic  messages  are  identified  by  a three character code.
      Descriptions and explainations are available for all errors. Enter
      one of the following codes for more details:

      CODE    Message

         Errors relate to if-then-else-endif
      INT  IF statement not terminated
      EFB  "=" found between IF and THEN
      ICO  invalid comparison or logical operator
      TML  too many levels of IF statements
      TRH  THEN statement required here
      TNA  THEN statement not allowed here
      ENA  ELSE statement not allowed here
      DNA  ENDIF statement not allowed here
      WCT  wrong constant type for comparison
      MEC  missing expression for comparsion

         Errors related to subroutines
      SNT  SUBROUTINE statement not terminated
      TMS  too many levels of IF and SUBROUTINE statements
      RNA  ENDSUBROUTINE statement not allowed here

         Errors related to labels
      DL   duplicate label "<label>"
      RLI  referenced label "<label>" is in if-group at lines <line-range>
      RLS  referenced label "<label>" is in subroutine at lines <line-range>
      LNF  label "<label>" not found
      TLS  target label "<label>" provided by symbol substitution (warning)
      LDS  label "<label>" defined by symbol substitution (warning)
      LNR  label "<label>" not referenced (warning)

         Errors related to parentheses and quotes
      UMP  unmatched parentheses
      UPQ  unpaired quotation marks (")
      PSQ  possible error using single-quote (') in quoted string
      PRQ  probable error using single-quote (')

         Errors related to lexical functions
      PTL  possible truncated lexical (<lexical>)
      PML  possible misspelled lexical (<lexical>)

         Errors related to unreachable lines
      CRE  code cannot be reached due to EXIT at line <line>
      CRG  code cannot be reached due to GOTO at line <line>

         Errors related to continuation lines
      CLD  continuation line starts with "$"
      NCL  no continuation line at EOF
      CCN  continuation character ("-") not preceded by space (warning)
      CLS  comment line separates continuation line (warning)

         Errors related to $DECK and $EOD
      NED  no $EOD for $DECK at <line>
      DFB  $DECK found between $DECK and $EOD
      EFN  $EOD found with no corresponding $DECK

         Miscellaneous errors
      LC   line contains END_IF, END IF, GO_TO, GO TO, GO_SUB or GO SUB
      BL   blank line (warning)
      LOD  line contains only "$" (warning)
      LFF  line contains only form-feed (<FF>)
      LND  line does not start with "$"
      ICF  invalid character found (#, %, ^ or &)
2 Suppress_diag
      You  can  suppress DCL_CHECK's reporting of diagnostic messages by
      defining logical names.  For each diagnostic message you  wish  to
      suppress, define the logical name DCL_CHECK$SUPPRESS_xxx to "TRUE"
      (or to "1").  "xxx" is the two or three  character  code  for  the
      diagnostic message.

      If  the  translation  of DCL_CHECK$SUPPRESS_xxx evaluates as true,
      then the diagnostic message identified by the "xxx" code will  not
      be   generated.    If  the  translation  of DCL_CHECK$SUPPRESS_xxx
      evaluates as false, or if DCL_CHECK$SUPPRESS_xxx is  not  defined,
      then the message will be generated if the error is found.
2 DCLDIET
      Some of the diagnostics reported by DCL_CHECK refer to DCLDIET.

      DCLDIET is a utility used within OpenVMS engineering to "diet" DCL
      command procedure files.  When DCLDIET  processes  a  DCL  command
      procedure file, it removes all comments and and shortens all white
      space to a single blank space.   This  decreases  the  file  space
      required  for the procedure file, and may significantly reduce the
      execution time for large command procedures.
2 BL
      blank line (warning)

          This line is blank.  This may indicate a coding error.

          If you want blank lines to add white space for readability,
          consider using blank comment lines ("$!").

          (Blank lines within $DECK/$EOD pairs are allowed.)
2 CCN
      continuation character ("-") not preceded by space (warning)

          DCL  logically appends a continuation line to the line that is
          continued.  If there is no space  preceding  the  continuation
          character ("-"), and there is no space at the beginning of the
          continuation line, this can result in keywords, qualifiers  or
          parameters being incorrectly concatenated.

          Examples:

           1. DCL will interpret the following lines

                  $ SHOW-
                  _$LOGICAL

              as  SHOWLOGICAL,  which  will  be  taken  as an acceptable
              miss-spelling of SHOW -- "LOGICAL" will be ignored and DCL
              will prompt for what to show.

           2. DCL will interpret the following lines

                  $ open/write-
                  _testfile test.file

              as OPEN/WRITETESTFILE TEST.FILE.

              The   qualifier  "/WRITETESTFILE"  will  be  taken  as  an
              acceptable miss-spelling of /WRITE;  "TEST.FILE"  will  be
              taken as the logical name for the file, rather than as the
              the file name.  DCL will either prompt for the  file  name
              (if interactive) or fail (if not interactive).

          DCLDIET will remove spaces and may cause this problem.

          Preceding  the  continuation character with at least one space
          is recommended.
2 CLD
      continuation line starts with "$"

          DCL continuation lines may NOT start with "$".
2 CLS
      comment line separates continuation line (warning)

          This usually makes code harder to read and maintain.
          It also cause DCLDIET to generate code that is wrong.
          Consider changing this.
2 CRE
      code cannot be reached due to EXIT at line <line>

          Code following an unconditional EXIT statement is unreachable
          until a label, ENDIF or ELSE is encountered.
2 CRG
      code cannot be reached due to GOTO at line <line>

          Code following an unconditional GOTO statement is unreachable
          until a label, ENDIF or ELSE is encountered.
2 DFB
      $DECK found between $DECK and $EOD

          DECK and EOD delimit an input stream for a command or program.
          They must be paired and may not be nested.
2 DL
      duplicate label "<label>"

          The same label has been defined on two or more lines.
2 DNA
      ENDIF statement not allowed here

          An ENDIF statement may only be used with an IF statement that
          does NOT have THEN on the same line as the IF.

          This  can  be  caused  by overlapping SUBROUTINES and IF-ENDIF
          groups.  SUBROUTINES and IF-ENDIF groups may  be  disjoint  or
          nested; they may not overlap.

          There may not be more than one ENDIF for each such IF
          statement.
2 EFB
      "=" found between IF and THEN

          The  equals  sign ("=") is probably being used for comparison.
          "=" is used for  assignment.   Use  ".EQ."   or  ".EQS."   for
          comparison.
2 EFN
      $EOD found with no corresponding $DECK

          DECK and EOD delimit an input stream for a command or program.
          They must be paired and may not be nested.
2 ENA
      ELSE statement not allowed here

          An ELSE statement may be used only between an IF statement and
          the corresponding ENDIF.

          This  can  be  caused  by overlapping SUBROUTINES and IF-ENDIF
          groups.  SUBROUTINES and IF-ENDIF groups may  be  disjoint  or
          nested; they may not overlap.

          There may not be more than one ELSE statement for each IF.
2 ICF
      invalid character found (#, %, ^ or &)
      invalid character found (#, %, ^ or &) (warning)

          #, %, ^ and & are generally not valid in commands, symbols
          or expressions.  # and % are next to the $ key and are often
          miss-typed in place of $.  ^ and & are sometimes misused for
          exponentiation and concatenation.

          Exceptions:

              %X and %O for hex and octal radix indication
                  These occurrences are not flagged.
                  This may suppress additinal ICF instances in the same line.

              & for symbol substation and % for wildcard
                  These occurrences are incorrectly flagged.
                  Lines with & or % are marked as warnings.
2 EKE
      invalid comparison or logical operator

          Please use DCL HELP and see
              SPECIFY EXPRESSION ARITHMETIC or
              SPECIFY EXPRESSION STRING
          for a list of valid operators.

          This  message  indicates  that  one  or more of the following,
          invalid operators was found.  Notice that many  of  these  are
          valid operators with the leading and/or trailing period (".")
          missing.0

              " .eq "     " eq. "     " eq "
              " .ge "     " ge. "     " ge "
              " .gt "     " gt. "     " gt "
              " .le "     " le. "     " le "
              " .lt "     " lt. "     " lt "
              " .ne "     " ne. "     " ne "
              " .or "     " or. "     " or "
              " .not "    " not. "    " not "
              " .and "    " and. "    " and "
              " .eqs "    " eqs. "    " eqs "
              " .ges "    " ges. "    " ges "
              " .gts "    " gts. "    " gts "
              " .les "    " les. "    " les "
              " .lts "    " lts. "    " lts "
              " .nes "    " nes. "    " nes "
              " .new "    " new. "    " .new. "
              " .eas "    " eas. "    " .eas. "
              " .gs. "    " .ls. "    " .es. "
              " .ns. "    ">"         "<"
              "=>"        ">="        "<="
              "=<"        " _ " (underscore)

      Note  that  this  will  sometimes  consider  "<>"  pairs  used for
      directories to be invalied comparsion operatores.   Either  ignore
      this or use "[]" in place of "<>".
2 INT
      IF statement not terminated

          A  multi-line IF  statement  is  not  terminated  by  an ENDIF
          statement.  This does not apply to IF statements with THEN  on
          the same line (or a continuation line).

          This  can  be  caused  by overlapping SUBROUTINES and IF-ENDIF
          groups.  SUBROUTINES and IF-ENDIF groups may  be  disjoint  or
          nested; they may not overlap.
2 LC
      line contains END_IF, END IF, GO_TO, GO TO, GO_SUB or GO SUB

          ENDIF, GOTO and GOSUB are often miss-coded in one of these
          ways.
2 LFF
      line contains only form-feed (<FF>)

          This line contains only a form-feed character (<FF>).

          If you want to insert a form-feed to paginate a listing of
          this procedure consider using a comment line ("$!<FF>").
2 LND
      line does not start with "$"

          All  DCL  lines  except  continuation lines and lines within a
          $DECK/$EOD pair must start with a "$".

          If this line is input to a command or procedure, it may be not
          an error.  However, consider enclosing such input lines within
          a  $DECK/$EOD  pair  to  make  this  intention  clear.   Using
          $DECK/$EOD may also avoid other false diagnostics.

          If  you  want  to include a form-feed to force a new page when
          printing the command procedure, consider using "$!<FF>".
2 LNF
      label "<label>" not found

          A label that is not defined has been referenced.
2 LNR
      label "<label>" not referenced (warning)

          A  label  is  defined  but not referenced.  Since unreferenced
          labels are  often  used  in  DCL  procedures  as  a  style  of
          documentation, this may not be a problem.
2 LDS
      Label "<label>" defined by symbol substitution (warning)

          A  label  will be constsructed at executeion time using symbol
          substitution.  The validity of this label and of references to
          it cannot be checked before execution. This code and the logic
          it implements should be carefully reviewed.
2 LOD
      line contains only a $ (warning)

          This line contains only a "$".  This may indicate a coding
          error.

          If you want blank lines to add white space for readability,
          consider using blank comment lines ("$!").

          (Blank lines within $DECK/$EOD pairs are allowed.)
2 MEC
      missing expression for comparsion

          A comparison operator is the first or last thing on a line and
          does not have a comparison value preceeding of following it.
2 NCL
      no continuation line at EOF

          The last non-comment line in the file ended with a
          continuation character (-).
2 NED
      no $EOD for $DECK at <line>

          $DECK and $EOD delimit an input stream for a command or
          program.  They must be paired and may not be nested.
2 PML
      possible misspelled lexical (<lexical>)

          This line contains what appears to be a misspelled lexical
          function.

          This  diagnostic  message  may  be displayed if a valid symbol
          name starts with  the  characters  "F$".   See  HELP  PROBLEMS
          LEXICALS for more information.
2 PRQ
      probable error using single-quote  (')

          When  single-quotes  (')  are used outside a quoted string for
          symbol substitution, there must be one single quote  preceding
          the  symbol  and  one  following  it.   This  also  applies to
          substituting values provided by lexical functions.

          Examples

              $ help/libr='help_dir'dcl_check DCL_CHECK
              $ this_node_name := 'f$getsyi("NODENAME")

          This  line does not follow this rule.

          Although  omitting  the  single  quote following the symbol or
          lexical function will not cause problems in some cases, it  is
          recommended that this be corrected.

          DCL_CHECK  also requies that the single quote which preceeds a
          symbol be preceeded by a space.
2 PSQ
      possible  error using single-quote (') in quoted string

          When  single-quotes (') are used in a quoted string for symbol
          substitution, there must  be  two  consecutive  single  quotes
          preceding  the symbol and one following it.  This also applies
          to substituting values provided by lexical functions.

          Examples:

              $ write sys$output "My name is ''name'."
              $ write sys$output "This is a ''f$getsyi("ARCH_NAME")'."

          This line does not follow this rule. In some cases this may be
          valid text, such as contractions  or  possessives.   Check  to
          ensure that this is not a coding error.

      See also HELP PROBLEMS SINGLE-QUOTE
2 PTL
      possible truncated lexical (<lexical>)

          This  line  contains  what  appears  to be a lexical function.
          However, it has been truncated to  less  than  six  characters
          (including the "F$").

          Although  this  may  not  be  a  problem  in some cases, it is
          recommended that it be corrected.

          This  diagnostic  message  may  be displayed if a valid symbol
          name starts with  the  characters  "F$".   See  HELP  PROBLEMS
          LEXICALS for more information.
2 RLI
      referenced label "<label>" is in if-group at lines <line-range>

          A  label  that  is  within an if-group has been reference by a
          statement that is not in the same if-group.  The label  cannot
          be seen from this statement.
2 RLS
      referenced label "<label>" is in subroutine at lines <line-range>

          A  label  that  is within a subroutine has been reference by a
          statement that is not in the same subroutine. The label cannot
          be seen from this statement.
2 RNA
      ENDSUBROUTINE statement not allowed here

          An  ENDSUBROUTINE  statement  may  be  used  only  following a
          SUBROUTINE statement.

          This  can  be  caused  by overlapping SUBROUTINES and IF-ENDIF
          groups.  SUBROUTINES and IF-ENDIF groups may  be  disjoint  or
          nested; they may not overlap.

          There  may  not  be  more than one ENDSUBROUTINE statement for
          each SUBROUTINE.
2 SNT
      SUBROUTINE statement not terminated

          A SUBROUTINE is not terminated by an ENDSUBROUTINE statement.

          This  can  be  caused  by overlapping SUBROUTINES and IF-ENDIF
          groups.  SUBROUTINES and IF-ENDIF groups may  be  disjoint  or
          nested; they may not overlap.
2 TLS
      target label "<label>" provided by symbol substitution (warning)

          A  reference  to a label will be constructed at execution time
          using symbol substitution.  The  validity  of  this  reference
          cannot be checked before execution. This code and the logic it
          implements should be carefully reviewed.
2 TML
      too many levels of IF statements

          IF statements may be nested to a maximum of 15 levels.
          This message indicates that this limit has been exceeded.
2 TMS
      too many levels of IF and SUBROUTINE statements

          DCL_CHECK  tracks the combined IF and SUBROUTINE statements to
          a maximum or 20 combined levels. This limit has been exceeded.
          This is not a DCL limit; it is a DCL_CHECK limit.
2 TNA
      THEN statement not allowed here

          A THEN statement man only be used immediately following an IF
          statement.

          There may not be more than one THEN for each IF.
2 TRH
      THEN statement required here

          If  THE" does not appear on the same line with an IF statement
          (or on a continuation line), then the next line must be a THEN
          statement.
2 UMP
      unmatched parentheses

          This  line  contains  an  un-equal number of open-parentheses,
          "(", and close-parentheses, ")".  In some cases  this  may  be
          valid text.  Check to ensure that this is not a coding error.
2 UPQ
      unpaired  quotation marks  (")

          This line contains an un-equal number of double-quotes, (").
2 WCT
      wrong constant type for comparison

          Either  a numeric comparison operator is preceeded or followed
          by a quoted string, or

          a  string  comparison  operator is preceeded of followed by an
          numeric constant.
1 Modifications
      You  can  modify  or  "customize" DCL_CHECK by editing the command
      procedure, DCL_CHECK.COM. However, DCL_CHECK.COM is a "compressed"
      version  of  the  procedure.   To  save  disk  space  and  improve
      performance,  all  comments  and  unnecessary  spacing  have  been
      removed  from  DCL_CHECK.COM.  This makes it difficult to read and
      understand the procedure.

      It  should  be  much easier to edit the file DCL_CHECK.COM_SOURCE,
      which contains commands  and  is  formatted  to  facilitate  human
      reading.   You can re-create a "compressed" version of the command
      procedure by using DCL_DIET.COM.
2 Help
      DCL_CHECK.HLB   is   a   standard  help  library.   You  can  edit
      DCL_CHECK.HLP and use the command

          $ LIBRARY /CREATE /HELP DCL_CHECK DCL_CHECK

      to create the new DCL_CHECK.HLB.
2 DCL_DIET
      DCL_DIET  is  a  command  procedure  that  accepts  as input a DCL
      command procedure file.  It compresses, or "diets",  the  file  by
      removing comments and unnecessary space. The compressed version is
      created as output.

      The smaller size of the compressed file has two advantages:

          o It takes up less space on disk or tape.

          o It executes faster
              -- especially for larger command procedures

      DCL_DIET is not part of DCL_CHECK.  It is provided separately.
1 Installation
      To install DCL_DIET you must put the files

          DCL_DIET.COM and
          DCL_DIET.HLB

      into the same directory.  You then execute DCL_DIET as an indirect
      command procedure.  See "Format" for additional information.
