× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Thanks to everyone who replied.
A couple of comments.
The problem I was addressing was to able to 'dynamically' assign procedure 
names which are in effect RPG *MODULES. The prototype would be the same in all 
cases but the idea was to retrieve the name of the procedure from a application 
parameter as we do with dynamically called programs. I follow the PROCPTR 
approach  outlined by Brigitta and Jon but there is still the problem that the 
procedure name is hard coded. Perhaps we need to move these to a service 
program and then use the API described by Alan  and Beppe. Yes Alan I would be 
interested to have the code.   

-----Message d'origine-----
De : rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] De la 
part de rpg400-l-request@xxxxxxxxxxxx
Envoyé : mardi 24 mai 2005 18:47
À : rpg400-l@xxxxxxxxxxxx
Objet : RPG400-L Digest, Vol 4, Issue 561

Send RPG400-L mailing list submissions to
        rpg400-l@xxxxxxxxxxxx

To subscribe or unsubscribe via the World Wide Web, visit
        http://lists.midrange.com/mailman/listinfo/rpg400-l
or, via email, send a message with subject or body 'help' to
        rpg400-l-request@xxxxxxxxxxxx

You can reach the person managing the list at
        rpg400-l-owner@xxxxxxxxxxxx

When replying, please edit your Subject line so it is more specific
than "Re: Contents of RPG400-L digest..."


Today's Topics:

   1. RE: Variable Modules (Hauser, Birgitta)
   2. Re: Variable Modules (Beppe Costagliola)
   3. RE: Best options for polling a file (Rick DuVall)
   4. Re: Unable to view management central monitors on win xp with
      sp2 ? (David Gibbs)
   5. RE: Variable Modules (Jon Paris)
   6. *** ADMIN: Experimental Wiki (David Gibbs)
   7. RE: Variable Modules (Alan Campin)


----------------------------------------------------------------------

message: 1
date: Tue, 24 May 2005 13:25:50 +0200
from: "Hauser, Birgitta" <Birgitta.Hauser@xxxxxxxxxxx>
subject: RE: Variable Modules

Hi Paul,

to call modules oder better procedures dynamically, you have to use
prototyping and procedure pointers.
In contrary to programs that are called dynamically, that means they aren't
activated before the CALL statement is executed, the procedures must exist
at compile time. The module object that contains the procedures or the
signature of the service program where the module is bound to are physically
embedded into the program object.

Here an example:
I have three procedures that convert a date into a character representation.

The first procedure converts to *EUR format, the second to *USA-Format and
the third to *JIS-Format.
You will see the prototypes for these functions
D CvtDateToEur    PR            10A   extproc('CVTDATEUR')

D   ParmDate                      D   const options(*NoPass)     
                                                                 
D CvtDateToUSA    PR            10A   extproc('CVTDATUSA')

D   ParmDate                      D   const options(*NoPass)     
                                                                 
