z/OS TSO/E Programming Services
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


Delimiter-dependent operands

z/OS TSO/E Programming Services
SA32-0973-00

Those operands that include delimiters as part of their definition are called delimiter-dependent operands. Table 1 shows the delimiter-dependent syntaxes that the Parse Service Routine recognizes and the macro instruction that is used to specify each type.

Table 1. Delimiter-dependent operands
Operand macro instruction used to describe operand

DELIMITER
STRING
VALUE
ADDRESS
PSTRING
USERID
UID2PSWD
DSNAME
DSTHING
QSTRING
SPACE
JOBNAME

IKJPOSIT

CONSTANT
VARIABLE
STATEMENT NUMBER

IKJTERM
EXPRESSION IKJOPER
RESERVED WORD IKJRSVWD

HEX
CHAR
INTEG

IKJIDENT
DELIMITER
A delimiter can be any character other than an asterisk, left parenthesis, right parenthesis, semicolon, blank, comma, tab, carrier return, digit, shift-out character (X'0E'), or shift-in character (X'0F'). A self-defining delimiter character is represented in this discussion by the symbol #. The delimiter operand is used only in conjunction with the string operand.
STRING
A string is the group of characters between two alike self-defining delimiter characters, such as
#string#
or, the group of characters between a self-defining delimiter character and the end of a logical line, such as
#string
The same self-defining delimiter character can be used to delimit two contiguous strings, such as
#string#string#
or
#string#string

A null string, which indicates that a positional operand has not been entered, is defined as two contiguous delimiters or a delimiter and the end of the logical line. If the missing string is a required operand, the null string must be entered as two contiguous delimiters. Note that a string received from a prompt or a default must not include the delimiters. See Acceptance of double-byte character set data for information about using double-byte character set data in a self-delimiting string.

VALUE
A value consists of a character followed by a string enclosed in apostrophes, such as
X'string'

The character must be alphabetic or one of the special characters $, #, @. The string can be of any length and can consist of any combination of enterable characters. If the ending apostrophe is omitted, the Parse Service Routine assumes that the string ends at the end of the logical line. If the Parse Service Routine encounters two successive apostrophes, it assumes they are part of the string and continues to scan for a single ending apostrophe. The Parse Service Routine always translates the character preceding the first apostrophe to uppercase. The value is considered missing if the first character is not alphabetic or one of the special characters $, #, @, or if the second character is not an apostrophe. See Acceptance of double-byte character set data for information about using double-byte character set data in a value string.

ADDRESS
There are several forms of the ADDRESS operand. Note that blanks are not allowed within any form of the ADDRESS operand.
Absolute address
consists of from one to six hexadecimal digits followed by a period, or, in extended mode, from one to eight hexadecimal digits followed by a period. An extended absolute address must not exceed the address represented by the hexadecimal value X'7FFFFFFF'. (For more information on extended addressing, see the description of the EXTENDED operand in Using IKJPOSIT to describe a delimiter-dependent positional operand.)
Relative address
consists of from one to six hexadecimal digits preceded by a plus sign, or, in extended mode, from one to eight hexadecimal digits preceded by a plus sign.
General register address
consists of a decimal integer in the range 0 to 15 followed by the letter R. R can be entered in either uppercase or lowercase.
Floating-point register address
consists of an even decimal integer in the range 0 to 6 followed by the letter D (for double precision) or E (for single precision). The letter E or D can be entered in either uppercase or lowercase.
Vector register address
is of the form:
 register-number {V} (element-number)
                 {W}
register-number
consists of a decimal integer in the range 0-15, if V is specified. If W is specified, the register number must be an even decimal integer in the range 0-14.
V
indicates single precision. V can be entered in either uppercase or lowercase.
W
indicates double precision. W can be entered in either uppercase or lowercase.
element-number
consists of a decimal integer in the range 0 through one less than the section size, or an asterisk, (*). Asterisk indicates that all elements of the vector register are considered.

