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



On 10/4/2016 12:32 PM, dlclark@xxxxxxxxxxxxxxxx wrote:
In RPG, I'm familiar with %addr, %parms, and %parmnum for testing
parameters to make sure they were passed to the program or procedure and
have a valid address. For example:

if %parms < %parmnum(pMyData) // if parm not passed
or %addr(pMyData) = *null; // or was omitted
else; // skip it, else
// do something
endif;

But I have a large number of parameters that I would like to be
able to examine in a loop -- rather than have to code each test
individually and repeatedly. Is there a way I can check the address of a
parameter by its parm number rather than by its parm name? Thanks.


You could use a C module for your main procedure. A C main gets its parameters as an array of pointers. You could use this C module as the program-entry module for any program where you want the parameters as an array. You just have to name the RPG procedure RPGMAIN (or whatever name you use in the C module).

Be aware that string literals passed to a C program from the CALL command are null-terminated, which may or may not be a good thing. But the parameters passed to a command-processing program are handled the same for any programming language.

// C main
#include <stddef.h>
void RPGMAIN(int argCount, void *argArr[]); // Prototype for RPG
main(int argc, void *argv[])
{
// Skip the first parameter for the call to RPG
// argv[0] is the name of the program
if (argc == 1)
{
RPGMAIN (0, NULL);
}
else
{
RPGMAIN (argc - 1, &(argv[1]));
}
}

// RPG "main"
ctl-opt nomain;

dcl-proc RPGMAIN export;
dcl-pi *n;
argCount int(10) value;
argArr pointer dim(400) options(*varsize);
end-pi;
dcl-s i int(10);

for i = 1 to argCount;
if argArr(i) <> *null;
// do something
endif;
endfor;
end-proc;


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

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.