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); vtfont_unref(vf);
return (error); return (error);
} }
case PIO_VFONT_DEFAULT: {
/* Reset to default font. */
error = vt_change_font(vw, &vt_font_default);
return (error);
}
case GIO_SCRNMAP: { case GIO_SCRNMAP: {
scrmap_t *sm = (scrmap_t *)data; 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 GIO_FONT8x16 _IOR('c', 69, fnt16_t)
#define PIO_VFONT _IOW('c', 70, vfnt_t) #define PIO_VFONT _IOW('c', 70, vfnt_t)
#define GIO_VFONT _IOR('c', 71, vfnt_t) #define GIO_VFONT _IOR('c', 71, vfnt_t)
#define PIO_VFONT_DEFAULT _IO('c', 72)
/* get video mode information */ /* get video mode information */
struct colors { struct colors {

View File

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

View File

@ -197,7 +197,7 @@ usage(void)
{ {
if (vt4_mode) if (vt4_mode)
fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n", 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]", " [-g geometry] [-h size] [-i adapter | mode]",
" [-M char] [-m on | off] [-r foreground background]", " [-M char] [-m on | off] [-r foreground background]",
" [-S on | off] [-s number] [-T xterm | cons25] [-t N | off]", " [-S on | off] [-s number] [-T xterm | cons25] [-t N | off]",
@ -409,6 +409,19 @@ load_vt4mappingtable(unsigned int nmappings, FILE *f)
return (t); 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 static int
load_vt4font(FILE *f) load_vt4font(FILE *f)
{ {
@ -1328,7 +1341,7 @@ main(int argc, char **argv)
dumpopt = DUMP_FBF; dumpopt = DUMP_FBF;
termmode = NULL; termmode = NULL;
if (vt4_mode) 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 else
opts = "b:Cc:df:g:h:Hi:l:LM:m:pPr:S:s:T:t:x"; 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(); print_scrnmap();
break; break;
case 'f': case 'f':
type = optarg; optarg = nextarg(argc, argv, &optind, 'f', 0);
font = nextarg(argc, argv, &optind, 'f', 0); if (optarg != NULL) {
font = nextarg(argc, argv, &optind, 'f', 0);
if (font == NULL) { if (font == NULL) {
type = NULL; type = NULL;
font = optarg; 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; break;
case 'g': case 'g':
if (sscanf(optarg, "%dx%d", if (sscanf(optarg, "%dx%d",