z/OS ISPF Dialog Developer's Guide and Reference
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


The VER statement

z/OS ISPF Dialog Developer's Guide and Reference
SC19-3619-00

Use the verify statement, VER, to check that the current value of a variable meets some criteria. Typically, it is used in the processing section to verify the data stored in a dialog variable. Verification of an input variable value is performed after the value has been stored in the variable pool. The current rules for padding, justification, and VDEFINE apply to the value stored in the pool. The syntax shown here and the associated text describe the types of verification provided by ISPF.

The syntax of the VER statement supports the VSYM built-in function in the variable parameter. In addition, the verification processing for the types DSNAME, DSNAMEF, DSNAMEFM, DSNAMEPQ, and DDSNAMEQ resolves system symbols within the variable name and updates the variable in the panel field. Therefore, there is no need to include VSYM within the variable parameter on the VER statement when you specify any one of these DSNAME types.

Example:
VER(VSYM(X),NAME,MSG=ABC123)
Read syntax diagramSkip visual syntax diagram
>>-VER--(variable--+----------+--------------------------------->
                   '-NONBLANK-'   

>--+-----------------------------------------+------------------>
   +-ALPHA-----------------------------------+   
   +-ALPHAB----------------------------------+   
   +-BIT-------------------------------------+   
   +-DBCS------------------------------------+   
   +-DSNAME----------------------------------+   
   +-DSNAMEF---------------------------------+   
   +-DSNAMEFM--------------------------------+   
   +-DSNAMEPQ--------------------------------+   
   +-DSNAMEQ---------------------------------+   
   +-EBCDIC----------------------------------+   
   +-ENUM------------------------------------+   
   +-FILEID----------------------------------+   
   +-HEX-------------------------------------+   
   +-IDATE-----------------------------------+   
   +-INCLUDE-+--------+-,value1-+---------+--+   
   |         '-,IMBLK-'         '-,value2-'  |   
   +-IPADDR4---------------------------------+   
   +-ITIME-----------------------------------+   
   +-JDATE-----------------------------------+   
   +-JSTD------------------------------------+   
   +-LEN,relational-operator,expected-length-+   
   |       .-------.                         |   
   |       V       |                         |   
   +-LIST,---value-+-------------------------+   
   +-LISTV,varlist---------------------------+   
   +-LISTVX,varlist--------------------------+   
   |        .-,-----.                        |   
   |        V       |                        |   
   +-LISTX,---value-+------------------------+   
   +-MIX-------------------------------------+   
   +-NAME------------------------------------+   
   +-NAMEF-----------------------------------+   
   +-NUM-------------------------------------+   
   +-PICT,string-----------------------------+   
   +-PICTCN,mask-character,field-mask,string-+   
   +-RANGE,lower,upper-----------------------+   
   +-STDDATE---------------------------------+   
   '-STDTIME---------------------------------'   

>--+------------+--)-------------------------------------------><
   '-,MSG=value-'      

where:
variable
Name of the variable to be checked.
NONBLANK
Optional keyword. Specifies that the variable must contain a value and not all blanks. NONBLANK, or NB, can be specified with another type verification, such as ALPHA, NUM, or HEX. Do this by specifying the NONBLANK keyword after the variable name but before the other keyword. Example:
VER (&A,NB,PICT,NNN-NNNN)
is equivalent to:
VER (&A,NONBLANK)
VER (&A,PICT,NNN-NNNN)

If the variable does not meet the verification criteria, ISPF displays a message. The message can be specified in the MSG=value parameter, where value is a message ID. If no message is specified, an ISPF-supplied message is displayed, based on the type of verification. Even if a VER fails, processing of the panel's )PROC and )REINIT statements is performed.

