2021-10-07 13:07:10 -04:00

46 lines
1.8 KiB
Plaintext

//==============================================================
//=== SRV_STR service program contains procedures working
//=== with 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 if needed.
// It will also execute with a varying string input but the
// result may not be what you expect.
//
// Conceptual call:
//=================
// H BndDir('UTIL_BND')
// /include copy_mbrs,Srv_Str_P
// 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);
h nomain option(*NoDebugIo: *srcstmt)
/include copy_mbrs,SRV_STR_P
p CenterStr b export
d CenterStr pi 256a varying
d InStr 256a varying const
d
d blanks s 256a varying inz
d trimInStr s 256a varying
/free
trimInStr = %trim(InStr);
// Set length to materialize required leading blanks.
%len(blanks) = %int((%len(inStr) - %len(trimInStr))/2);
return blanks + trimInStr;
/end-free
p CenterStr e