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



hmm. . .  I guess I should have scrolled down further
> 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.
> >
> _______________________________________________
> 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 thread ...


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.