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

Jon Paris <[email protected]> Tue, 9 Jun 2026 12:11:29 -0400
Newsgroups gmane.comp.hardware.ibm.midrange
Message-ID <[email protected]>
Through this exported variable:

dcl-s errorMsg char(7) import('_EXCP_MSGID');


Jon Paris
[email protected]



> On Jun 9, 2026, at 2:53 AM, Birgitta Hauser <[email protected]> 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 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.
> 
> 
> -- 
> 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.