Re: wsfontload(8): restore working default height/width values

2020-08-04 Thread Frederic Cambus
On Tue, Jul 21, 2020 at 12:44:57PM +0200, Frederic Cambus wrote:

> Currently, wsfontload(8) hardcodes the default height and width values
> for the font to be loaded as 12x22 when using framebuffer consoles, and
> as 8x16 when in text mode. The 12x22 value wasn't correct in case we
> felt back to the smaller 8x16 font for screen widths smaller than 960px,
> and isn't valid anymore since we replaced Gallant 12x22 by Spleen 12x24
> on all architectures but sparc64.
>  
> Here is a diff to get the default values for font height and width using
> the WSDISPLAYIO_GETSCREENTYPE ioctl. This ensures that they always match
> the currently loaded font metrics.
> 
> Tested on a system with a text mode console only, on efifb(4) and
> inteldrm(4) framebuffer consoles, and on Loongson with smfb(4).
> 
> Please note that this needs the diff I sent to tech@ yesterday to allow
> the WSDISPLAYIO_GETSCREENTYPE ioctl on tty*cfg.
> 
> Comments? OK?
> 
> Index: usr.sbin/wsfontload/wsfontload.c
> ===
> RCS file: /cvs/src/usr.sbin/wsfontload/wsfontload.c,v
> retrieving revision 1.22
> diff -u -p -r1.22 wsfontload.c
> --- usr.sbin/wsfontload/wsfontload.c  20 Jul 2020 14:09:24 -  1.22
> +++ usr.sbin/wsfontload/wsfontload.c  21 Jul 2020 10:41:56 -
> @@ -76,6 +76,7 @@ main(int argc, char *argv[])
>  {
>   char *wsdev, *infile, *p;
>   struct wsdisplay_font f;
> + struct wsdisplay_screentype screens;
>   int c, res, wsfd, ffd, type, list, i;
>   int defwidth, defheight;
>   struct stat stat;
> @@ -178,23 +179,16 @@ main(int argc, char *argv[])
>   ffd = STDIN_FILENO;
>   }
>  
> - res = ioctl(wsfd, WSDISPLAYIO_GTYPE, );
> - if (res != 0)
> - type = WSDISPLAY_TYPE_UNKNOWN;
> -
> - switch (type) {
> - /* text-mode VGA */
> - case WSDISPLAY_TYPE_ISAVGA:
> - case WSDISPLAY_TYPE_PCIVGA:
> + memset(, 0, sizeof(screens));
> + res = ioctl(wsfd, WSDISPLAYIO_GETSCREENTYPE, );
> + if (res == 0) {
> + /* raster frame buffers */
> + defwidth = screens.fontwidth;
> + defheight = screens.fontheight;
> + } else {
> + /* text-mode VGA */
>   defwidth = 8;
>   defheight = 16;
> - break;
> - /* raster frame buffers */
> - default:
> - /* XXX ought to be computed from the frame buffer resolution */
> - defwidth = 12;
> - defheight = 22;
> - break;
>   }
>  
>   f.index = -1;

Ping. Anyone willing to look at this? Thanks!



wsfontload(8): restore working default height/width values

2020-07-21 Thread Frederic Cambus
Hi tech@,

Currently, wsfontload(8) hardcodes the default height and width values
for the font to be loaded as 12x22 when using framebuffer consoles, and
as 8x16 when in text mode. The 12x22 value wasn't correct in case we
felt back to the smaller 8x16 font for screen widths smaller than 960px,
and isn't valid anymore since we replaced Gallant 12x22 by Spleen 12x24
on all architectures but sparc64.
 
Here is a diff to get the default values for font height and width using
the WSDISPLAYIO_GETSCREENTYPE ioctl. This ensures that they always match
the currently loaded font metrics.

Tested on a system with a text mode console only, on efifb(4) and
inteldrm(4) framebuffer consoles, and on Loongson with smfb(4).

Please note that this needs the diff I sent to tech@ yesterday to allow
the WSDISPLAYIO_GETSCREENTYPE ioctl on tty*cfg.

Comments? OK?

Index: usr.sbin/wsfontload/wsfontload.c
===
RCS file: /cvs/src/usr.sbin/wsfontload/wsfontload.c,v
retrieving revision 1.22
diff -u -p -r1.22 wsfontload.c
--- usr.sbin/wsfontload/wsfontload.c20 Jul 2020 14:09:24 -  1.22
+++ usr.sbin/wsfontload/wsfontload.c21 Jul 2020 10:41:56 -
@@ -76,6 +76,7 @@ main(int argc, char *argv[])
 {
char *wsdev, *infile, *p;
struct wsdisplay_font f;
+   struct wsdisplay_screentype screens;
int c, res, wsfd, ffd, type, list, i;
int defwidth, defheight;
struct stat stat;
@@ -178,23 +179,16 @@ main(int argc, char *argv[])
ffd = STDIN_FILENO;
}
 
-   res = ioctl(wsfd, WSDISPLAYIO_GTYPE, );
-   if (res != 0)
-   type = WSDISPLAY_TYPE_UNKNOWN;
-
-   switch (type) {
-   /* text-mode VGA */
-   case WSDISPLAY_TYPE_ISAVGA:
-   case WSDISPLAY_TYPE_PCIVGA:
+   memset(, 0, sizeof(screens));
+   res = ioctl(wsfd, WSDISPLAYIO_GETSCREENTYPE, );
+   if (res == 0) {
+   /* raster frame buffers */
+   defwidth = screens.fontwidth;
+   defheight = screens.fontheight;
+   } else {
+   /* text-mode VGA */
defwidth = 8;
defheight = 16;
-   break;
-   /* raster frame buffers */
-   default:
-   /* XXX ought to be computed from the frame buffer resolution */
-   defwidth = 12;
-   defheight = 22;
-   break;
}
 
f.index = -1;