Examples of using LINKMVS, ATTCHMVS, and CALL to invoke a program

The LINKMVS and ATTCHMVS address environments can be used to invoke a program normally invoked as a batch job, as can the TSO CALL command. Table 1 shows various examples of invoking program MYWTO while passing a single parameter or while passing two parameters to the program. Note the varying effects of specifying the msg variable, either within quotation marks or not within quotation marks, on the LINKMVS (or ATTCHMVS) invocation.

Examples 1, 2, 3, 4, and 6 show several different ways of invoking MYWTO while passing a single 9-character parameter string: A MESSAGE. Example 5 is similar to examples 1–4, and 6, however, an 11-character string 'A MESSAGE' is passed. The leading and trailing single quotation markers part of the string that is passed.

Example 7 shows the passing of two parameters to the program, the value of variable A and the value of the variable MESSAGE. However, because these two variables were not initialized before the invocation, each variable has a value equal to its own name, in uppercase. The end result is that two parameter strings are passed to the program. The first parameter is the 1-character string A, and the second parameter is the 7-character string MESSAGE. In contrast, in example 9, two parameter strings are passed to the program, the value of variable A (namely, Value1) and the value of variable MESSAGE (namely, Value 2).

Example 8 is similar to example 6, in that both pass the same string A MESSAGE. In example 8, the fact that variables A and MESSAGE have values before the invocation is irrelevant, since the parameter string A MESSAGE is passed, not the values of variables A and MESSAGE.
Table 1. Examples of using LINKMVS, ATTCHMVS, and CALL to invoke a program
Example Number Invocation from Invocation Method Used Example Invocation Implementation
1 JCL
EXEC PGM=
//* Call MYWTO, passing A MESSAGE*/
/stepname EXEC PGM=MYWTO,PARM='A MESSAGE'
2 TSO CLIST
CALL
command
/* Call MYWTO, passing A MESSAGE */
CALL *(MYWTO) 'A MESSAGE'
3 TSO REXX
CALL
command
/* Call MYWTO, passing A MESSAGE */
Address TSO "CALL *(MYWTO) 'A MESSAGE'"
4 TSO REXX
CALL
command
/* REXX */
/* Call MYWTO, passing A MESSAGE */
msg = "'A MESSAGE'"
Address TSO "CALL *(MYWTO)" msg
5 TSO REXX
LINKMVS or
ATTCHMVS
host
command
environment
/* REXX */
/* Call MYWTO, passing 'A MESSAGE' */
msg = "'A MESSAGE'"  /* single quotes part of value passed */
Address LINKMVS "MYWTO msg"

Guideline: The variable name msg must be inside the quotation
marks in order to pass a single parameter with the value
'A MESSAGE' to the called program.
6 TSO REXX
LINKMVS or
ATTCHMVS
host
command
environment
/* REXX */
/* Call MYWTO, passing A MESSAGE */
msg = "A MESSAGE"
Address LINKMVS "MYWTO msg" /* msg inside quotation
marks */

Guideline: The variable name msg must be inside
the quotation
marks in order to pass a single parameter with the value
A MESSAGE to the called program.
7 TSO REXX
LINKMVS or
ATTCHMVS
host
command
environment
/* REXX */
/* Call MYWTO, passing two parameters */
/*   - value of the variable A */
/*   - value of the variable MESSAGE */
msg = "A MESSAGE"
Address LINKMVS "MYWTO" msg /* msg outside quotes */

Guideline: The variable name msg is outside the double
quotation marks, so the statement is equivalent to:

      Address LINKMVS "MYWTO A MESSAGE"

The values of variables A and MESSAGE are passed to the
called routine.  Since these variables are uninitialized, their
respective values are A and MESSAGE. Program
MYWTO therefore is passed two parameters, the first
with the value A and the second with the value MESSAGE.
8 TSO REXX
LINKMVS or
ATTCHMVS
host
command
environment
/* REXX */
/* Call MYWTO, passing A MESSAGE */
A = "Value1"
MESSAGE = "Value2"
msg = "A MESSAGE"
Address LINKMVS "MYWTO msg"
/* msg inside quotation marks */

Guideline: The variable name msg must be inside the quotation
marks in order to pass a single parameter with the value
A MESSAGE to the called program; the values
of variables A and MESSAGE are not used in this
example.
9 TSO REXX
LINKMVS or
ATTCHMVS
host
command
environment
/* REXX */
/* Call MYWTO, passing two parameters */
/*   - value of the variable A */
/*   - value of the variable MESSAGE */
A = "Value1"
MESSAGE = "Value2"
msg = "A MESSAGE"
Address LINKMVS "MYWTO" msg
/* msg outside quotation marks */

Guideline: The variable name msg is outside the double
quotation marks, so the statement is equivalent to:

     Address LINKMVS "MYWTO A MESSAGE"

The values of variables A and MESSAGE are passed to the
called routine.  Program MYWTO therefore is passed two
parameters, the first with the value Value1 and the second
with the value Value 2.