The RPG IV language introduces several powerful built-in functions that simplify string-handling requirements. You can add a few more string-related procedures to come up with a complete toolbox for processing text. The Centertext procedure centers a string field, a function that’s handy for centering headings on reports and displays.
Here’s the procedure code for Centertext:
// ------------------------------------------------------------------
// Procedure name - CenterText
//
// Centers a text string
//
// Return value:
// Centered text string (Char 256)
//
// Parameters:
// Input text string (Char 256)
// Length of result string (Unsigned 5.0)
// (Optional...defaults to 256)
//
// Usage example:
// Heading = CenterText('ABC Company':80);
//
// ------------------------------------------------------------------
H Copyright('(c) Copyright 2003, Bryan Meyers -- www.bmeyers.net')
H NoMain
// ------------------------------------------------------- Prototypes
D CenterText PR 256
D 256 Value
D 5U 0 Value Options(*NoPass)
// --------------------------------------- Begin procedure CenterText
P CenterText B Export
D CenterText PI 256
D InStr 256 Value
D StrLen 5U 0 Value Options(*NoPass)
// --------------------------------------------------- Work variables
D OutStr S 256
D Pos S 5U 0
/FREE
If %Parms = 1;
StrLen = 256;
Endif;
If StrLen > (%Len(%Trim(InStr)) + 1);
Pos = (StrLen - %Len(%Trim(InStr)))/2 + 1;
%Subst(OutStr:Pos) = %Trim(InStr);
Return OutStr;
Else;
Return InStr;
Endif;
/END-FREE
P CenterText E
To use the Centertext procedure, a calling procedure must include the following prototype:
// ------------------------------------------------------- Prototypes
D CenterText PR 256
D 256 Value
D 5U 0 Value Options(*NoPass)
When you want to center a text string, you can include the procedure call in an assignment expression. One or two parameters are necessary:
- the text to be centered (may be an expression)
- the length of the string in which to center the text (defaults to 256 characters)
The procedure returns a 256-byte value, with the text centered in the length you specify:
Heading = Centertext('Company: ' + Cpyname : 80);
When you bind the program, be sure to include the module or service program that contains the Centertext procedure:
CRTPGM PGM(library/program) MODULE(library/program library/CENTERTEXT)