The section size, which is the number of elements in a vector register, is dependent upon the model of the CPU that has the vector facility installed. See System/370 Vector Operations for information on the vector facility.

Vector mask register address
consists of the decimal integer 0 followed by the letter M. M can be entered in either uppercase or lowercase.
Access register address
consists of a decimal integer in the range 0 to 15 followed by the letter A. A can be entered in either uppercase or lowercase.
Symbolic address
consists of any combination of alphanumeric characters and the break character, and may be up to 32 characters long. The first character must be either alphabetic or one of the special characters $, #, @.
Qualified address
has one of the following formats:
  1. module_name.entry_name.relative_address
  2. module_name.entry_name
  3. module_name.entry_name.symbolic_address
  4. .entry_name.symbolic_address
  5. .entry_name.relative_address
  6. .entry_name
module_name
any combination of one to eight alphanumeric characters, where the first is an alphabetic character or one of the special characters $, #, @
entry_name
same syntax as a module_name, and always preceded by a period
symbolic_address
syntax as defined above, and always preceded by a period
relative_address
syntax as defined above, and always preceded by a period.

The user can qualify symbolic or relative addresses to indicate that they apply to a particular module and CSECT as in formats 1 to 3. However, if the address applies to the currently active module, it is not necessary to specify module_name, as in formats 4 to 6.

Indirect address
is an absolute, relative, or symbolic address (or general register containing an address), followed by 1 to 255 indirection symbols (% or ?). When the EXTENDED keyword is specified on the IKJPOSIT macro, the user can specify the 31-bit indirection symbol, ?. The 24-bit indirection symbol, %, can also be specified. If EXTENDED is not specified, only the 24-bit indirection symbol can be used.
Note: In the following examples, hash marks indicate that the byte is not used to determine the 24-bit address.

Figure 1 shows an example of an indirect address that is made up of a relative address with one level of 24-bit indirect addressing.

Figure 1. Example of 24-Bit Indirect Addressing

The number of indirection symbols following the address indicates the In Figure 1, the data is at the location pointed to by bits 0-24 of relative address +A.

Figure 2 shows how the substitution of a 31-bit indirection symbol, ?, changes the result of the resolution of an indirect address. The example assumes that EXTENDED has been specified on IKJPOSIT.

Figure 2. Example of 31-Bit Indirect Addressing

Figure 3 shows an example of an indirect address in which 24- and 31-bit indirection symbols are combined. The example assumes that EXTENDED has been specified on IKJPOSIT.

In Figure 3, four levels of indirect addressing are processed to resolve the indirect address.

Figure 3. An Indirect Address with Mixed Indirection Symbols

Address expression
has one of two formats, depending on whether the EXTENDED keyword is specified on the IKJPOSIT macro.
  1. EXTENDED not specified:
    An address expression has the following format when EXTENDED has not been specified:
    address{±}expression_value[%…][+
    {±}expression_value [%…]]…
    address
    can be an absolute, symbolic, indirect, relative, or general register address. If a general register is specified, it must be followed by at least one indirection symbol.
    expression_value
    a plus or minus displacement from an address in storage, consisting of from one to six decimal or hexadecimal digits
    • Decimal displacement is indicated by an "N" or "n" following the offset. The absence of an "N" or "n" indicates hexadecimal displacement.
    • There is no limit to the number of expression values in an address expression.

    Each expression value can be followed by from one to 255 percent signs, one for each level of indirect addressing.

    For example, addr1+124n, an address expression in decimal format, indicates a location 124 decimal bytes beyond addr1. Another example, addr2-AC, is an address expression in hexadecimal format and indicates a location 172 decimal bytes before addr2.

    The processing of an address expression, 12R%%+4N%, involving 24-bit indirect addressing, is shown in Figure 4. The address in the expression is a general register address with two levels of indirect addressing. The result of the processing of this part of the address expression is location 1D0. The expression value indicates a displacement of four bytes beyond location 1D0 with one level of indirect addressing. The data, then, is at location 474.
    Figure 4. An Address Expression with 24-Bit Indirect Addressing

  2. EXTENDED specified:
    An address expression has the following format when EXTENDED has been specified:
                               [        ]+
                        [       ]
     address{±}expression_value[[%]     ][+
    {±}expression_value[[%]    ]]
                               [[&?] …+
    ][                   [[?] …]] …
    address
    can be an absolute, symbolic, indirect, relative, or general register address. If a general register is specified, it must be followed by at least one indirection symbol.
    expression_value
    a plus or minus displacement from an address in storage, consisting of a one- to ten-digit decimal number, or a one- to eight-digit hexadecimal number.
    • Decimal displacement is indicated by an "N" or "n" following the offset. The absence of an "N" or "n" indicates hexadecimal displacement.
    • There is no limit to the number of expression values in an address expression.

    Each expression value can be followed by from one to 255 indirection symbols (including any valid combination of question marks and percent signs), one for each level of indirect addressing.

    The processing of an address expression involving both 24- and 31-bit indirect addressing is shown in Figure 5.
    Figure 5. An Address Expression with Mixed Indirection Symbols

