Re: Shelling out CRTLF via QCMDEXC -- question about success/failure

Rob Berendt <[email protected]> Tue, 9 Jun 2026 10:57:05 -0400
Newsgroups gmane.comp.hardware.ibm.midrange
Message-ID <CAPJ+qQPvooCO-21jOR59_TVz4zSCjoxE2puf45nMn-90O2+KHQ@mail.gmail.com>
I was a big fan of system(), until I was not.  I forget why.  Others have
alluded to the ease of getting the error with QCAPCMD instead.  Perhaps
that was it.

On Tue, Jun 9, 2026 at 8:35 AM Vern Hamberg via MIDRANGE-L <
[email protected]> wrote:

> Hi Birgitta
>
> Yes, the system() function returns an integer, 0 if the command is
> successful. And, according to the reference, we have this -
>
> > If the system() function fails, the global variable _EXCP_MSGID in
> > <stddef.h> is set with the exception message ID.
>
> *Regards*
>
> *Vern Hamberg*
>
> IBM Champion 2025 <cid:[email protected]> CAAC
> (COMMON Americas Advisory Council) IBM Influencer 2023
>
>
> On 6/9/2026 1:53 AM, Birgitta Hauser wrote:
> > Jon and AI
> >
> > How you'd get the CPF-Msg which is checked in the example if only an
> error code is returned? ;)
> >
> > When using QCMDEXC it is possible to trap the system error message!
> >
> > Mit freundlichen Grüßen / Best regards
> >
> > Birgitta Hauser
> > Modernization – Education – Consulting on IBM i
> > Database and Software Architect
> > IBM Champion since 2020
> >
> > "Shoot for the moon, even if you miss, you'll land among the stars."
> (Les Brown)
> > "If you think education is expensive, try ignorance." (Derek Bok)
> > "What is worse than training your staff and losing them? Not training
> them and keeping them!"
> > "Train people well enough so they can leave, treat them well enough so
> they don't want to. " (Richard Branson)
> > "Learning is experience … everything else is only information!" (Albert
> Einstein)
> >
> >
> > -----Original Message-----
> > From: MIDRANGE-L<[email protected]> On Behalf Of
> Jon Paris
> > Sent: Monday, 8 June 2026 23:41
> > To: Midrange Systems Technical Discussion<[email protected]>
> > Subject: Re: Shelling out CRTLF via QCMDEXC -- question about
> success/failure
> >
> > Personally, I'd use the system() function.  Much easier to test for
> errors and determine the root failure message.
> >
> > Google's AI came up with this example whcih I have not tested but it
> looks about right.
> >
> > **free
> > // Modern control specifications—no bnddir('QC2LE') needed!
> > ctl-opt dftactgrp(*no);
> >
> > // Prototype for the C system() function dcl-pr runCommand int(10)
> extproc('system');
> >    cmdString pointer value options(*string); end-pr;
> >
> > // Import system variable to capture error message IDs dcl-s errorMsg
> char(7) import('_EXCP_MSGID');
> >
> > // Variable to store the return code
> > dcl-s returnCode int(10);
> >
> > // Execute a CL command directly
> > returnCode = runCommand('CLRPFM FILE(MYLIB/MYFILE)');
> >
> > // Check for execution failure
> > if returnCode <> 0;
> >    if errorMsg = 'CPF3142'; // File not found
> >      // Handle specific error logic here
> >    endif;
> > endif;
> >
> > *inlr = *on;
> >
> >
> > Jon Paris
> > [email protected]
> >
> >
> >
> >> On Jun 8, 2026, at 5:31 PM, James H. H. Lampert via MIDRANGE-L<
> [email protected]> wrote:
> >>
> >> I've got a project in which I will be using a QCMDEXC call to shell out
> a CRTLF (from a generated source member). What is the easiest way for the
> calling program to determine whether the CRTLF was successful?
> >>
> >> --
> >> JHHL
> >> --
> >> This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing
> >> list To post a message email:[email protected] To
> >> subscribe, unsubscribe, or change list options,
> >> visit:https://lists.midrange.com/mailman/listinfo/midrange-l
> >> or email:[email protected]
> >> Before posting, please take a moment to review the archives at
> >> https://archive.midrange.com/midrange-l.
> >>
> >> Please [email protected] for any subscription
> related questions.
> >>
> > --
> > This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing
> list To post a message email:[email protected] To subscribe,
> unsubscribe, or change list options,
> > visit:https://lists.midrange.com/mailman/listinfo/midrange-l
> > or email:[email protected]
> > Before posting, please take a moment to review the archives athttps://
> archive.midrange.com/midrange-l.
> >
> > Please [email protected] for any subscription related
> questions.
> >
> >
> --
> This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list
> To post a message email: [email protected]
> To subscribe, unsubscribe, or change list options,
> visit: https://lists.midrange.com/mailman/listinfo/midrange-l
> or email: [email protected]
> Before posting, please take a moment to review the archives
> at https://archive.midrange.com/midrange-l.
>
> Please contact [email protected] for any subscription related
> questions.
>
>
-- 
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list
To post a message email: [email protected]
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/midrange-l
or email: [email protected]
Before posting, please take a moment to review the archives
at https://archive.midrange.com/midrange-l.

Please contact [email protected] for any subscription related questions.