MainframeSupports
tip uge 22/2005:

I uge 20/2003 beskrev jeg, hvordan det er muligt at eksekvere TSO kommandoer fra COBOL og PL/1. Det kræver dog i batch, at man kører under TSO, det vil sige program IKJEFT01. Tænk sig, hvis nu man rent faktisk kunne slippe af med IKJEFT01, så man i batch bare skrev EXEC PGM=MYPGM og dermed direkte eksekverede sit eget program, og stadigvæk kunne udstede TSO kommandoer.

Det kan rent faktisk godt lade sig gøre. Der findes et modul kaldet TSOENV, som starter en TSO kommando processor op i det program, man eksekverer. Når først TSOENV er kaldt een gang, så kan man udstede lige så mange TSO kommandoer vha. TSOLNK, som man ønsker, og det virker lige så godt som, hvis man havde startet sit program via IKJEFT01.

I COBOL kaldes TSOENV således:

* WORKING STORAGE DECLARATIONS
 01  PARM1 PICTURE S9(9) COMP.
 01  PARM2 PICTURE S9(9) COMP.
 01  PARM3 PICTURE S9(9) COMP.
 01  PARM4 PICTURE S9(9) COMP.
 01  PARM5 POINTER.

* STATEMENTS IN PROCEDURE DIVISIONS
     MOVE 0 TO PARM1
     SET PARM5 TO NULL
     CALL 'TSOENV' USING PARM1 PARM2 PARM3 PARM4 PARM5
     IF RETURN-CODE NOT = 0
       DISPLAY 'TSOENV FAILED WITH RETURN-CODE = ' RETURN-CODE
     END-IF

I PL/1 er det lige så simpelt:

DCL PARM1 FIXED BIN(31);
DCL PARM2 FIXED BIN(31);
DCL PARM3 FIXED BIN(31);
DCL PARM4 FIXED BIN(31);
DCL PARM5 FIXED BIN(31);
DCL TSOENV EXT ENTRY OPTIONS(ASM INTER RETCODE);

PARM1 = 0;
PARM5 = NULL();
CALL TSOENV(PARM1, PARM2, PARM3, PARM4, PARM5);
IF PLIRETV() ^= 0
THEN
  DISPLAY('TSOENV FAILED WITH RETURN-CODE = ' !! PLIRETV());

Hivs RETURN-CODE hhv. PLIRETV() er forskellig fra 0, så skyldes det højst sandsynligt, at TSO allerede er aktiveret, og så kan man alligevel benytte TSOLNK. Ja der er faktisk ikke andet i det end at udstede ovenstående kald inden man kalder TSOLNK, og så får man udført sine TSO-kommandoer uanset om ens program er kaldt fra TSO eller ej.

Der er visse begrænsninger for hvilke kommandoer, der virker, når TSO er aktiveret vha. TSOENV. Jeg har f.eks. ikke prøvet hverken RACF-kommandoer eller HSM-kommandoer, og det er ikke sikkert, at de virker. Jeg har indtil videre holdt mig til kommandoerne beskrevet i TSO command reference.

Forrige danske tip        Last tip in english        Tip oversigten