× 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 again Elvis... I compiled mine as C++, though I don't think that
should make a difference (at least not according to the manual). I then got
the version (null terminate in CL, cast back to real datatypes in C++)
proposed in the Programmer's guide to work but your and Barbara's examples
are of course preferable. Will try again.


2009/2/25 Elvis Budimlic <ebudimlic@xxxxxxxxxxxxxxxxxxxxxxxxx>

Both Barbara's and mine example ought to work. I like Barbara's approach
better as it allows handling of varying data types, so I just tried it out.
Here are the results:

/*START C member source */
#include <stdio.h>
#include <decimal.h>

typedef struct inputArguments
{
char * pgmname;
char * userid;
decimal(10,2) * salary;
int * custno;
} main_args_t;

void main(int argc, main_args_t * main_args)
{
printf("1st arg = %s, 2nd arg = %s, 3rd arg = %D(10,2), 4th arg = %d",
main_args->pgmname, main_args->userid,
*main_args->salary, *main_args->custno);
}
/* END C member source */

Not sure if you're aware of it, but argv[0] is initialized implicitly by
the
OS to the fully qualified program name (i.e. ELVIS/INPTST). So, first
argument is always a char *, as illustrated in the struct with the leading
pgmname variable.
To compile the C source, I used this command:

CRTBNDC PGM(ELVIS/INPTST) SRCFILE(ELVIS/C) OUTPUT(*print) DBGVIEW(*ALL)

/* START *CMD source */
CMD PROMPT('Command with 3 arguments')
PARM KWD(USERID) TYPE(*CHAR) LEN(10)
PARM KWD(SALARY) TYPE(*DEC) LEN(10 2)
PARM KWD(CUSTNO) TYPE(*INT4)
/* END *CMD source */

Note that there is no 'pgmname' keyword, as it's passed implicitly by the
OS.
To compile the *CMD source, I used this command:

CRTCMD CMD(ELVIS/INPTST) PGM(ELVIS/INPTST) SRCFILE(ELVIS/CMD)

Then, to test the program, I invoked my command as:

INPTST USERID(MYUSERID) SALARY(3300.44) CUSTNO(77)

And got the following output:

1st arg = ELVIS/INPTST, 2nd arg = MYUSERID , 3rd arg = 3300.44, 4th arg =
77

Hth, Elvis

Celebrating 11-Years of SQL Performance Excellence on IBM i, i5/OS and
OS/400
www.centerfieldtechnology.com


-----Original Message-----
Subject: Re: [C400-L] Submit a program call

Back again... I tried out both Elvis' and Barbara's (I hope a first name
basis is ok!) solutions but I can't even get a compile:

"A parameter of type "main_args_t *" cannot be initialized with an
expression of type "char **"."

After taking a closer look at the language ref manual it seems as though
one
*has* to pass char **? Just seems so incredibly awkward that I, just to
perform a simple SBMJOB on the call to this program, would need to go
through a CL program and manually append null terminators etc... (which is
what they do in the Programmer's guide when calling C from CL).



--
This is the C programming iSeries / AS400 (C400-L) mailing list
To post a message email: C400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/c400-l
or email: C400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/c400-l.



As an Amazon Associate we earn from qualifying purchases.

This thread ...

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.