1 DCL_CHECKH      The DCL_CHECK procedure detects a variety of DCL coding errors andH      displays  diagnostic  messages  that  allow  you  to  correct  theH      problems. See "Diagnostics" for a list of the types of errors thatH      DCL_CHECK can detect. See "Problems" for information on the limits      of DCL_CHECK.H      DCL_CHECK  is NOT intended to catch all potential DCL errors.  ItsH      purpose is help you find, relatively  quickly,  errors  which  are7      common and/or which may be difficult to diagnose.H      When  you  execute  DCL_CHECK  with "HELP" as the first parameter,H      DCL_CHECK invokes the DCL Help utility.  If you provide additional6      parameters, they are passed to the Help utility.H      To exit the Help utility, press Return one or more times until theD      prompt "enter name of file (or HELP or EXIT): "  is displayed.#  Additional information available::  DCLDIET        DCL_CHECK      DCL_DIET       Diagnostics:  Examples       Format         Installation   Line_counts6  Modifications  Output         Problems       Version	1 Version8      This is version V3.4-C of the DCL_CHECK help file.1 FormatH      DCL_CHECK  is  a  DCL  command  procedure.   It is executed by the      following DCL command:C          $ @[<disk>:][<directory>]DCL_CHECK.COM [<input> [<list>]]B          $ @[<disk>:][<directory>]DCL_CHECK.COM HELP [<topic>...]H      <disk>  and/or  <directory>  may  be omitted; the current defaults      will be used.H      The   file   DCL_CHECK.HLB  must  be  in  the  same  directory  asH      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.H      If  you  use DCL_CHECK frequently, you may wish to assign a symbolH      in your LOGIN.COM file to execute DCL_CHECK.  For example, if  theH      DCL_CHECK.COM  and  .HLB files are in you login default directory,4      you might put the following in your LOGIN.COM:0          $ DCL_CHECK :== "@SYS$LOGIN:DCL_CHECK"H      Alternatively,  if  you  put  DCL_CHECK.COM  and  DCL_CHECK.HLB inH      SYS$SYSTEM, you might put the following in your SYS$SYLOGIN (which+      is normally SYS$MANAGER:SYLOGIN.COM):1          $ DCL_CHECK :== "@SYS$SYSTEM:DCL_CHECK"2 ParametersH      Parameters  may  be  entered  on the command line; if there are noH      parameters on the command line, the  procedure  will  display  the      prompt for parameters.H      The first parameter is either the file-name of a command procedureB      file to be checked, or one of the keywords "HELP" or "EXIT".H      If  a  file  name is entered, it will be checked.  If a device andH      directory are not supplied, the current default is used. If a file0      extension is not supplied, ".COM" is used.H      If  a  file  name is entered, the second parameter may provide theH      name of a listing file to contain the list of errors detected.  IfH      a  device  and  directory are not supplied, the current default isH      used.  If a file extension is not supplied, ".LIS"  is  used.   IfH      second parameter is not supplied, errors are listed on sys$output.H      If  the  first  parameter contains "HELP", the DCL Help utility isH      used to provide information  about  the  DCL_CHECK  utility.   Any;      additional parameters are passed to the HELP utility.H      If  the first parameter contains "EXIT", any additional parameters*      are ignored and the procedure exits.1 OutputH      If the second parameter (see HELP FORMAT PARAMETERS) is blank, allH      output of DCL_CHECK is displayed on the terminal.  If  the  secondH      parameter  is a listing file name, some output is displayed on theH      terminal and diagnostic information  is  written  to  the  listing      file.2 Terminal_outputH      Terminal output depends on whether or not there is a listing file.3 Listing_fileD      If there is a listing file, output similar to the following is      displayed:G      -*- Charlie Hammond's unsupported DCL checker (Version V3.4-C -*-      Checking file <file-name>)      Checking for DCL_CHECK$ logicals...1      No translation for logical name DCL_CHECK$*
      <or>'      "DCL_CHECK$SUPPRESS_WCT" = "TRUE"	      ...'      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>H      For  Pass  1,  the  numbers  in  the  "processing line number xxx",      displays will be in increments of 500.H      For  Pass  2,  the  numbers  in  the  "processing line number xxx"-      displays will be in increments of 1000.D      If no errors are found, the last two lines will be replaced to      indicate this:      No errors found0      ...listing file not created    <date-time>3 No_listing_fileE      If there is no listing file, output similar to the following is      displayed:H      -*- Charlie Hammond's unsupported DCL checker (Version V3.4-C) -*-       Checking file <file-name>;)      Checking for DCL_CHECK$ logicals...1      No translation for logical name DCL_CHECK$*
      <or>'      "DCL_CHECK$SUPPRESS_WCT" = "TRUE"	      ...'      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 linesR                            nnnn code lines (including nn lines (nn%) w/ comments)>                             nnn additional continuation lines;                              nn lines w/i $DECK/$EOD pairsG                             nnn comment only lines (nn% of code lines),                             nnn blank lines,                              nn diagnosticsG           12% of non-blank lines are comments only or contain comments)       LINE  CODE  --DIAGNOSTIC MESSAGE--          .          .          .6      -*- END OF LISTING -*-   13-OCT-1997 10:57:28.07H      For  Pass  1,  the  numbers  in  the  "processing line number xxx",      displays will be in increments of 500.H      For  Pass  2,  the  numbers  in  the  "processing line number xxx"*      displays will be increments of 1000.H      The  LINE  reported with the DIAGNOSTIC MESSAGE for diagnostics inH      lines that are continued will be the line number of the  original,      continued line.
