diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..315bb4c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/kbd-2.0.4.tar.xz +/kbd-latarcyrheb-32.tar.bz2 +/kbd-latsun-fonts.tar.bz2 diff --git a/EMPTY b/EMPTY deleted file mode 100644 index 0519ecb..0000000 --- a/EMPTY +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cz-map.patch b/cz-map.patch new file mode 100644 index 0000000..5e65d0f --- /dev/null +++ b/cz-map.patch @@ -0,0 +1,61 @@ +--- cz.map.orig 2016-10-11 13:11:15.000000000 +0200 ++++ cz.map 2016-10-11 13:12:03.093565772 +0200 +@@ -39,7 +39,7 @@ + keycode 38 = +U+006c +U+004c +U+0141 +U+0141 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+006c +U+004c +U+0141 +U+0141 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+006c +U+004c +U+0141 +U+0141 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+006c +U+004c +U+0141 +U+0141 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+004c +U+006c +U+0142 +U+0142 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+004c +U+006c +U+0142 +U+0142 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+004c +U+006c +U+0142 +U+0142 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l +U+004c +U+006c +U+0142 +U+0142 Control_l Control_l Control_l Control_l Meta_l Meta_L Meta_l Meta_L Meta_Control_l Meta_Control_l Meta_Control_l Meta_Control_l + keycode 39 = +U+016f U+0022 U+0024 dead_doubleacute +U+016f U+0022 U+0024 dead_doubleacute Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar +U+016f U+0022 U+0024 dead_doubleacute +U+016f U+0022 U+0024 dead_doubleacute Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar +U+016f U+0022 U+0024 dead_doubleacute +U+016f U+0022 U+0024 dead_doubleacute Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar +U+016f U+0022 U+0024 dead_doubleacute +U+016f U+0022 U+0024 dead_doubleacute Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar +U+016e U+0022 U+0024 dead_doubleacute +U+016e U+0022 U+0024 dead_doubleacute Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar +U+016e U+0022 U+0024 dead_doubleacute +U+016e U+0022 U+0024 dead_doubleacute Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar +U+016e U+0022 U+0024 dead_doubleacute +U+016e U+0022 U+0024 dead_doubleacute Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar +U+016e U+0022 U+0024 dead_doubleacute +U+016e U+0022 U+0024 dead_doubleacute Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar Meta_quotedbl Meta_quotedbl Meta_dollar Meta_dollar + keycode 40 = U+00a7 U+0021 U+0027 +U+00df U+00a7 U+0021 U+0027 +U+00df Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe U+00a7 U+0021 U+0027 +U+00df U+00a7 U+0021 U+0027 +U+00df Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe U+00a7 U+0021 U+0027 +U+00df U+00a7 U+0021 U+0027 +U+00df Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe U+00a7 U+0021 U+0027 +U+00df U+00a7 U+0021 U+0027 +U+00df Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe U+00a7 U+0021 U+0027 +U+0053 U+00a7 U+0021 U+0027 +U+0053 Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe U+00a7 U+0021 U+0027 +U+0053 U+00a7 U+0021 U+0027 +U+0053 Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe U+00a7 U+0021 U+0027 +U+0053 U+00a7 U+0021 U+0027 +U+0053 Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe U+00a7 U+0021 U+0027 +U+0053 U+00a7 U+0021 U+0027 +U+0053 Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe Meta_exclam Meta_exclam Meta_apostrophe Meta_apostrophe +-keycode 41 = U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum ++keycode 41 = U+003b dead_grave U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum U+003b U+00b0 U+0060 U+007e nul Control_asciicircum nul Control_asciicircum Meta_semicolon Meta_semicolon Meta_grave Meta_asciitilde Meta_nul Meta_Control_asciicircum Meta_nul Meta_Control_asciicircum + keycode 42 = Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift Shift + keycode 43 = dead_diaeresis U+0027 U+005c U+007c Control_backslash Control_backslash Control_backslash Control_backslash Meta_apostrophe Meta_apostrophe Meta_backslash Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash dead_diaeresis U+0027 U+005c U+007c Control_backslash Control_backslash Control_backslash Control_backslash Meta_apostrophe Meta_apostrophe Meta_backslash Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash dead_diaeresis U+0027 U+005c U+007c Control_backslash Control_backslash Control_backslash Control_backslash Meta_apostrophe Meta_apostrophe Meta_backslash Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash dead_diaeresis U+0027 U+005c U+007c Control_backslash Control_backslash Control_backslash Control_backslash Meta_apostrophe Meta_apostrophe Meta_backslash Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash dead_diaeresis U+0027 U+005c U+007c Control_backslash Control_backslash Control_backslash Control_backslash Meta_apostrophe Meta_apostrophe Meta_backslash Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash dead_diaeresis U+0027 U+005c U+007c Control_backslash Control_backslash Control_backslash Control_backslash Meta_apostrophe Meta_apostrophe Meta_backslash Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash dead_diaeresis U+0027 U+005c U+007c Control_backslash Control_backslash Control_backslash Control_backslash Meta_apostrophe Meta_apostrophe Meta_backslash Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash dead_diaeresis U+0027 U+005c U+007c Control_backslash Control_backslash Control_backslash Control_backslash Meta_apostrophe Meta_apostrophe Meta_backslash Meta_bar Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash + keycode 44 = +U+0079 +U+0059 U+00b0 U+003c Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_less Meta_less Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0079 +U+0059 U+00b0 U+003c Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_less Meta_less Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0079 +U+0059 U+00b0 U+003c Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_less Meta_less Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0079 +U+0059 U+00b0 U+003c Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_less Meta_less Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0059 +U+0079 U+00b0 U+003c Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_less Meta_less Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0059 +U+0079 U+00b0 U+003c Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_less Meta_less Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0059 +U+0079 U+00b0 U+003c Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_less Meta_less Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +U+0059 +U+0079 U+00b0 U+003c Control_y Control_y Control_y Control_y Meta_y Meta_Y Meta_less Meta_less Meta_Control_y Meta_Control_y Meta_Control_y Meta_Control_y +@@ -108,3 +108,49 @@ + keycode 127 = VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol VoidSymbol + keycode 121 = KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period KP_Period + strings as usual ++# dead_grave ++compose '`' 'u' to U+016F ++compose '`' 'U' to U+016E ++compose '`' 'z' to U+00B0 ++compose '`' 'Z' to U+00B0 ++# dead_acute ++compose '\'' 'a' to U+00E1 ++compose '\'' 'A' to U+00C1 ++compose '\'' 'e' to U+00E9 ++compose '\'' 'E' to U+00C9 ++compose '\'' 'i' to U+00ED ++compose '\'' 'I' to U+00CD ++compose '\'' 'o' to U+00F3 ++compose '\'' 'O' to U+00D3 ++compose '\'' 'u' to U+00FA ++compose '\'' 'U' to U+00DA ++compose '\'' 'y' to U+00FD ++compose '\'' 'Y' to U+00DD ++# dead_caron ++compose '^' 'u' to U+016F ++compose '^' 'U' to U+016E ++compose '^' 'c' to U+010D ++compose '^' 'C' to U+010C ++compose '^' 'd' to U+010F ++compose '^' 'D' to U+010E ++compose '^' 'e' to U+011B ++compose '^' 'E' to U+011A ++compose '^' 'n' to U+0148 ++compose '^' 'N' to U+0147 ++compose '^' 'r' to U+0159 ++compose '^' 'R' to U+0158 ++compose '^' 's' to U+0161 ++compose '^' 'S' to U+0160 ++compose '^' 't' to U+0165 ++compose '^' 'T' to U+0164 ++compose '^' 'z' to U+017E ++compose '^' 'Z' to U+017D ++# dead_diaeresis ++compose '"' 'a' to U+00E4 ++compose '"' 'A' to U+00C4 ++compose '"' 'e' to U+00EB ++compose '"' 'E' to U+00CB ++compose '"' 'o' to U+00F6 ++compose '"' 'O' to U+00D6 ++compose '"' 'u' to U+00FC ++compose '"' 'U' to U+00DC diff --git a/kbd-1.15-keycodes-man.patch b/kbd-1.15-keycodes-man.patch new file mode 100644 index 0000000..8616274 --- /dev/null +++ b/kbd-1.15-keycodes-man.patch @@ -0,0 +1,52 @@ +diff -up kbd-2.0.4/docs/man/man1/showkey.1.orig kbd-2.0.4/docs/man/man1/showkey.1 +--- kbd-2.0.4/docs/man/man1/showkey.1.orig 2016-10-31 16:56:02.000000000 +0100 ++++ kbd-2.0.4/docs/man/man1/showkey.1 2017-01-11 10:45:03.763312393 +0100 +@@ -84,6 +84,19 @@ corresponds to what the keyboard hardwar + to know the scan codes sent by various keys it is better to boot a + 2.4 kernel. Since 2.6.9 there also is the boot option atkbd.softraw=0 + that tells the 2.6 kernel to return the actual scan codes. ++ ++.SH NOTES ++The raw scan codes are available only on AT and PS/2 keyboards, ++and even then they are disabled unless the ++.B atkbd.softraw=0 ++kernel parameter is used. ++When the raw scan codes are not available, the kernel uses a fixed built-in ++table to produce scan codes from keycodes. Thus, ++.BR setkeycodes (8) ++can affect the output of ++.B showkey ++in scan code dump mode. ++ + .SH "SEE ALSO" + .BR loadkeys (1), + .BR dumpkeys (1), +diff -up kbd-2.0.4/docs/man/man8/setkeycodes.8.orig kbd-2.0.4/docs/man/man8/setkeycodes.8 +--- kbd-2.0.4/docs/man/man8/setkeycodes.8.orig 2016-10-31 16:56:02.000000000 +0100 ++++ kbd-2.0.4/docs/man/man8/setkeycodes.8 2017-01-11 10:45:03.763312393 +0100 +@@ -38,6 +38,10 @@ to showkey(1), the command + .RE + will assign the keycode 112 to it, and then loadkeys(1) can be used + to define the function of this key. ++ ++USB keyboards have standardized keycodes and ++.B setkeycodes ++doesn't affect them at all. + .LP + Some older kernels might hardwire a low scancode range to the + equivalent keycodes; setkeycodes will fail when you try to remap +@@ -56,6 +60,14 @@ None. + .SH BUGS + The keycodes of X have nothing to do with those of Linux. + Unusual keys can be made visible under Linux, but not under X. ++ ++.B setkeycodes ++affects only the "first" input device ++that has modifiable scancode-to-keycode mapping. ++If there is more than one such device, ++.B setkeycodes ++cannot change the mapping of other devices than the "first" one. ++ + .SH "SEE ALSO" + .I "dumpkeys (1), loadkeys (1), showkey (1), getkeycodes (8)" + diff --git a/kbd-1.15-sparc.patch b/kbd-1.15-sparc.patch new file mode 100644 index 0000000..6a2c204 --- /dev/null +++ b/kbd-1.15-sparc.patch @@ -0,0 +1,65 @@ +diff -up kbd-2.0.4/docs/man/man8/kbdrate.8.orig kbd-2.0.4/docs/man/man8/kbdrate.8 +--- kbd-2.0.4/docs/man/man8/kbdrate.8.orig 2017-01-11 11:04:50.114831348 +0100 ++++ kbd-2.0.4/docs/man/man8/kbdrate.8 2017-01-11 11:05:35.619851252 +0100 +@@ -22,7 +22,7 @@ Using + without any options will reset the repeat rate to 10.9 characters per second (cps) + and the delay to 250 milliseconds (ms) for Intel- and M68K-based systems. + These are the IBM defaults. On SPARC-based systems it will reset the repeat rate +-to 5 cps and the delay to 200 ms. ++to 20 cps and the delay to 200 ms. + + .SH OPTIONS + .TP +diff -up kbd-2.0.4/src/kbdrate.c.orig kbd-2.0.4/src/kbdrate.c +--- kbd-2.0.4/src/kbdrate.c.orig 2017-01-11 11:05:10.226840148 +0100 ++++ kbd-2.0.4/src/kbdrate.c 2017-01-11 11:05:56.832860537 +0100 +@@ -111,9 +111,12 @@ static int valid_delays[] = { 250, 500, + static int + KDKBDREP_ioctl_ok(double rate, int delay, int silent) + { ++#if defined(KDKBDREP) && !defined(__sparc__) + /* + * This ioctl is defined in but is not + * implemented anywhere - must be in some m68k patches. ++ * We cannot blindly try unimplemented ioctls on sparc64 - ++ * the 32<->64bit transition layer does not like it. + * Since 2.4.9 also on i386. + */ + struct my_kbd_repeat kbdrep_s; +@@ -176,6 +179,9 @@ KDKBDREP_ioctl_ok(double rate, int delay + rate, kbdrep_s.delay); + + return 1; /* success! */ ++#else /* no KDKBDREP or __sparc__ */ ++ return 0; ++#endif /* KDKBDREP */ + } + + #ifndef KIOCSRATE +@@ -226,7 +232,7 @@ sigalrmhandler(int sig __attribute__((un + int main(int argc, char **argv) + { + #ifdef __sparc__ +- double rate = 5.0; /* Default rate */ ++ double rate = 20.0; /* Default rate */ + int delay = 200; /* Default delay */ + #else + double rate = 10.9; /* Default rate */ +@@ -275,8 +281,9 @@ int main(int argc, char **argv) + if (KIOCSRATE_ioctl_ok(rate, delay, silent)) /* sparc? */ + return 0; + +- /* The ioport way */ ++ /* The ioport way - will crash on sparc */ + ++#ifndef __sparc__ + for (i = 0; i < RATE_COUNT; i++) + if (rate * 10 >= valid_rates[i]) { + value &= 0x60; +@@ -333,5 +340,6 @@ int main(int argc, char **argv) + valid_rates[value & 0x1f] / 10.0, + valid_delays[(value & 0x60) >> 5]); + ++#endif + return EXIT_SUCCESS; + } diff --git a/kbd-1.15-unicode_start.patch b/kbd-1.15-unicode_start.patch new file mode 100644 index 0000000..119fe78 --- /dev/null +++ b/kbd-1.15-unicode_start.patch @@ -0,0 +1,21 @@ +diff -up kbd-1.15.2/src/unicode_start.orig kbd-1.15.2/src/unicode_start +--- kbd-1.15.2/src/unicode_start.orig 2011-01-05 13:28:22.079662644 +0100 ++++ kbd-1.15.2/src/unicode_start 2011-01-05 13:29:01.327353698 +0100 +@@ -72,6 +72,9 @@ stty iutf8 + # have a Unicode map attached, or explicitly specified, e.g., + # by giving `def.uni' as a second argument. + ++DEFAULT_UNICODE_FONT=latarcyrheb-sun16 ++# Also drdos8x16 is a good candidate. ++ + case "$#" in + 2) + setfont "$1" -u "$2" +@@ -80,6 +83,7 @@ case "$#" in + setfont "$1" + ;; + 0) ++ setfont $DEFAULT_UNICODE_FONT + ;; + *) + echo "usage: unicode_start [font [unicode map]]" diff --git a/kbd-1.15.3-dumpkeys-man.patch b/kbd-1.15.3-dumpkeys-man.patch new file mode 100644 index 0000000..fc90412 --- /dev/null +++ b/kbd-1.15.3-dumpkeys-man.patch @@ -0,0 +1,18 @@ +diff -up kbd-2.0.4/docs/man/man1/dumpkeys.1.in.orig kbd-2.0.4/docs/man/man1/dumpkeys.1.in +--- kbd-2.0.4/docs/man/man1/dumpkeys.1.in.orig 2017-01-11 11:12:22.884029413 +0100 ++++ kbd-2.0.4/docs/man/man1/dumpkeys.1.in 2017-01-11 11:12:47.537040194 +0100 +@@ -164,6 +164,14 @@ output of + .BI \-S shape " " " " \-\-shape= shape + .LP + .TP ++.B \-1 \-\-separate-lines ++This forces ++.B dumpkeys ++to write one line per (modifier,keycode) pair. It prefixes the word ++.I plain ++for plain keycodes. ++.LP ++.TP + .B \-t \-\-funcs-only + When this option is given, + .B dumpkeys diff --git a/kbd-1.15.5-loadkeys-search-path.patch b/kbd-1.15.5-loadkeys-search-path.patch new file mode 100644 index 0000000..c2013b8 --- /dev/null +++ b/kbd-1.15.5-loadkeys-search-path.patch @@ -0,0 +1,24 @@ +diff -up kbd-2.0.4/src/loadkeys.c.orig kbd-2.0.4/src/loadkeys.c +--- kbd-2.0.4/src/loadkeys.c.orig 2017-01-11 11:14:48.308093019 +0100 ++++ kbd-2.0.4/src/loadkeys.c 2017-01-11 11:15:18.018106020 +0100 +@@ -27,7 +27,7 @@ + #include "keymap.h" + + static const char *progname = NULL; +-static const char *const dirpath1[] = { "", DATADIR "/" KEYMAPDIR "/**", KERNDIR "/", 0 }; ++static const char *const dirpath1[] = { "", DATADIR "/" KEYMAPDIR "/**", DATADIR "/" XKBKEYMAPDIR "/", DATADIR "/" LEGACYKEYMAPDIR "/**", KERNDIR "/", 0 }; + static const char *const suffixes[] = { "", ".kmap", ".map", 0 }; + + static void __attribute__((noreturn)) +diff -up kbd-2.0.4/src/paths.h.orig kbd-2.0.4/src/paths.h +--- kbd-2.0.4/src/paths.h.orig 2017-01-11 11:15:40.404115812 +0100 ++++ kbd-2.0.4/src/paths.h 2017-01-11 11:15:59.730124274 +0100 +@@ -5,6 +5,8 @@ + * The following five subdirectories are defined: + */ + #define KEYMAPDIR "keymaps" ++#define XKBKEYMAPDIR "keymaps/xkb" ++#define LEGACYKEYMAPDIR "keymaps/legacy" + #define UNIMAPDIR "unimaps" + #define TRANSDIR "consoletrans" + #define VIDEOMODEDIR "videomodes" diff --git a/kbd-1.15.5-sg-decimal-separator.patch b/kbd-1.15.5-sg-decimal-separator.patch new file mode 100644 index 0000000..cb7398d --- /dev/null +++ b/kbd-1.15.5-sg-decimal-separator.patch @@ -0,0 +1,12 @@ +diff -up kbd-1.15.5/data/keymaps/i386/qwertz/sg.map.orig kbd-1.15.5/data/keymaps/i386/qwertz/sg.map +--- kbd-1.15.5/data/keymaps/i386/qwertz/sg.map.orig 2013-02-21 15:54:39.362799094 +0100 ++++ kbd-1.15.5/data/keymaps/i386/qwertz/sg.map 2013-02-21 15:54:46.448838554 +0100 +@@ -1,7 +1,7 @@ + keymaps 0-2,4-6,8,12 + include "qwertz-layout" + include "linux-with-alt-and-altgr.inc" +- plain keycode 83 = KP_Comma ++ plain keycode 83 = KP_Period + strings as usual + + keycode 1 = Escape Escape diff --git a/kbd-2.0.2-unicode-start-font.patch b/kbd-2.0.2-unicode-start-font.patch new file mode 100644 index 0000000..72d47f4 --- /dev/null +++ b/kbd-2.0.2-unicode-start-font.patch @@ -0,0 +1,15 @@ +diff -up kbd-2.0.2/src/unicode_start.orig kbd-2.0.2/src/unicode_start +--- kbd-2.0.2/src/unicode_start.orig 2014-08-12 14:47:53.019028849 +0200 ++++ kbd-2.0.2/src/unicode_start 2014-08-12 14:54:42.631427602 +0200 +@@ -72,7 +72,10 @@ stty iutf8 + # have a Unicode map attached, or explicitly specified, e.g., + # by giving `def.uni' as a second argument. + +-DEFAULT_UNICODE_FONT=latarcyrheb-sun16 ++# Source /etc/vconsole.conf to get default font ++. /etc/vconsole.conf ++ ++DEFAULT_UNICODE_FONT=$FONT + # Also drdos8x16 is a good candidate. + + case "$#" in diff --git a/kbd-2.0.4-covscan-fixes.patch b/kbd-2.0.4-covscan-fixes.patch new file mode 100644 index 0000000..73bba35 --- /dev/null +++ b/kbd-2.0.4-covscan-fixes.patch @@ -0,0 +1,35 @@ +diff -up kbd-2.0.4/src/kdmapop.c.orig kbd-2.0.4/src/kdmapop.c +--- kbd-2.0.4/src/kdmapop.c.orig 2018-11-05 10:06:05.208744333 +0100 ++++ kbd-2.0.4/src/kdmapop.c 2018-11-05 10:14:16.149215908 +0100 +@@ -154,6 +154,7 @@ int getunimap(int fd, struct unimapdesc + } + if (ioctl(fd, GIO_UNIMAP, &ud)) { + perror("GIO_UNIMAP"); ++ free(ud.entries); + return -1; + } + if (ct != ud.entry_ct) +diff -up kbd-2.0.4/src/libkeymap/common.c.orig kbd-2.0.4/src/libkeymap/common.c +--- kbd-2.0.4/src/libkeymap/common.c.orig 2016-12-19 16:01:51.000000000 +0100 ++++ kbd-2.0.4/src/libkeymap/common.c 2018-11-05 10:05:50.207730393 +0100 +@@ -246,5 +246,8 @@ int lk_free(struct lk_ctx *ctx) + ctx->key_line = NULL; + } + ++ free(ctx); ++ ctx = NULL; ++ + return 0; + } +diff -up kbd-2.0.4/src/setfont.c.orig kbd-2.0.4/src/setfont.c +--- kbd-2.0.4/src/setfont.c.orig 2018-11-05 10:28:01.994027734 +0100 ++++ kbd-2.0.4/src/setfont.c 2018-11-05 10:35:54.933477039 +0100 +@@ -327,6 +327,8 @@ do_loadfont(int fd, char *inbuf, int wid + + if (putfont(fd, buf, fontsize, width, hwunit)) + exit(EX_OSERR); ++ ++ free(buf); + } + + static void diff --git a/kbd.spec b/kbd.spec new file mode 100644 index 0000000..4e62781 --- /dev/null +++ b/kbd.spec @@ -0,0 +1,711 @@ +Name: kbd +Version: 2.0.4 +Release: 10%{?dist} +Summary: Tools for configuring the console (keyboard, virtual terminals, etc.) + +Group: System Environment/Base +License: GPLv2+ +URL: http://www.kbd-project.org/ +Source0: ftp://ftp.altlinux.org/pub/people/legion/kbd/kbd-%{version}.tar.xz +Source1: kbd-latsun-fonts.tar.bz2 +Source2: kbd-latarcyrheb-32.tar.bz2 +Source3: xml2lst.pl +Source4: vlock.pamd +Source5: kbdinfo.1 +Source6: cz-map.patch +# Patch0: puts additional information into man pages +Patch0: kbd-1.15-keycodes-man.patch +# Patch1: sparc modifications +Patch1: kbd-1.15-sparc.patch +# Patch2: adds default unicode font to unicode_start script +Patch2: kbd-1.15-unicode_start.patch +# Patch3: add missing dumpkeys option to man page +Patch3: kbd-1.15.3-dumpkeys-man.patch +# Patch4: fixes decimal separator in Swiss German keyboard layout, bz 882529 +Patch4: kbd-1.15.5-sg-decimal-separator.patch +# Patch5: adds xkb and legacy keymaps subdirs to loadkyes search path, bz 1028207 +Patch5: kbd-1.15.5-loadkeys-search-path.patch +# Patch6: don't hardcode font used in unicode_start, take it from vconsole.conf, +# bz 1101007 +Patch6: kbd-2.0.2-unicode-start-font.patch +# Patch7: fixes issues found by static analysis, bz 1602566 +Patch7: kbd-2.0.4-covscan-fixes.patch + +BuildRequires: bison, flex, gettext, pam-devel, check-devel +BuildRequires: console-setup, xkeyboard-config +Requires: %{name}-misc = %{version}-%{release} +# Temporarily require -legacy +Requires: %{name}-legacy = %{version}-%{release} +Provides: vlock = %{version} +Conflicts: vlock <= 1.3 +Obsoletes: vlock + +%description +The %{name} package contains tools for managing a Linux +system's console's behavior, including the keyboard, the screen +fonts, the virtual terminals and font files. + +%package misc +Summary: Data for kbd package +BuildArch: noarch + +%description misc +The %{name}-misc package contains data for kbd package - console fonts, +keymaps etc. Please note that %{name}-misc is not helpful without kbd. + +%package legacy +Summary: Legacy data for kbd package +BuildArch: noarch + +%description legacy +The %{name}-legacy package contains original keymaps for kbd package. +Please note that %{name}-legacy is not helpful without kbd. + +%prep +%setup -q -a 1 -a 2 +cp -fp %{SOURCE3} . +cp -fp %{SOURCE6} . +%patch0 -p1 -b .keycodes-man +%patch1 -p1 -b .sparc +%patch2 -p1 -b .unicode_start +%patch3 -p1 -b .dumpkeys-man +%patch4 -p1 -b .sg-decimal-separator +%patch5 -p1 -b .loadkeys-search-path +%patch6 -p1 -b .unicode-start-font +%patch7 -p1 -b .covscan-fixes + +# 7-bit maps are obsolete; so are non-euro maps +pushd data/keymaps/i386 +cp qwerty/pt-latin9.map qwerty/pt.map +cp qwerty/sv-latin1.map qwerty/se-latin1.map + +mv azerty/fr.map azerty/fr-old.map +cp azerty/fr-latin9.map azerty/fr.map + +cp azerty/fr-latin9.map azerty/fr-latin0.map # legacy alias + +# Rename conflicting keymaps +mv dvorak/no.map dvorak/no-dvorak.map +mv fgGIod/trf.map fgGIod/trf-fgGIod.map +mv olpc/es.map olpc/es-olpc.map +mv olpc/pt.map olpc/pt-olpc.map +mv qwerty/cz.map qwerty/cz-qwerty.map +popd + +# remove obsolete "gr" translation +pushd po +rm -f gr.po gr.gmo +popd + +# Convert to utf-8 +iconv -f iso-8859-1 -t utf-8 < "ChangeLog" > "ChangeLog_" +mv "ChangeLog_" "ChangeLog" + +%build +%configure --prefix=%{_prefix} --datadir=/lib/kbd --mandir=%{_mandir} --localedir=%{_datadir}/locale --enable-nls +make %{?_smp_mflags} + +%install +make install DESTDIR=$RPM_BUILD_ROOT + +# ro_win.map.gz is useless +rm -f $RPM_BUILD_ROOT/lib/kbd/keymaps/i386/qwerty/ro_win.map.gz + +# Create additional name for Serbian latin keyboard +ln -s sr-cy.map.gz $RPM_BUILD_ROOT/lib/kbd/keymaps/i386/qwerty/sr-latin.map.gz + +# The rhpl keyboard layout table is indexed by kbd layout names, so we need a +# Korean keyboard +ln -s us.map.gz $RPM_BUILD_ROOT/lib/kbd/keymaps/i386/qwerty/ko.map.gz + +# Move binaries which we use before /usr is mounted from %{_bindir} to /bin. +mkdir -p $RPM_BUILD_ROOT/bin +for binary in setfont dumpkeys kbd_mode unicode_start unicode_stop loadkeys ; do + mv $RPM_BUILD_ROOT%{_bindir}/$binary $RPM_BUILD_ROOT/bin/ +done + +# Some microoptimization +sed -i -e 's,\,/bin/kbd_mode,g;s,\,/bin/setfont,g' \ + $RPM_BUILD_ROOT/bin/unicode_start + +# Link open to openvt +ln -s openvt $RPM_BUILD_ROOT%{_bindir}/open +ln -s openvt.1.gz $RPM_BUILD_ROOT%{_mandir}/man1/open.1.gz + +# install kbdinfo manpage +gzip -c %SOURCE5 > $RPM_BUILD_ROOT/%{_mandir}/man1/kbdinfo.1.gz + +# Move locale files to correct place +cp -r $RPM_BUILD_ROOT/lib/kbd/locale/ $RPM_BUILD_ROOT%{_datadir}/locale +rm -rf $RPM_BUILD_ROOT/lib/kbd/locale + +# Install PAM configuration for vlock +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/pam.d +install -m 644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/pam.d/vlock + +# Move original keymaps to legacy directory +mkdir -p $RPM_BUILD_ROOT/lib/kbd/keymaps/legacy +mv $RPM_BUILD_ROOT/lib/kbd/keymaps/{amiga,atari,i386,include,mac,ppc,sun} $RPM_BUILD_ROOT/lib/kbd/keymaps/legacy + +# Convert X keyboard layouts to console keymaps +mkdir -p $RPM_BUILD_ROOT/lib/kbd/keymaps/xkb +perl xml2lst.pl < /usr/share/X11/xkb/rules/base.xml > layouts-variants.lst +while read line; do + XKBLAYOUT=`echo "$line" | cut -d " " -f 1` + echo "$XKBLAYOUT" >> layouts-list.lst + XKBVARIANT=`echo "$line" | cut -d " " -f 2` + ckbcomp "$XKBLAYOUT" "$XKBVARIANT" | gzip > $RPM_BUILD_ROOT/lib/kbd/keymaps/xkb/"$XKBLAYOUT"-"$XKBVARIANT".map.gz +done < layouts-variants.lst + +# Convert X keyboard layouts (plain, no variant) +cat layouts-list.lst | sort -u >> layouts-list-uniq.lst +while read line; do + ckbcomp "$line" | gzip > $RPM_BUILD_ROOT/lib/kbd/keymaps/xkb/"$line".map.gz +done < layouts-list-uniq.lst + +# wipe converted layouts which cannot input ASCII (#1031848) +zgrep -L "U+0041" $RPM_BUILD_ROOT/lib/kbd/keymaps/xkb/* | xargs rm -f + +# Rename the converted default fi (kotoistus) layout (#1117891) +gunzip $RPM_BUILD_ROOT/lib/kbd/keymaps/xkb/fi.map.gz +mv $RPM_BUILD_ROOT/lib/kbd/keymaps/xkb/fi.map $RPM_BUILD_ROOT/lib/kbd/keymaps/xkb/fi-kotoistus.map +gzip $RPM_BUILD_ROOT/lib/kbd/keymaps/xkb/fi-kotoistus.map + +# Fix converted cz layout - add compose rules +gunzip $RPM_BUILD_ROOT/lib/kbd/keymaps/xkb/cz.map.gz +patch $RPM_BUILD_ROOT/lib/kbd/keymaps/xkb/cz.map < %{SOURCE6} +gzip $RPM_BUILD_ROOT/lib/kbd/keymaps/xkb/cz.map + +%find_lang %{name} + +%check +%ifnarch s390x +make check +%endif + +%files -f %{name}.lang +%doc ChangeLog AUTHORS README COPYING docs/doc/kbd.FAQ*.html docs/doc/font-formats/*.html docs/doc/utf/utf* docs/doc/dvorak/* +/bin/* +%{_bindir}/* +%{_mandir}/*/* +%config(noreplace) %{_sysconfdir}/pam.d/vlock + +%files misc +/lib/kbd +%exclude /lib/kbd/keymaps/legacy + +%files legacy +/lib/kbd/keymaps/legacy + +%changelog +* Wed Jun 17 2020 Vitezslav Crhonek - 2.0.4-10 +- Add %%check, rebuild + +* Tue Jun 16 2020 Vitezslav Crhonek - 2.0.4-9 +- Rebuild + Resolves: #1844967 + +* Mon Dec 10 2018 Vitezslav Crhonek - 2.0.4-8 +- Fix issues found by static analysis + Resoloves: #1602566 + +* Tue Jul 31 2018 Vitezslav Crhonek - 2.0.4-7 +- Drop initscripts Require + Resolves: #1610277 + +* Tue Jul 24 2018 Vitezslav Crhonek - 2.0.4-6 +- Rebuilt (reuploaded upstream tarball, the checksum differed) + +* Wed Feb 07 2018 Fedora Release Engineering - 2.0.4-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Aug 03 2017 Fedora Release Engineering - 2.0.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 2.0.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 2.0.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Jan 11 2017 Vitezslav Crhonek - 2.0.4-1 +- Update to kbd-2.0.4 + Resolves: #1411174 + +* Tue Oct 11 2016 Vitezslav Crhonek - 2.0.3-4 +- Fix FTBFS + Resolves: #1381878 + +* Thu Feb 04 2016 Fedora Release Engineering - 2.0.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Aug 06 2015 Vitezslav Crhonek - 2.0.3-2 +- Add compose rules to generated cz.map + Resolves: #1181581 + +* Wed Jul 15 2015 Vitezslav Crhonek - 2.0.3-1 +- Update to kbd-2.0.3 + Resolves: #1242684 + +* Wed Jun 17 2015 Fedora Release Engineering - 2.0.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sat Feb 21 2015 Till Maas - 2.0.2-6 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Mon Oct 06 2014 Vitezslav Crhonek - 2.0.2-5 +- Rename and keep Finnish xkb converted layout (patch by Marko Myllynen) + Related: #1117891 + +* Sat Aug 16 2014 Fedora Release Engineering - 2.0.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Tue Aug 12 2014 Vitezslav Crhonek - 2.0.2-3 +- Fix unicode_start hardcodes font + Resolves: #1101007 + +* Wed Jul 16 2014 Vitezslav Crhonek - 2.0.2-2 +- Remove Finnish xkb converted layout + Resolves: #1117891 + +* Tue Jul 08 2014 Vitezslav Crhonek - 2.0.2-1 +- Update to kbd-2.0.2 + +* Sun Jun 08 2014 Fedora Release Engineering - 2.0.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon Feb 17 2014 Vitezslav Crhonek - 2.0.1-6 +- Add man page for kbdinfo, link open man page to openvt man page + +* Wed Nov 27 2013 Vitezslav Crhonek - 2.0.1-5 +- Add missing patch for loadkeys search path + +* Tue Nov 26 2013 Vitezslav Crhonek - 2.0.1-4 +- Add xkb and legacy keymaps subdirs to loadkyes search path, remove symlinks + Related: #1028207 +- Don't convert layouts that can't input ASCII (patch by Adam Williamson) + Resolves: #1031848 +- Fix vlock doesn't perform PAM account management or credential reinitialization + (patch by Dmitry V. Levin) + Resolves: #913311 + +* Wed Nov 06 2013 Vitezslav Crhonek - 2.0.1-3 +- Add PAM config for vlock + Resolves: #913309 + +* Mon Nov 04 2013 Vitezslav Crhonek - 2.0.1-2 +- Fix URL +- Remove source files already included in upstream tarball + +* Mon Nov 04 2013 Vitezslav Crhonek - 2.0.1-1 +- Update to kbd-2.0.1 + +* Sat Aug 03 2013 Fedora Release Engineering - 1.15.5-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Thu May 23 2013 Vitezslav Crhonek - 1.15.5-8 +- Add vlock to obsoletes + +* Wed May 22 2013 Vitezslav Crhonek - 1.15.5-7 +- Convert also plain layouts (no variant), point relevant symlinks to them + +* Tue May 21 2013 Vitezslav Crhonek - 1.15.5-6 +- Original keymaps moved to legacy dir, created symlinks to xkb keymaps + +* Thu Feb 21 2013 Vitezslav Crhonek - 1.15.5-5 +- Fix decimal separator in Swiss German keyboard layout + Resolves: #882529 + +* Thu Feb 14 2013 Fedora Release Engineering - 1.15.5-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Tue Jan 22 2013 Vitezslav Crhonek - 1.15.5-3 +- Include xkb layouts from xkeyboard-config converted to console keymaps +- Add version to vlock provides + Resolves: #902564 + +* Mon Jan 21 2013 Vitezslav Crhonek - 1.15.5-2 +- Fix loadkeys regression + Resolves: #902259 + +* Mon Jan 14 2013 Vitezslav Crhonek - 1.15.5-1 +- Update to kbd-1.15.5 (removed kbd-1.15-resizecon-x86_64.patch, + kbd-1.15-defkeymap.patch, kbd-1.15.3-fix-es-translation.patch, + kbd-1.15.3-loadkeys-d.patch) + +* Thu Sep 13 2012 Vitezslav Crhonek - 1.15.3-8 +- Fix link to upstream tarball + +* Tue Aug 28 2012 Vitezslav Crhonek - 1.15.3-7 +- Fix issues found by fedora-review utility in the spec file + +* Thu Jul 19 2012 Fedora Release Engineering - 1.15.3-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Fri Jan 13 2012 Fedora Release Engineering - 1.15.3-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Dec 13 2011 Vitezslav Crhonek - 1.15.3-4 +- Ship double scaled latarcyrheb console font for high resolution screens + (created by Tom Horsley) + Resolves: #617768 + +* Mon Oct 24 2011 Vitezslav Crhonek - 1.15.3-3 +* Fix loadkeys -d option (patch by Jaroslav Skarvada) + Resolves: #744567 + +* Tue Aug 23 2011 Vitezlsav Crhonek - 1.15.3-2 +- Add missing dumpkeys option to man page + Resolves: #732121 + +* Mon Aug 22 2011 Vitezslav Crhonek - 1.15.3-1 +- Update to kbd-1.15.3 + +* Thu Apr 21 2011 Vitezslav Crhonek - 1.15.2-3 +- Add French Canadian Dvorak keymap + Resolves: #680989 + +* Mon Feb 07 2011 Fedora Release Engineering - 1.15.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Jan 5 2011 Vitezslav Crhonek - 1.15.2-1 +- Update to kbd-1.15.2 (removed kbd-1.15-quiet_doc.patch and romanian keymaps, both are + part of the upstream tarball now) + +* Thu Jun 24 2010 Vitezslav Crhonek - 1.15-11 +- Ship /lib/kbd in separate subpackage + +* Mon Jun 14 2010 Vitezslav Crhonek - 1.15-10 +- Fix name referring to default keymap + +* Wed Aug 26 2009 Karsten Hopp 1.15-9 +- drop excludearch s390x, we need this package to be able to build other packages on s390x + +* Fri Jul 24 2009 Fedora Release Engineering - 1.15-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Mar 5 2009 Vitezslav Crhonek - 1.15-7 +- Add loadkeys 'q' option to loadkeys manpage and --help + Resolves: #487538 + +* Mon Mar 2 2009 Vitezslav Crhonek - 1.15-6 +- Remove static loadkeys binary (it's not needed anymore) + +* Wed Feb 25 2009 Fedora Release Engineering - 1.15-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Fri Feb 6 2009 Vitezslav Crhonek - 1.15-4 +- Merge review (drop Provides/Obsoletes, change Prereq to Requires, + add URL, convert ChangeLog to utf-8, replace locale destination + with macro, add COPYING and add dvorak documentation) + Resolves: #225958 + +* Thu Jan 29 2009 Vitezslav Crhonek - 1.15-3 +- Rename conflicting keymaps to have unique names + Resolves: #481674 + +* Mon Jan 12 2009 Vitezslav Crhonek - 1.15-2 +- Move loadkeys to /bin + +* Thu Jan 8 2009 Vitezslav Crhonek - 1.15-1 +- Update to kbd-1.15 + +* Mon Sep 8 2008 Vitezslav Crhonek - 1.12-32 +- Rediff all patches to work with patch --fuzz=0 +- Add static loadkeys + Related: #451672 + +* Tue Feb 26 2008 Vitezslav Crhonek - 1.12-31 +- Fix trq.map + Resolves: #216710 + +* Fri Feb 22 2008 Vitezslav Crhonek - 1.12-30 +- Rebuild fo GCC 4.3 + +* Tue Nov 27 2007 Vitezslav Crhonek - 1.12-29 +- Stop kbdrate using consolehelper + Resolves: #393231 + +* Thu Nov 15 2007 Vitezslav Crhonek - 1.12-28 +- Fix ro.map.gz, add ro_std.map.gz, drop ro_win.map.gz, + add Lat2-Terminus16.psf console font (many thanks to Alexandru Szasz + ) + Resolves: #253892 + +* Wed Oct 17 2007 Vitezslav Crhonek - 1.12-27 +- Add resizecons (with man page) for x86_64 + Resolves: #333651 + +* Mon Oct 15 2007 Vitezslav Crhonek - 1.12-26 +- Fix ro.map to generate right unicode for s, S, t, T with comma +- Fix LatArCyrHeb-16 unicode mapping table to show comma-version + of s, S, t, T and cedilla-version of s, S, t, T as the same glyph + (because there is no font in kbd for comma-version) + Resolves: #329071 + +* Tue Sep 18 2007 Vitezslav Crhonek - 1.12-25 +- Add new romanian keymap + Resolves: #253892 + +* Mon Aug 27 2007 Vitezslav Crhonek - 1.12-24 +- Fix license +- Symlink sr-cy layout to sr-latin + Resolves: #253957 + +* Tue Jul 3 2007 Vitezslav Crhonek - 1.12-23 +- Rebuild + +* Tue Jul 3 2007 Vitezslav Crhonek - 1.12-22 +- Fix sun12x22 font missing unicode mapping table + Resolves: #244628 + +* Tue Jan 9 2007 Miloslav Trmac - 1.12-21 +- Add a "ko" (Korean) keyboard layout, equivalent to the "us" layout + Resolves: #220151 + +* Thu Dec 7 2006 Miloslav Trmac - 1.12-20 +- Document that setkeycodes doesn't affect USB keyboards and that the kernel + doesn't provide the raw scan codes by default + Resolves: #211803 + +* Tue Oct 31 2006 Miloslav Trmac - 1.12-19 +- Ship "el" translation instead of the obsolete "gr" translation + Resolves: #210749 +- Fix %% quoting in %%changelog + +* Fri Sep 29 2006 Miloslav Trmac - 1.12-18 +- Add a missing tilde to U+00E3 in latarcyrheb-sun16.psfu (#204470) + +* Fri Jul 14 2006 Jesse Keating - 1.12-17 +- Obsoletes/Provides open +- Create a symlink from open to openvt + +* Wed Jul 12 2006 Jesse Keating - 1.12-16.1 +- rebuild + +* Sun Jul 9 2006 Miloslav Trmac - 1.12-16 +- Don't include on SPARC (#198040, patch by Dennis Gilmore + ) + +* Mon May 29 2006 Miloslav Trmac - 1.12-15 +- Fix missing BuildRequires (#193406) + +* Mon Mar 27 2006 Miloslav Trmac - 1.12-14 +- Don't install resizecons.8 on non-x86 (#186877, patch by Keiichi Mori + ) + +* Fri Feb 10 2006 Jesse Keating - 1.12-13.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 1.12-13.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Jan 20 2006 Miloslav Trmac - 1.12-13 +- Fix build with new coreutils +- Hardcode paths in unicode_start to avoid a few file lookups (#178329) +- Drop unnecessary Prereq: sed mktemp + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Thu Dec 1 2005 Miloslav Trmac - 1.12-12 +- Don't reload the keymap in unicode_start (#172425) + +* Fri Nov 11 2005 Miloslav Trmac - 1.12-11 +- Don't ship character set lists (they are already in glibc-common) and an + obsolete copy of kbd.FAQ + +* Fri May 20 2005 Miloslav Trmac - 1.12-10 +- Don't attempt to open directories as source files (#141634, original patch by + Paul Nasrat) + +* Tue May 17 2005 Miloslav Trmac - 1.12-9 +- Fix another violation of C aliasing rules (#157720, patch by Jan Kratochvil) + +* Sat Mar 12 2005 Miloslav Trmac - 1.12-8 +- Fix violation of C aliasing rules (#150440) + +* Sun Mar 6 2005 Miloslav Trmac - 1.12-7 +- Don't run ldconfig +- Don't strip executables + +* Fri Mar 4 2005 Miloslav Trmac - 1.12-6 +- Rebuild with gcc4 + +* Sun Feb 20 2005 Miloslav Trmac - 1.12-5 +- Put "Meta_acute" back in German keymaps, just ignore it in (loadkeys -u) + (patch by Jochen Schmitt) +- Don't ship patch backup files, simpler way + +* Sat Feb 19 2005 Miloslav Trmac - 1.12-4 +- Don't ship a patch backup file +- Mention in setfont.8 that 512-glyph fonts reduce the number of available + colors (#140935, patch by Dmitry Butskoj) +- Remove "Meta_acute" from German keymaps (#143124) +- Make the %%triggerun script condition more precise, ignore failure of the + script + +* Mon Feb 14 2005 Adrian Havill +- rebuilt + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Thu Feb 26 2004 Adrian Havill +- update to 1.12 + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Wed Jan 14 2004 Bill Nottingham 1.08-12 +- remove speakup patch at request of author + +* Wed Jan 14 2004 Bill Nottingham 1.08-12 +- remove speakup patch at request of author + +* Fri Oct 10 2003 Bill Nottingham 1.08-11 +- remove keytable init script (#106783) + +* Tue Aug 12 2003 Adrian Havill 1.08-10.1 +- bump for RHEL + +* Tue Aug 12 2003 Adrian Havill 1.08-10 +- apply the rukbd patch (#78218) + +* Thu Jul 31 2003 Adrian Havill 1.08-9 +- don't print "plus before..." warnings about non-supported capslock + in unimode (#81855) + +* Wed Jul 30 2003 Adrian Havill 1.08-8 +- replaced Russian keyboard map with working UTF-8 equivalent (#79338) + +* Thu Jul 24 2003 Adrian Havill 1.08-7 +- make euro/latin-9 the default instead of latin-1 and 7-bit (#97013) +- fix swedish keymap; se, not sv (#88791) +- add fr-latin0 legacy alias of fr-latin-9 (#88324) +- add ".map" ext to filename param of init script (#90562) + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Thu Mar 06 2003 Florian La Roche +- build new rpm + +* Fri Feb 21 2003 Florian La Roche +- ExcludeArch mainframe + +* Thu Jan 30 2003 Bill Nottingham 1.08-4 +- remove condrestart from initscript + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Fri Dec 6 2002 Nalin Dahyabhai 1.08-2 +- only output terminal unicode init sequence if both stdout and stderr are + connected to terminals, so that it doesn't show up when script outputs + get piped to files + +* Fri Nov 22 2002 Nalin Dahyabhai 1.08-1 +- update to 1.08 +- drop updates which went mainline + +* Mon Nov 11 2002 Nalin Dahyabhai 1.06-27 +- add detached signature +- remove directory names from PAM configuration so that the same config file + can be used for any arch on multilib systems + +* Wed Sep 4 2002 Bill Nottingham 1.06-26 +- don't munge /etc/sysconfig/i18n + +* Tue Sep 3 2002 Bill Nottingham 1.06-25 +- don't run setsysfont in upgrade trigger on console-tools + +* Thu Aug 29 2002 Jakub Jelinek 1.06-24 +- use cyr-sun16 cyrillic chars in latarcyrheb-sun16 font + instead of old LatArCyrHeb-16 chars +- add Euro character to latarcyrheb-sun16 +- use latarcyrheb-sun16 by default in unicode_start script + +* Tue Aug 27 2002 Jakub Jelinek 1.06-23 +- add back lat[02]-sun16 fonts plus latarcyrheb-sun16 font + +* Thu Aug 22 2002 Karsten Hopp +- needs to conflict with older util-linux packages + (kbdrate moved between packages) + +* Tue Aug 13 2002 Bill Nottingham 1.06-21 +- remove Evil Hack in favor of slightly-less-evil-hack in initscripts + +* Tue Jul 9 2002 Bill Nottingham 1.06-20 +- fix speakup keymap names + +* Tue Jul 09 2002 Phil Knirsch 1.06-19 +- Evil hack to make setfont work correctly on all consoles (#68018) + +* Thu Jun 27 2002 Bill Nottingham 1.06-18 +- move unicode_stop to /bin too +- fix path to loadkeys in keytable.init +- add in speakup keymaps + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Tue Jun 11 2002 Nalin Dahyabhai 1.06-16 +- fix incorrect path in console.apps configuration file + +* Thu May 30 2002 Bill Nottingham 1.06-14 +- move some more stuff to /bin (unicode_start and dependencies) + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Mon Feb 25 2002 Bernhard Rosenkraenzer 1.06-12 +- Rebuild in new environment + +* Wed Jan 30 2002 Bernhard Rosenkraenzer 1.06-11 +- Oops, actually list the pam files in %%files + +* Tue Jan 29 2002 Bernhard Rosenkraenzer 1.06-10 +- Add and consolehelper'ify kbdrate + +* Tue Jan 29 2002 Bernhard Rosenkraenzer 1.06-9 +- Re-remove kbdrate + +* Thu Jan 24 2002 Bernhard Rosenkraenzer 1.06-7 +- Fix build in current environment +- Get rid of kbdrate, it's in util-linux these days + +* Wed Jul 18 2001 Matt Wilson +- added a patch (Patch4) that allows --tty= in setfont +- modified patch not to break translations + +* Tue Jul 3 2001 Bernhard Rosenkraenzer 1.06-4 +- Add cyrillic patches from leon@geon.donetsk.ua (#47144) + +* Tue Jun 26 2001 Bernhard Rosenkraenzer 1.06-3 +- Fix "Alt+AltGr=Compose" in qwertz-keyboards + +* Mon Jun 25 2001 Bernhard Rosenkraenzer 1.06-2 +- Fix "make install" and init script (#45327) + +* Sat Jun 16 2001 Than Ngo +- update to 1.0.6 +- use %%{_tmppath} +- use find_lang +- support new gettext +- remove some patch files, which are included in 1.0.6 +- fix to use RPM_OPT_FLAGS + +* Thu May 3 2001 Bernhard Rosenkraenzer 1.05-3 +- Fix up resizecons + +* Wed May 2 2001 Bernhard Rosenkraenzer 1.05-2 +- Build everything, obsoletes console-tools +- s/Copyright:/License:/ +- License is GPL, not just distributable +- Add our compose mappings from old console-tools +- Add triggerpostun -- console-tools magic to get sane fonts and mappings + +* Tue Apr 17 2001 Erik Troan +- initial packaging for kbdrate diff --git a/kbdinfo.1 b/kbdinfo.1 new file mode 100644 index 0000000..da84f76 --- /dev/null +++ b/kbdinfo.1 @@ -0,0 +1,33 @@ +.TH KBDINFO 1 "June 2011" +.SH NAME +kbdinfo \- obtain information about the status of a console +.SH SYNOPSIS +\fBkbdinfo\fR [\-C \fIDEVICE\fR] getmode [text|graphics] +.LP +\fBkbdinfo\fR [\-C \fIDEVICE\fR] gkbmode [raw|xlate|mediumraw|unicode] +.LP +\fBkbdinfo\fR [\-C \fIDEVICE\fR] gkbmeta [metabit|escprefix] +.LP +\fBkbdinfo\fR [\-C \fIDEVICE\fR] gkbled [scrolllock|numlock|capslock] +.SH DESCRIPTION +.B kbdinfo +is an interface to KDGETMODE, GKBMODE, GKBMETA and GKBLED ioctls. Its +primary use case is to query the status of the given +.I CONSOLE +(or the currently active one, if no \-C option is present) from a shell +script. +.LP +If the final value argument is not specified, +.B kbdinfo +will print the result of the desired ioctl to the standard output. +Otherwise, the given value is compared to the actual result, and the +utility will exit with a status code of 0 for a match, 1 otherwise. No +text is printed for this style of invocation. +.SH "SEE ALSO" +.BR kbd_mode (1) +.SH AUTHOR +kbdinfo is Copyright \(co 2011 Alexey Gladkov +. +.LP +This manual page was written by Michael Schutte for +the Debian GNU/Linux system (but may be used by others). diff --git a/sources b/sources new file mode 100644 index 0000000..2870899 --- /dev/null +++ b/sources @@ -0,0 +1,3 @@ +SHA512 (kbd-2.0.4.tar.xz) = eb82c3a2998145980f9532dd64fe3a87d80a085f251650b71ca194724d1f1eeed0a48df1166552dd5c7d18aae4037ee65e442804a39f38ec07655d186cf9fe98 +SHA512 (kbd-latarcyrheb-32.tar.bz2) = 1870a708e16cf16f8343f02f7e97940e8404655078f92709a0b8a334be772faa99b4dbaca37e8d8c5b16d0d4d811fe6b102e4f76ae821148eb33075613dc95b8 +SHA512 (kbd-latsun-fonts.tar.bz2) = b98da5df85017ef1bd297eb2255046d54dd805c84356db7533f24e49fb78c8e3999901a45a49cdf6a74c0002bba2e0aa8327469d78dd38b6e747103972c30584 diff --git a/vlock.pamd b/vlock.pamd new file mode 100644 index 0000000..d2d47e5 --- /dev/null +++ b/vlock.pamd @@ -0,0 +1,3 @@ +#%PAM-1.0 +auth include system-auth +account required pam_permit.so diff --git a/xml2lst.pl b/xml2lst.pl new file mode 100644 index 0000000..96cf01e --- /dev/null +++ b/xml2lst.pl @@ -0,0 +1,231 @@ +#!/usr/bin/perl + +# converts the .xml file to the old format .lst file +# +# Usage: +# +# perl xml2lst.pl < filename.xml > filename.lst +# +# author Ivan Pascal +# modified by Vitezslav Crhonek + +$doc = new_document( 0, ''); +parse('', $doc); + +($reg) = node_by_name($doc, '/xkbConfigRegistry'); +@models = node_by_name($reg, 'modelList/model/configItem'); +@layouts = node_by_name($reg, 'layoutList/layout/configItem'); +@options = node_by_name($reg, 'optionList/group/configItem'); + +for $i (@layouts) { + ($name) = node_by_name($i, 'name'); + @variants = node_by_name($i, '../variantList/variant/configItem'); + for $v (@variants) { + ($variant) = node_by_name($v, 'name'); + printf("%s %s\n", text_child($name), text_child($variant)); + } +} + +sub with_attribute { + local ($nodelist, $attrexpr) = @_; + local ($attr, $value) = split (/=/, $attrexpr); + local ($node, $attrvalue); + if (defined $value && $value ne '') { + $value =~ s/"//g; + foreach $node (@{$nodelist}) { + $attrvalue = node_attribute($node, $attr); + if (defined $attrvalue && $attrvalue eq $value) { + return $node; + } + } + } else { + foreach $node (@{$nodelist}) { + if (! defined node_attribute($node, $attr)) { + return $node; + } + } + } + undef; +} + +# Subroutines + +sub parse { + local $intag = 0; + my (@node_stack, $parent); + $parent = @_[1]; + local ($tag, $text); + + while (<>) { + chomp; + @str = split /([<>])/; + shift @str if ($str[0] eq '' || $str[0] =~ /^[ \t]*$/); + + while (scalar @str) { + $token = shift @str; + if ($token eq '<') { + $intag = 1; + if (defined $text) { + add_text_node($parent, $text); + undef $text; + } + } elsif ($token eq '>') { + $intag = 0; + if ($tag =~ /^\/(.*)/) { # close tag + $parent = pop @node_stack; + } elsif ($tag =~ /^([^\/]*)\/$/) { + empty_tag($parent, $1); + } else { + if (defined ($node = open_tag($parent, $tag))) { + push @node_stack, $parent; + $parent = $node; + } + } + undef $tag; + } else { + if ($intag == 1) { + if (defined $tag) { + $tag .= ' '. $token; + } else { + $tag = $token; + } + } else { + if (defined $text) { + $text .= "\n" . $token; + } else { + $text = $token; + } + } + } + } + } +} + +sub new_document { + $doc = new_node( 0, '', 'DOCUMENT'); + $doc->{CHILDREN} = []; + return $doc; +} + +sub new_node { + local ($parent_node, $tag, $type) = @_; + + my %node; + $node{PARENT} = $parent_node; + $node{TYPE} = $type; + + if ($type eq 'COMMENT' || $type eq 'TEXT') { + $node{TEXT} = $tag; + $node{NAME} = $type; + return \%node; + } + + local ($tname, $attr) = split(' ', $tag, 2); + $node{NAME} = $tname; + + if (defined $attr && $attr ne '') { + my %attr_table; + local @attr_list = split ( /"/, $attr); + local ($name, $value); + while (scalar @attr_list) { + $name = shift @attr_list; + $name =~ s/[ =]//g; + next if ($name eq ''); + $value = shift @attr_list; + $attr_table{$name} =$value; + } + $node{ATTRIBUTES} = \%attr_table; + } + return \%node; +} + +sub add_node { + local ($parent_node, $node) = @_; + push @{$parent_node->{CHILDREN}}, $node; + + local $tname = $node->{NAME}; + if (defined $parent_node->{$tname}) { + push @{$parent_node->{$tname}}, $node + } else { + $parent_node->{$tname} = [ $node ]; + } +} + +sub empty_tag { + local ($parent_node, $tag) = @_; + local $node = new_node($parent_node, $tag, 'EMPTY'); + add_node($parent_node, $node); +} + +sub open_tag { + local ($parent_node, $tag) = @_; + local $node; + + if ($tag =~ /^\?.*/ || $tag =~ /^\!.*/) { + $node = new_node($parent_node, $tag, 'COMMENT'); + add_node($parent_node, $node); + undef; return; + } else { + $node = new_node($parent_node, $tag, 'NODE'); + $node->{CHILDREN} = []; + add_node($parent_node, $node); + return $node; + } +} + +sub add_text_node { + local ($parent_node, $text) = @_; + local $node = new_node($parent_node, $text, 'TEXT'); + add_node($parent_node, $node); +} + +sub node_by_name { + local ($node, $name) = @_; + local ($tagname, $path) = split(/\//, $name, 2); + + my @nodelist; + + if ($tagname eq '') { + while ($node->{PARENT} != 0) { + $node = $node->{PARENT}; + } + sublist_by_name($node, $path, \@nodelist); + } else { + sublist_by_name($node, $name, \@nodelist); + } + return @nodelist; +} + +sub sublist_by_name { + local ($node, $name, $res) = @_; + local ($tagname, $path) = split(/\//, $name, 2); + + if (! defined $path) { + push @{$res}, (@{$node->{$tagname}}); + return; + } + + if ($tagname eq '..' && $node->{PARENT} != 0) { + $node = $node->{PARENT}; + sublist_by_name($node, $path, $res); + } else { + local $n; + for $n (@{$node->{$tagname}}) { + sublist_by_name($n, $path, $res); + } + } +} + +sub node_attribute { + local $node = @_[0]; + if (defined $node->{ATTRIBUTES}) { + return $node->{ATTRIBUTES}{@_[1]}; + } + undef; +} + +sub text_child { + local ($node) = @_; + local ($child) = node_by_name($node, 'TEXT'); + return $child->{TEXT}; +}