Vielleicht hilft dir ja folgendes CLP ein wenig:
Code:
PGM PARM(&START &PROG)
DCL VAR(&START) TYPE(*CHAR) LEN(10)
DCL VAR(&PROG) TYPE(*CHAR) LEN(10)
/* API-FELDER */
DCL VAR(&RCV) TYPE(*CHAR) LEN(9999)
DCL VAR(&RCVLEN) TYPE(*CHAR) LEN(4)
DCL VAR(&RCVFMT) TYPE(*CHAR) LEN(8) VALUE(CSTK0100)
DCL VAR(&JOBID) TYPE(*CHAR) LEN(56)
DCL VAR(&JOBFMT) TYPE(*CHAR) LEN(8) VALUE(JIDF0100)
DCL VAR(&ERRCD) TYPE(*CHAR) LEN(128)
/* ARBEITSFELDER */
DCL VAR(&NOCENT) TYPE(*DEC) LEN(9)
DCL VAR(&OFFSET) TYPE(*DEC) LEN(9)
DCL VAR(&ENTRY) TYPE(*DEC) LEN(9)
DCL VAR(&ENTLEN) TYPE(*DEC) LEN(9)
DCL VAR(&POS) TYPE(*DEC) LEN(9)
DCL VAR(&PGM) TYPE(*CHAR) LEN(10)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
/* INIT'S */
CHGVAR VAR(%BIN(&RCVLEN)) VALUE(9999)
CHGVAR VAR(%BIN(&ERRCD 1 4)) VALUE(128)
CHGVAR VAR(%BIN(&ERRCD 5 4)) VALUE(0)
CHGVAR VAR(%SST(&JOBID 1 10)) VALUE('*')
CHGVAR VAR(%SST(&JOBID 43 2)) VALUE(X'0000')
CHGVAR VAR(%BIN(&JOBID 45 4)) VALUE(1)
CHGVAR VAR(%SST(&JOBID 49 8)) +
VALUE(X'0000000000000000')
/* AUFRUF */
CALL PGM(QWVRCSTK) PARM(&RCV &RCVLEN &RCVFMT +
&JOBID &JOBFMT &ERRCD)
IF COND(%BIN(&ERRCD 5 4) > 0) THEN(DO)
SNDPGMMSG MSGID(%SST(&ERRCD 9 7)) MSGF(QCPFMSG) +
MSGDTA(%SST(&ERRCD 17 112)) TOPGMQ(*PRV) +
MSGTYPE(*ESCAPE)
ENDDO
/* ALLES OK */
CHGVAR VAR(&NOCENT) VALUE(%BIN(&RCV 17 4))
CHGVAR VAR(&OFFSET) VALUE(%BIN(&RCV 13 4) + 1)
/* SCHLEIFE ÜBER EINTRÄGE */
STACK:
CHGVAR VAR(&NOCENT) VALUE(&NOCENT - 1)
IF COND(&NOCENT >= 0) THEN(DO)
CHGVAR VAR(&ENTLEN) VALUE(%BIN(&RCV &OFFSET 4))
CHGVAR VAR(&POS) VALUE(&OFFSET + 24)
CHGVAR VAR(&PGM) VALUE(%SST(&RCV &POS 10))
CHGVAR VAR(&POS) VALUE(&POS + 10)
CHGVAR VAR(&LIB) VALUE(%SST(&RCV &POS 10))
/* TESTAUSGABE */
SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&PGM +
*CAT &LIB) TOPGMQ(*PRV) MSGTYPE(*INFO)
CHGVAR VAR(&OFFSET) VALUE(&OFFSET + &ENTLEN)
GOTO CMDLBL(STACK)
ENDDO
ENDPGM
Anstelle der Testausgabe kannst du ja PROG und LIB entsprechend auswerten und abfragen.
Zu beachten ist lediglich, dass der 1. Stackeintrag das eigene Programm ist !
Bookmarks