vt(4): Add PIO_VFONT_DEFAULT ioctl to restore the default builtin font

To restore the default font using vidcontrol(1), use the "-f" flag
without an argument:
    vidcontrol -f < /dev/ttyv0

PR:		193910
Differential Revision:	https://reviews.freebsd.org/D971
Submitted by:	Marcin Cieslak <saper@saper.info>
Reviewed by:	ray@, emaste@
Approved by:	ray@
MFC after:	1 week
This commit is contained in:
Jean-Sébastien Pédron 2014-10-23 12:38:05 +00:00
parent 7c8e3a7f48
commit 069f1c256a
4 changed files with 48 additions and 9 deletions

View File

@ -2218,6 +2218,11 @@ vtterm_ioctl(struct terminal *tm, u_long cmd, caddr_t data,
vtfont_unref(vf);
return (error);
}
case PIO_VFONT_DEFAULT: {
/* Reset to default font. */
error = vt_change_font(vw, &vt_font_default);
return (error);
}
case GIO_SCRNMAP: {
scrmap_t *sm = (scrmap_t *)data;

View File

@ -239,6 +239,7 @@ typedef struct vfnt vfnt_t;
#define GIO_FONT8x16 _IOR('c', 69, fnt16_t)
#define PIO_VFONT _IOW('c', 70, vfnt_t)
#define GIO_VFONT _IOR('c', 71, vfnt_t)
#define PIO_VFONT_DEFAULT _IO('c', 72)
/* get video mode information */
struct colors {

View File

@ -26,9 +26,11 @@
.Op Fl c Ar appearance
.Oo
.Fl f
.Oo
.Op Ar size
.Ar file
.Oc
.Oc
.Op Fl g Ar geometry
.Op Fl h Ar size
.Op Fl i Cm adapter | mode
@ -136,8 +138,10 @@ The latter is actually a simulation.
Print out current output screen map.
.It Xo
.Fl f
.Oo
.Op Ar size
.Ar file
.Oc
.Xc
Load font
.Ar file
@ -158,6 +162,14 @@ may be omitted, in this case
.Nm
will try to guess it from the size of font file.
.Pp
When using
.Xr vt 4
both
.Ar size
and
.Ar font
can be omitted, and the default font will be loaded.
.Pp
Note that older video cards, such as MDA and CGA, do not support
software font.
See also

View File

@ -197,7 +197,7 @@ usage(void)
{
if (vt4_mode)
fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n",
"usage: vidcontrol [-CHPpx] [-b color] [-c appearance] [-f [size] file]",
"usage: vidcontrol [-CHPpx] [-b color] [-c appearance] [-f [[size] file]]",
" [-g geometry] [-h size] [-i adapter | mode]",
" [-M char] [-m on | off] [-r foreground background]",
" [-S on | off] [-s number] [-T xterm | cons25] [-t N | off]",
@ -409,6 +409,19 @@ load_vt4mappingtable(unsigned int nmappings, FILE *f)
return (t);
}
/*
* Set the default vt font.
*/
static void
load_default_vt4font(void)
{
if (ioctl(0, PIO_VFONT_DEFAULT) == -1) {
revert();
errc(1, errno, "loading default vt font");
}
}
static int
load_vt4font(FILE *f)
{
@ -1328,7 +1341,7 @@ main(int argc, char **argv)
dumpopt = DUMP_FBF;
termmode = NULL;
if (vt4_mode)
opts = "b:Cc:f:g:h:Hi:M:m:pPr:S:s:T:t:x";
opts = "b:Cc:fg:h:Hi:M:m:pPr:S:s:T:t:x";
else
opts = "b:Cc:df:g:h:Hi:l:LM:m:pPr:S:s:T:t:x";
@ -1349,15 +1362,23 @@ main(int argc, char **argv)
print_scrnmap();
break;
case 'f':
type = optarg;
font = nextarg(argc, argv, &optind, 'f', 0);
optarg = nextarg(argc, argv, &optind, 'f', 0);
if (optarg != NULL) {
font = nextarg(argc, argv, &optind, 'f', 0);
if (font == NULL) {
type = NULL;
font = optarg;
if (font == NULL) {
type = NULL;
font = optarg;
} else
type = optarg;
load_font(type, font);
} else {
if (!vt4_mode)
usage(); /* Switch syscons to ROM? */
load_default_vt4font();
}
load_font(type, font);
break;
case 'g':
if (sscanf(optarg, "%dx%d",