PSTRING
A parenthesized string is a string of characters enclosed within a set of parentheses, such as:
(string)

The string can consist of any combination of characters of any length, with one restriction; if it includes parentheses, they must be balanced. However, the enclosing right parenthesis of a PSTRING can be omitted if the string ends at the end of a logical line.

A null PSTRING is defined as a left parenthesis followed by either a right parenthesis or the end of a logical line. See Acceptance of double-byte character set data for information about using double-byte character set data in a parenthesized string.

USERID
A user ID consists of an identification optionally followed by a slash and a password. The format is:
identification[/password]
identification
can be any combination of alphanumeric characters up to seven characters in length, the first of which must be an alphabetic character or one of the special characters $, #, @.
password
can be any combination of alphanumeric characters up to eight characters in length. If delimiters are used, the password must be enclosed in quotes. If quotes are to be used in the password, two quotes must be entered consecutively. One of them will be eliminated by the Parse Service Routine.

Separators can be inserted between the identification and the slash, and between the slash and the password.

If just the identification is entered, the Parse Service Routine does not prompt for a password. If the identification is entered followed by a slash and no password, the Parse Service Routine prompts for a password. The password entered by the terminal user does not print at the terminal. The terminal user can reply to a prompt for password by entering either a password or a null line. If the user enters a null line, the Parse Service Routine builds the PDE and leaves the respective password field zero.

UID2PSWD
A user ID consists of an identification optionally followed by two passwords. The delimiter between the three values is a slash. The format is:
identification[/password1[/password2]]
identification
can be any combination of alphanumeric characters up to seven characters in length, the first of which must be an alphabetic character or one of the special characters $, #, @.
password1
can be any combination of alphanumeric characters up to eight characters in length. If delimiters are used, the password must be enclosed in quotes. If quotes are to be used in the password, two quotes must be entered consecutively. One of them will be eliminated by the Parse Service Routine.
password2
Same as password1.

Separators can be inserted between the identification and the slash, and between a slash and any of the passwords.

If just the identification is entered, the parse service routine does not prompt for a password.

If the identification is entered followed by a slash and no password1, the parse service routine prompts for password1. The password1 entered by the terminal user does not print at the terminal.

If password1 is entered followed by a slash and no password2, the parse service routine prompts for password2. The password2 entered by the terminal user does not print at the terminal.

The terminal user can reply to a prompt for a password by entering either a password or a null line. If the user enters a null line, the parse service routine builds the PDE and leaves both password fields zero.

IKJPOSIT generates a variable-length parameter control entry (PCE). Within the PCE, a field contains a hexadecimal number indicating the type of positional operand described by the PCE. For UID2PSWD, the hexadecimal number is C.

DSNAME
The data set name operand has three possible formats:
dsname [ (membername)] [/password]
[dsname] (membername) [password]
'dsname [ (membername)] ' [/password]
dsname
may be either a qualified or an unqualified name.

