View previous topic :: View next topic
Author
Message
treize59 New User Joined: 15 Mar 2006Posts: 2
Hi,
I want to call IDCAMS from PL/I. IDCAMS is in RM=24 and AM=ANY, my program is in AM=31 and RM=ANY. I searched some doc about this and i found some sample in asm (http://www.itc.virginia.edu/~drs8h/articles/idcupdt.txt) and cobol (http://www.naspa.com/PDF/2000/0100%20TS%20PDFs/T0001006.pdf) but none in PL/I.
When i run my program in mode 24 (stack=below in JCL), the return code is ok.
But, when i run my program in mode 31, i have an abend S0C4-4.
I think my problem is in the parameters to call IDCAMS.
here is the code:
Code:
CALLIDC: PROC (ZPARM) OPTIONS (MAIN) REORDER;
DCL (PLIRETC, ADDR, UNSPEC) BUILTIN;
DCL SORTIE CHAR (80) INIT ('');
DCL ZPARM CHAR (100) VAR;
DCL Q CHAR (1) INIT ('''');
DCL FILPRNT FILE PRINT;
DCL SYSPRINT FILE PRINT;
DCL FILOUT FILE RECORD OUTPUT;
DCL CC FIXED BIN (31) INIT (0); /* CODE RETOUR S/P */
DCL RC FIXED BIN (31) INIT (0);
DCL IDCAMS EXT ENTRY
(FIXED BIN(15), CHAR(*)
,FIXED BIN(15)
,BIT(8) ,BIT(8) ,BIT(8) ,BIT(8)
,CHAR(*) ,CHAR(*) );
DCL 1 CTPARM,
2 OPT,
3 L1 FIXED BIN (15) INIT (0),
3 OPL CHAR (4) INIT ('');
DCL 1 CTDDN,
2 DDN,
3 L2 FIXED BIN (15) INIT (72),
3 DIV,
4 B01 BIT (8) INIT ('0'B),
4 B02 BIT (8) INIT ('0'B),
4 B03 BIT (8) INIT ('0'B),
4 B04 BIT (8) INIT ('0'B),
4 DD1 CHAR (8) INIT ('SYSIN'),
4 DD2 CHAR (8) INIT ('SYSPRINT');
OPEN FILE (FILPRNT);
PUT SKIP FILE (FILPRNT) EDIT
('DEBUT DE TRAITEMENT (CALLIDC)') (A);
OPEN FILE (FILOUT) TITLE('SYSIN');
SORTIE = ' REPRO IDS(' !! Q !!
'GLLLBND.SYSP.SA01.RESULTS.DATA(I31F2341)' !! Q !! ') -' ;
WRITE FILE (FILOUT) FROM (SORTIE);
SORTIE = ' OUTFILE(TEMP)';
WRITE FILE (FILOUT) FROM (SORTIE);
CLOSE FILE (FILOUT);
FETCH IDCAMS;
CALL IDCAMS (CTPARM.L1, CTPARM.OPL
, CTDDN.L2, CTDDN.B01, CTDDN.B02, CTDDN.B03, CTDDN.B04
, CTDDN.DD1, CTDDN.DD2);
PUT SKIP DATA (CC);
PUT SKIP FILE (FILPRNT) EDIT
('FIN DE TRAITEMENT (CALLIDC)') (A);
CLOSE FILE (FILPRNT);
CALL PLIRETC (RC);
END CALLIDC;
[/quote]
Back to top
wcorsar New User Joined: 15 Jul 2006Posts: 6 Location: Florida
Here's and example of code we used to accomplish the same thing. Note the difference in the DCL for IDCAMS, the definition of the PARM structure and the call. (Do not pass OPL parameter.)
Hope this helps.
CALLIDC: PROCEDURE OPTIONS(MAIN) REORDER;
DCL IDCAMS EXTERNAL ENTRY OPTIONS (ASM,INTER);
DCL SORTIE CHAR(80) INIT ('');
DCL Q CHAR (1) INIT ('''');
DCL FILOUT FILE RECORD OUTPUT;
DCL 1 CTPARM,
2 OPT,
3 L1 FIXED BIN (15) INIT (0),
3 OPL CHAR (4) INIT('');
DCL 1 CTDDN,
2 DDN,
3 L2 FIXED BIN (15) INIT (48),
3 DIV,
4 B01 CHAR(8) INIT (LOW(8)),
4 B02 CHAR(8) INIT (LOW(8)),
4 B03 CHAR(8) INIT (LOW(8)),
4 B04 CHAR(8) INIT (LOW(8)),
4 DD1 CHAR (8) INIT ('SYSIN '),
4 DD2 CHAR (8) INIT ('SYSPRINT');
OPEN FILE (FILOUT) TITLE('SYSIN');
SORTIE =
' REPRO IDS(TEST.PLI.IDCAMS.IN) -';
WRITE FILE (FILOUT) FROM (SORTIE);
SORTIE =
' ODS(TEST.PLI.IDCAMS.OUT)';
WRITE FILE (FILOUT) FROM (SORTIE);
CLOSE FILE (FILOUT);
FETCH IDCAMS;
CALL IDCAMS (CTPARM.L1,
CTDDN.L2,
CTDDN.B01,
CTDDN.B02,
CTDDN.B03,
CTDDN.B04,
CTDDN.DD1,
CTDDN.DD2);
RELEASE IDCAMS;
END CALLIDC;
Back to top
treize59 New User Joined: 15 Mar 2006Posts: 2
Thank you,
I have found why my job is in error. If I code STACK(,,BELOW) instead of STACK(,,ANY) to LE/370, I have a RC=0.
If I code STACK(,,ANY), I'll
It's normal, because IDCAMS is in AM=ANY and RM=24.
Back to top
Please enable JavaScript!