PrintCenter - Print text in center of console

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.

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:
Thread starter Similar threads Forum Replies Date
Fross T&T - Library Functions 0