|
View previous topic :: View next topic
|
| Author |
Message |
treize59
New User
Joined: 15 Mar 2006 Posts: 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 2006 Posts: 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 2006 Posts: 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 |
|
 |
|
|
 |
All times are GMT + 6 Hours |
|