An unqualified name is any combination of alphanumeric characters up to eight characters in length, the first of which must be an alphabetic character or one of the special characters $, #, @.

A qualified name is made up of several unqualified names, each unqualified name separated by a period. A qualified name, including the periods, can be up to 44 characters in length.

membername
One to eight alphanumeric characters, the first of which must be an alphabetic character or one of the special characters $, #, @.

The Parse Service Routine considers the entire DSNAME operand missing if the first character scanned is not an apostrophe, an alphabetic character, a special character $, #, @, or a left parenthesis. If the VOLSER option is specified, the first character can be numeric.

If it is numeric, only six characters are accepted for VOLSER. VOLSER is valid only for DSNAME or DSTHING. If USID is specified, the Parse Service Routine will prefix all data set names not entered in quotes with the user identification contained in the user profile table (UPT). Note that the user identification is not necessarily the user ID but can be any dsname-prefix specified as parameter with the PROFILE PREFIX command.

If uppercase data set names are required, the ASIS operand should not be specified. Lowercase data set names are allowed as input by PARSE, but converted to uppercase when UPPERCASE is specified, either explicitly or by default. In order to disallow lowercase data set names as input, a validity check exit must be used.

If the slash and the password are not entered, the parse service routine does not prompt for the password. If the slash is entered and not the password, the Parse Service Routine prompts for the password. This ensures that the terminal user's reply does not print at the terminal.

DSTHING
A DSTHING is a dsname operand as previously defined except that an asterisk can be substituted for an unqualified name or for each qualifier of a qualified name. The parse service routine processes the asterisk as if it were a dsname. The asterisk is used to indicate that all data sets at that particular level are considered.
Note: If the first character of a dsname is an asterisk, the parse service routine will not prefix the USERID.
QSTRING
A quoted string is a string of characters enclosed within apostrophes, such as:
‘string’

The string can consist of a combination of characters, of any length, with one restriction: if the user wants to enter apostrophes within the string, two successive apostrophes must be entered for each single apostrophe desired. One of the apostrophes is removed by the Parse Service Routine.

The ending apostrophe is not required if the string ends at the end of the logical line.

A null quoted string is defined as two contiguous apostrophes or an apostrophe at the end of the logical line. See Acceptance of double-byte character set data for information about using double-byte character set data in a quoted string.

SPACE
Space is a special purpose operand; it allows a string operand that directly follows a command name to be entered without a preceding self- defining delimiter character. The space operand must always be followed by a string operand. If the delimiter of the command name is a tab, the tab is the first character of the string. The string always ends at the end of the logical line.
JOBNAME
The jobname can have an optional job identifier. Each job identifier is a maximum of eight alphanumeric characters, the first of which must be an alphabetic character or one of the special characters $, #, @. There is no separator character between the jobname and job identifier. The syntax is jobname(jobid).
CONSTANT
There are several forms of the constant operand.
Fixed-point numeric literal
consists of a string of digits (0 through 9) preceded optionally by a sign (+ or -), such as:
+1234.43

This literal can contain a decimal point anywhere in the string except as the rightmost character. The total number of digits cannot exceed 18. Embedded blanks are not allowed.

Floating-point numeric literal
takes the following form:
+1234.56E+10

This literal is a string of digits (0 through 9) preceded optionally by a sign (+ or -) and must contain a decimal point. This is immediately followed by the letter E and then a string of digits (0 through 9) preceded optionally by a sign (+ or -). Embedded blanks are not allowed. The string of digits preceding the letter E cannot be greater than 16 and the string following E cannot be greater than 2.

Non-numeric literal
consists of a string of characters from the EBCDIC character set, excluding the apostrophe, and enclosed in apostrophes, entered as:
‘numbers (1234567890) and letters are ok’

The length of the string excluding apostrophes can be from 1 to 120 characters in length.

Figurative constant
is one of a set of reserved words supplied by the caller of the Parse Service Routine such as:
test123

