Hi, guessing i'm not the only one wondering about these sizes, as w/current snapshot the font does seem too big for me(on 2560x1440 display, for which radeondrm(4) has never gotten the size right(giving only 1920x1200)).
display.part of wsconsctl output w/the diff: display.type=radeondrm display.width=1920 display.height=1200 display.depth=32 display.emulations=vt100 display.col_x_row=120x37 display.font_wxh=16x32 display.screentypes=std display.focus=4 display.screen_on=250 display.screen_off=0 display.vblank=off display.kbdact=on display.msact=on display.outact=on lazy(=ugly) not-so-minimal diff below. -Artturi diff --git a/sbin/wsconsctl/display.c b/sbin/wsconsctl/display.c index 6f789291142..9927a9d77c5 100644 --- a/sbin/wsconsctl/display.c +++ b/sbin/wsconsctl/display.c @@ -42,6 +42,7 @@ u_int dpytype; u_int width, height, depth; +u_int cxr[2], fontwxh[2]; int focus; struct field_pc brightness, contrast, backlight; int burnon, burnoff, vblank, kbdact, msact, outact; @@ -55,6 +56,8 @@ struct field display_field_tab[] = { { "height", &height, FMT_UINT, FLG_RDONLY }, { "depth", &depth, FMT_UINT, FLG_RDONLY }, { "emulations", &emuls, FMT_EMUL, FLG_RDONLY }, + { "col_x_row", &cxr, FMT_UINTX, FLG_RDONLY }, + { "font_wxh", &fontwxh, FMT_UINTX, FLG_RDONLY }, { "screentypes", &screens, FMT_SCREEN, FLG_RDONLY }, { "focus", &focus, FMT_INT, FLG_NORDBACK }, { "brightness", &brightness, FMT_PC, FLG_MODIFY|FLG_INIT }, @@ -85,6 +88,7 @@ display_get_values(int fd) void *ptr; unsigned long cmd; int bon = 0, fbon = 0; + int fson = 0; focus = gscr.idx = -1; for (pf = display_field_tab; pf->name; pf++) { @@ -102,6 +106,10 @@ display_get_values(int fd) } else if (ptr == &emuls) { fillioctl(WSDISPLAYIO_GETEMULTYPE); emuls.idx=0; + } else if (ptr == &cxr || ptr == &fontwxh) { + fillioctl(WSDISPLAYIO_GETSCREENTYPE); + ptr = &screens; + screens.idx = 0; } else if (ptr == &screens) { fillioctl(WSDISPLAYIO_GETSCREENTYPE); screens.idx=0; @@ -168,6 +176,13 @@ display_get_values(int fd) emuls.idx=fd; } else if (ptr == &screens) { screens.idx=fd; + if (!fson) { + cxr[0] = screens.ncols; + cxr[1] = screens.nrows; + fontwxh[0] = screens.fontwidth; + fontwxh[1] = screens.fontheight; + } + fson++; } else if (ptr == ¶m) { struct field_pc *pc = pf->valp; diff --git a/sbin/wsconsctl/util.c b/sbin/wsconsctl/util.c index b0ac4b3e23f..071baf31f85 100644 --- a/sbin/wsconsctl/util.c +++ b/sbin/wsconsctl/util.c @@ -186,6 +186,7 @@ int name2int(char *, const struct nameint *, int); void print_kmap(struct wskbd_map_data *); void print_emul(struct wsdisplay_emultype *); void print_screen(struct wsdisplay_screentype *); +void print_uintx(u_int *); struct field * field_by_name(struct field *field_tab, char *name) @@ -316,6 +317,9 @@ pr_field(const char *pre, struct field *f, const char *sep) case FMT_CFG: mousecfg_pr_field((struct wsmouse_parameters *) f->valp); break; + case FMT_UINTX: + print_uintx((u_int *) f->valp); + break; default: errx(1, "internal error: pr_field: no format %d", f->format); break; @@ -551,3 +555,9 @@ print_screen(struct wsdisplay_screentype *screens) i = ioctl(fd, WSDISPLAYIO_GETSCREENTYPE, &s); } } + +void +print_uintx(u_int *ux) +{ + printf("%ux%u", ux[0], ux[1]); +} diff --git a/sbin/wsconsctl/wsconsctl.h b/sbin/wsconsctl/wsconsctl.h index 3a6e38d67e2..93d42ed600a 100644 --- a/sbin/wsconsctl/wsconsctl.h +++ b/sbin/wsconsctl/wsconsctl.h @@ -49,6 +49,7 @@ struct field { #define FMT_SCREEN 108 /* wsdisplay screen types */ #define FMT_STRING 109 /* free string */ #define FMT_CFG 201 /* wsmouse parameters */ +#define FMT_UINTX 202 /* u_int x u_int */ int format; #define FLG_RDONLY 0x0001 /* variable cannot be modified */ #define FLG_WRONLY 0x0002 /* variable cannot be displayed */