If I wanted text to appear in the center of the console, this will do it. The math is not that complex :-) Take the console width in columns. Divide by 2. Take the text. Divide by 2. Subtract the latter from the former and add that many spaces to the front.
You can see what's it's doing under the covers by calling it with the /D switch. It does use a few of my other functions so you'll need those two.
You can see what's it's doing under the covers by calling it with the /D switch. It does use a few of my other functions so you'll need those two.
Code:
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: PrintCenter [/W=CustomWidth] [/D] TextToCenter
::
:: Print the given text in the center of the console display using spaces. If the
:: optional Width swith [/W] is given, use that as the width to center within starting
:: from the left.
::
:: /D will enter debug mode for the duration of the function
::
:: Example: PrintCenter "This Is In The Center"
:: Example: PrintCenter /W=20 "This Is In The Center"
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PrintCenter {
setlocal
GetOpt %*
iff defined Option_? .OR. not defined PARAM_1 then
echo Usage: PrintCenter [/W=CustomWidth] [/D] "TextToCenter"
echo /W: Custom width in columns
echo /D: Turn on DebugMode
echo /?: Display this help information
goto EndProgram
endiff
if defined OPTION_D set DEBUG=1
:: Determine if the optional width parmameter has been provided. If not use column width.
iff defined OPTION_W then
set CWidth=%OPTION_W
else
set CWidth=%_Columns
endiff
:: Determine how many spaces to add at the front to center text
:: Logic: Take 1/2 of width - 1/2 of text length
set TextLen=%@Len[%@Unquote[%PARAM_1]]
set SpacesToAdd=%@Int[%@Eval[(%CWidth / 2) - (%TextLen / 2)]]
DebugPrint "Screen Width in Columns: %CWidth"
DebugPrint "String: %@Unquote[%PARAM_1]"
DebugPrint "String Length: %TextLen
DebugPrint "Spaces to Add at Front: %SpacesToAdd"
DebugPrint "Formula: int( (%CWidth / 2) - (%TextLen / 2) ) = %SpacesToAdd
DebugPrint " 1"
DebugPrint " 1 2 3 4 5 6 7 8 9 0"
DebugPrint "890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
echo %@repeat[ ,%SpacesToAdd]%@unquote[%PARAM_1]
:EndProgram
if defined OPTION_D unset DEBUG
endlocal
}
Last edited: