MainframeSupports
tip uge 49/2002:

I mange utility programmer er det muligt at angive hvilket DD-navn, der skal bruges til eksempelvis input og output, hvis man ikke lige gider benytte de til rådighed stillede defaults. Jeg har tit ønsket mig at lave mine egne programmer med samme facilitet. Det kan selvfølgelig lade sig gøre med assembler, men det tager jo uforholdsmæssig lang tid at kode, samtidig med at det kræver, at man kan assembler.

Så en dag faldt jeg over en option til OPEN statement'et i PL/1 kaldet TITLE. Egentlig er jeg faldet over den mange gange, men jeg forstod ikke meningen med den, men pludselig faldt ti-øren. I TITLE angiver man det DD-navn, som skal knyttes til den interne PL/1 file definition, hvis man gerne vil have, at DD-navnet er forskellig fra navnet på ens file definition. Og så er det sådan set lige ud ad landevejen:

demo: PROC(parm) OPTIONS(MAIN);

DCL anyfile FILE RECORD SEQUENTIAL;
DCL anyfile_data CHAR(32767) VAR;
DCL anyfile_eof CHAR(1);
DCL parm CHAR(100) VAR;

ON ENDFILE(anyfile) anyfile_eof = 'Y';
anyfile_eof = 'N';
OPEN FILE(anyfile) TITLE(parm);
READ FILE(anyfile) INTO(anyfile_data);
DO WHILE(anyfile_eof = 'N');
  /* Kod selv behandlingen af data */
  READ FILE(anyfile) INTO(anyfile_data);
END;
CLOSE FILE(anyfile);

END demo;

Dette program gennemlæser en fil fra den ene ende til den anden. Det specielle er, at det DD-navn, der læses fra, angives i PARM til programmet, eksempelvis vil //MYSTEP EXEC PGM=DEMO,PARM='/KURT' få programmet til at indlæse filen tilknyttet DD-navnet KURT. Den variabel eller det udtryk, som man angiver i TITLE vil PL/1 omsætte til en CHAR(8) med efterstillede blanke, hvis det er nødvendigt. Derfor vil der ikke ske noget særligt ved at angive PARM='/MAINFRAMESUPPORT'. PL/1 vil forsøge at åbne filen tilknyttet DD-navnet MAINFRAM, og så er det jo op til den, der laver jobbet at angive et DD-navn med netop det navn.

Forrige danske tip        Last tip in english        Tip oversigten