You must be logged in to use the copy button.
**Free ctl-opt copyright('Copyright JAS, Inc. 2024') nomain debug option(*srcstmt : *nodebugio ) ccsid(*char:*jobrun) decedit(*jobrun) alwnull(*usrctl) bnddir('JASTOOL'); //*********************************************************************************** // PURPOSE: This application will execute CL command // ********************************************************************************** // COMPILE Module: CRTRPGMOD MODULE(*CURLIB/JSCLCMD) SRCFILE(*CURLIB/QRPGLESRC) // SRCMBR(JSCLCMD) DBGVIEW(*SOURCE) REPLACE(*YES) // COMPILE SrvPgm: CRTSRVPGM SRVPGM(*CURLIB/JSCLCMD) EXPORT(*ALL) ACTGRP(*CALLER) // OPTION(*DUPPROC) // Bindding Dir...: ADDBNDDIRE BNDDIR(JASTOOL) OBJ((JSCLCMD)) // ********************************************************************************** // Declare the external procedure for system API dcl-pr cl_Command int(10) extproc('system'); *n Pointer options(*String:*Trim) value; end-pr; /copy qProtosrc,JS000PSDS /define Get_Caller_pr /copy qProtosrc,JSCALLSTK /define Obj_Exists_PR /copy qProtosrc,JSOBJEXIST dcl-ds ds_Data qualified DtaAra('*libl/JSCLCMD'); w_SendMSg char(1); w_User char(10); end-Ds; // Main procedure to execute a CL command ******************************************* /define cl_cmd_pr /copy qProtosrc,jsclCmd dcl-proc cl_cmd export; /define cl_cmd_pi /copy qProtosrc,jsclCmd dcl-s w_Status int(10) inz; dcl-s w_command char(150) inz; dcl-s cl_cmd ind inz(*off); //** Main *************************************************************************** // Check if the data area exists if not Obj_Exists('JSCLCMD' :'*DTAARA'); // Create the Data Area w_Command = 'CRTDTAARA DTAARA(JSCLCMD)' + ' TYPE(*CHAR) LEN(11)' + ' VALUE(''N '')' + ' TEXT(''Exec CL Cmd Data Area'')'; if cl_Command(w_Command) = 0; in ds_Data; endIf; else; in ds_Data; endIf; // Call the system API to execute the command w_Status = cl_Command(p_Command); if w_Status = 0; // Command executed successfully cl_cmd = *on; // Command did not execute, notify the requester if specified elseif %upper(ds_Data.w_SendMsg) = 'Y' and (ds_Data.w_User = *blanks or %trim(ds_Data.w_User) = %trim(pgm_sts.##psUSR)); cl_cmd = *off; w_command = %str(p_Command :%size(p_Command)); callp SendMessage(w_Command); else; cl_cmd = *off; endif; return cl_cmd; // Return the w_Status end-proc; //************************************************************************************ // This is needed for debugging purposes to make sure that the CL command being works // before moving my application to production system. //************************************************************************************ dcl-proc SendMessage; dcl-pi *n; p_Text char(50) const; end-pi; dcl-s w_Text like(p_Text) inz; dcl-s w_Program char(10) inz; w_Program = Get_Caller(4); // Pos is 4 since procedure will added to the stack w_Text = 'Program (' + %trim(w_Program) + ') failed to execute.'; dsply w_text; w_Text = %xlate(x'7D' :'`' :%trim(p_Text)); dsply w_text; return; end-proc;