17 /* There is such function in libc5 but it doesn't work for me [libc 5.4.13] */
19 #define wctomb our_wctomb
23 ud_compar(const void *u1, const void *u2)
25 unsigned short fp1 = ((struct unipair *)u1)->fontpos;
26 unsigned short fp2 = ((struct unipair *)u2)->fontpos;
27 return (int)fp1 - (int)fp2;
30 static void __attribute__((noreturn))
33 fprintf(stderr, _("Usage:\n\t%s [-s] [-C console]\n"), progname);
37 int main(int argc, char **argv)
40 char mb[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
46 set_progname(argv[0]);
48 setlocale(LC_ALL, "");
49 bindtextdomain(PACKAGE_NAME, LOCALEDIR);
50 textdomain(PACKAGE_NAME);
53 (!strcmp(argv[1], "-V") || !strcmp(argv[1], "--version")))
54 print_version_and_exit();
56 while ((c = getopt(argc, argv, "sC:")) != EOF) {
72 if ((fd = getfd(console)) < 0)
73 kbd_error(EXIT_FAILURE, 0, _("Couldn't get a file descriptor referring to the console"));
75 if (getunimap(fd, &ud))
79 printf("# sorted kernel unimap - count=%d\n", ud.entry_ct);
80 /* sort and merge entries */
81 qsort(ud.entries, ud.entry_ct, sizeof(ud.entries[0]),
83 for (i = 0; i < ud.entry_ct; i++) {
84 int fp = ud.entries[i].fontpos;
85 printf("0x%03x\tU+%04x", fp, ud.entries[i].unicode);
86 while (i + 1 < ud.entry_ct &&
87 ud.entries[i + 1].fontpos == fp)
88 printf(" U+%04x", ud.entries[++i].unicode);
92 printf("# kernel unimap - count=%d\n", ud.entry_ct);
93 for (i = 0; i < ud.entry_ct; i++) {
94 mb_length = wctomb(mb, ud.entries[i].unicode);
95 mb[(mb_length > 6) ? 0 : mb_length] = 0;
96 if (mb_length == 1 && !isprint(mb[0])) {
101 printf("0x%03x\tU+%04x\t# %s \n",
102 ud.entries[i].fontpos,
103 ud.entries[i].unicode, mb);