Projektarbeit  REXX-Tipps          AGB "Software"
D3

REXX-Tipps (ohne Gewähr)

03. Aufruf eines Cobol Programms mit Verwendung von ISPF-Variablen

A. Start-REXX-Auszug: Library Alloc für TSO-User:

...
/* Auf diese Lib muss Pgm HELL gelinkt sein*/
LL = "'" !! userid() !! ".kurs.load'"
"ALLOC DD(ISPLLIB) SHR REUSE DSN("LL")"

...

B. Aufruf Cobol Pgm HELL aus REXX-EXEC:
akt = 'E'
pnr = '1234'
pnn = 'ROIDER,JACKL'

address ispexec
"vput   (akt,pnr,pnn) shared"
"select pgm(HELL)"

"vget (akt,pnr,pnn) shared"

say 'back in rexx: nach VGET ... shared pool'
say 'akt' akt
say 'pnr' pnr
say 'pnn' pnn

C. Cobol-Beispielprogramm :
       IDENTIFICATION DIVISION.
       PROGRAM-ID.              HELL.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
      *    -----------------------------------
       01  VCOPY    PIC  X(08) VALUE "VCOPY   ".
       01  MODUS    PIC  X(08) VALUE "MOVE    ".
       01  VREPL    PIC  X(08) VALUE "VREPLACE".
       01  VPUT     PIC  X(08) VALUE "VPUT    ".
       01  SHARED   PIC  X(08) VALUE "SHARED  ".
      *    -----------------------------------
       01  NAKT     PIC  X(08) VALUE "AKT     ".
       01  NPNR     PIC  X(08) VALUE "PNR     ".
       01  NPNN     PIC  X(08) VALUE "PNN     ".
      *    -----------------------------------
       01  LAKT     PIC S9(09) BINARY VALUE 1.
       01  LPNR     PIC S9(09) BINARY VALUE 4.
       01  LPNN     PIC S9(09) BINARY VALUE 15.
      *    -----------------------------------
       01  VARNAMES.
       03  AKT      PIC  X(01) VALUE "F".
       03  PNR      PIC  X(04) VALUE "0007".
       03  PNN      PIC  X(15) VALUE "BOND,JAMES     ".
      *    -----------------------------------
       01  VARNAMEN.
       03  AKTN     PIC  X(01) VALUE "X".
       03  PNRN     PIC  X(04) VALUE "0815".
       03  PNNN     PIC  X(15) VALUE "BUNDY,AL       ".
      *    -----------------------------------
       PROCEDURE DIVISION.
       MAIN SECTION.
      *    -----------------------------------
      * 1. Ur-Zustand der Working-Storage-Variablen AKT, PNR, PNN:
      *    F0007BOND,JAMES
      * 2. Hereinkopieren der ISPF-Dialog-Variablen AKT, PNR, PNN
      *    Zustand der Working-Storage-Variablen vach VCOPY:
      *    E1234ROIDER,JACKL
           CALL "ISPLINK" USING VCOPY NAKT LAKT AKT MODUS
           CALL "ISPLINK" USING VCOPY NPNR LPNR PNR MODUS
           CALL "ISPLINK" USING VCOPY NPNN LPNN PNN MODUS
      * 3. Überschreiben der Working-Storage-Variablen AKT, PNR, PNN
      *    Zustand der Working-Storage-Variablen vach MOVE:
      *    X0815BUNDY,AL
           MOVE VARNAMEN TO VARNAMES.
      * 4. Replace AKT, PNR, PNN im Function-Pool des Pgms
      *    Zustand der Function-Pool-Variablen vach VREPLACE:
      *    X0815BUNDY,AL
           CALL "ISPLINK" USING VREPL NAKT LAKT AKT
           CALL "ISPLINK" USING VREPL NPNR LPNR PNR
           CALL "ISPLINK" USING VREPL NPNN LPNN PNN
      * 5. Kopieren der Function-Pool-Vars des Pgms in den Shared Pool
      *    Zustand der Shared-Pool-Variablen vach VPUT:
      *    X0815BUNDY,AL
           CALL "ISPLINK" USING VPUT  NAKT SHARED
           CALL "ISPLINK" USING VPUT  NPNR SHARED
           CALL "ISPLINK" USING VPUT  NPNN SHARED
      *    die rufende REXX holt sich die Vars in ihren Function Pool
      *    anschliessend mit dem ISPEXEC Befehl "VGET"
           MOVE 0 TO RETURN-CODE
           STOP RUN.

D. Technische Bedingungen beim Binden des Programms:
Das Cobol-Programm muss im Linkstep das Modul ISPLINK inkluden.
Sie müssen wissen, auf welcher Ihrer System-Libraries es steht.

1. Die Compile/Link-Prozedur könnte so aussehen:
(beachten Sie im Step LKED die SYSLIB-Verkettung)

//#COBCL PROC  LNGPRFX='IGY',LIBPRFX='CEE',
//             SRCLIB=&SYSUID..KURS.COBOL,  SOURCELIB
//             PGMLIB=&SYSUID..KURS.LOAD,   LOADLIB
//             MEM=                         Member-Name
//* ____________________________________________DEURING 2005__
//COBOL  EXEC PGM=IGYCRCTL,REGION=2048K
//STEPLIB  DD  DISP=SHR,DSN=&LNGPRFX..SIGYCOMP
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  DISP=SHR,DSN=&SRCLIB(&MEM)
//SYSLIN   DD  DSN=&&LOADSET,UNIT=SYSDA,
//             DISP=(MOD,PASS),SPACE=(TRK,(3,3)),
//             DCB=(BLKSIZE=3200)
//SYSUT1   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT2   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT3   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT4   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT5   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT6   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT7   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//* __________________________________________________________
//LKED   EXEC PGM=HEWL,COND=(8,LT,COBOL),REGION=1024K
//SYSLIB   DD  DISP=SHR,DSN=&LIBPRFX..SCEELKED   Lang-Environm
//         DD  DISP=SHR,DSN=ISP.SISPLOAD         ISPLINK-Bibl.
//SYSPRINT DD  SYSOUT=*
//SYSLIN   DD  DSN=&&LOADSET,DISP=(OLD,DELETE)
//*        DD  DDNAME=SYSIN
//SYSLMOD  DD  DISP=SHR,DSN=&PGMLIB(&MEM)
//SYSUT1   DD  UNIT=SYSDA,SPACE=(TRK,(10,10))

2. Der Compile/Link-Job sähe dann so aus:

//DEURINGL JOB 007,DEU,CLASS=A,MSGCLASS=T,MSGLEVEL=(0,0),NOTIFY=&SYSUID
//      JCLLIB ORDER=DEURING.KURS.COBOL
//S1      EXEC PROC=#COBCL,MEM=HELL