
MainframeSupports tip week 13/2010:
Have you ever seen a / in the PARM parameter in JCL. I bet you have if you have been
working with PL/I programs. The PARM parameter typically looks like
PARM='/parameters for the program'. But what is the purpose of the / in the PARM field?
The slash separates parameters for the program and parameters for Language Environment,
better known as LE.
And the next question is of course what Language Environment is. It is an attempt from
IBM to create a common runtime environment for all compiling languages on the mainframe.
Before LE COBOL and PL/I had their own runtime environment and also their own way of
transferring parameters to the runtime environment. Unfortunately LE has a backward
compability issue and therefore you can still transfer parameters to COBOL and PL/I as in
the "good old days". In COBOL you specify parameters for LE after the first / in the PARM
field while parameters for LE in PL/I is specified in front of the first /. That is the
reason for the / in the beginning of the PARM field when executing a PL/I program.
For many years it has been possible to make your PL/I programs behave like COBOL programs
regarding the transfer of LE options. You do it by specifying the NOEXECOPS option:
demo: PROC(jclparm) OPTIONS(MAIN NOEXECOPS);
DCL jclparm CHAR(100) VAR;
IF length(jclparm) = 0
THEN
PUT SKIP LIST('NO PARM= SPECIFIED OR PARM='''' SPECIFIED');
ELSE
PUT SKIP LIST('PARM=''' !! jclparm !! ''' SPECIFIED');
END demo;
The above program will work exactly like the following COBOL program:
...
DATA DIVISION.
LINKAGE SECTION.
01 JCLPARM.
02 JCLPARM-LENGTH PIC S9(4) BINARY.
02 JCLPARM-CONTENS PIC X(100).
PROCEDURE DIVISION USING JCLPARM.
IF JCLPARM-LENGTH = 0
DISPLAY 'NO PARM= SPECIFIED OR PARM='''' SPECIFIED'
ELSE
DISPLAY 'PARM=''' JCLPARM-CONTENS(1:JCLPARM-CONTENS) ''' SPECIFIED'
END-IF
GOBACK
.
apart from the fact that the PL/I program will write to SYSPRINT while the COBOL
program will write to SYSOUT. They will both process the contents of the PARM field in
exactly the same manner. So the question is now what kind of parameters you can specify
to LE and are they worth using. Well the answer is that it depends on the problems
you are facing. A thing you might need to know is what options LE are using without your
specification. To do this please use PARM='/RPTOPTS(ON)' as input to one of the above
programs or any kind of COBOL program. PARM='RPTOPTS(ON)' will work for all PL/I programs
where NOEXECOPS is not specified. RPTOPTS(ON) will write all LE options to SYSOUT.
You can read all about parameters for LE in
Language Environment Progamming Reference.
The link is to a fairly new version of the manual.
Previous tip in english
Sidste danske tip
Tip list
|