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); //*********************************************************************************** // PURPOSE: This application will check IFS object existence, read, write or execute // ********************************************************************************** // COMPILE Module: CRTRPGMOD MODULE(*CURLIB/JSIFSTOOL) SRCFILE(*CURLIB/QRPGLESRC) // SRCMBR(JSIFSTOOL) DBGVIEW(*SOURCE) REPLACE(*YES) // COMPILE SrvPgm: CRTSRVPGM SRVPGM(*CURLIB/JSIFSTOOL) EXPORT(*ALL) ACTGRP(*CALLER) // Bindding Dir: ADDBNDDIRE BNDDIR(JASTOOL) OBJ((JSIFSTOOL)) // ********************************************************************************** dcl-pr ifs_FileUnLink int(10) extProc('unlink'); p_Path pointer value options(*string); end-pr; dcl-pr ifs_FileWrite int(10) extProc('write'); p_Handle int(10) value; p_Buffer pointer value; p_FileSize int(10) value; end-pr; //***************************************************************************** /define ifs_Create_File_PR /copy qProtosrc,JSIFSTOOL /define ifs_Write_File_PR /copy qProtosrc,JSIFSTOOL //***************************************************************************** dcl-proc ifs_Create_File export; /define ifs_Create_File_PI /copy qProtosrc,JSIFSTOOL dcl-c O_WRONLY const(2); // Write only dcl-c O_CREAT const(8); // Create File if needed dcl-c O_CODEPAGE const(8388608); // Assign a code page dcl-c O_TEXTDATA const(16777216); // Open in text-mode dcl-c S_IRUSR const(256); // owner authority dcl-c S_IWUSR const(128); // owner authority dcl-c S_IRGRP const(32); // group authority dcl-c S_IROTH const(4); // other people dcl-s w_FileHandle int(10) inz(0); dcl-s w_Flags int(10) inz(0); dcl-s w_Mode int(10) inz(0); dcl-s w_File like(P_FILE) inz; w_File = %trim(p_Directory) + '/' + %trim(P_FILE); // remove the file if exist callp(e) ifs_FileUnLink(%trim(w_File)); w_Flags = O_WRONLY + O_CREAT + O_CODEPAGE; w_Mode = S_IRUSR + S_IWUSR + S_IRGRP + S_IROTH; w_FileHandle = ifs_FileOpen(%trim(w_File) :w_Flags: w_Mode :819); callp ifs_FileClose(w_FileHandle); // re-Open since Code is 819. This allow iSeries to deal with it // This avoids extra coding for ASCII format w_FileHandle = ifs_FileOpen(%trim(w_File) :O_WRONLY+O_TEXTDATA); return w_FileHandle; end-proc; //**************************************************************************** dcl-proc ifs_Write_File export; /define ifs_Write_File_PI /copy qProtosrc,JSIFSTOOL dcl-c cCRLF const(x'0d25'); dcl-c cTab const(x'05'); dcl-s w_data like(p_Data) inz; dcl-s w_Delimiter like(p_Delimiter) inz(','); dcl-s w_cnt zoned(3) inz; dcl-s w_Rtn ind inz(*off); dcl-s w_EOL char(2) inz; if p_FileHandle >= 0; if %parms >= 3 and %addr(p_Delimiter) <> *null and %trim(p_Delimiter) <> *blanks; w_Delimiter = %trim(p_Delimiter); endIf; w_Cnt = %len(%trim(w_Delimiter)); w_Data = %trim(p_Data); // if there is a tab char on the end remove it if %len(%trim(p_Data)) <= w_Cnt; w_Cnt = 0; endif; if %subst(w_Data: %len(%trimr(p_Data))-w_Cnt :1) = cTab; w_Data = %subst(w_Data: 1 :%len(%trimr(p_Data))-w_Cnt); // remove the last tab endIf; callp(e) ifs_FileWrite(p_FileHandle :%addr(w_Data) :%Len(%trim(w_Data)) ); if not %Error; w_Rtn = *on; endif; // Return if not End of Line is specified if %parms >= %parmnum(P_NOEOL) and P_NOEOL = *on; return w_Rtn; endif; w_EOL = cCRLF; // Write the end-of-line chars callp(e) ifs_FileWrite(p_FileHandle :%addr(w_EOL) :2 ); endif; return w_Rtn; end-proc;