2 File_outputF      If a listing file is being used, it contains information similar      to the following.H      -*- Charlie Hammond's unsupported DCL checker (Version V3.4-C) -*-8      Checking file WORK8:[HAMMOND]DCL_CHECK.COM_SOURCE;      <date_time>,      Procedure contains:   nnnn total linesR                            nnnn code lines (including nn lines (nn%) w/ comments)>                             nnn additional continuation lines;                              nn lines w/i $DECK/$EOD pairsG                             nnn comment only lines (nn% of code lines),                             nnn blank lines,                              nn diagnosticsG           12% of non-blank lines are comments only or contain comments)       LINE  CODE  --DIAGNOSTIC MESSAGE--          .          .          .      -*- END OF LISTING -*-G      The  LINE reported with the DIAGNOSTIC MESSAGE for diagnostics inG      lines that are continued will be the line number of the original,      continued line.
1 Line_countsH      DCL_CHECK displays (or lists to a file) the following line counts.,      Procedure contains:   nnnn total linesR                            nnnn code lines (including nn lines (nn%) w/ comments)>                             nnn additional continuation lines;                              nn lines w/i $DECK/$EOD pairsG                             nnn comment only lines (nn% of code lines),                             nnn blank lines,                              nn diagnosticsG           12% of non-blank lines are comments only or contain comments0      There is an explanation for each of these.
2 total_linesE      Total lines is a count of every physical line in the file beingD      checked.  It is the same as the number of records in the file.2 code_linesH      Code  lines  is  a  count  of  lines of code.  It does not includeH      continuation lines, lines within a $DECK/$EOD pair, comment  lines      or blank lines.H      Immediately  following  the  count of code lines is a count of theH      number of code lines that also include comments. Note that this is*      included in the count of code lines.2 continuation_linesH      Continuation  lines is a count of the number of lines of code thatH      are continued from a code line.  A continued code line ends with aH      hyphen  (-)  that is not a comment (i.e., not preceded by an "!");H      lines   following   continued   line   are   continuation   lines.H      Continuation  lines  may  be  continued.   i.e. a code line may be2      continued on two or more continuation lines.2 deck_linesH      Deck  lines is a count of lines that are within a $DECK/$EOD pair.H      These lines are input to  programs  or  utilities.   They  may  be6      commands or text used by the program or utility.2 comment_linesH      Comment lines are lines that are not within $DECK/$EOD pairs whichH      contain only comments.  i.e. the  first  non-blank  following  theH      dollar  sign  ($)  is an exclamation point (!).  Comments may alsoH      appear on code lines following DCL commands;  these  comments  are      not counted.
2 blank_linesH      Blank lines are lines which are totally blank (which also generateH      diagnostic messages) or which contain only a blank comment. (BlankH      comments   are  often  used  to  insert  white  space  to  improve      readability.)
2 diagnostics7      This is the number of diagnostic messages output.
1 Problems;      DCL_CHECK does not and cannot catch all DCL problems.-          Not all syntax errors are detected.B          Misspelled commands and variable names are not detected.*          Logic errors cannot be detected.D          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 "$".H      In  addition, the detection of one problem may obscure one or moreH      other  problems  --  or  may  cause  problems  to  be  erroneouslyH      detected.   For  this  reason,  you  should always rerun DCL_CHECK      after correcting errors.2 Called_procsH      If  you  use DCL_CHECK to check a command procedure that is calledH      by another procedure,  various diagnostics may be misreported.  InH      particular,    diagnostics  related  to  file  operations  can  beH      misreported if the OPEN, READ, WRITE and  CLOSE  commands  are  in      different files.2 File_DiagnosticsH      DCL_CHECK's  file  diagnostics, NLN, ONC, INR, ANR, ONW, RNR, WNW,H      UNU and CNO, operate by matching OPEN, READ, WRITE and  CLOSE  DCLH      statements based on the logical name that these statements use. IfH      symbol  substitution  is  used  for  these  logical  names,  these4      diagnostics may incorrectly generate warnings.H      Because  DCL_CHECK  does  not  know  the  order in which a commandH      procedure will actually execute, no attempt is made to ensure thatH      OPEN statements precede and CLOSE statements follow READ and WRITEH      statements.  For the same reason, no attempt is made to  sort  outH      the  possible  errors  that  may  occur  if  a  procedure contains>      multiple OPEN and/or CLOSE statements for the same file.H      One  of  the  main  purposes  of  these  diagnostics  is  to catchE      different [mis]spellings of the logical name used for the file.2 Single_quoteH      DCL_CHECK  is  imperfect  in  its checking for use of single-quoteH      characters.  For this reason it lists such errors as "probable" or      "possible".H      Some  syntactically invalid lines may be missed.  Lines containing0      an even number of errors may "cancel out".H      If  one single-quote is used to start symbol substitution within aH      quoted string (instead of two single-quotes) DCL_CHECK will reportH      this  as an error, and will also flag the single-quote used to endH      the symbol substitution.  Although this may  seem  like  a  singleC      error, DCL_CHECK sees it as two possible single-quote errors.H      Some  valid  uses of a single single-quote (') will be reported as
      errors.3 ContractionsH      DCL_CHECK  removes  the following contractions before checking forH      single-quotes.  Note that this is case sensitive  --  upper  case,H      lower  case and capitalized (i.e. only first letter in upper case)H      will  be  removed.   Any  other  mixed  case  versions  of   these'      contractions will not be removed.B      (Exception:  The personal pronoun "I" is always upper case.)>          aren't          he'd            shouldn't      we've@          can't           he'll           they'd         weren't>          couldn't        I'd             they'll        won'tA          didn't          I'll            they're        wouldn't>          doesn't         I'm             they've        you'd?          don't           I've            wasn't         you'll?          hadn't          isn't           we'd           you're?          hasn't          she'd           we'll          you've/          haven't         she'll          we're
