MainframeSupports
tip uge 16/2007:

Har du nogensinde set en / i PARM parameteren i JCL. Det har du med garanti, hvis du har arbejdet med PL/I programmer. Her ser PARM parameteren typisk således ud: PARM='/parametre til programmet'. Men hvad gør den / egentlig godt for. Den adskiller parametre til programmet fra parametre til Language Environment, bedre kendt som LE.

Og hvad er Language Environment for en pudsig størrelse. Det er IBM's forsøg på at skabe et fælles runtime environment for alle compilerende sprog på mainframen. Før LE havde PL/I og COBOL hver deres eget runtime environment og hver deres måde at overføre parametre til runtime environment'et. Desværre har LE pga. krav om bagudkompabilitet ikke ændret på parameter overførslen. Det er stadig sådan, at i COBOL skrives parametre til LE efter den første / i PARM feltet, mens parametre til LE i PL/I skrives før den første /. Derfor er der altid en / først i PARM feltet til PL/I.

Det har dog i mange år været muligt at dressere sine PL/I programmer til at opføre sig som COBOL programmer på dette punkt. Det gøres ved at anvende option NOEXECOPS:

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;

Ovenstående program vil fungere fuldstændig som nedenstående 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
.

bortset fra, at PL/I programmet skriver ud på SYSPRINT, mens COBOL programmet skriver ud på SYSOUT. De vil begge acceptere indholdet af PARM feltet fra JCL på præcis samme måde.

Nu kan du altså få PL/I og COBOL til at behandle PARM feltet på samme måde, men hvad er det så for parametre LE forstår og hvordan får du noget ud af det? Svaret på dette spørgsmål er, at det afhænger helt af din problemstilling. En ting, du kan få behov for, er at vide, hvilke options LE er sat op med. Det kan du finde ud af med en PARM='/RPTOPTS(ON)' til en af ovenstående programmer eller et hvilket som helst COBOL program. PARM='RPTOPTS(ON)' vil virke med alle PL/I programmer, der ikke er defineret med NOEXECOPS. Denne LE parameter vil udskrive samtlige LE options på SYSOUT.

Du kan læse alt om parametre til LE i Language Environment Progamming Reference. Linket er til den nyeste udgave af manualen, jeg kunne finde.

Forrige danske tip        Last tip in english        Tip oversigten