|
Hi Ronald, "Ronald Nance" <RNANCE@commerceinsurance.com> wrote: > > Hello People, > > I am in the process of evaluating RPGILE with a team of people (8) > and I have been having a diffacult time creating a subprocedure. Le > me lay out what I have and what I want to do leave the rest to you.. > > I have a program (pgma) that calls a program (pgmb). Pgmb receives > some parms, performs some calculations and returns several values. > Pgmb contains only calculation specs and definitions. > > So I believe this will make an ideal subprocedure. > > I am not sure if I have to use the /copy to bring pgmb into pgma > after I add the necessary prototype code and I am not sure how to se > up the parameters. The example in the programmers guide is not clea > enough for me or I am very dense. Normally when you refer to a "subprocedure" its part of the same source member (or module) as the "main procedure" thats calling it. Since they're within the same source member, you don't use /COPY to bring them in. I'm guessing that what you really want to do is create a NOMAIN service program. Which is to say a service program without a "main" procedure, but just sub-procedures. And then you bind your programs to the service program to use the procedures.... You could also prototype your programs themselves, instead of using a sub-procedure, and call your existing pgmb. Or maybe (for speed?) you want to use two statically bound modules? And of course, theres probably 10 other ways you could do it :) So, I'll give you an example of the service program approach, and if thats not what you wanted, let me know and we'll give you a different example... > > I have been using the ILE RPG/400 programmers guide and I am not > haveing any luck completing my task. So, a simple coding example > would help me tremendously. > > PGMA > code example > > PGMB > code example > > Ronald Nance > Commerce Insurance Group > Webster, MA. 01570 > (508) 943-9000 Ext: 4078 In this example, PGMB will be a utility for converting a numeric field to a human-readable character field. (I'm at V3R2, and can't use %editc for this!) There are 3 source members here. They are: PGMA -- the program that you'll call. PGMB -- the service program that contains the subprocedure. PGMB_H -- a "header" file to make it easy to include PGMB's functions in other RPG programs. To compile these, do: CRTRPGMOD MODULE(PGMB) SRCFILE(xxx/QRPGLESC) DBGVIEW(*LIST) CRTSRVPGM SRVPGM(PGMB) MODULE(xxx/PGMB) EXPORT(*ALL) ACTGRP(*CALLER) CRTRPGMOD MODULE(PGMA) SRCFILE(xxx/QRPGLESC) DBGVIEW(*LIST) CRTPGM PGM(PGMA) MODULE(xxx/PGMA) BNDSRVPGM(xxx/PGMB) ACTGRP(*NEW) To run: CALL PGMA Source member: PGMB_H: --------------------------------------------------------------------- ** This is a HEADER for using the NumToChar sub-procedure from ** the PGMB service program. ** ** This is simply /COPY-ed into the source of the program that you ** want to use it from. ** ** If this were an actual service program, there'd probably be many ** different subprocedures (all related to each other) that can be ** called in that service program. ** D NumToChar PR 17A D pePacked 15S 5 VALUE Source member: PGMB: --------------------------------------------------------------------- H NOMAIN D/COPY QRPGLESRC,PGMB_H P*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ P* Sub procedure to format a numeric field into a character P* field, so that its easy to read. P*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ P NumToChar B EXPORT D NumToChar PI 17A D pePacked 15S 5 VALUE D wkReturn S 17A D wkWhole S 10A D wkDec S 5A D wkPos S 5I 0 c eval wkReturn = *blanks C* handle neg sign c if pePacked < 0 c eval wkReturn = '-' c eval pePacked = 0 - pePacked c endif C* Handle numbers before C* decimal place c movel pePacked wkWhole c '0' check wkWhole wkPos c if wkPos > 0 c eval wkReturn = %trim(wkReturn) + c %subst(wkWhole:wkPos) c endif C* Handle numbers after C* decimal place c move pePacked wkDec c '0' checkr wkDec wkPos c if wkPos > 0 c eval wkReturn = %trim(wkReturn) + '.' + c %subst(wkDec:1:wkPos) c endif c Return wkReturn P E Source member: PGMA: --------------------------------------------------------------------- D/COPY QRPGLESRC,PGMB_H D wkTest1 S 4S 0 D wkTest2 S 7P 2 D wkTest3 S 11S 4 D wkMsg S 40A c eval wkTest1 = 4561.144 c eval wkTest2 = 4562.164 c eval wkTest3 = 4563.894 c eval wkMsg = 'Test 1 converts to ' + c %trim(NumToChar(wkTest1)) c dsply wkMsg c eval wkMsg = 'Test 2 converts to ' + c %trim(NumToChar(wkTest2)) c dsply wkMsg c eval wkMsg = 'Test 3 converts to ' + c %trim(NumToChar(wkTest3)) c dsply wkMsg c eval wkMsg = 'Test 1 as negative ' + c %trim(NumToChar(wkTest1*-1)) c dsply wkMsg c eval wkMsg = 'Test 2 as negative ' + c %trim(NumToChar(wkTest2*-1)) c dsply wkMsg c eval wkMsg = 'Test 3 as negative ' + c %trim(NumToChar(wkTest3*-1)) c dsply wkMsg c eval *INLR = *ON +--- | This is the RPG/400 Mailing List! | To submit a new message, send your mail to RPG400-L@midrange.com. | To subscribe to this list send email to RPG400-L-SUB@midrange.com. | To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com. | Questions should be directed to the list owner/operator: david@midrange.com +---END
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 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.