D CvtDateToJIS    PR            10A   extproc('CVTDATJIS)

D   ParmDate                      D   const options(*NoPass) 

Here are the functions:
  ************************************************************
  * Converte Date into European Format                 
  ************************************************************
 P CvtDateToEur    B                   Export                 
 D CvtDateToEur    PI            10A                          
 D   ParmDate                      D   const options(*NoPass) 
  *-----------------------------------------------------------
  /Free                                                       
     If %Parms >= 1;                                          
        Return  %Char(ParmDate: *Eur);                        
     else;                                                    
        Return  %Char(%Date(): *Eur);                         
     EndIf;                                                   
  /End-Free                                                   
 P CvtDateToEur    E                                          
  ************************************************************
  * Convert Date into USA Format                          
  ************************************************************
 P CvtDateToUSA    B                   Export                     
D CvtDateToUSA    PI            10A                               
D   ParmDate                      D   const options(*NoPass)      
 *----------------------------------------------------------------
 /Free                                                            
    If %Parms >= 1;                                               
       Return  %Char(ParmDate: *USA);                             
    else;                                                         
       Return  %Char(%Date(): *USA);                              
    EndIf;                                                        
 /End-Free                                                        
P CvtDateToUSA    E                                               
 *****************************************************************
 * Convert Date into Japanese Format                       
 *****************************************************************
P CvtDateToJIS    B                   Export                      
D CvtDateToJIS    PI            10A                               
D   ParmDate                      D   const options(*NoPass)      
 *----------------------------------------------------------------
 /Free                                                            
    If %Parms >= 1;  
        Return  %Char(ParmDate: *JIS);                     
     else;                                                 
        Return  %Char(%Date(): *JIS);                      
     EndIf;                                                
  /End-Free                                                
P CvtDateToJIS    E 

Depending on the language or country you want to call one of these
functions.
To do this you need an additional prototype. Add the Keyword EXTPROC and
specify a procedure pointer variable instead of a procedure name.
A procedure pointer has the data type * and the key word PROCPTR.
The following example shows you the additional prototype and the definition
of the procedure pointer variable:

D CvtDate         PR            10A   ExtProc(MyProcPtr)      
D   ParmDate                      D   const options(*NoPass)  
                                                              
D MyProcPtr       S               *   ProcPtr                 

This prototype and procedure pointer must be embedded in the source where
you want to calle the functions "dynamically".
The next example shows you how to call these functions.
D ConstProcUSA    C                   const(%PAddr('CVTDATUSA'))

D ConstProcJIS    S               *   ProcPtr inz(%PAddr('CVTDATJIS'))

 /Free
   Select;                                       
   When Country   = 'DE ';                          
        MyProcPtr = %PAddr('CVTDATEUR');      
   When Country   = 'USA';                          
        MyProcPtr = ConstProcUSA;                
   When Country   = 'JPN';                          
        MyProcPtr = ConstProcJIS;                
   EndSL;                                        
                                              
   MyCharDate = CvtDate(MyDate);
 /End-Free     

I hope this helps!                

Birgitta                                  
                                             
Mit freundlichen Gren
 
i.A. Birgitta Hauser
 
LUNZER + PARTNER GMBH
Unternehmensberatung
Carl-Zeiss-Strae 1
63755 Alzenau
 
Tel:         + 49 6023 951-255
Fax:        + 49 6023 951-111
Internet.  www.lp-gmbh.com
              www.rpg-schulung.de
 



------------------------------

message: 2
date: Tue, 24 May 2005 14:12:36 +0200
from: "Beppe Costagliola" <beppecosta@xxxxxxxx>
subject: Re: Variable Modules

Paul,

if your procedures are in a service program you can dynamically call with
QZRUCLSP Api that also allows you to use variable parameters and get return
values.

Example:

QZRUCLSP(SrvPgm+SrvPgmLib:%trimr(Procedure)+x'00':
         RETTYPE_NONE:PARMTYPE_PTR:1:ApiError:
         RtnVal:Parameter1);



----- Original Message ----- 
From: "Hauser, Birgitta" <Birgitta.Hauser@xxxxxxxxxxx>
To: <rpg400-l@xxxxxxxxxxxx>
Sent: Tuesday, May 24, 2005 1:25 PM
Subject: RE: Variable Modules


> Hi Paul,
>
> to call modules oder better procedures dynamically, you have to use
> prototyping and procedure pointers.
> In contrary to programs that are called dynamically, that means they
aren't
> activated before the CALL statement is executed, the procedures must exist
> at compile time. The module object that contains the procedures or the
> signature of the service program where the module is bound to are
physically
> embedded into the program object.
>
> Here an example:
> I have three procedures that convert a date into a character
representation.
>
> The first procedure converts to *EUR format, the second to *USA-Format and
> the third to *JIS-Format.
> You will see the prototypes for these functions
> D CvtDateToEur    PR            10A   extproc('CVTDATEUR')
>
> D   ParmDate                      D   const options(*NoPass)
>
> D CvtDateToUSA    PR            10A   extproc('CVTDATUSA')
>
> D   ParmDate                      D   const options(*NoPass)
>
> D CvtDateToJIS    PR            10A   extproc('CVTDATJIS)
>
> D   ParmDate                      D   const options(*NoPass)
>
> Here are the functions:
>   ************************************************************
>   * Converte Date into European Format
>   ************************************************************
>  P CvtDateToEur    B                   Export
>  D CvtDateToEur    PI            10A
>  D   ParmDate                      D   const options(*NoPass)
>   *-----------------------------------------------------------
>   /Free
>      If %Parms >= 1;
>         Return  %Char(ParmDate: *Eur);
>      else;
>         Return  %Char(%Date(): *Eur);
>      EndIf;
>   /End-Free
>  P CvtDateToEur    E
>   ************************************************************
>   * Convert Date into USA Format
>   ************************************************************
>  P CvtDateToUSA    B                   Export
> D CvtDateToUSA    PI            10A
> D   ParmDate                      D   const options(*NoPass)
>  *----------------------------------------------------------------
>  /Free
>     If %Parms >= 1;
>        Return  %Char(ParmDate: *USA);
>     else;
>        Return  %Char(%Date(): *USA);
>     EndIf;
>  /End-Free
> P CvtDateToUSA    E
>  *****************************************************************
>  * Convert Date into Japanese Format
>  *****************************************************************
> P CvtDateToJIS    B                   Export
> D CvtDateToJIS    PI            10A
> D   ParmDate                      D   const options(*NoPass)
>  *----------------------------------------------------------------
>  /Free
>     If %Parms >= 1;
>         Return  %Char(ParmDate: *JIS);
>      else;
>         Return  %Char(%Date(): *JIS);
>      EndIf;
>   /End-Free
> P CvtDateToJIS    E
>
> Depending on the language or country you want to call one of these
> functions.
> To do this you need an additional prototype. Add the Keyword EXTPROC and
> specify a procedure pointer variable instead of a procedure name.
> A procedure pointer has the data type * and the key word PROCPTR.
> The following example shows you the additional prototype and the
definition
> of the procedure pointer variable:
>
> D CvtDate         PR            10A   ExtProc(MyProcPtr)
> D   ParmDate                      D   const options(*NoPass)
>
> D MyProcPtr       S               *   ProcPtr
>
> This prototype and procedure pointer must be embedded in the source where
> you want to calle the functions "dynamically".
> The next example shows you how to call these functions.
> D ConstProcUSA    C                   const(%PAddr('CVTDATUSA'))
>
> D ConstProcJIS    S               *   ProcPtr inz(%PAddr('CVTDATJIS'))
>
>  /Free
>    Select;
>    When Country   = 'DE ';
>         MyProcPtr = %PAddr('CVTDATEUR');
>    When Country   = 'USA';
>         MyProcPtr = ConstProcUSA;
>    When Country   = 'JPN';
>         MyProcPtr = ConstProcJIS;
>    EndSL;
>
>    MyCharDate = CvtDate(MyDate);
>  /End-Free
>
> I hope this helps!
>
> Birgitta
>
> Mit freundlichen Gren
>
> i.A. Birgitta Hauser
>
> LUNZER + PARTNER GMBH
> Unternehmensberatung
> Carl-Zeiss-Strae 1
> 63755 Alzenau
>
> Tel:         + 49 6023 951-255
> Fax:        + 49 6023 951-111
> Internet.  www.lp-gmbh.com
>               www.rpg-schulung.de
>
>
> -- 
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
>



------------------------------

message: 3
date: Tue, 24 May 2005 07:50:45 -0600
from: "Rick DuVall" <R_C_DuVall@xxxxxxxxxx>
subject: RE: Best options for polling a file

Hi Rich,

        with all due respect, I don't think Data Queues are cleared at ipl.  I 
use
them regularly and have never noted that.  The manual says in regard to the
crtdtaq cmd parameter 'Force'

FORCE
    Specifies whether the data queue entries sent to or received by this
data queue are forced to auxiliary storage.

    Note:       This parameter is valid only when TYPE(*STD) is specified.

    *NO: Send and receive operations are not immediately forced to auxiliary
storage.

    *YES: Send and receive operations are immediately forced to auxiliary
storage. ***This ensures that the changes are not lost if a system failure
occurs.*** This requires additional system overhead.


which would lead me to believe that they are not cleared at ipl. (as i am
sure they are not from experience)

Regards

Rick DuVall
Systems Manager
Dealer's Auto Auction of Okc
405 947-2886 Ext:143
rick@xxxxxxxxxx


[mailto:rpg400-l-bounces@xxxxxxxxxxxx]On Behalf Of Rich Duzenbury
Sent: Monday, May 23, 2005 9:41 PM
To: RPG programming on the AS400 / iSeries
Subject: RE: Best options for polling a file


On Mon, 2005-05-23 at 14:08 -0700, Alan Campin wrote:

> or using EOFDLY which again takes all kinds of resources.
EOFDLY doesn't consume large amounts of resources.  The job goes to
sleep until a record appears in the file.  EOFDLY has been around since
system/38 (perhaps before that), and it *couldn't* use much in the way
of resources because there weren't that many to consume.

The drawback to EOFDLY is that a database write must be made in order to
signal the listening job to do something.

> Data queues are just about as perfect as anything can be on the AS/400.
The problem with data queues is that they are transient.  If the system
goes down while there are (perhaps *important*) messages in the data
queue, you kiss them goodbye.

When the system is IPL'd, one of the things it does is to initialize
(read 'empty') the queues.

Regards,
Rich




------------------------------

message: 4
date: Tue, 24 May 2005 09:05:08 -0500
from: David Gibbs <david@xxxxxxxxxxxx>
subject: Re: Unable to view management central monitors on win xp with
        sp2 ?

Luqman wrote:
> I want to view system monitors of Management Central, using Iseries 
> Navigator on my laptop, having windows xp pro, service pack 2, any idea how 
> can I do so ?

This question has nothing to do with RPG programming ... please post any
follow ups to MIDRANGE-L (http://lists.midrange.com/listinfo/midrange-l)
where it is more appropriate.

david



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.