|
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 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.