2024-04-10 16:16:48 -04:00

49 lines
1.8 KiB
Plaintext

**free
//==============================================================
//=== SRV_STR service program contains procedures working
//=== with fixed length strings
//==============================================================
// CRTRPGMOD MODULE(SRV_STR)
// CRTSRVPGM SRVPGM(SRV_STR) EXPORT(*ALL)
// ADDBNDDIRE BNDDIR(UTIL_BND) OBJ((SRV_STR *SRVPGM *DEFER))
//=== CenterStr ================================================
// Return the centered string. The input string is normally
// fixed length and RPG will promote it to varying on the
// call. A varying string is returned which RPG will reset
// to fixed.
// **********************************************************
// *** It will also execute with a varying string input ***
// *** but the result probably wont't be what you expect. ***
// *** So don't use it on a varchar string. ***
// **********************************************************
// Conceptual call:
//=================
// H BndDir('UTIL_BND')
// /include ../Copy_Mbrs,SRV_STR_P.RPGLE
// d Head S 20A inz('Inquiry')
// Head = CenterStr(Head);
// Notes:
// CenterStr is small, but it is convenient.
// Could add left and right justify, but...
// Left justify is simple in RPG:
// str = %trim(str);
// Right justify is also simple:
// evalr str = %trim(str);
ctl-opt nomain option(*nodebugio: *srcstmt);
/INCLUDE ../Copy_Mbrs/SRV_STR_P.RPGLE
dcl-proc CenterStr export;
dcl-pi CenterStr varchar(256);
InStr varchar(256) const;
end-pi;
dcl-s blanks varchar(256) inz;
dcl-s trimInStr varchar(256);
trimInStr = %trim(InStr);
// Set length to materialize required leading blanks.
%len(blanks) = %int((%len(InStr) - %len(trimInStr))/2);
return blanks + trimInStr;
end-proc;