All control cards, except comment control cards, follow the same syntactic rules:

    1. Control card starts with the string "//" in column 1.
    2. Control cards can span any number of physical records: continuation cards can be defined by placing a comma at the end of the first physical line, and having the continuation card start with the string "// " (note the blank) in column 1. This process can be repeated any number of times. No blank is inserted between the end of the first card and the beginning of the continuation card; however, anything before the comma is kept. For instance,

      No space before comma:

      //card1 DD "Some very long text which,
      // requires a continuation card"
      --> "Some very long text whichrequires a continuation card"

      Space before comma:

      //card1 DD "Some very long text which ,
      // requires a continuation card"
      --> "Some very long text which requires a continuation card"

      Since this approach makes it impossible to "cut" a line which ends in a large string of blanks, an alternate method was designed for blanks-sensitive cutting. If the continuation card starts with the string "//+ " in column 1 instead of just "// ", the continuation card is not stripped of leading blanks and data from columns 5-80 is appended to the first card. Example:

      //card1 DD "Some very long text which,
      //+ requires a continuation card"
      --> "Some very long text which requires a continuation card"
    3. Control cards can contain a label of any length starting in column 3. This label is translated to uppercase. If the label is omitted, there must be a blank in column 3. The label can contain any character, except blank and the slash sign ("/").
    4. The label is followed by at least one blank. The next word in the card is the "card name", which is translated to uppercase.
    5. Arguments can be specified after the "card name", and must be separated from it by at least one blank. Arguments are separated by commas, and there must not be any blank before or after the comma. There are two categories of arguments:
      • Positional arguments, which must appear in the correct order (which will usually depend on action being performed).
      • Keywords, of the form "name=data". They can appear in any order and can be freely intermixed with positional keywords. They do not affect the sequence order of positional keywords. Keyword names are translated to uppercase, and can contain any character except blank, comma, double-quote or equal sign.

        For example,

        //JOB1 JOB XDZ,ECHO=NO,FRECP11,PW=EMERALD
        //JOB1 JOB PW=EMERALD,XDZ,FRECP11,ECHO=NO
        //JOB1 JOB Echo=NO,pW=EMERALD,XDZ,FRECP11

        are three different wordings of the same arguments string.

        There are furthermore two different forms of "data" for arguments:

        Quoted data: in that case the data is enclosed in double quotes and can contain one or more blank delimited words as well as leading or trailing blanks. Quoted data is case-sensitive, and can contain any character except a double-quote.

        Non-quoted data: in that case the data consists of a single word (i.e., blanks cannot appear in the data), which is translated to uppercase. Non-quoted data cannot contain blanks, commas or double-quotes.

        In the above example, specifying 'Echo=No' is functionally identical to 'ECHO=NO', while 'Echo="No"' would leave the argument in mixed case. Quoted data is used for list of recipients, full-names, etc.

        Comments can be included at the end of the card, and must be separated from the arguments by at least one blank. If you did not specify any argument string, and still want to place comments at the end of the control card, you must specify a null argument string before the comments by putting a ", " before the comment text, e.g.:

        //JOB1 JOB , These are comments
        //JOB1 JOB XDZ,FRECP11 These are comments too