Hello,

I tried loading gallant.fnt which I did not
like and I was wondering how to come back to
the nice default font.

There does not seem to be the way to do this,
so please find below a simple patch to add
this functionality.

It adds a new ioctl PIO_VDFFONT to the vt(4)
driver. I hope I got the reference counting
on the vt_font_default structure right.

With this patch applied, "vidcontrol -f" restores
the built-in font.

//Marcin

Index: sys/dev/vt/vt_core.c
===================================================================
--- sys/dev/vt/vt_core.c        (wersja 271197)
+++ sys/dev/vt/vt_core.c        (kopia robocza)
@@ -1948,6 +1948,10 @@
                vtfont_unref(vf);
                return (error);
        }
+       case PIO_VDFTFONT: {
+               error = vt_change_font(vw, &vt_font_default);
+               return (error);
+       }
        case GIO_SCRNMAP: {
                scrmap_t *sm = (scrmap_t *)data;

Index: sys/sys/consio.h
===================================================================
--- sys/sys/consio.h    (wersja 271197)
+++ sys/sys/consio.h    (kopia robocza)
@@ -239,6 +239,7 @@
 #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_VDFTFONT   _IO('c', 72)

 /* get video mode information */
 struct colors  {
Index: usr.sbin/vidcontrol/vidcontrol.1
===================================================================
--- usr.sbin/vidcontrol/vidcontrol.1    (wersja 271197)
+++ usr.sbin/vidcontrol/vidcontrol.1    (kopia robocza)
@@ -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 @@
 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 @@
 .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
Index: usr.sbin/vidcontrol/vidcontrol.c
===================================================================
--- usr.sbin/vidcontrol/vidcontrol.c    (wersja 271197)
+++ usr.sbin/vidcontrol/vidcontrol.c    (kopia robocza)
@@ -197,7 +197,7 @@
 {
        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 @@
        return (t);
 }

+/*
+ * Set the default vt font.
+ */
+
+static void
+load_default_vt4font(void)
+{
+       if (ioctl(0, PIO_VDFTFONT) == -1) {
+               revert();
+               errc(1, errno, "loading default vt font");
+       }
+}
+
 static int
 load_vt4font(FILE *f)
 {
@@ -1328,7 +1341,7 @@
        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 @@
                        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",
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to