3 PossessivesH      Within  a  quoted  string,  DCL_CHECK  considers  the string "'s "H      (upper or  lower  case  --  note  the  trailing  space)  as  valid+      possessives and does not report them.2 Angle_bracketsH      DCL_CHECH  will  detect  angle  brackets  ("<"  and  ">")  used toH      delineate directories as invalid comparison  operators.   You  canH      either  ignore  this  error or change the angle brackets to square      brackets ("[" and "]").
2 LexicalsH      DCL_CHECK  assumes  that  every  instance  of  "F$"  that  is  notH      immediately preceded by a letter or a digit introduces  a  lexicalH      function.   If  "F$"  is used as part of a symbol or logical name,H      this  may  be  reported  as  a  possible  truncated  or   possible      misspelled lexical.
2 ParenthesesH      DCL_CHECK  may  detect unpaired parentheses within quoted strings.%      These may or may not be errors.
1 ExamplesH  EXAMPLE 1:  This example checks the file MY_COMMAND.COM in the currentN              default directory and displays any errors found on the terminal.      $ @DCL_CHECK MY_COMMANDI  EXAMPLE 2:  This example checks the file MY_COMMAND.TEST in a directoryK              "TEST" located under the users login directory, and creates aM              file TEST.LIS in the current directory if any errors are found.7      $ @DCL_CHECK SYS$LOGIN:[TEST]MY_COMMAND.TEST TESTH  EXAMPLE 3:  This example checks the file MY_COMMAND.COM in the currentM              default directory and creates a file ERROR.REPORT in the user's6              login directory if any errors are found.*      $ @DCL_CHECK MY_COMMAND ERROR.REPORT1  EXAMPLE 4:  This example requests general help.      $ @DCL_CHECK HELP:  EXAMPLE 5:  This example requests help on know problems.       $ @DCL_CHECK HELP PROBLEMSG  The following shows how the above examples could be entered by typingM  only @DCL_CHECK at the DCL prompt and then answering the procedures prompt.8  Note that line-wrap will occur differently than shown.  Example 1:J  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):J                                      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:D  enter name of procedure file to be checked (or HELP or EXIT): HELP  Example 5:M  enter name of procedure file to be checked (or HELP or EXIT): HELP PROBLEMS
1 DiagnosticsC      Diagnostic messages are identified by a three character code.G      The  LINE reported with the DIAGNOSTIC MESSAGE for diagnostics inG      lines that are continued will be the line number of the original,      continued line.H      Descriptions and explanations are available for all errors.  Enter2      one of the following codes for more details:&        CODE-       Diagnostic Message         Severity.             Errors related to file operationsJ        NLN-S  An OPEN, READ, WRITE or CLOSE statement has no logical name;        ONC-E  A file that is opened has no CLOSE statement9        INR-E  A file that is opened for read is not read>        ANR-E  A file that is opened for append is not written=        ONW-E  A file that is opened for write is not written?        RNR-S  A file that is not opened for read is being readM        WNW-S  A file that is not opened for write or append is being writtenL        UNU-S  A file that is not opened for read and write is being updated:        CNO-S  A file that is closed has no OPEN statement:        OCE-I  OPEN or CLOSE statement with /END qualifier1             Errors related to if-then-else-endif*        INT-S  IF statement not terminated,        EFB-S  "=" found between IF and THEN5        ICO-S  invalid comparison or logical operator/        TML-S  too many levels of IF statements+        TRH-S  THEN statement required here.        TNA-S  THEN statement not allowed here.        ENA-S  ELSE statement not allowed here/        DNA-S  ENDIF statement not allowed here1        WCT-E  wrong constant type for comparison0        MEC-S  missing expression for comparison*             Errors related to subroutines2        SNT-S  SUBROUTINE statement not terminated>        TMS-S  too many levels of IF and SUBROUTINE statements7        RNA-S  ENDSUBROUTINE statement not allowed hereC        LNS-S  referenced label "<label>" is not in this subroutine%             Errors related to labels(        DL--E  duplicate label "<label>"I        RLI-S  referenced label "<label>" is in if-group at lines <range>K        RLS-W  referenced label "<label>" is in subroutine at lines <range>(        LNF-S  label "<label>" not foundE        TLS-I  target label "<label>" provided by symbol substitution=        LDS-I  label "<label>" defined by symbol substitution-        LNR-I  label "<label>" not referenced5             Errors related to parentheses and quotes;        UMP-S  unmatched parentheses (not in quoted string)5        USP-W  unmatched parentheses in quoted string8        UMB-S  unmatched brackets (not in quoted string)2        USB-W  unmatched brackets in quoted string+        UPQ-S  unpaired quotation marks (")E        PSQ-W  possible error using single-quote (') in quoted string4        PRQ-E  probable error using single-quote (')0             Errors related to lexical functions5        PTL-E  possible truncated lexical (<lexical>)6        PML-E  possible misspelled lexical (<lexical>)0             Errors related to unreachable lines@        CRE-W  code cannot be reached due to EXIT at line <line>@        CRG-W  code cannot be reached due to GOTO at line <line>1             Errors related to continuation lines0        CLD-S  continuation line starts with "$"*        NCL-S  no continuation line at EOFA        CCN-I  continuation character ("-") not preceded by space7        CLS-I  comment line separates continuation line-             Errors related to $DECK and $EOD6        DED-E  /DOLLARS w/ "$" does not work correctly*        NED-S  no $EOD for $DECK at <line>1        DFB-I  $DECK found between $DECK and $EOD5        EFN-W  $EOD found with no corresponding $DECK!             Miscellaneous errors1        ADE-E  equal sign (=) in ASSIGN or DEFINEK        LC--S  line contains END_IF, END IF, GO_TO, GO TO, GO_SUB or GO SUB        BL--I  blank line%        LOD-I  line contains only "$"2        LFF-I  line contains only form-feed (<FF>)+        LND-E  line does not start with "$"5        ICF-W  invalid character found (#, %, ^ or &)
2 SeverityH      DCL_CHECK diagnostics are categorized by severity codes similar toH      those used throughout OpenVMS -- S, E, W and I.  Within  DCL_CHECKH      these  should  be  interpreted  as follows.  Note that some errorsH      could  be  assigned  different   severity   codes   in   different:      situations.  DCL_CHECK assigns the most severe code.      S -- Severe Error --?        o This will almost certainly cause a run-time error, or8        o This almost certainly indicates a logic error.I        It is strongly recommended that Severe Error should be corrected.      E -- Error --<        o This violates a clearly stated DCL coding rule, or;        o It is likely but not certain that this represents"          a coding or logic error.      W -- Warning  --H        It  is possible but not certain that this represents a coding or        logic error.A      I -- Information -- Indicates one of more of the following:E        o This is a matter of "coding style"; you may or may not want          to change this, orB        o This is information that you may wish to be aware of, orC        o This may cause DCL_CHECK to misdiagnose other conditions.2 Suppress_diagH      There  are  three  ways  in  which  you  can  suppress DCL_CHECK'sH      reporting of diagnostic messages:  by defining logical  names,  byH      inserting  a  DCL_CHECK  SUPPRESS  comment line, or by inserting a"      DCL_CHECK SKIP comment line.3 logical_nameH      You  can  suppress DCL_CHECK's reporting of diagnostic messages byH      defining logical names.  For each diagnostic message you  wish  toH      suppress, define the logical name DCL_CHECK$SUPPRESS_xxx to "TRUE"H      (or to "1").  "xxx" is the two or three  character  code  for  the>      diagnostic message.  (Do not include the SEVERITY code.)H      If  the  translation  of DCL_CHECK$SUPPRESS_xxx evaluates as true,H      then the diagnostic message identified by the "xxx" code will  notH      be   generated.    If  the  translation  of DCL_CHECK$SUPPRESS_xxxH      evaluates as false, or if DCL_CHECK$SUPPRESS_xxx is  not  defined,?      then the message will be generated if the error is found.3 suppress_commentH      You can include a comment line in the procedure file being checked$      by DCL_CHECK that starts with:           $! DCL_CHECK SUPPRESS:H      This  line must contain these exact characters, except that spaces7      may be omitted or additional spaces may be added.H      The  remainder  of the line must be the three-character diagnosticH      code, as listed under HELP DIAGNOSTICS.  Only  include  the  threeH      characters  -- do NOT include the "-E", "-S", "-I" or "-W".  (NoteH      that  this  differs  from  DCL_CHECK  SKIP:.)   Separate  multiple/      diagnostic codes with one or more spaces.H      It  the  DCL_CHECK  SUPPRESS  line  does  not  appear early in theH      procedure  file  being  checked,  some  diagnostics  may  not   be      suppressed.3 skip_commentH      You can include a comment line in the procedure file being checked$      by DCL_CHECK that starts with:          $! DCL_CHECK SKIP:H      This  line must contain these exact characters, except that spaces7      may be omitted or additional spaces may be added.H      The  remainder  of  the  line  must  be  the  full,   five-charterH      diagnostic codes, as listed under HELP DIAGNOSTICS, including  theH      "-E",  "-S", "-I" or "-W".  (Note that this differs from DCL_CHECKH      SUPPRESS:.) You may include one or more diagnostic codes; multiple6      codes should be separated by one or more spaces.H      If  any  of  the  specified diagnostics are generated for the nextH      line of code,  these diagnostics  will  not  be  reported.   Other#      diagnostics will be reported.2 Insert_CommentsH      If  a line in the procedure file being checked by DCL_CHECK starts      with:           $! DCL_CHECK COMMENTS:H      The  remainder  of  the line will be inserted into the diagnosticsH      listing.  No formatting is done; the line appears exactly as it isH      in the command procedure; "$!  DCL_CHECK COMMENTS:" is removed and      the line number is added.H      Note  that  this  line must contain these exact characters, exceptC      that spaces may be omitted or additional spaces may be added.H      This  feature  can  be  used  to add a note when DCL_CHECK createsH      diagnostics that  you  want/need  to  ignore,  of  for  any  other      purpose.2 ADE?      An ASSIGN or DEFINE statement includes an equal sign (=).G      This is invalid syntax and may produce unexpected results with no4      DCL error message.  Either of these statements"          $ ASSIGN WORP055 BRK20 =          or"          $ DEFINE BRK20 = WORP055F      will define the logical name "BRK20=" (yes, with the equal-sign)      with the value "WORP055".2 ANR5      A file that is opened for append is not writtenH          An  OPEN  statement  specifies  /APPEND  but there is no WRITE4          statement (without /UPDATE) for this file.H          NOTE:  This may be erroneously reported if symbol substitutionB          is used for the logical name used to reference the file.2 BL      blank line (warning)@          This line is blank.  This may indicate a coding error.E          If you want blank lines to add white space for readability,4          consider using blank comment lines ("$!").<          (Blank lines within $DECK/$EOD pairs are allowed.)E          Note that neither DCL_DIET nor DCLDIET removes blank lines.2          Lines with only "$" or "$!" are removed.2 CCNB      continuation character ("-") not preceded by space (warning)H          DCL  logically appends a continuation line to the line that isH          continued.  If there is no space  preceding  the  continuationH          character ("-"), and there is no space at the beginning of theH          continuation line, this can result in keywords, qualifiers  or4          parameters being incorrectly concatenated.          Examples:4           1. DCL will interpret the following lines                  $ SHOW-                  LOGICALH              as  SHOWLOGICAL,  which  will  be  taken  as an acceptableH              misspelling of SHOW -- "LOGICAL" will be ignored  and  DCL+              will prompt for what to show.4           2. DCL will interpret the following lines                  $ open/write-$                  testfile test.file.              as OPEN/WRITETESTFILE TEST.FILE.H          The  qualifier "/WRITETESTFILE" will be taken as an acceptableH          misspelling of  /WRITE;  "TEST.FILE"  will  be  taken  as  theH          logical  name for the file, rather than as the file name.  DCLH          will either prompt for the file name (if interactive) or  fail          (if not interactive).@          DCLDIET will remove spaces and may cause this problem.H          Preceding  the  continuation character with at least one space          is recommended.2 CLD'      continuation line starts with "$"8          DCL continuation lines may NOT start with "$".2 CLS8      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 CNO1      A file that is closed has no OPEN statementH          A file, identified by a logical name, has been closed at least=          once, but there is no OPEN statement for this file.H          NOTE:  This may be erroneously reported if symbol substitutionB          is used for the logical name used to reference the file.2 CRE7      code cannot be reached due to EXIT at line <line>G          Code following an unconditional EXIT statement is unreachable6          until a label, ENDIF or ELSE is encountered.2 CRG7      code cannot be reached due to GOTO at line <line>G          Code following an unconditional GOTO statement is unreachable6          until a label, ENDIF or ELSE is encountered.2 DFB(      $DECK found between $DECK and $EODH          DECK and EOD delimit an input stream for a command or program.4          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 DED-      /DOLLARS w/ "$" does not work correctly3          DCL does not work correcty if you specify              $ DECK /DOLLARS=$2 DNA&      ENDIF statement not allowed hereH          An  ENDIF statement may only be used with an IF statement that8          does NOT have THEN on the same line as the IF.H          This  can  be  caused  by overlapping SUBROUTINES and IF-ENDIFH          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 THENH          The  equals  sign ("=") is probably being used for comparison.H          "=" is used for  assignment.   Use  ".EQ."   or  ".EQS."   for          comparison.2 EFN,      $EOD found with no corresponding $DECKH          DECK and EOD delimit an input stream for a command or program.4          They must be paired and may not be nested.H          Note that if you specified /DOLLARS=<string> withOUT enclosingH          the string in quotes ("), the string will be UPCASED;  if  youH          do  enclose  it  in quotes, its case will NOT be changed.  TheH          case of string provided with /DOLLARS must match the  case  of@          the string used to signal the end of the input stream.2 ENA%      ELSE statement not allowed hereH          An ELSE statement may be used only between an IF statement and"          the corresponding ENDIF.H          This  can  be  caused  by overlapping SUBROUTINES and IF-ENDIFH          groups.  SUBROUTINES and IF-ENDIF groups may  be  disjoint  or'          nested; they may not overlap.D          There may not be more than one ELSE statement for each IF.2 ICF<      possible invalid character found (& in PIPE) (warning):      possible invalid character found ( % or &) (warning)&      invalid character found (# or ^)<          #, %, ^ and & are generally not valid in commands.          Exceptions::              %X and %O for hex and octal radix indicationE                  These occurrences are not reported and may suppress<                  additional ICF instances in the same line.8              & for symbol substation and % for wildcard=                  These occurrences are incorrectly reported.;                  Lines with & or % are marked as warnings.          Rational:G              The rational for checking these particular characters and)              not various others is this:F                  The "#" and "%" keys are adjacent to the "$" key and1                  can be easily typed by mistake.>                  The "^" character can be misused to indicateE                  exponentiation.  (DCL expressions do not include an+                  exponentiation operator.)D                  The "&" can be misused in place of "+" or ".AND.".2 ICO,      invalid comparison or logical operator%          Please use DCL HELP and see.              SPECIFY EXPRESSION ARITHMETIC or'              SPECIFY EXPRESSION STRINGC(          for a list of valid operators.H          This  message  indicates  that  one  or more of the following,H          invalid operators was found.  Notice that many  of  these  areG          valid operators with the leading and/or trailing period (".")m          missing.,              " .eq "     " eq. "     " eq ",              " .ge "     " ge. "     " ge ",              " .gt "     " gt. "     " gt ",              " .le "     " le. "     " le ",              " .lt "     " lt. "     " lt ",              " .ne "     " ne. "     " ne ",              " .or "     " or. "     " or "-              " .not "    " not. "    " not "o-              " .and "    " and. "    " and "e-              " .eqs "    " eqs. "    " eqs "h-              " .ges "    " ges. "    " ges "u-              " .gts "    " gts. "    " gts "H-              " .les "    " les. "    " les "l-              " .lts "    " lts. "    " lts "L-              " .nes "    " nes. "    " nes "l/              " .new "    " new. "    " .new. "s/              " .eas "    " eas. "    " .eas. "V.              " .gs. "    " .ls. "    " .es. ")              " .ns. "    ">"         "<" *              "=>"        ">="        "<=",              "=<"        " _ " (underscore)H      Note  that  this  will  sometimes  consider  "<>"  pairs  used forG      directories to be invalid comparison  operators.   Either  ignore(      this or use "[]" in place of "<>".2 INRt0      A file that is opened for read is not readH          An  OPEN  statement specifies /READ, explicitly or by default,7          but there is no READ statement for this file.CH          NOTE:  This may be erroneously reported if symbol substitutionB          is used for the logical name used to reference the file.2 INT!      IF statement not terminatedcH          A  multi-line IF  statement  is  not  terminated  by  an ENDIFH          statement.  This does not apply to IF statements with THEN  on1          the same line (or a continuation line).OH          This  can  be  caused  by overlapping SUBROUTINES and IF-ENDIFH          groups.  SUBROUTINES and IF-ENDIF groups may  be  disjoint  or'          nested; they may not overlap.A2 LCB      line contains END_IF, END IF, GO_TO, GO TO, GO_SUB or GO SUBH          ENDIF, GOTO and GOSUB are often miscoded in one of these ways.2 LFF )      line contains only form-feed (<FF>)h?          This line contains only a form-feed character (<FF>). D          If you want to insert a form-feed to paginate a listing ofB          this procedure consider using a comment line ("$!<FF>").2 LND "      line does not start with "$"H          All  DCL  lines  except  continuation lines and lines within a0          $DECK/$EOD pair must start with a "$".H          If this line is input to a command or procedure, it may not beH          an error.  However, consider enclosing such input lines withinH          a  $DECK/$EOD  pair  to  make  this  intention  clear.   Using<          $DECK/$EOD may also avoid other false diagnostics.H          If  you  want  to include a form-feed to force a new page whenB          printing the command procedure, consider using "$!<FF>".2 LNFo      label "<label>" not foundt?          A  label  that  is  not  defined has been referenced.lH          This  diagnostic is also issued if the label cannot be reachedH          because either the label or this statement is in a subroutine,7          and they are not both in the same subroutine.           See also LNS2 LNRL.      label "<label>" not referenced (warning)H          A  label  is  defined  but not referenced.  Since unreferencedH          labels are  often  used  in  DCL  procedures  as  a  style  of3          documentation, this may not be a problem.s2 LNS :      referenced label "<label>" is not in this subroutineF          A label referenced in a subroutine is not in the subroutine.2 LDS >      Label "<label>" defined by symbol substitution (warning)H      A  label  will  be  constructed  at  execution  time  using symbolH      substitution.  The validity of this label and of references to  itH      cannot  be  checked  before execution.  This code and the logic it.      implements should be carefully reviewed.2 LOD&      line contains only a $ (warning)D          This line contains only a "$".  This may indicate a coding          error.E          If you want blank lines to add white space for readability,i4          consider using blank comment lines ("$!").<          (Blank lines within $DECK/$EOD pairs are allowed.)E          Note that neither DCL_DIET nor DCLDIET removes blank lines.a2          Lines with only "$" or "$!" are removed.2 MECe'      missing expression for comparisoneH          A comparison operator is the first or last thing on a line andE          does not have a comparison value preceding of following it.:2 NCL !      no continuation line at EOFg<          The last non-comment line in the file ended with a%          continuation character (-). 2 NEDf!      no $EOD for $DECK at <line>A          $DECK and $EOD delimit an input stream for a command or->          program.  They must be paired and may not be nested.2 NLNoA      An OPEN, READ, WRITE or CLOSE statement has no logical name H          An OPEN, READ WRITE or CLOSE statement has be found which doesF          not include the required logical name to reference the file.2 OCE.1      OPEN or CLOSE statement with /END qualifier C          Although DCL accepts and /END qualifier on OPEN and CLOSE-E          commands without error, this is not documented or supported E          and it has no effect.  You may want to omit this qualifier.e2 ONC 2      A fine that is opened has no CLOSE statementH          A file, identified by a logical name, has been opened at least>          once, but there is no CLOSE statement for this file.H          NOTE:  This may be erroneously reported if symbol substitutionB          is used for the logical name used to reference the file.2 ONWr4      A file that is opened for write is not writtenH          An  OPEN  statement  specifies  /WRITE  but  there is no WRITE4          statement (without /UPDATE) for this file.H          NOTE:  This may be erroneously reported if symbol substitutionB          is used for the logical name used to reference the file.2 PMLp-      possible misspelled lexical (<lexical>) D          This line contains what appears to be a misspelled lexical          function.cH          This  diagnostic  message  may  be displayed if a valid symbolH          name starts with  the  characters  "F$".   See  HELP  PROBLEMS(          LEXICALS for more information.2 PRQo,      probable error using single-quote  (')H          When  single-quotes  (')  are used outside a quoted string forH          symbol substitution, there must be one single-quote  precedingH          the  symbol  and  one  following  it.   This  also  applies to<          substituting values provided by lexical functions.          Example:%          This line follows the rule: 7              $ help/libr='help_dir'dcl_check DCL_CHECK -          This line does not follow the rule:7              $ this_node_name := 'f$getsyi("NODENAME") H          Although  omitting  the  single-quote  following the symbol orH          lexical function will not cause problems in some cases, it  is-          recommended that this be corrected. H          NOTE:   When  one  or  more  single-quotes are enclosed withinH          double quotes as part of a text string, false PRQ  errors  mayI          be generated.   Common English contractions and possessives areC9          recognized and do not usually cause PRQ errors.u2 PSQ<      possible error using single-quote (') in quoted stringH          When  single-quotes (') are used in a quoted string for symbolH          substitution, there  must  be  two  consecutive  single-quotesH          preceding  the symbol and one following it.  This also applies?          to substituting values provided by lexical functions.           Examples:6              $ write sys$output "My name is ''name'."F              $ write sys$output "This is a ''f$getsyi("ARCH_NAME")'."H          The  line which generated this diagnostic does not follow thisH          rule.   In  some  cases  this  may  be  valid  text,  such  asH          contractions or possessives.  Check to ensure that this is not          a coding error.l)      See also HELP PROBLEMS SINGLE-QUOTEt2 PTLn,      possible truncated lexical (<lexical>)H          This  line  contains  what  appears  to be a lexical function.H          However, it has been truncated to  less  than  six  characters          (including the "F$").H          Although  this  may  not  be  a  problem  in some cases, it is+          recommended that it be corrected.iH          This  diagnostic  message  may  be displayed if a valid symbolH          name starts with  the  characters  "F$".   See  HELP  PROBLEMS(          LEXICALS for more information.2 RLIeE      referenced label "<label>" is in if-group at lines <line-range> H          A  label  that  is  within an if-group has been reference by aH          statement that is not in the same if-group.  The label  cannot&          be seen from this statement.2 RLSeG      referenced label "<label>" is in subroutine at lines <line-range>oH          A  label  that is within a subroutine has been referenced by aH          statement that is not in the same subroutine. The label cannot&          be seen from this statement.H          NOTE:  Similar labels can be used in different subroutines. IfH          no instance of the label can be accessed from this statement a(          LNF diagnostic is also issued.2 RNA .      ENDSUBROUTINE statement not allowed hereH          An  ENDSUBROUTINE  statement  may  be  used  only  following a          SUBROUTINE statement.nH          This  can  be  caused  by overlapping SUBROUTINES and IF-ENDIFH          groups.  SUBROUTINES and IF-ENDIF groups may  be  disjoint  or'          nested; they may not overlap.nH          There  may  not  be  more than one ENDSUBROUTINE statement for          each SUBROUTINE.2 RNRc6      A file that is not opened for read is being readH          A  file  is  being  read,  but the only OPEN statement for theB          logical name used to identify this file specifies /WRITEH          NOTE:  This may be erroneously reported if symbol substitutionB          is used for the logical name used to reference the file.2 SNTt)      SUBROUTINE statement not terminated G          A SUBROUTINE is not terminated by an ENDSUBROUTINE statement. H          This  can  be  caused  by overlapping SUBROUTINES and IF-ENDIFH          groups.  SUBROUTINES and IF-ENDIF groups may  be  disjoint  or'          nested; they may not overlap. 2 TLS F      target label "<label>" provided by symbol substitution (warning)H          A  reference  to a label will be constructed at execution timeH          using symbol substitution.  The  validity  of  this  referenceH          cannot be checked before execution. This code and the logic it2          implements should be carefully reviewed.2 TMLR&      too many levels of IF statements@          IF statements may be nested to a maximum of 15 levels.C          This message indicates that this limit has been exceeded.l2 TMSi5      too many levels of IF and SUBROUTINE statements H          DCL_CHECK  tracks the combined IF and SUBROUTINE statements toH          a maximum or 20 combined levels. This limit has been exceeded.;          This is not a DCL limit; it is a DCL_CHECK limit.N2 TNAe%      THEN statement not allowed here G          A THEN statement may only be used immediately following an IFt          statement.:          There may not be more than one THEN for each IF.2 TRH "      THEN statement required hereH          If  THEN does not appear on the same line with an IF statementH          (or on a continuation line), then the next line must be a THEN          statement.2 UMPe2      unmatched parentheses (not in quoted string)H          This  line contains an unmatched set of open-parentheses, "(",H          and close-parentheses,  ")",  in  that  part  of  the  commandH          EXCLUDING  quoted  strings.   Note that this requires not onlyH          that the number of open- and close-parentheses match, but alsoH          that     each    close-parenthesis    follows    its    paired          open-parenthesis. 2 USPs,      unmatched parentheses in quoted stringH          This  line  contains  an  unequal  number of open-parentheses,H          "(", and close-parentheses, ")".  In some cases  this  may  beG          valid text.  Check to ensure that this is not a coding error.eH          In  checking for  unmatched parentheses, DCL_CHECK attempts toH          ignore quoted strings that consist of a single open- or close-H          parenthesis. This usually reduces invalid UMP diagnostics, butA          in some cases, it can create an invalid UMP diagnostic..2 UMB /      unmatched brackets (not in quoted string)oH          This line contains an unmatched set of open-brackets, "[", andH          close-brackets, "]", in that part  of  the  command  EXCLUDINGH          quoted  strings.   Note  that  this requires not only that theH          number of open- and close-brackets match, but also  that  each8          close-bracket follows its paired open-bracket.2 USB'#      unmatched brackets in strings H          This line contains an unmatched set of open-brackets, "[", andH          close-brackets, "]", in that part of the command within quotedH          strings. Note that this requires only that the number of left-H          and right-brackets match; there is no check on their order. InH          some  cases this may be valid text.  Check to ensure that this           is not a coding error.I          In making this check, isolated strings that consist of a singlemI          open- or close-bracket, "[" and "]", will NOT be counted.  This D          usually reduces invalid USB diagnostics, but in some cases2          it can create an invalid USB diagnostic.2 UNUrC      A file that is not opened for read and write is being updatedH          A  file  is  being written with the /UPDATE qualifier, but the8          file has not been opened for /READ and /WRITE.H          NOTE:  This may be erroneously reported if symbol substitutionB          is used for the logical name used to reference the file.2 UPQn#      unpaired quotation marks  (")dD          This line contains an uneven number of double-quotes, (").2 WCTi(      wrong constant type for comparisonH          Either  a  numeric comparison operator is preceded or followed           by a quoted string, orH          a  string  comparison  operator  is preceded of followed by an          numeric constant.NH      NOTE:  A comparison operator within a quoted string may generate a$      false WCT error.  For example:$          $ abbr_list = ".NO.LE.MA."2 WNWD      A file that is not opened for write or append is being writtenH          A  file  is being written, but the only OPEN statement for theH          logical name used to identify this  file  specifies  /READ  or:          /APPEND.  (/READ may be implicit -- by default.)H          NOTE:  This may be erroneously reported if symbol substitutionB          is used for the logical name used to reference the file.1 ModificationseH      You  can  modify  or  "customize" DCL_CHECK by editing the commandH      procedure, DCL_CHECK.COM. However, DCL_CHECK.COM is a "compressed"H      version  of  the  procedure.   To  save  disk  space  and  improveH      performance,  all  comments  and  unnecessary  spacing  have  beenH      removed  from  DCL_CHECK.COM.  This makes it difficult to read and      understand the procedure.tH      It  should  be  much easier to edit the file DCL_CHECK.COM_SOURCE,H      which contains commands  and  is  formatted  to  facilitate  humanH      reading.   You  can recreate a "compressed" version of the command&      procedure by using DCL_DIET.COM.2 HelpH      DCL_CHECK.HLB   is   a   standard  help  library.   You  can  edit'      DCL_CHECK.HLP and use the commandi5          $ LIBRARY /CREATE /HELP DCL_CHECK DCL_CHECK&      to create the new DCL_CHECK.HLB.
1 DCL_DIETH      DCL_DIET  is  a  command  procedure  that  accepts  as input a DCLH      command procedure file.  It compresses, or "diets",  the  file  byH      removing  comments and unnecessary spaces.  The compressed version      is created as output. A      The smaller size of the compressed file has two advantages:i3          o It takes up less space on disk or tape.t          o It executes faster:              -- especially for larger command procedures.D      DCL_DIET is not part of DCL_CHECK.  It is provided separately.      See also DCLDIET (no "_")e2 Installation&      To install DCL_DIET put the file          DCL_DIET.COMH      wherever  you  want  it.  You then execute DCL_DIET as an indirect?      command procedure, supplying the file to be dieted as P1.       For example:.          $ @SYS$LOGIN:DCL_DIET MY_COMMAND.COMH      DCL_DIET.COM  is  provided in "dieted" form.  You may also wish toH      have the file DCL_DIET.COM_SOURCE available;  this  is  the  fully)      commented version of the procedure.u	1 DCLDIET H      DCLDIET is a utility used within OpenVMS engineering to "diet" DCLC      command procedure files.  It functions similarly to DCL_DIET. "      See also DCL_DIET (with "_")1 DIET!      See DCLDIET and/or DCL_DIET 1 Installation1      To install DCL_CHECK you must put the filesr          DCL_CHECK.COM and-          DCL_CHECK.HLBsH      into the same directory. You then execute DCL_CHECK as an indirectB      command procedure.  See "Format" for additional information.H      DCL_CHECK.COM  is provided in "dieted" form.  You may also wish toH      have the file DCL_CHECK.COM_SOURCE available; this  is  the  fully)      commented version of the procedure.o