keyword
Specifies the verification criteria. One of these keywords must be specified:
ALPHA
The variable must contain only lowercase or uppercase alphabetic characters (A-Z, a-z, #, $, or @). Blanks are not allowed.
ALPHAB
The variable must contain only lowercase or uppercase alphabetic characters (A-Z or a-z). Blanks are not allowed.
BIT
The variable must contain all zeros and ones.
DBCS
The variable must contain only valid DBCS characters.
DSNAME
The variable must contain a valid TSO data set name. A data set name qualifier must begin with an alphabetic character (A-Z, $, @, or #). The remaining characters must be either uppercase alphanumeric or a hyphen (-). A period is used to connect each qualifier in the data set name.
ISPF first determines if the TSO/E NOPREFIX PROFILE option is in use. If it is, ISPF does use a prefix in the calculation of the data set length. A maximum of 44 characters can be entered for a data set name, if that data set name is enclosed in quotes. If the TSO/E NOPREFIX PROFILE option is in use, a maximum of 44 characters can be entered for a data set name when it is not enclosed within quotes. If the TSO/E NOPREFIX PROFILE option is not in use, a maximum of 42 characters can be entered for a data set name, not enclosed in quotes. ISPF uses the minimum data set prefix of two characters (one character and a period separator) during its calculation of the data set name length.
Note: The verification processing for DSNAME resolves system symbols within the variable name and updates the variable in the panel field. Therefore, when you specify the verification type DSNAME, there is no need to include VSYM within the variable parameter on the VER statement.
DSNAMEF

This parameter provides the same function as DSNAME with the additional feature that asterisks (*) and percent signs (%) can be used within the qualifiers. You can use DSNAMEF to filter a list of data sets.

A single asterisk within a qualifier indicates that zero or more characters can occupy that position. Consecutive asterisks are not valid within a qualifier.

A single percent sign indicates that any one alphanumeric or national character can occupy that position. One to eight percent signs can be specified in each qualifier.

Note: The verification processing for DSNAMEF resolves system symbols within the variable name and updates the variable in the panel field. Therefore, when you specify the verification type DSNAMEF, there is no need to include VSYM within the variable parameter on the VER statement.
DSNAMEFM
This parameter provides the same function as DSNAMEF, but asterisks (*) and percent signs (%) can only be used within a member name, not within the qualifiers. You can use DSNAMEFM to filter members in a data set.

A single asterisk within a member name indicates that zero or more characters can occupy that position.

A single percent sign indicates that any one alphanumeric or national character can occupy that position. One to eight percent signs can be specified in each member name.

Note: The verification processing for DSNAMEFM resolves system symbols within the variable name and updates the variable in the panel field. Therefore, when you specify the verification type DSNAMEFM, there is no need to include VSYM within the variable parameter on the VER statement.
DSNAMEPQ

This parameter provides the same function as DSNAMEQ, except if the TSO data set name starts with a parenthesis and no closing parenthesis is found, DSNAMEPQ adds the closing parenthesis and the end quote.

Note: The verification processing for DSNAMEPQ resolves system symbols within the variable name and updates the variable in the panel field. Therefore, when you specify the verification type DSNAMEPQ, there is no need to include VSYM within the variable parameter on the VER statement.
DSNAMEQ
This parameter provides the same function as DSNAME with the additional feature that if the TSO data set name starts with a quotation mark and no ending quotation mark is found, DSNAMEQ adds the ending quotation mark for you.
Note: The verification processing for DSNAMEQ resolves system symbols within the variable name and updates the variable in the panel field. Therefore, when you specify the verification type DSNAMEQ, there is no need to include VSYM within the variable parameter on the VER statement.
EBCDIC
The variable must contain only valid EBCDIC characters.
ENUM
The variable can contain, in addition to numeric characters:
  • Plus sign (+)
  • Negative number indicators
  • Delimiter symbols
  • Decimal symbol (.)
  • Certain national language decimal symbol (,).
ISPF ignores leading blanks. Blanks between characters (except the French language delimiter) and trailing blanks are not allowed. This includes blanks between leading or trailing signs and the adjacent character. Use of any characters other than those listed results in ISPF issuing an appropriate error message.

The ENUM parameter allows verification of a numeric variable that has been expressed in a more natural style. ISPF verifies variable values for correct decimal and comma notation plus correct sign placement.

Negative number indicators include a leading or trailing minus sign and a number enclosed by parentheses. The decimal and delimiter symbols can vary according to national language. The negative number indicators are common to all national languages.

Use of delimiter symbols is optional. However, if they are used, ISPF validates the delimiter symbols beginning at the left-most symbol that it finds in the variable being verified. In case of an invalid placement or omission of a delimiter symbol, ISPF issues an appropriate error message.

Use of the decimal symbol is optional. A maximum of one decimal symbol is allowed. If used, the decimal must be correctly placed in relation to any delimiter symbols used. Delimiter symbols are not allowed to the right of a decimal symbol. In case of an invalid placement of a decimal symbol, ISPF issues an appropriate error message. Table 1 illustrates decimal and delimiter symbol use for each of the national languages supported by ISPF.
Table 1. Decimal and delimiter symbols
Language Whole Fractional
Danish 999,999.88 0.789
English 999,999.88 0.789
French 999.999,88 0,789
German 999.999,88 0,789
Italian 999.999,88 0,789
Japanese 999,999.88 0.789
Korean 999,999.88 0.789
Portuguese 999.999,88 0,789
Spanish 999.999,88 0,789
Traditional Chinese 999,999.88 0.789
Simplified Chinese 999,999.88 0.789
Swiss-German 999.999,88 0,789

The variable being verified can contain leading blanks. Any trailing blanks in the variable's value in the variable pool cause a verify error condition. Trailing blanks result from defining the variable by using the VDEFINE service with the NOBSCAN option specified. These trailing blanks are not overlaid when the variable is updated by a panel operation if the corresponding panel field has a justification attribute of LEFT or ASIS.

Note: ISPF treats fields containing the nonnumeric characters allowed when using VER ENUM as character fields. To use these fields in numeric operations, an installation can need to provide a routine to convert the fields from character to numeric data. The ISPF VDEFINE exit routine is one option available for incorporating these conversion routines.
Table 2 shows examples of results when verifying variable values (English) with the ENUM keyword specified.
Table 2. Verifying variable values with the ENUM keyword specified
Value Results Reason
+2574 Valid Leading plus sign is allowed
-2574 Valid Leading minus sign allowed
25.74 Valid Decimal allowed
.2574 Valid Leading decimal allowed
2,574 Valid Delimiter character allowed (but not required)
(2,574) Valid Alternate method of showing a negative value allowed
2574- Valid Trailing minus sign allowed
2574+ Invalid Trailing plus sign not allowed
-2574- Invalid Double negative indication not allowed
( 2,574 ) Invalid Two errors; blanks not allowed between either sign indicator and the adjacent character
35,543785 Invalid If used, the delimiter character must be inserted at every appropriate point (35,543,785)
4,5932.673 Invalid Delimiter must be positioned in relation to decimal (45,932.673)
33.452.78 Invalid Only one decimal allowed in numeric field
8.364,798 Invalid Delimiter not allowed to right of decimal
FILEID
The variable must contain a valid file ID in CMS syntax. The file name and file type, if given, must be from 1-8 alphanumeric characters, including A-Z, 0-9, $, #, @, +, - (hyphen), : (colon), and _ (underscore). The filemode must be a single letter (A-Z), optionally followed by a single digit (0-9). In addition, one or more fields of the fileid can be an asterisk (*) or a string of characters followed by an asterisk. For example:
tr* status
All files having a file name beginning with the letters tr and having a file type of status.
* exec
All files having a file type of exec.
HEX
The variable must contain only hexadecimal characters (0-9, A-F, a-f).
IDATE
The international date (IDATE) format contains 8 characters, including the national language date delimiter. The format represents a date expressed in a 2-digit year (YY), month (MM), and day (DD). Valid values for YY are 00-99. Valid values for MM are 01-12. Valid values for DD are 01-31. ISPF verifies for a valid date and national language date delimiter. For the United States, the format is YY/MM/DD.
INCLUDE
Defines a list of value parameters, each specifying the character types a verify field is allowed to contain.
IMBLK
Optional positional subparameter. Indicates that the variable is allowed to contain embedded blanks. Any leading or trailing blank characters are ignored.
value1,value2
Specifies ALPHA, ALPHAB, or NUM; at least one value must be specified. The specification of two different values are combined and indicate to ISPF that the field can contain data of either type. ISPF issues an error message if more than two values are specified.
Example:
)PROC
   VER (&vara,NB,INCLUDE,IMBLK,ALPHAB,NUM,MSG=NSL001)
   VER (&varb,NB,INCLUDE,IMBLK,NUM,MSG=NSL002)
   VER (&varc,NB,INCLUDE,ALPHA,NUM,MSG=NSL003)
⋮

This example illustrates that the variable vara can contain any alphabetic (A-Z or a-z) or numeric character as well as embedded blanks; varb can contain numeric characters only and embedded blanks; and variable varc can only contain alphabetic characters (A-Z, a-z, #, $, or @) and numeric characters (0-9), but no embedded blanks.

IPADDR4
The variable must contain a valid IP (Internet Protocol) address in dotted decimal notation (as the decimal representation of four 8-bit values, concatenated with dots). For example, 128.2.7.9 is a valid IP version 4 address. The first octet (8-bit value) can range from 0 to 223 in decimal notation. The remaining three octets of the IP version 4 address can range from 0 to 255 in decimal notation. IPADDR4 verifies standard IP version 4 IP addresses. IPADDR4 does not support Classless Inter-Domain Routing (CIDR) notation.
ITIME
The international date (ITIME) format contains 5 characters, including the national language time delimiter. The format represents a date expressed in a 2-digit hour (HH), and a 2-digit minute (MM). Valid values for HH are 00-23. Valid values for MM are 00-59. For the United States, the format is HH:MM.
JDATE
The Julian date (JDATE) format contains 6 characters, including the period (.) delimiter. The format represents a date expressed in a 2-digit year (YY), and a 3-digit day of the year (DDD). Valid values for YY are 00-99. Valid values for DDD are 001-365 (or 001-366 for leap years). The format is YY.DDD.
JSTD
The Julian standard date (JSTD) format contains 8 characters, including the period (.) delimiter. The format represents a date expressed in a 4-digit year (YYYY), and a 3-digit day of the year (DDD). Valid values for YYYY are 0000-9999. Valid values for DDD are 001-365 (or 001-366 for leap years). The format is YYYY.DDD.
LEN,relational-operator,expected-length
The length of the variable (number of characters) must satisfy the condition expressed by the relational operator and expected length.

You can use the LEN function in a panel's )INIT, )REINIT, or )PROC section to verify the number of characters (bytes) in a variable that is currently residing in the variable pool.

For DBCS character strings the number of bytes in the string is twice the number of characters.
relational-operator
Valid relational operators are:
= or EQ
Equal to
< or LT
Less than
> or GT
Greater than
<= or LE
Less than or equal
>= or GE
Greater than or equal
¬= or NE
Not equal
¬> or NG
Not greater than
¬< or NL
Not less than.
You can specify the relational operator either as a special symbol (=, <, and so forth) or as a character symbol (EQ, LT, and so forth) expressed in uppercase. A relational operator can be expressed either as a literal value (remember to enclose special symbol values in quotes) or as a dialog variable containing the value.
expected-length
The expected-length operand is a positive number having a maximum of 5 characters, with which ISPF compares the number of characters in the variable data. Like the relational operator, the expected-length operand can be expressed as a literal value or as a dialog variable containing the value.
Example:
VER (&NAME,LEN,‘<=’,8)
This statement verifies that the number of characters defining the value of variable &NAME is less than or equal to 8.
Example:
VER (&NAME,LEN,NG,&SIZE)
This statement verifies that the number of characters defining the value of variable &NAME is not greater than the value of dialog variable &SIZE

When input fields are stored in their corresponding dialog variables, any keyed leading or trailing pad characters associated with right or left justification of the variable field are deleted before being stored.

The length of a variable, used by ISPF for comparison, is the total number of characters in the variable as it is currently stored in the variable pool. Thus, for a variable created using the VDEFINE service with NOBSCAN specified, any trailing blanks are included in the length value used for comparison.

If a variable has been defined using the VDEFINE service but currently has no value, ISPF uses a length value of zero for comparison.

LIST,value1,value2, ...
The variable must contain one of the listed values. The maximum number of listed values allowed is 100.
LISTV,varlist
Allows the use of a variable containing a list of values to be used for variable field verification.
varlist
When defined within the panel, this is the name of a variable, preceded by an &, that contains a list of values that will be compared to the value contained in the verify variable. The varlist variable can contain up to 100 values. Each value in the varlist variable must be delimited by a comma or at least one blank. A value in the varlist variable containing any of these special characters should be enclosed in single quotes (' '):

Blank < ( + | ) ; ¬ - , > : =

To specify the ampersand character in a value contained in the varlist variable, or a period in a value contained in the varlist variable when it immediately follows a dialog variable name, you must double these characters. To specify the single quote character in a value contained in the varlist variable, use two single quote characters enclosed within single quotes ('').

If the varlist is set in the dialog, use the notation that is correct for the programming language used to code the dialog.

Example:
)PROC
⋮
   VER (&areacode,NONBLANK,LISTV,&varlist,MSG=NSL011)
⋮
The variable specified in the VER LISTV variable parameter must be set before being referenced in the statement. (The variable used in the previous example could have been assigned these values in the )INIT section of the panel definition.)
      &varlist ='919 914 212'