A figurative constant consists of a string of characters up to 255 in length. Embedded blanks are not allowed. All characters of the EBCDIC character set are allowed except the blank, comma, tab, semicolon, and carrier return, however, the first operand must be alphabetic.

See Acceptance of double-byte character set data for information about using double-byte character set data in a quoted character constant.

VARIABLE
The following is the form of the variable operand.
  [program_id.]data_name[{OF}qualification]
                        [{IN}             ]
                        [ (subscript)     ]
program_id
consists of the first eight characters of a program identifier followed by a period. The first character must be alphabetic (A through Z) and the remaining characters must be alphabetic or numeric (0 through 9).
data_name
consists of a maximum of 30 characters of the following types: alphabetic (A through Z), numeric (0 through 9), and hyphen (-).
An example is:
mydataset-123
The data-name cannot begin or end with a hyphen and must contain at least one alphabetic character.
here55.mydataset-123
qualification
is applied by placing one or more data-names (preceded by the qualifiers IN or OF) after a data-name. An example is:
mydataset-123 of yourdataset-456

The number of qualifiers that can be entered for a data-name is limited to 255.

subscript
consists of a data-name with subscripts enclosed in parentheses following the data-name entered as:
yourdataset-456 (mydataset-123)

A separator between the data-name and the subscript is optional. Subscripts are a list of constants or variables.

The number of subscripts that can be entered for a data-name is limited to 3, entered as:
here55 (abc def h15)

A separator character between subscripts is required.

STATEMENT NUMBER
The following is the form of a statement number:
[program_id.]line_number[.verb_number]
An example is:
here.23.7
program_id
consists of the first eight characters of a program identifier followed by a period. The first character must be alphabetic (A through Z) and the remaining characters must be alphanumeric (A through Z or 0 through 9).
line_number
consists of a string of digits (0 through 9) and cannot exceed a length of six digits.
verb_number
consists of one digit (0 through 9) that is preceded by a period.

Embedded blanks are not allowed in a statement number.

EXPRESSION
An expression takes the form:
(operand1 operator operand2)
The operator in the expression shows a relationship between the operands, such as:
(abc equals 123)

An expression must be enclosed in parentheses. An expression is defined by the IKJOPER macro. The operands are defined by the IKJTERM macro, and the operator is defined by the IKJRSVWD macro instruction.

RESERVED WORD
has three uses depending on the presence of operands on the IKJRSVWD macro instruction. The uses are:
  • When used with the RSVWD keyword of the IKJTERM macro instruction, the IKJRSVWD macro identifies the beginning of a list of reserved words, any one of which can be entered as a constant.
  • When used with the RSVWD keyword of the IKJOPER macro instruction, the IKJRSVWD macro identifies the beginning of a list of reserved words, any one of which can be an operator in an expression.
  • When used by itself, the IKJRSVWD macro instruction defines a positional reserved word operand.

The IKJRSVWD macro instruction is followed by a list of IKJNAME macros that contain all of the possible reserved words used as figurative constants or operators.

HEX
A hexadecimal value is any quantity of the form X'nn', ‘ABC’ (quoted string), or any non-quoted character string where a separator or delimiter indicates the end. See Acceptance of double-byte character set data for information about using double-byte character set data in a quoted string of characters.
CHAR
A character string is any data in the form of a quoted or non-quoted string. See Acceptance of double-byte character set data for information about using double-byte character set data in a quoted string of characters.
INTEG
An integer is a numeric quantity in one of the following forms:
  • (X'nn') - where n is a valid hexadecimal digit (A-F, 0-9), and there is a maximum of 8 digits.
  • (B'mm') - where m is a valid binary bit (0-1), and there is a maximum of 32 digits.
  • dddddd - where d is a decimal digit 0-9, and there is a maximum of 10 digits.

The Parse Service Routine converts an integer operand into its equivalent binary value. The maximum decimal value for INTEG is 2147843647.

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014