|
If you go to google.com and search for qcapcmd, you'll find a link to the source code of a working example of qcapcmd. phil > Simon, > > I agree with your arguments. I never used QCAPCMD before and had now a look > to IBM's API docu. One question to your example snippet: You specified for > optCtlBlk a LIKE(Qca_PCMD_CPOP0100). What is this reference data structure? > Is it standard or your own built? Where is it located? I didn't find it in > other command descriptions. > Regards, > Werner Noll > > -----Ursprüngliche Nachricht----- > Von: Simon Coulter [mailto:shc@flybynight.com.au] > Gesendet: Dienstag, 6. August 2002 01:31 > An: rpg400-l@midrange.com > Betreff: Re: Additional Error Specs from C-Proc. 'system' > > > > Hello Nelson, > > You wrote: > >I've probably missed this in previous threads, but what is the value or > >benefit of using the C 'system' over using QCAPCMD in the first place? > > Because it is simple and it allows literal strings to be used in an easier > manner. For example, the following definitions: > > D int_t S 10I 0 > D pointer_t S * > D rc S LIKE(int_t) > > D system PR LIKE(int_t) EXTPROC('system') > * > * Required parameter group: > * OS/400 command > D command LIKE(pointer_t) VALUE > D OPTIONS(*STRING) > > allow me to code: > > C callp system("DSPMSG") > > or > > C eval rc = system("DSPMSG") > > whereas using QCMDEXC with the following prototype: > > /if defined(LONG_PROC_NAMES) > D QcaRunClCmd PR > /else > D QCMDEXC PR > /endif > D EXTPGM('QCMDEXC') > * > * Required parameter group: > * A Control Language command string > D clCmd 32702 CONST OPTIONS(*VARSIZE) > * Length of command string > D clCmdLen 15 5 CONST > * > * Optional parameter group: > * A DBCS data flag > D dbcsFlag 3 CONST OPTIONS(*NOPASS) > > requires: > > C callp QCMDEXC("DSPMSG" : 6) > > or > > D $CMD C CONST('DSPMSG') > > C callp QCMDEXC($CMD : %SIZE($CMD)) > > both of which are slightly uglier than system(). > > Using QCAPCMD is uglier still but much more powerful since its prototype > looks like: > > /if defined(LONG_PROC_NAMES) > D QcaProcessClCmd... > D PR > /else > D QCAPCMD PR > /endif > D EXTPGM('QCAPCMD') > * > * Required parameter group: > * Command string to process > D clCmd 32702 CONST OPTIONS(*VARSIZE) > * Length of command string > D cmdLen 10I 0 CONST > * Options control block > D optCtlBlk LIKE(Qca_PCMD_CPOP0100) > D CONST OPTIONS(*VARSIZE) > * Length of options control block > D optCtlBlkLen 10I 0 CONST > * Format of options control block > D format 8 CONST > * Changed command string > D chgClCmd 32767 OPTIONS(*VARSIZE:*OMIT) > * Length provided for changed command string > D chgClCmdLenProv... > D 10I 0 CONST > * Length available for changed command > string > D chgClCmdLenAvail... > D 10I 0 > * Error code > D errorCode 1024 OPTIONS(*VARSIZE) > > In all the "ugly" cases the solution is to create a wrapper procedure that > masks the ugliness behind a nice interface. For example: > > C eval errCode = runCLcmd("DSPMSG") > > where runCLcmd is a nice wrapper procedure that may in turn use either > QCMDEXC or QCAPCMD or even system. > > I use system where I expect the command to succeed (e.g., DSPMSG is > unlikely to fail) but I use the other methods when there is a reasonable > chance of the command failing. However, if you take the effort to create > a decent runCLcmd procedure you get the best of both worlds. > > Regards, > Simon Coulter. > -------------------------------------------------------------------- > FlyByNight Software AS/400 Technical Specialists > http://www.flybynight.com.au/ > > Phone: +61 3 9419 0175 Mobile: +61 0411 091 400 /"\ > Fax: +61 3 9419 0175 mailto: shc@flybynight.com.au \ / > X > ASCII Ribbon campaign against HTML E-Mail / \ > -------------------------------------------------------------------- > > _______________________________________________ > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list > To post a message email: RPG400-L@midrange.com > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/cgi-bin/listinfo/rpg400-l > or email: RPG400-L-request@midrange.com > Before posting, please take a moment to review the archives > at http://archive.midrange.com/rpg400-l. > _______________________________________________ > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list > To post a message email: RPG400-L@midrange.com > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/cgi-bin/listinfo/rpg400-l > or email: RPG400-L-request@midrange.com > Before posting, please take a moment to review the archives > at http://archive.midrange.com/rpg400-l. >
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.