Note: To have quotes as part of an assignment, you must double the number of quotes used in each previous layer. For example:
 &list1 = ‘one o‘‘ne‘ yields one o‘ne
 &list2 = ‘two t‘‘‘‘wo‘ yields two t‘‘wo
LISTVX,varlist
The LISTVX ("varlist exclude") keyword enables you to specify a variable containing a list of values that the field variable must not contain. If LISTVX is used, the keyword NONBLANK is implied. The varlist follows the same rules as the varlist for LISTV.
LISTX,value1,value2,...
The LISTX ("list exclude") keyword enables you to list values that the field variable must not contain. If LISTX is used, the keyword NONBLANK is implied. The maximum number of listed values allowed is 100.
MIX
The variable must contain all valid DBCS, EBCDIC, shift-in, and shift-out characters.
NAME
The variable must contain a valid name, following the rules of member names, up to eight alphanumeric characters (A-Z, #, $, @, 0-9). It can also contain X'C0' (that is, a '{' for a 037 code page), but not as the first character. The first character must be alphabetic (A-Z, $, @, or #).
NAMEF

This parameter provides the same function as NAME with the additional feature that asterisks (*) and percent signs (%) can be used within the qualifiers. You can use DSNAMEF to filter a list of data sets.

A single asterisk within a qualifier indicates that zero or more characters can occupy that position. Consecutive asterisks are not valid within a qualifier.

A single percent sign indicates that any one alphanumeric or national character can occupy that position. One to eight percent signs can be specified in each qualifier.

NUM
The variable must contain all numeric characters (0-9). However, leading blanks are acceptable.
PICT,string
The variable must contain characters that match the corresponding type of character in the picture string. The string parameter can be composed of these characters:
C
any character
A
any alphabetic character (A-Z, a-z, #, $, @)
N
any numeric character (0-9)
9
any numeric character (same as N)
X
any hexadecimal character (0-9, A-F, a-f)
In addition, the string can contain any special characters that represent themselves. For example:
VER (xxx,PICT,‘A/NNN’)

In this example, the value must start with an alphabetic character, followed by a slash, followed by 3 numeric characters. The length of the variable value and the picture string must be the same. Trailing blanks are not included.

PICTCN,mask-character,field-mask,string
The VER statement keyword PICTCN, with its three parameters, enables you to check a variable for specific constants within the variable.
VER (variable,PICTCN,mask-character,field-mask,string)
variable
Name of the variable to be checked.
mask-character
Any special character that represents itself. If you select one of these special characters as a mask-character, the mask-character and the field-mask containing the mask-character must be enclosed in quotes:
¬
'not' symbol
=
equal sign
.
period
>
greater than symbol
<
less than symbol
)
right parenthesis
(
left parenthesis
single quote
Note: The mask-character cannot be one of the picture string characters (C, A, N, 9, X, c, a, n, x).
field-mask
A combination of constants and the mask-character. The field-mask is used to audit the string. For example, your mask-character is a slash mark (/) and the constants are V, R, and M in the positions shown: 'V//R//M//'. A single quote can be used as a constant but avoid using a mask-character that must be enclosed in single quotes when a single quote is a constant.
string
A combination of constants and picture string characters. The picture string characters can be:
C
any character
A
any alphabetic character (A-Z, a-z, #, $, @)
N
any numeric character (0-9)
9
any numeric character (same as N)
X
any hexadecimal character (0-9, A-F, a-f)

The picture string characters must be in the positions indicated by the mask-character in the field-mask parameter. For example, 'VNNRNNMNN'.

The three parameters mask-character, field-mask, and string can be dialog variables.

Here are some examples:

In this VER PICTCN statement the mask-character is the not symbol (¬), the constants are V,R, and M. The picture string characters are N (any numeric character 0-9). If fld1 = V10R20M00 it passes the verification. If fld1 = V10R20M0Y it fails because Y is not a numeric character.
VER (&fld1,PICTCN,'¬','V¬¬R¬¬M¬¬',VNNRNNMNN)
In this VER PICTCN statement the mask-character is the asterisk (*), the constants are O and S. The picture string characters are N (any numeric character 0-9) and A (any alphabetic character A-Z, a-z,#,$,@). If fld1 = OS390R8 it passes verification. If fld1 = OS39018 it fails because 1 is not an alphabetic character.
VER (&fld1,PICTCN,*,OS*****,OSNNNAN)
RANGE,lower,upper
The variable must contain all numeric characters (0-9). It can also contain a leading plus (+) or minus ( -). Its value must fall within the specified lower and upper limits, which can be either positive or negative. The length of the specified variable is limited to 16 digits, in addition to the plus or minus sign. Further, the lower and upper parameters can consist of no more than 16 digits each, in addition to the plus or minus sign, if used. Any characters in excess of the 16 allowed are truncated.
STDDATE
The standard date (STDDATE) format contains 10 characters, including the national language date delimiter. The format represents a date expressed in a 4-digit year (YYYY), 2-digit month (MM), and a 2-digit day (DD). Valid values for YYYY are 0000-9999. Valid values for MM are 01-12. Valid values for DD are 01-31. ISPF verifies for a valid date and national language date delimiter. For the United States, the format is YYYY/MM/DD.
STDTIME
The standard time (STDTIME) format contains 8 characters, including the national language time delimiter. The format represents a time expressed in a 2-digit hour (HH), 2-digit minute (MM), and a 2-digit second (SS). Valid values for HH are 00-23. Valid values for MM are 00-59. Valid values for SS are 00-59. For the United States, the format is HH:MM:SS.
MSG=value
value contains the message issued if the current value of the variable does not meet the criteria being checked.

For all tests except NONBLANK, LISTX, and LISTVX, a blank value is acceptable. That is, if you enter a value, or leave a nonblank initial value unchanged, it must conform to the specified condition. If a variable value is stored as all blanks, the value passes any verification test except NONBLANK.

Figure 1 shows a sample panel with VER statements to verify that information entered meets these criteria:
  • The truncated value of TYPECHG is N, U, or D.
  • The three name variables, LNAME, FNAME, and I, contain all alphabetic characters.
  • The PHA (area code) field contains all numeric characters and a length of 3.
  • The PHNUM (local number) field contains 3 numeric characters followed by a hyphen, followed by 4 numeric characters.

For the TYPECHG test, a message ID has been specified in the event that the test fails. In all the other cases, an ISPF-provided message is displayed if the variable fails the verification test.

Figure 1. Sample panel definition with verification
 )BODY
 %----------------------------  EMPLOYEE RECORDS  ------------------------
 %COMMAND===>_ZCMD                                                       %
 + 
 %EMPLOYEE SERIAL: &EMPSER
 + 
 +   TYPE OF CHANGE%===>_TYPECHG +  (NEW, UPDATE, OR DELETE)
 + 
 +   EMPLOYEE NAME:
 +     LAST   %===>_LNAME         + 
 +     FIRST  %===>_FNAME         + 
 +     INITIAL%===>_I+ 
 + 
 +   HOME ADDRESS:
 +     LINE 1 %===>_ADDR1                                   + 
 +     LINE 2 %===>_ADDR2                                   + 
 +     LINE 3 %===>_ADDR3                                   + 
 +     LINE 4 %===>_ADDR4                                   + 
 + 
 +   HOME PHONE:
 +     AREA CODE   %===>_PHA+ 
 +     LOCAL NUMBER%===>_PHNUM   + 
 + 
 )INIT
   IF (&PHA = ‘ ’)
     &PHA = 301
   &TYPECHG = TRANS (&TYPECHG N,NEW U,UPDATE D,DELETE)
  )PROC
   &TYPECHG = TRUNC (&TYPECHG,1)
   VER (&TYPECHG,LIST,N,U,D,MSG=EMPX210)
   VER (&LNAME,ALPHAB)
   VER (&FNAME,ALPHAB)
   VER (&I,ALPHAB)
   VER (&PHA,LEN,‘=’,3)
   VER (&PHA,NUM)
   VER (&PHNUM,PICT,‘NNN-NNNN’)

 )END

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014