I have a code example för an ISPF Panel <---> COBOL ISPF Panel exit <---> REXX pgm (compiled) call chain.
You can use some parts of it I suppose. Some code snippets:
Panel:
------
"PANEXIT ((X1,X2,X3,X4),LOAD,PANEXIT,&XD)"
COBOL pgm:
----------
IDENTIFICATION DIVISION.
PROGRAM-ID.
PANEXIT.
- - - - - - - - - - - - - - - - - 6 Line(s) not Displayed
SPECIAL-NAMES.
SYSIN IS RETPARMS.
- - - - - - - - - - - - - - - - 88 Line(s) not Displayed
DATA DIVISION.
/
WORKING-STORAGE SECTION.
- - - - - - - - - - - - - - - - - 5 Line(s) not Displayed
77 W-LENGTH-OF-VARIABLES PIC S9(9) COMP.
- - - - - - - - - - - - - - - - - 2 Line(s) not Displayed
01 RXX-EXITDATA-H.
05 RXX-EXITDATA-LEN PIC S9(4) COMP.
05 RXX-EXITDATA PIC S9(9) COMP.
05 RXX-EXITDATA-X REDEFINES RXX-EXITDATA PIC X(4).
01 RXX-PANEL-NAME-H.
05 RXX-PANEL-NAME-LEN PIC S9(4) COMP.
05 RXX-PANEL-NAME PIC X(8).
01 RXX-PANEL-SECTION-H.
05 RXX-PANEL-SECTION-LEN PIC S9(4) COMP.
05 RXX-PANEL-SECTION PIC X.
01 RXX-MESSAGE-ID-H.
05 RXX-MESSAGE-ID-LEN PIC S9(4) COMP.
05 RXX-MESSAGE-ID PIC X(8).
01 RXX-NUMBER-OF-VARIABLES-H.
05 RXX-NUMBER-OF-VARIABLES-LEN PIC S9(4) COMP.
05 RXX-NUMBER-OF-VARIABLES PIC S9(9) COMP.
05 RXX-NUMBER-OF-VARIABLES-X
REDEFINES RXX-NUMBER-OF-VARIABLES PIC X(4).
01 RXX-LENGTH-OF-VARIABLES-H.
05 RXX-LENGTH-OF-VARIABLES-LEN PIC S9(4) COMP.
05 RXX-LENGTH-OF-VARIABLES PIC S9(9) COMP.
05 RXX-LENGTH-OF-VARIABLES-X
REDEFINES RXX-LENGTH-OF-VARIABLES PIC X(4).
01 RXX-ARRAY-OF-VAR-NAMES-H.
05 RXX-ARRAY-OF-VAR-NAMES-LEN PIC S9(4) COMP.
05 RXX-ARRAY-OF-VAR-NAMES.
15 RXX-VARNAME OCCURS 10
DEPENDING ON RXX-NUMBER-OF-VARIABLES
INDEXED BY IX-RXX-NAME PIC X(8).
01 RXX-ARRAY-OF-VAR-LENGTHS-H.
05 RXX-ARRAY-OF-VAR-LENGTHS-LEN PIC S9(4) COMP.
05 RXX-ARRAY-OF-VAR-LENGTHS.
15 RXX-VARLEN OCCURS 10
DEPENDING ON RXX-NUMBER-OF-VARIABLES
INDEXED BY IX-RXX-LEN PIC S9(9) COMP.
01 RXX-STRING-OF-VAR-VALUES-H.
05 RXX-STRING-OF-VAR-VALUES-LEN PIC S9(4) COMP.
05 RXX-STRING-OF-VAR-VALUES.
15 RXX-STRVAL OCCURS 4000
DEPENDING ON RXX-LENGTH-OF-VARIABLES
PIC X.
/
LINKAGE SECTION.
01 EXITDATA PIC S9(9) COMP.
01 PANEL-NAME PIC X(8).
01 PANEL-SECTION PIC X.
01 MESSAGE-ID PIC X(8).
01 NUMBER-OF-VARIABLES PIC S9(9) COMP.
01 ARRAY-OF-VAR-NAMES.
05 VARNAME OCCURS 10 DEPENDING ON NUMBER-OF-VARIABLES
INDEXED BY IX-NAME PIC X(8).
01 ARRAY-OF-VAR-LENGTHS.
05 VARLEN OCCURS 10 DEPENDING ON NUMBER-OF-VARIABLES
INDEXED BY IX-LEN PIC S9(9) COMP.
01 STRING-OF-VAR-VALUES.
05 STRVAL OCCURS 4000 DEPENDING ON RXX-LENGTH-OF-VARIABLES
PIC X.
/
PROCEDURE DIVISION USING EXITDATA
PANEL-NAME
PANEL-SECTION
MESSAGE-ID
NUMBER-OF-VARIABLES
ARRAY-OF-VAR-NAMES
ARRAY-OF-VAR-LENGTHS
STRING-OF-VAR-VALUES.
- - - - - - - - - - - - - - - - 15 Line(s) not Displayed
PERFORM VARYING IX-LEN FROM 1 BY 1
UNTIL IX-LEN > NUMBER-OF-VARIABLES
ADD VARLEN (IX-LEN) TO RXX-LENGTH-OF-VARIABLES
END-PERFORM
- - - - - - - - - - - - - - - - 39 Line(s) not Displayed
MOVE EXITDATA
TO RXX-EXITDATA
MOVE LENGTH OF RXX-EXITDATA
TO RXX-EXITDATA-LEN
MOVE PANEL-NAME
TO RXX-PANEL-NAME
MOVE LENGTH OF RXX-PANEL-NAME
TO RXX-PANEL-NAME-LEN
MOVE PANEL-SECTION
TO RXX-PANEL-SECTION
MOVE LENGTH OF RXX-PANEL-SECTION
TO RXX-PANEL-SECTION-LEN
MOVE MESSAGE-ID
TO RXX-MESSAGE-ID
MOVE LENGTH OF RXX-MESSAGE-ID
TO RXX-MESSAGE-ID-LEN
MOVE NUMBER-OF-VARIABLES
TO RXX-NUMBER-OF-VARIABLES
MOVE LENGTH OF RXX-NUMBER-OF-VARIABLES
TO RXX-NUMBER-OF-VARIABLES-LEN
MOVE LENGTH OF RXX-LENGTH-OF-VARIABLES
TO RXX-LENGTH-OF-VARIABLES-LEN
MOVE ARRAY-OF-VAR-NAMES
TO RXX-ARRAY-OF-VAR-NAMES
MOVE LENGTH OF RXX-ARRAY-OF-VAR-NAMES
TO RXX-ARRAY-OF-VAR-NAMES-LEN
MOVE ARRAY-OF-VAR-LENGTHS
TO RXX-ARRAY-OF-VAR-LENGTHS
MOVE LENGTH OF RXX-ARRAY-OF-VAR-LENGTHS
TO RXX-ARRAY-OF-VAR-LENGTHS-LEN
MOVE STRING-OF-VAR-VALUES
TO RXX-STRING-OF-VAR-VALUES
MOVE LENGTH OF RXX-STRING-OF-VAR-VALUES
TO RXX-STRING-OF-VAR-VALUES-LEN
- - - - - - - - - - - - - - - - - 3 Line(s) not Displayed
CALL 'PANEXIT2' USING BY REFERENCE
RXX-EXITDATA-H
RXX-PANEL-NAME-H
RXX-PANEL-SECTION-H
RXX-MESSAGE-ID-H
RXX-NUMBER-OF-VARIABLES-H
RXX-LENGTH-OF-VARIABLES-H
RXX-ARRAY-OF-VAR-NAMES-H
RXX-ARRAY-OF-VAR-LENGTHS-H
RXX-STRING-OF-VAR-VALUES-H
*
ACCEPT RXX-EXITDATA-X FROM RETPARMS
ACCEPT RXX-PANEL-NAME FROM RETPARMS
ACCEPT RXX-PANEL-SECTION FROM RETPARMS
ACCEPT RXX-MESSAGE-ID FROM RETPARMS
ACCEPT RXX-NUMBER-OF-VARIABLES-X FROM RETPARMS
ACCEPT RXX-LENGTH-OF-VARIABLES-X FROM RETPARMS
ACCEPT RXX-ARRAY-OF-VAR-NAMES FROM RETPARMS
ACCEPT RXX-ARRAY-OF-VAR-LENGTHS FROM RETPARMS
ACCEPT RXX-STRING-OF-VAR-VALUES FROM RETPARMS
MOVE +81 TO W-1
PERFORM UNTIL W-1 > W-LENGTH-OF-VARIABLES
COMPUTE W-2 = W-LENGTH-OF-VARIABLES - W-1 + 1
ACCEPT RXX-STRING-OF-VAR-VALUES (W-1 : W-2)
FROM RETPARMS
ADD +80 TO W-1
END-PERFORM
- - - - - - - - - - - - - - - - 39 Line(s) not Displayed
MOVE RXX-EXITDATA
TO EXITDATA
MOVE RXX-PANEL-NAME
TO PANEL-NAME
MOVE RXX-PANEL-SECTION
TO PANEL-SECTION
MOVE RXX-MESSAGE-ID
TO MESSAGE-ID
MOVE RXX-NUMBER-OF-VARIABLES
TO NUMBER-OF-VARIABLES
MOVE RXX-ARRAY-OF-VAR-NAMES
TO ARRAY-OF-VAR-NAMES
MOVE RXX-ARRAY-OF-VAR-LENGTHS
TO ARRAY-OF-VAR-LENGTHS
MOVE RXX-STRING-OF-VAR-VALUES
TO STRING-OF-VAR-VALUES
- - - - - - - - - - - - - - - - - 6 Line(s) not Displayed
GOBACK.
REXX pgm:
---------
/* REXX
- - - - - - - - - - - - - - - 228 Line(s) not Displayed
Parse Arg in_exitdata, in_panelname, in_panelsect, in_msgid, in_numofvars,
,in_lenofvarvalues, in_arrayofnames, in_arrayoflengths,
,in_arrayofvalues
numofvars = C2d(in_numofvars) - 1
lenofvarvalues = C2d(in_lenofvarvalues)
panxrxxvallen = C2d(Substr(in_arrayoflengths,1,4))
panxrxx = Strip(Substr(in_arrayofnames,1,8))
panxrxxl = Length(panxrxx)
panxrxxvar = Substr(in_arrayofnames,1,8)
If panxrxxvallen > 0 Then ,
panxrxxval = Substr(in_arrayofvalues,1,panxrxxvallen)
Else ,
panxrxxval = ''
arrayofnames = ''
x1 = Substr(in_arrayofnames,9)
Do While x1 ^= ''
Parse Value x1 With x2 9 x1
arrayofnames = arrayofnames x2
End
arrayofnames = Space(arrayofnames)
arrayoflengths = ''
x1 = Substr(in_arrayoflengths,5)
Do While x1 ^= ''
Parse Value x1 With x2 5 x1
arrayoflengths = arrayoflengths C2d(x2)
End
arrayoflengths = Space(arrayoflengths)
arrayofvalues = Substr(in_arrayofvalues,panxrxxvallen + 1)
- - - - - - - - - - - - - - - - 4 Line(s) not Displayed
If x_testmode Then Do
Say 'PANEXIT2 in_exitdata >'C2x(in_exitdata) !!'<'
Say 'PANEXIT2 in_panelname >'in_panelname !!'<'
Say 'PANEXIT2 in_panelsect >'in_panelsect !!'<'
Say 'PANEXIT2 in_msgid >'in_msgid !!'<'
Say 'PANEXIT2 in_numofvars >'C2d(in_numofvars)!!'<'
Say 'PANEXIT2 lenofvarvalues >'lenofvarvalues !!'<'
Say 'PANEXIT2 in_arrayofnames >'in_arrayofnames !!'<'
Say 'PANEXIT2 in_arrayoflen.(1) >'panxrxxl !!'<'
Say 'PANEXIT2 in_arrayofvalues >'in_arrayofvalues !!'<'
End
rec. = ''
rec.1 = in_exitdata
rec.2 = in_panelname
rec.3 = in_panelsect
rec.4 = in_msgid
rec.5 = in_numofvars
rec.6 = in_lenofvarvalues
rec.7 = in_arrayofnames
rec.8 = in_arrayoflengths
rec.9 = Left(in_arrayofvalues,Max(lenofvarvalues,80))
- - - - - - - - - - - - - - - - 44 Line(s) not Displayed
rec.0 = 9
- - - - - - - - - - - - - - - - 13 Line(s) not Displayed
Address Tso
'ALLOC F(SYSIN) NEW REUSE' ,
'RECFM(F B) LRECL(80) BLKSIZE(800) TRACKS SPACE(1 1)'
'EXECIO * DISKW SYSIN (STEM REC. FINIS'
- - - - - - - - - - - - - - - - 2 Line(s) not Displayed
Exit Strip(rcode)
- - - - - - - - - - - - - - - 462 Line(s) not Displayed
Regards
Thomas Berg
____________________________________________________________________
Thomas Berg Specialist z/OS\RQM\IT Delivery SWEDBANK AB (Publ
> Behalf Of Harold Mains
> Sent: Thursday, May 02, 2013 9:28 PM
> To:
TSO-...@VM.MARIST.EDU
> Subject: Re: [TSO-REXX] COBOL calling REXX
>
> Yes I know of this manual. Unfortunately, the only example this manual
> provides is for PL/1, not COBOL. It does not describe the COBOL code
> requirements, the REXX code, the JCL and library requirements, and how
> the COBOL program is to send data to the REXX for processing and how
> the REXX programs passes data back to the COBOL program for further
> work.
<snip>
> -----Original Message-----
> From: TSO REXX Discussion List [mailto:
TSO-...@VM.MARIST.EDU] On
> Behalf Of Paul Gilmartin
> Sent: Wednesday, May 01, 2013 9:26 PM
> To:
TSO-...@VM.MARIST.EDU
> Subject: Re: [TSO-REXX] COBOL calling REXX
>
> On 2013-05-01, at 12:06, Harold Mains wrote:
>
> > What code is required in a COBOL program to call a REXX exec? One
> data item needs to be passed to the REXX and two different data items
> returned to the COBOL program.
> >
> > What code is required in the REXX exec to be called from the COBOL
> program above and handle the data items?
> >
> The interfaces are described in:
>
> Title: z/OS V1R13.0 TSO/E REXX Reference Document Number: SA22-7790-10
>
>
http://publibz.boulder.ibm.com/cgi-
> bin/bookmgr_OS390/BOOKS/IKJ4A3A0/12.0
> 12.0 Chapter 12. TSO/E REXX programming services