Portal | Manuals | References | Downloads | Info | Programs | JCLs | Master the Mainframes
IBM Mainframe Computers Forums Index
 
Register
 
IBM Mainframe Computers Forums Index Mainframe: Search IBM Mainframe Forum: FAQ Memberlist Usergroups Profile Log in to check your private messages Log in
 

 

Problem when compiling a Main procedure with package routine

 
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> PL/I & Assembler
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    Post subject: Problem when compiling a Main procedure with package routine
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    Post subject: Re: Problem when compiling a Main procedure with package rou
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    Post subject:
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    Post subject: Reply to: Problem when compiling a Main procedure with packa
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    Post subject:
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    Post subject:
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

Global Moderator


Joined: 14 Mar 2007
Posts: 10232
Location: italy

PostPosted: Mon Oct 29, 2007 6:33 pm    Post subject: Reply to: Problem when compiling a Main procedure with packa
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    IBMMAINFRAMES.com Support Forums -> PL/I & Assembler All times are GMT + 6 Hours
Page 1 of 1

 

Search our Forum:

Similar Topics
Topic Author Forum Replies Posted
No new posts Problem reading GTF trace output danik56 ABENDS & Debugging 7 Thu Mar 16, 2017 1:02 pm
No new posts Why myself doing Package Bind always ... Susanta DB2 5 Thu Mar 02, 2017 10:47 pm
No new posts ROUNDED Problem with COMPUTE statement shalem COBOL Programming 11 Thu Feb 09, 2017 8:16 pm
No new posts Calling procedure with multiple entri... steve-myers PL/I & Assembler 5 Fri Jan 27, 2017 3:33 pm
No new posts SYMNAMES problem jacobdng DFSORT/ICETOOL 7 Thu Dec 22, 2016 7:47 am


Facebook
Back to Top
 
Mainframe Wiki | Forum Rules | Bookmarks | Subscriptions | FAQ | Tutorials | Contact Us