½ MainframeSupport tip about PARM= in JCL and Language Environment

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