video_printf: align text
This change allows video_printf to left/center/right-align text depending on the enum value provided by the caller. This is useful especially because usually the length of formatted string is unknown before calling video_printf. BUG=none BRANCH=smaug TEST=drew fastboot screens on Smaug CQ-DEPEND=CL:296460 Reviewed-on: https://chromium-review.googlesource.com/292929 Reviewed-by: Aaron Durbin <adurbin@chromium.org> (cherry picked from commit 436f05f60c1b88626740a35913e3ad37b5c777a3) Change-Id: If1d50b7d8ddaa86eddc1618946756184cb87bfe1 Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/295413 Reviewed-on: http://review.coreboot.org/11583 Tested-by: build bot (Jenkins)
This commit is contained in:
committed by
Patrick Georgi
parent
abe03d25e2
commit
ccda446e52
@ -162,7 +162,8 @@ void video_console_putchar(unsigned int ch)
|
|||||||
video_console_fixup_cursor();
|
video_console_fixup_cursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void video_printf(int foreground, int background, const char *fmt, ...)
|
void video_printf(int foreground, int background, enum video_printf_align align,
|
||||||
|
const char *fmt, ...)
|
||||||
{
|
{
|
||||||
int i = 0, len;
|
int i = 0, len;
|
||||||
char str[200];
|
char str[200];
|
||||||
@ -174,6 +175,29 @@ void video_printf(int foreground, int background, const char *fmt, ...)
|
|||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* vsnprintf can return len larger than size. when it happens,
|
||||||
|
* only size-1 characters have been actually written. */
|
||||||
|
if (len >= ARRAY_SIZE(str))
|
||||||
|
len = ARRAY_SIZE(str) - 1;
|
||||||
|
|
||||||
|
if (len > console->columns) {
|
||||||
|
cursorx = 0;
|
||||||
|
} else {
|
||||||
|
switch (align) {
|
||||||
|
case VIDEO_PRINTF_ALIGN_LEFT:
|
||||||
|
cursorx = 0;
|
||||||
|
break;
|
||||||
|
case VIDEO_PRINTF_ALIGN_CENTER:
|
||||||
|
cursorx = (console->columns - len) / 2;
|
||||||
|
break;
|
||||||
|
case VIDEO_PRINTF_ALIGN_RIGHT:
|
||||||
|
cursorx = console->columns - len;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreground &= 0xf;
|
foreground &= 0xf;
|
||||||
foreground <<= 8;
|
foreground <<= 8;
|
||||||
background &= 0xf;
|
background &= 0xf;
|
||||||
|
@ -210,7 +210,14 @@ void video_console_set_cursor(unsigned int cursorx, unsigned int cursory);
|
|||||||
* print characters on video console with colors. note that there is a size
|
* print characters on video console with colors. note that there is a size
|
||||||
* restriction for the internal buffer. so, output string can be truncated.
|
* restriction for the internal buffer. so, output string can be truncated.
|
||||||
*/
|
*/
|
||||||
void video_printf(int foreground, int background, const char *fmt, ...);
|
enum video_printf_align {
|
||||||
|
VIDEO_PRINTF_ALIGN_KEEP = 0,
|
||||||
|
VIDEO_PRINTF_ALIGN_LEFT,
|
||||||
|
VIDEO_PRINTF_ALIGN_CENTER,
|
||||||
|
VIDEO_PRINTF_ALIGN_RIGHT,
|
||||||
|
};
|
||||||
|
void video_printf(int foreground, int background, enum video_printf_align align,
|
||||||
|
const char *fmt, ...);
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user