mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 08:42:12 +02:00
video/console: Factor out actual character output
In preparation for doing character set translations, factor out the actual glyph display functionality into a separate function. This will be used in a subsequent patch. Signed-off-by: Andre Przywara <andre.przywara@arm.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
committed by
Anatolij Gustschin
parent
4422294cbe
commit
7035ec3cb3
@@ -457,6 +457,32 @@ error:
|
|||||||
priv->escape = 0;
|
priv->escape = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Put that actual character on the screen (using the CP437 code page). */
|
||||||
|
static int vidconsole_output_glyph(struct udevice *dev, char ch)
|
||||||
|
{
|
||||||
|
struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Failure of this function normally indicates an unsupported
|
||||||
|
* colour depth. Check this and return an error to help with
|
||||||
|
* diagnosis.
|
||||||
|
*/
|
||||||
|
ret = vidconsole_putc_xy(dev, priv->xcur_frac, priv->ycur, ch);
|
||||||
|
if (ret == -EAGAIN) {
|
||||||
|
vidconsole_newline(dev);
|
||||||
|
ret = vidconsole_putc_xy(dev, priv->xcur_frac, priv->ycur, ch);
|
||||||
|
}
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
priv->xcur_frac += ret;
|
||||||
|
priv->last_ch = ch;
|
||||||
|
if (priv->xcur_frac >= priv->xsize_frac)
|
||||||
|
vidconsole_newline(dev);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int vidconsole_put_char(struct udevice *dev, char ch)
|
int vidconsole_put_char(struct udevice *dev, char ch)
|
||||||
{
|
{
|
||||||
struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
|
struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
|
||||||
@@ -494,23 +520,9 @@ int vidconsole_put_char(struct udevice *dev, char ch)
|
|||||||
priv->last_ch = 0;
|
priv->last_ch = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/*
|
ret = vidconsole_output_glyph(dev, ch);
|
||||||
* Failure of this function normally indicates an unsupported
|
|
||||||
* colour depth. Check this and return an error to help with
|
|
||||||
* diagnosis.
|
|
||||||
*/
|
|
||||||
ret = vidconsole_putc_xy(dev, priv->xcur_frac, priv->ycur, ch);
|
|
||||||
if (ret == -EAGAIN) {
|
|
||||||
vidconsole_newline(dev);
|
|
||||||
ret = vidconsole_putc_xy(dev, priv->xcur_frac,
|
|
||||||
priv->ycur, ch);
|
|
||||||
}
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
priv->xcur_frac += ret;
|
|
||||||
priv->last_ch = ch;
|
|
||||||
if (priv->xcur_frac >= priv->xsize_frac)
|
|
||||||
vidconsole_newline(dev);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user