IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

Problem when compiling a Main procedure with package routine


IBM Mainframe Forums -> PL/I & Assembler
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
robert-ohlen

New User


Joined: 01 Jun 2007
Posts: 11
Location: Soiron

PostPosted: Wed Jul 11, 2007 2:56 pm
Reply with quote

When I compile the Package routine, I haven't problem; but when I compile the Main procedure, I have a message that indicates unknown procedure in a package routine:

IBM1237I E 16.0 EXTERNAL ENTRY attribute is assumed for PUSH.
IBM1237I E 18.0 EXTERNAL ENTRY attribute is assumed for VIEW.

Is there an option or a parameter with the link edit to make known the procedures of the package?

Here the code of the two programs:

Main Procedure.

Code:
PLI037G: PROC OPTIONS(MAIN) REORDER;                 
 DCL 1 ST1,                                           
      2 CLE_ST UNION,                                 
       3 CLE    FIXED BIN(31),                         
       3 CLE_C  CHAR(4),                               
      2 DATA CHAR(15);                                 
 DCL PLI037B ENTRY;                                   
 DCL LIST1   PTR INIT(NULL());                         
 DCL         SYSPRINT FILE  STREAM OUTPUT PRINT;       
 DCL I       FIXED BIN(31);                           
 DCL ALPHA   CHAR VALUE('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
 DO I=1 TO 26;                                         
   ST1.CLE =I*1000;                                   
   ST1.DATA=REPEAT(SUBSTR(ALPHA,I,1),14);             
   CALL PUSH(LIST1,ST1.CLE_C,ST1.DATA);               
 END;                                                 
 CALL VIEW(LIST1,ST1.CLE_C,ST1.DATA);                 
END PLI037G;                               


And Package routine.

Code:
PLI037B: PACKAGE EXPORTS (*);                                         
 DCL LGCLE     FIXED BIN(31);                                           
 DCL LGDATA    FIXED BIN(31);                                           
 DCL 1 ST      BASED,                                                   
     2 CLE     CHAR(LGCLE),                                             
     2 DATA    CHAR(LGDATA),                                           
     2 PREC    PTR;                                                     
 /*-------------------------------------------------------------------*/
 PUSH: PROC(DEBUT,CLE,DATA) REORDER;                                   
 DCL DEBUT     PTR;                                                     
 DCL CLE       CHAR(*);                                                 
 DCL DATA      CHAR(*);                                                 
 LGCLE=STG(CLE);                                                       
 LGDATA=STG(DATA);                                                     
 ALLOCATE ST SET(DEBUT);                                               
 DEBUT->ST.CLE=CLE;                                                     
 DEBUT->ST.DATA=DATA;                                                   
 DEBUT->ST.PREC=NULL();                                                 
 END PUSH;                                                             
 /*-------------------------------------------------------------------*/
 VIEW: PROC(DEBUT,CLE,DATA) REORDER;                                   
 DCL DEBUT     PTR;                                                     
 DCL CLE       CHAR(*);                                                 
 DCL DATA      CHAR(*);                                                 
 LGCLE=STG(CLE);                                                       
 LGDATA=STG(DATA);                                                     
 DCL TMP       PTR;                                                     
 TMP=DEBUT;                                                             
 DO WHILE(TMP^=NULL());                                                 
   PUT SKIP EDIT('CLE:',TMP->ST.CLE,' DATA:',TMP->ST.DATA)(A);         
   TMP=TMP->ST.PREC;                                                   
 END;                                                                   
 END VIEW;                                                             
END PLI037B;
Back to top
View user's profile Send private message
ilanjai

New User


Joined: 11 Jul 2007
Posts: 2
Location: Hyderabad

PostPosted: Wed Jul 11, 2007 4:33 pm
Reply with quote

Change the following statement
DCL PLI037B ENTRY;
to
DCL PLI037B EXTERNAL ENTRY;

Ensure that PLI037B is part of your Link Edit step.

It should start working
Back to top
View user's profile Send private message
robert-ohlen

New User


Joined: 01 Jun 2007
Posts: 11
Location: Soiron

PostPosted: Wed Jul 11, 2007 7:38 pm
Reply with quote

It's a value by default. The message in the compilation is
PLI037B CONSTANT EXTERNAL ENTRY

And in the compile JCL, a library of PLI037B is in SYSLIB.

have you an other idea ?
Back to top
View user's profile Send private message
robert-ohlen

New User


Joined: 01 Jun 2007
Posts: 11
Location: Soiron

PostPosted: Fri Aug 24, 2007 12:50 pm
Reply with quote

If that can help you to help me, here the jcl of compilation

Code:
//*--------------------------------------------------------------------
//* COMPILE STEP                                                       
//*--------------------------------------------------------------------
//PLI      IF RC LT 9 THEN                                             
//PLI      EXEC PGM=IBMZPLI,REGION=0M,                                 
//  PARM='àDD:OPTIONS,LIST,MAP,OFFSET,NOSTMT'                           
//STEPLIB  DD DSN=IBMZ.SIBMZCMP,DISP=SHR                               
//OPTIONS  DD *                                                         
AGGREGATE,ARCH(5),ATTRIBUTES(FULL),BACKREG(11),BIFPREC(15),CMPAT(V2),   
DFT(REORDER,BYADDR,RETURNS(BYVALUE),CONN,DESCRIPTOR),FLAG(I),FLOAT(AFP),
EXTRN(SHORT),GONUMBER,INSOURCE,LIMITS(EXTNAME(7),FIXEDDEC(15,31)),     
LINECOUNT(48),MACRO,MARGINS(2,72,1),MAXMSG(32767),NEST,NOMARGINI,       
NORENT, OPTIONS,OPT(TIME),RULES(IBM),TUNE(5),SOURCE,STMT,XREF(FULL)     
/*                                                                     
//SYSLIB   DD DSN=&SYSUID..T.COPY,DISP=SHR                             
//SYSIN    DD DSN=&SYSUID..T.PGMVA(PLI037A),DISP=SHR                   
//SYSPRINT DD SYSOUT=*                                                 
//SYSOUT   DD SYSOUT=*                                                 
//SYSLIN   DD DSN=,DISP=(MOD,PASS),UNIT=SYSDA,                         
//            SPACE=(CYL,(1,1)),DCB=(LRECL=80,BLKSIZE=0)               
//SYSUT1   DD DSN=,UNIT=SYSDA,                                         
//            SPACE=(1024,(200,50),,CONTIG,ROUND),DCB=BLKSIZE=1024     
//PLI      ENDIF                                                       
//*--------------------------------------------------------------------
//* LINK STEP                                                         
//*--------------------------------------------------------------------
//LINK     IF RC LT 9 THEN                                             
//LINK     EXEC PGM=IEWBLINK,REGION=32M,                               
// PARM='NOXREF'                                                       
//SYSLIB   DD DSN=CEE.SCEELKED,DISP=SHR                               
//         DD DSN=&SYSUID..T.OBJVA,DISP=SHR                           
//SYSPRINT DD SYSOUT=*                                                 
//SYSLIN   DD DSN=*.PLI.SYSLIN,DISP=(OLD,PASS)                         
//         DD DDNAME=SYSIN                                             
//SYSLMOD  DD DSN=&SYSUID..T.LOAD(PLI037A),DISP=SHR                   
//SYSDEFSD DD DUMMY                                                   
//SYSIN    DD DUMMY                                                   
//LINK     ENDIF                                       


Code:
//*--------------------------------------------------------------------
//* COMPILE STEP                                                       
//*--------------------------------------------------------------------
//PLI      IF RC LT 9 THEN                                             
//PLI      EXEC PGM=IBMZPLI,REGION=0M,                                 
//  PARM='àDD:OPTIONS,LIST,MAP,OFFSET,NOSTMT'                           
//STEPLIB  DD DSN=IBMZ.SIBMZCMP,DISP=SHR                               
//OPTIONS  DD *                                                         
AGGREGATE,ARCH(5),ATTRIBUTES(FULL),BACKREG(11),BIFPREC(15),CMPAT(V2),   
DFT(REORDER,BYADDR,RETURNS(BYVALUE),CONN,DESCRIPTOR),FLAG(I),FLOAT(AFP),
EXTRN(SHORT),GONUMBER,INSOURCE,LIMITS(EXTNAME(7),FIXEDDEC(15,31)),     
LINECOUNT(48),MACRO,MARGINS(2,72,1),MAXMSG(32767),NEST,NOMARGINI,       
NORENT, OPTIONS,OPT(TIME),RULES(IBM),TUNE(5),SOURCE,STMT,XREF(FULL)     
/*                                                                     
//SYSLIB   DD DSN=&SYSUID..T.COPY,DISP=SHR                             
//SYSIN    DD DSN=&SYSUID..T.PGMVA(PLI037B),DISP=SHR                   
//SYSPRINT DD SYSOUT=*                                                 
//SYSOUT   DD SYSOUT=*                                                 
//SYSLIN   DD DSN=,DISP=(MOD,PASS),UNIT=SYSDA,                         
//            SPACE=(CYL,(1,1)),DCB=(LRECL=80,BLKSIZE=0)               
//SYSUT1   DD DSN=,UNIT=SYSDA,                                         
//            SPACE=(1024,(200,50),,CONTIG,ROUND),DCB=BLKSIZE=1024     
//PLI      ENDIF                                                       
//*--------------------------------------------------------------------
//* LINK STEP                                                           
//*--------------------------------------------------------------------
//LINK     IF RC LT 9 THEN                                             
//LINK     EXEC PGM=IEWBLINK,REGION=32M,                               
// PARM='NCAL,LET,NOXREF,DYNAM=DLL'                                     
//SYSLIB   DD DSN=CEE.SCEELKED,DISP=SHR                                 
//         DD DSN=&SYSUID..T.OBJVA,DISP=SHR                             
//SYSPRINT DD SYSOUT=*                                                 
//SYSLIN   DD DSN=*.PLI.SYSLIN,DISP=(OLD,PASS)                         
//         DD DDNAME=SYSIN                                             
//SYSLMOD  DD DSN=&SYSUID..T.OBJVA(PLI037B),DISP=SHR                   
//SYSDEFSD DD DUMMY                                                     
//SYSIN    DD DUMMY                                                     
//LINK     ENDIF                                                       
Back to top
View user's profile Send private message
waneked

New User


Joined: 25 Sep 2007
Posts: 2
Location: switzerland

PostPosted: Thu Sep 27, 2007 2:40 pm
Reply with quote

Hi robert-ohlen

you must declare for eatch entry (procedure in a package) an external entry in the main program.

dcl push external entry (ptr, char(*), char(*));
dcl view external entry (ptr, char(*), char(*));
Back to top
View user's profile Send private message
robert-ohlen

New User


Joined: 01 Jun 2007
Posts: 11
Location: Soiron

PostPosted: Mon Oct 29, 2007 6:21 pm
Reply with quote

Sorry for my response time

I have the same response to LINK.

IEW2456E 9207 SYMBOL PUSH UNRESOLVED. MEMBER COULD NOT BE INCLUDED FROM THE DESIGNATED CALL LIBRARY.

IEW2456E 9207 SYMBOL VIEW UNRESOLVED. MEMBER COULD NOT BE INCLUDED FROM THE DESIGNATED CALL LIBRARY.
Back to top
View user's profile Send private message
enrico-sorichetti

Superior Member


Joined: 14 Mar 2007
Posts: 10873
Location: italy

PostPosted: Mon Oct 29, 2007 6:33 pm
Reply with quote

There are always misunderstanding on Autocall feature..

How in heaven is supposed the linkage_editor/binder realize
that push and view are entry points of pli037b ???

You have two alternatives,

1) include explicitly the object with multiple entry points

2) when linking ( but I feel that' useless) the load thing
add tho lked syslin an alias statement for each one of the entry points.

usually by naming tradition an
...obj... contains text format things
...mod... contains load format things

there is no need to link/bind statically called subroutines/packages
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> PL/I & Assembler

 


Similar Topics
Topic Forum Replies
No new posts Map Vols and Problem Dataset All Other Mainframe Topics 2
No new posts ACS exit routine JCL & VSAM 0
No new posts z/vm installation problem All Other Mainframe Topics 0
No new posts Invoke stored procedure via batch JCL. DB2 2
No new posts Job scheduling problem. JCL & VSAM 9
Search our Forums:

Back to Top