CPPUPDTE (IPOUPDTE) ServerPac ProgramCPPUPDTE is a program that enables you to search for a string across all the members of a PDS and replace that string with another string. CPPUPDTE is loaded into the LOADLIB data set (hlq.order_number.LOADLIB) during ServerPac installation. It also has an alias name of IPOUPDTE because the job is actually the same job that was shipped with CBIPO. |
The following information about how to use CPPUPDTE is an excerpt from the "CBIPO Design Reference" (C) Copyright IBM Corp. 1983,1991. All references to IPOUPDTE are equally applicable to the CPPUPDTE program provided with ServerPac.
Important: For CPPUPDTE and IPOUPDTE to work, each PDS to be searched MUST contain a member named $$$COIBM.
Note: To remove the $$$COIBM requirement, apply the following ZAP: //ZAPUPDTE EXEC PGM=AMASPZAP //SYSLIB DD DSN=IPO1.LINKLIB,DISP=SHR //SYSPRINT DD SYSOUT=* NAME IPOUPDTE VER 0548 0A12 SVC 18 (BLDL) REP 0548 1FFF SLR 15,15
This documentation describes the following topics:
IPOUPDTE is an update program that allows you to change fields in JCL and control statements in MVS Custom-Built IPO-provided libraries. The program is used extensively in the Custom-Built IPO batch installation processes and is the primary means by which you can modify these and other Custom-Built IPO jobs to implement your system design. Each of the Custom-Built IPO batch installation guides provides a brief introduction to IPOUPDTE so that you can change the supplied IPOUPDTE control statements and run the jobs. The description here is more comprehensive. It tells how the program works, what all of its functional capabilities are, and how to set up the JCL for an IPOUPDTE job. Complete lists of messages and return codes from IPOUPDTE are also given.
Note: Under most circumstances, you will not need to know this information to run the IPOUPDTE jobs in the CBIPO batch installation processes. The CBIPO batch installation guides should be adequate for running the installation process for your CBIPO feature. This appendix is provided as a reference for people who run into unusual difficulties in the installation processes or who want to make extensive modifications to the CBIPO-provided jobstreams.
IPOUPDTE is a search-and-replace program. It scans a member of a PDS, all the members of a PDS, or all the members of a list of PDSs, and it conditionally replaces in place parts of the input records. Only CBIPO-provided libraries are eligible for updating by IPOUPDTE. The data to be replaced, called STRING1, and the replacement data, called STRING2, are defined by control statements in a SYSIN data set. An optional third search argument, called STRING3, enables you to make the replacement only when STRING3 is present in the input record.
The operation is as follows:
Replacement occurs only in the output buffer. All the potential updates (that is, all the STRING1/STRING2s you specify) are processed against one input record before processing the next record. Updates occur in the same sequence in which they are specified in the control statements, so the result of one update can be changed by later updates.
Figure 1 provides four examples of IPOUPDTE processing. In each case the STRING1, STRING2, and STRING3 on a line go together, and both of the sets of STRING1/2/3 operate on each of the four input records before proceeding to the next input record.
+--------------------------------------------------------------------+ | Figure 1. Examples of IPOUPDTE processing. | +--------------------------------------------------------------------+ | STRING1 | STRING2 | STRING3 | INPUT RECORDS | UPDATED RECORDS | +--------------------------------------------------------------------+ | | | | | | | ONE | AAA | (None) | ONE ONE ZZZ | AAA AAA ZZZ | | TWO | ONE | (None) | ONE TWO | AAA ONE | | | | | TWO ONE ZZZ | ONE AAA ZZZ | | | | | TWO TWO | ONE ONE | +--------------------------------------------------------------------+ | | | | | | | ONE | AAA | (None) | ONE ONE ZZZ | AAA AAA ZZZ | | TWO | ONE | ZZZ | ONE TWO | AAA TWO | | | | | TWO ONE ZZZ | ONE AAA ZZZ | | | | | TWO TWO | TWO TWO | +--------------------------------------------------------------------+ | | | | | | | TWO | ONE | ZZZ | ONE ONE ZZZ | AAA AAA ZZZ | | ONE | AAA | (None) | ONE TWO | AAA TWO | | | | | TWO ONE ZZZ | AAA AAA ZZZ | | | | | TWO TWO | TWO TWO | +--------------------------------------------------------------------+ | | | | | | | ONE | AAA | (None) | ONE ONE ZZZ | AAA AAA TWO | | ZZZ | TWO | ONE | ONE TWO | AAA TWO | | | | | TWO ONE ZZZ | TWO AAA TWO | | | | | TWO TWO | TWO TWO | +--------------------------------------------------------------------+
Other rules regarding string replacement are as follows:
The only exceptions to this statement are:
NOTE: The special handling of '.V' allows IPOUPDTE to update a VOLSER in CBIPO-format catalog names at the same time most other references to the VOLSER are updated. Figure 21 demonstrates how IPOUPDTE handles the '.V' special case.
+--------------------------------------------------------------------+ | Figure 2. Examples of IPOUPDTE processing. | +--------------------------------------------------------------------+ | STRING1 | STRING2 | STRING3 | INPUT RECORDS | UPDATED RECORDS | +--------------------------------------------------------------------+ | | | | | | | MVSCAT | MYPAK1 | (None) | CATALOG. | CATALOG. | | | | | MVSICF1. | MVSICF1. | | | | | VMVSCAT | VMYPAK1 | +--------------------------------------------------------------------+ | | | | | | | MVSCAT | MYPAK1 | (None) | CATALOG. | CATALOG. | | | | | MVSICF1. | MVSICF1. | | | | | ZMVSCAT | ZMVSCAT | +--------------------------------------------------------------------+
In the second section of the above example, where '.Z' has been specified in the input instead of '.V', no special processing is done; the VOLSER MVSCAT in this last record is not changed by IPOUPDTE.
The special handling of '/V' allows IPOUPDTE to update a VOLSER in CBIPO-format operator JCL at the same time most other references to the VOLSER are updated. Figure 3 demonstrates how IPOUPDTE handles the '/V' special case.
+--------------------------------------------------------------------+ | Figure 3. Examples of IPOUPDTE processing. | +--------------------------------------------------------------------+ | STRING1 | STRING2 | STRING3 | INPUT RECORDS | UPDATED RECORDS | +--------------------------------------------------------------------+ | | | | | | | MVSCAT | MYPAK1 | (None) | //VMVSCAT JOB | //VMYPAK1 JOB | +--------------------------------------------------------------------+ | | | | | | | MVSCAT | MYPAK1 | (None) | //ZMVSCAT JOB | //ZMVSCAT JOB | +--------------------------------------------------------------------+
In the second section of the above example, where '/Z' has been specified in the input instead of '/V', no special processing is done; the VOLSER MVSCAT in this last record is not changed by IPOUPDTE.
You tell IPOUPDTE what you want to update in the specified libraries' members by specifying STRING1 and STRING2 and optionally STRING3 on control statements. You can supply the control statements either in a SYSIN data set or from the system console. IPOUPDTE has four types of control statements: the basic control statement, the extended control statement, the END statement, and the comment statement. Only the first 72 positions of the control statement are used; positions 73 through 80 are ignored. STRING1 begins in position 1. The maximum length for STRING1, STRING2, or STRING3 is 70 characters. The minimum length for STRING1 is 1. The minimum length for STRING2 and STRING3 is zero. If STRING2 is null--that is, a length of zero--STRING1 is deleted from the record.
If you make a mistake in the syntax of a control statement and you are using SYSIN for input, IPOUPDTE writes a error message identifying the faulty statement, scans the remaining control statements for errors, and then terminates without processing any libraries or making any updates.
The syntax of the basic control statement is as follows:
For example, if a member contains
UNIT=3380,VOL=SER=MVSIPO /*LIB*/ input record1 before update UNIT=3380,VOL=SER=MVSR01 /*RES*/ input record2 before update
and you specify the following on IPOUPDTE control statements:
3380<3390< first control statement MVSIPO<MVSR01< second control statement
then the modified records will look like this:
UNIT=3390,VOL=SER=MVSR01 /*LIB*/ resultant record1 after update UNIT=3390,VOL=SER=MVSR01 /*RES*/ resultant record2 after update
The syntax of the extended form is as follows:
For example, if a member contains
UNIT=3380,VOL=SER=MVSIPO /*LIB*/ input record1 before update UNIT=3380,VOL=SER=MVSR01 /*RES*/ input record2 before update
and you specify the following on IPOUPDTE control statements:
3380<3390</*RES*/< first control statement MVSR01<RESPAK</*RES*/< second control statement
then the modified records will look like this:
UNIT=3380,VOL=SER=MVSIPO /*LIB*/ resultant record1 after update UNIT=3390,VOL=SER=RESPAK /*RES*/ resultant record2 after update
If STRING3 is null, the extended form reverts to the basic form.
The END control statement signals the end of control statement input for the current run of IPOUPDTE. The syntax of the END statement is END coded in positions 1 through 3 and a blank in position 4. The remainder of the statement is not used and can contain comments. The END statement is equivalent to end-of-file on SYSIN and is, therefore, optional.
A comment statement consists of a </* in positions 1 through 3. Comment statements cannot be continued; a new comment statement must be used on the following record.
A control statement can be continued only after a less-than symbol (<), not in the middle or after one of the strings. You tell IPOUPDTE that a control statement is to be continued by placing a dash (-) or a plus (+) immediately following any less-than symbol. The remainder of the statement is not scanned and can contain comments. When using a dash (-) to continue a statement, the control statement scan resumes in position 1 of the next statement. When using a plus (+) to continue a statement, the control statement scan resumes at the first non-blank character of the next statement. The continuation character, dash or plus, is not considered a part of any of the strings.
Comments can be placed after the first blank following the third less-than
symbol (<) of the control statement or following the continuation character
of a continued statement. For example, the following IPOUPDTE control statement
3380<+ some more comments on continuation statement 3390<+ note the plus continuation causes blanks on next UNIT=< statement to be ignored
You can enter control statements from the system console as an alternative to entering them in a SYSIN data set. (When you omit the SYSIN DD statement, IPOUPDTE goes to the console for control statements. See section "JCL for IPOUPDTE". IPOUPDTE uses a WTOR macro for this purpose, allowing up to 72 characters in a single reply. You can continue a reply by entering a dash (-) as the last character of your response.
IPOUPDTE handles control statement errors differently when input is from the system console than when it is in SYSIN. Since console input provides an interactive environment, IPOUPDTE allows you to correct control statement errors before input ends, and it then processes normally. When IPOUPDTE finds an error in a control statement from the console, it writes an error message to the operator, ignores the erroneous control statement, and waits for you to enter another control statement.
When in console input mode, certain messages are logged to the operator's console as well as to SYSPRINT.
Sometimes you may not want to replace all occurrences of STRING1 that IPOUPDTE finds, and you may not have a convenient way to use STRING3 to control updating. For these occasions IPOUPDTE provides a way for you to suspend and later resume updating. You do this by marking the suspension and resumption points within the input library members themselves. You code a .NU. (No Update) marker in the first record of the member not to be considered for update, and IPOUPDTE suspends updating until end-of-file is reached for the member or until it finds a .RU. (Resume Update) marker. When IPOUPDTE finds the .RU. marker it resumes updating on the NEXT record of the member. Thus, if you have only one record that you want to protect from updating, you can code both .NU. and .RU. (that is, ".NU..RU.") on that one record. The No Update/Resume Update facility can be overridden by specifying the member name of the data set in the DD statement. However, as explained in the section "Execution Modes , you can tell IPOUPDTE that you want to honor the .NU./.RU. markers even though you have entered a member name on one or more of the specified libraries' DD statements. You do this by specifying one of the EXEC statement PARM values that ends in "M."
As an example of the use of the .NU./.RU. facility, suppose you have a PDS with the following JCL in one of the members:
//SYSPRINT DD SYSOUT=* //SYSIN DD * RENAME DSNAME=IPO1.LINKLIB, .NU..RU. VOL=3380=MVSR01,NEWNAME=IPO1.LINKLIB . . .
If your IPOUPDTE control statement is IPO1<CBIPO< then the IPO1 on the record containing the .NU. and .RU. will not be changed, but the IPO1 on the following record will be changed. The result will be as follows:
//SYSPRINT DD SYSOUT=* //SYSIN DD * RENAME DSNAME=IPO1.LINKLIB, .NU..RU. VOL=3380=MVSR01,NEWNAME=CBIPO.LINKLIB . . .
However, if you had included the member name on the IPOUPDTE DD statement for the library containing this member, both occurrences of IPO1 would be changed, and the records would look like this:
//SYSPRINT DD SYSOUT=* //SYSIN DD * RENAME DSNAME=CBIPO.LINKLIB, .NU..RU. VOL=3380=MVSR01,NEWNAME=CBIPO.LINKLIB . . .
You can run IPOUPDTE in any of several different modes, each of which is unique in terms of whether actual updating takes place, how the No Update/Resume Update facility is handled, and how the libraries to be updated are specified to IPOUPDTE. The mode is specified in the PARM field on the EXEC statement you use when you invoke IPOUPDTE. The six modes are as follows:
CHECK Verifies updates to records but does not write any updated records back to the specified libraries. UPDATE Updates the records of the specified libraries. INSTALL Updates the records of the specified libraries using control statements generated from special DD statements that are required in the job step when this execution mode is used. The special DD statements have DDNAMEs of 'Zvvvvvv', where 'vvvvvv' is a volume serial number that is to be replaced in the specified libraries. 'vvvvvv' is replaced by the volume serial number specified in the VOL=SER parameter on the Zvvvvvv DD statement. For example, if you include the following DD statement in the IPOUPDTE job step: //ZMVSR01 DD UNIT=3390,VOL=SER=MVSRES,DISP=OLD IPOUPDTE generates the following control statements and adds them to the control statements you explicitly provide: MVSR01<MVSRES<< CHANGE VOLUME SERIAL 3380<3390<MVSR01< CHANGE DEVICE TYPE These two control statements are generated for each 'Zvvvvvv' DD statement included in the step. CHECKM Verifies updates to records of the specified libraries, but does not write the updated records back to the data set. This parameter causes .NU./.RU. markers in a library's member to be honored, even if the member name is specified on the library's DD statement. In other words, when you specify PARM=CHECKM, IPOUPDTE behaves for the purposes of .NU./.RU. processing as if you had not entered member names on any of the specified libraries' DD statements. UPDATEM Updates the records of the specified libraries. This parameter causes .NU./.RU. processing to be the same as that for PARM=CHECKM (see explanation above). INSTALLM Updates the records of the specified libraries. PARM=INSTALLM requires the same 'Zvvvvvv' DD statements as PARM=INSTALL does (see explanation above). Furthermore, this parameter causes .NU./.RU. processing to be the same as that for PARM=CHECKM (see explanation above).
IPOUPDTE uses the following JCL statements and parameters:
EXEC PGM=IPOUPDTE The IPOUPDTE load module resides in IPO1.LINKLIB. If this data set is not in the LNKLST of the system on which the job is to be run (it is in the LNKLST of MVS Custom-Built IPO systems produced by the Custom-Built IPO installation process), the job should include a JOBLIB statement for IPO1.LINKLIB, or the step should include a STEPLIB statement for IPO1.LINKLIB, or IPOUPDTE should be copied from IPO1.LINKLIB to a load module library that is in the LNKLST of the system on which the job is to be run. PARM= The PARM field of the EXEC statement is used to specify one of the execution modes of IPOUPDTE. (IPOUPDTE execution modes are explained in A.4, "Execution Modes" on page 92.) The value of the PARM field must be one of the following: CHECK, UPDATE, INSTALL, CHECKM, UPDATEM, or INSTALLM. If no value is specified, PARM=CHECK is the default. SYSPRINT DD A SYSPRINT DD statement is required. The SYSPRINT file is used to log all input control statements, output messages, and updates. Its DCB attributes are RECFM=FBA,LRECL=121. The default block size is 121. If the SYSPRINT DD statement is missing, an error message is issued to the console and processing terminates. @LIBRARY DD Each library specified for updating must be defined in a DD statements whose DDNAME begins with a commercial (@). For example: //@JCLLIB DD DSN=IPO1.JCLLIB,DISP=SHR Except for the requirements that the DDNAMEs begin with @ and that each one be unique, there are no further requirements on the DDNAMEs for the specified libraries. A library to be updated must be a partitioned data set (DSORG=PO), RECFM=F or FB, LRECL=80, it must be allocated on a direct access volume, and it must be a CBIPO-supplied library. If a data set fails to meet these requirements, a warning message is issued and processing continues with the next library. If no member is specified for the data set on the DD statement, all members of the library are processed by IPOUPDTE. SYSIN DD Control statements for IPOUPDTE can be entered through file name SYSIN, with DCB attributes RECFM=F or FB, and LRECL=80. If the SYSIN DD statement is not present and PARM=INSTALL is not specified, the operator is prompted for input through the operator's console via a WTOR sequence. The SYSIN DD statement is not used when PARM=INSTALL is specified.
Suppose the following JCL existed in member SAMPLE of library IPO1.JCLLIB:
//SAMPLE JOB (ACCT#),'PGMRNAME', // MSGCLASS=X,MSGLEVEL=(1,1),CLASS=A //* COMMENT IPO1 COMMENT IPO1 TWO BLANKS //CATLG EXEC PGM=IEHPROGM //SYSPRINT DD SYSOUT=* //MOUNT DD UNIT=3380,VOL=SER=MVSR01,DISP=OLD //SYSIN DD * CATLG DSNAME=IPO1.PROCLIB,VOL=3380=MVSR01 CATLG DSNAME=IPO1.LINKLIB,VOL=3380=MVSR01 /*
Similarly, suppose that the following JCL was used to update IPO1.JCLLIB:
//IPOUPDTE JOB (ACCT#),'PGMRNAME', // MSGCLASS=X,MSGLEVEL=(1,1),CLASS=A //STEP EXEC PGM=IPOUPDTE,PARM=UPDATE //SYSPRINT DD SYSOUT=* //@TEST DD DSN=IPO1.JCLLIB,DISP=SHR //SYSIN DD * CLASS=X<CLASS=A< *<A<SYSOUT=< IPO1<CBIPO< /*
Member SAMPLE of IPO1.JCLLIB would be changed to the following:
//SAMPLE JOB (ACCT#),'PGMRNAME', // MSGCLASS=X,MSGLEVEL=(1,1),CLASS=A //* COMMENT CBIPO COMMENT CBIPO TWO BLANKS //CATLG EXEC PGM=IEHPROGM //SYSPRINT DD SYSOUT=A //MOUNT DD UNIT=3380,VOL=SER=MVSR01,DISP=OLD //SYSIN DD * CATLG DSNAME=CBIPO.PROCLIB,VOL=3380=MVSR01 CATLG DSNAME=CBIPO.LINKLIB,VOL=3380=MVSR01 /*
Some things to notice in this example are:
IPO001 * ERROR * SYSPRINT DD MISSING EXPLANATION: This message is issued via WTO when no SYSPRINT DD statement is found in the JOB step. SEVERITY: 16 SYSTEM ACTION: The program terminates. No processing has taken place. USER RESPONSE: Add a SYSPRINT DD statement to the JOB step. IPO002 * ERROR * INVALID PARAMETER FIELD EXPLANATION: This message is issued when an invalid parameter field of the EXEC statement is encountered. SEVERITY: 16 SYSTEM ACTION: The program terminates. No processing has taken place. USER RESPONSE: Make sure that the parameter field is null or that one of the following is specified: CHECK, UPDATE, INSTALL, CHECKM, UPDATEM or INSTALLM. IPO003 ENTER IPOUPDTE CONTROL STATEMENT OR 'END' EXPLANATION: This message is issued during the WTOR control statement input sequence. It is a request for a new control statement or the continuation of a previous statement. If 'END' is entered, further input processing is ended. SYSTEM ACTION: Wait for operator's reply. USER RESPONSE: Enter the control statement or 'END'. IPO004 INVALID CONTROL STATEMENT SYNTAX EXPLANATION: This message is issued when a control statement's syntax is invalid. SEVERITY: 16 or 0 SYSTEM ACTION: If input is from SYSIN, the remaining control statements are read and validated, after which the program terminates with a return code of 16. If input is via the operator's console, the statement in error is ignored and processing resumes normally. USER RESPONSE: Correct the control statement syntax. Ensure that: * The control statement ends before position 73 * None of STRING1, STRING2 or STRING3 is longer than 70 characters * STRING1 is at least 1 character * STRING1, STRING2 and (if used) STRING3 are delimited by '<' * The END control statement (if used) is in positions 1 through 4 * Any continued records end with '<-' or '<+' (excluding comments and .NU..RU.). IPO005 END OF INPUT CONTROL STATEMENTS EXPLANATION: This message is issued when end-of-file is encountered on SYSIN or when an 'END' control statement is encountered. SYSTEM ACTION: If all control statements are valid, processing of the libraries begins. USER RESPONSE: None. IPO006 FILE XXXXXXXX INVALID FOR IPOUPDTE EXPLANATION: This message is issued when a DD statement is found defining a library to be processed by IPOUPDTE, but the library failed to meet the requirements of libraries that can be processed by IPOUPDTE. XXXXXXXX is the DDNAME of the invalid library. SEVERITY: 4 SYSTEM ACTION: Processing continues with the next library. USER RESPONSE: Ensure that: * The data set is a PDS * The record format is F or FB * The logical record length is 80 * The data set is on the specified DASD volume. IPO007 I/O ERROR . . . SYNAD ERROR MESSAGE . . . EXPLANATION: This message is issued when an I/O error occurs on the library being updated. The text of the message is that which is available to a SYNAD error routine. SEVERITY: 12 SYSTEM ACTION: Processing of this library terminates and processing resumes with the next library. USER RESPONSE: Check the data set and device for possible errors. IPO008 PROCESSING TERMINATED FOR FILE XXXXXXXX EXPLANATION: This message is issued when processing has ended prematurely for a given file. XXXXXXXX is the DDNAME of the file. SEVERITY: 12 SYSTEM ACTION: Processing continues with the next library. USER RESPONSE: Check previous messages to determine the cause. IPO009 * ERROR * TOO MANY CONTROL STATEMENTS EXPLANATION: This message is issued when too many control statements were entered. SEVERITY: 16 SYSTEM ACTION: Control statement input ends and processing terminates with no updates done. USER RESPONSE: Each control statement requires 8+L1+L2+L3 bytes of storage, where L1, L2, and L3 are the lengths of STRING1, STRING2, and STRING3, respectively. The total of all control statements must be less than 4092 bytes of storage. Split the control statements into two or more batches and rerun the job until all batches are processed. IPO010 FILE XXXXXXXX HAD NO UPDATES EXPLANATION: This message is issued when no updates were made to a library because no text was found that matched any control statements. SEVERITY: 4 SYSTEM ACTION: Processing continues with the next library. USER RESPONSE: Make sure all control statements specified the updates you intended. IPO011 IPOUPDTE ENDED. CODE=XX EXPLANATION: This message is issued during the termination of IPOUPDTE, where XX is the return code. SYSTEM ACTION: None. USER RESPONSE: Check the return code. IPO012 DATA SET NOT APPLICABLE TO IPOUPDTE EXPLANATION: This message is issued when a DD statement was found defining a library to be updated, but the library was not supported by IPOUPDTE. SEVERITY: 4 SYSTEM ACTION: Processing continues with the next library. USER RESPONSE: Ensure that only IPOUPDTE-supported libraries are specified. IPO013 DD XXXXXXXX INVALID OR UNKNOWN DEVICE TYPE EXPLANATION: This message can occur only when PARM=INSTALL or PARM=INSTALLM is specified on the EXEC statement. It indicates one of the following: * A DDNAME beginning with 'Z' does not have the format 'Zvvvvvv', where 'vvvvvv' is the volume serial number of a DASD volume. References to 'vvvvvv' in the libraries to be updated are to be changed to the volume and device type defined by the DD statement Zvvvvvv. * DD statement Zvvvvvv does not define a recognized DASD device. SEVERITY: 16 SYSTEM ACTION: Processing terminates with no updates done. USER RESPONSE: Correct the faulty DD statement and rerun the job.
RETURN CODE OF 0 EXPLANATION: All processing completed with no errors or warnings. USER RESPONSE: None. RETURN CODE OF 4 EXPLANATION: One or more of the following occurred: * One or more of the libraries had no updates * One or more of the libraries was invalid to be processed by IPOUPDTE. * A string within a record's comment field could not be replaced because too few blanks remained in the record. USER RESPONSE: Check messages logged to SYSPRINT file. RETURN CODE OF 8 EXPLANATION: The non-comment text in at least one record could not be updated because too few blanks remained in the record. USER RESPONSE: Check messages logged to SYSPRINT file to determine the records that could not be updated. RETURN CODE OF 12 EXPLANATION: At least one library had an I/O error. USER RESPONSE: Check messages logged to SYSPRINT file to determine where the errors occurred. RETURN CODE OF 16 EXPLANATION: One of the following occurred: * The SYSPRINT DD statement was missing * One or more of the control statements were invalid * The PARM field on the EXEC statement contained an invalid parameter * Too many control statements were entered * An invalid Zvvvvvv DD statement was supplied when PARM=INSTALL or PARM=INSTALLM was specified on the EXEC statement USER RESPONSE: Check messages logged to SYSPRINT file to determine where the errors occurred.