Mon Jul 21 15:42:56 2014 UTC ()
Update mlterm to 3.3.7.
pkgsrc changes:
- remove post-3.3.6 fix patches
- pull post-3.3.7 fix patches
(see patch comments for details)
Changes noted in doc/en/ReleaseNote:
ver 3.3.7
* Enable image processing on background terminals.
* Improve the performance of processing images on 8 or less bpp framebuffer.
* Support SGR 5, 9, 21, 25 and 29.
* Support DECFRA, SL and SR.
* Starting mlterm with -j option executes mlclient if daemon process has already
started.
* Change the maximum number of "U+XXXX-XXXX" in ~/.mlterm/(t,v,)(aa)font
from 7 to 511.
* Add "unlimted" to "Backlog size" entry in mlconfig.
Add "UNICODE (ARABIC)" and "UNICODE (EMOJI)" to "Font name" entry.
* Add --it/it_color, --bl/bl_color and --co/co_color options.
* Add --itfont/use_italic_font option.
* Add --bisep/bidi_separators option.
* Add --fullwidth/unicode_full_width_areas option.
* Add --working-directory/working_directory option.
* Add --deffont option.
* Disable "_HALFWIDTH" suffix in ~/.mlterm/(t,v)(aa)font files.
* Drop --ucsprop/use_unicode_property option.
* Bug fixes:
Fix the failure of saving font configurations from mlconfig.
Fix the bug which sometimes causes the failure of searching closest colors on X/8bpp.
(tsutsui)
diff -r1.108 -r1.109 pkgsrc/x11/mlterm/Makefile
diff -r1.48 -r1.49 pkgsrc/x11/mlterm/distinfo
diff -r1.7 -r1.8 pkgsrc/x11/mlterm/patches/patch-configure
diff -r1.1 -r0 pkgsrc/x11/mlterm/patches/patch-mlterm_ml__config__proto.c
diff -r1.1 -r0 pkgsrc/x11/mlterm/patches/patch-mlterm_ml__config__proto.h
diff -r1.1 -r0 pkgsrc/x11/mlterm/patches/patch-xwindow_fb_x__display__freebsd.c
diff -r1.1 -r0 pkgsrc/x11/mlterm/patches/patch-xwindow_fb_x__display__linux.c
diff -r1.3 -r0 pkgsrc/x11/mlterm/patches/patch-mlterm_ml__vt100__parser.c
diff -r1.1 -r1.2 pkgsrc/x11/mlterm/patches/patch-xwindow_fb_x.h
diff -r1.6 -r1.7 pkgsrc/x11/mlterm/patches/patch-xwindow_fb_x__display.c
diff -r1.3 -r1.4 pkgsrc/x11/mlterm/patches/patch-xwindow_fb_x__display__wscons.c
diff -r0 -r1.6 pkgsrc/x11/mlterm/patches/patch-xwindow_fb_x__display__x68kgrf.c
diff -r0 -r1.1 pkgsrc/x11/mlterm/patches/patch-xwindow_libtype_Makefile.in
--- pkgsrc/x11/mlterm/Makefile 2014/06/08 16:46:25 1.108
+++ pkgsrc/x11/mlterm/Makefile 2014/07/21 15:42:56 1.109
| @@ -1,17 +1,16 @@ | | | @@ -1,17 +1,16 @@ |
1 | # $NetBSD: Makefile,v 1.108 2014/06/08 16:46:25 tsutsui Exp $ | | 1 | # $NetBSD: Makefile,v 1.109 2014/07/21 15:42:56 tsutsui Exp $ |
2 | | | 2 | |
3 | DISTNAME= mlterm-3.3.6 | | 3 | DISTNAME= mlterm-3.3.7 |
4 | PKGREVISION= 2 | | | |
5 | CATEGORIES= x11 | | 4 | CATEGORIES= x11 |
6 | MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=mlterm/} | | 5 | MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=mlterm/} |
7 | | | 6 | |
8 | MAINTAINER= uebayasi@NetBSD.org | | 7 | MAINTAINER= uebayasi@NetBSD.org |
9 | HOMEPAGE= http://mlterm.sourceforge.net/ | | 8 | HOMEPAGE= http://mlterm.sourceforge.net/ |
10 | COMMENT= Multilingual terminal emulator | | 9 | COMMENT= Multilingual terminal emulator |
11 | LICENSE= modified-bsd | | 10 | LICENSE= modified-bsd |
12 | | | 11 | |
13 | # CODESET is only supported on NetBSD in 1.5T and later - see <langinfo.h> | | 12 | # CODESET is only supported on NetBSD in 1.5T and later - see <langinfo.h> |
14 | NOT_FOR_PLATFORM= NetBSD-1.[0-4]*-* NetBSD-1.5[A-S]-* | | 13 | NOT_FOR_PLATFORM= NetBSD-1.[0-4]*-* NetBSD-1.5[A-S]-* |
15 | | | 14 | |
16 | USE_TOOLS+= pkg-config msgfmt | | 15 | USE_TOOLS+= pkg-config msgfmt |
17 | USE_LIBTOOL= yes | | 16 | USE_LIBTOOL= yes |
--- pkgsrc/x11/mlterm/distinfo 2014/06/08 16:46:25 1.48
+++ pkgsrc/x11/mlterm/distinfo 2014/07/21 15:42:56 1.49
| @@ -1,15 +1,12 @@ | | | @@ -1,15 +1,12 @@ |
1 | $NetBSD: distinfo,v 1.48 2014/06/08 16:46:25 tsutsui Exp $ | | 1 | $NetBSD: distinfo,v 1.49 2014/07/21 15:42:56 tsutsui Exp $ |
2 | | | 2 | |
3 | SHA1 (mlterm-3.3.6.tar.gz) = 02ce7544c17aa6c33ddc4ad4e103d2e2bbfde85a | | 3 | SHA1 (mlterm-3.3.7.tar.gz) = a6ba30fb73ac183aff0b1b91d83af3fe960799a8 |
4 | RMD160 (mlterm-3.3.6.tar.gz) = a4145851a09595f1c07c9151f939a30fc55865bb | | 4 | RMD160 (mlterm-3.3.7.tar.gz) = 366592392644fb7a9c8029994f7cf92b9e0f442d |
5 | Size (mlterm-3.3.6.tar.gz) = 3600399 bytes | | 5 | Size (mlterm-3.3.7.tar.gz) = 3610286 bytes |
6 | SHA1 (patch-configure) = 5e3b0c709d447c49b0d26c40bde8ded4ade013c3 | | 6 | SHA1 (patch-configure) = 923dfcba01d52d655defffa9a7ec96e56207df6e |
7 | SHA1 (patch-etc_font-fb) = c9f116aae7640807f4adc4042adc49ddd9805e67 | | 7 | SHA1 (patch-etc_font-fb) = c9f116aae7640807f4adc4042adc49ddd9805e67 |
8 | SHA1 (patch-mlterm_ml__config__proto.c) = 49f10818a07b5bd9114d48f37b7274dc289d9a18 | | 8 | SHA1 (patch-xwindow_fb_x.h) = 1eabc67aeb2df3fdc212fb5855ffd3a63f6ad83d |
9 | SHA1 (patch-mlterm_ml__config__proto.h) = f768eb18ad021aa85a734cf755334d09fdfacf89 | | 9 | SHA1 (patch-xwindow_fb_x__display.c) = 4afe5b96dbb9af47bb78f632182adebb7525abe2 |
10 | SHA1 (patch-mlterm_ml__vt100__parser.c) = 79fdd1ab3e539eef098dbedeed25e1c77455a95f | | 10 | SHA1 (patch-xwindow_fb_x__display__wscons.c) = 20d43950a2f96109bbbe30f9aaf3561cd6ecc398 |
11 | SHA1 (patch-xwindow_fb_x.h) = 4def4f9f72fc2b5c34e3da476ef29d810880a0bb | | 11 | SHA1 (patch-xwindow_fb_x__display__x68kgrf.c) = a2b6384835523fb8c4f8beec21d5c80304bb4d92 |
12 | SHA1 (patch-xwindow_fb_x__display.c) = 22113aea58162ba650ee22fe6d39c667aa754030 | | 12 | SHA1 (patch-xwindow_libtype_Makefile.in) = 350da4e217a1014d258e6c77a1de443392e50d57 |
13 | SHA1 (patch-xwindow_fb_x__display__freebsd.c) = 9dcb1cc6c8d73b1ee5ed990eb4f6f3eed49b1737 | | | |
14 | SHA1 (patch-xwindow_fb_x__display__linux.c) = aec0904457ffcaebab6d1af99ef3147d0df62c40 | | | |
15 | SHA1 (patch-xwindow_fb_x__display__wscons.c) = f94ada7963477ba43fa2cd8db0cc0202e8bd1fc9 | | | |
--- pkgsrc/x11/mlterm/patches/patch-configure 2014/03/23 07:04:00 1.7
+++ pkgsrc/x11/mlterm/patches/patch-configure 2014/07/21 15:42:56 1.8
--- pkgsrc/x11/mlterm/patches/Attic/patch-xwindow_fb_x.h 2014/06/08 16:46:25 1.1
+++ pkgsrc/x11/mlterm/patches/Attic/patch-xwindow_fb_x.h 2014/07/21 15:42:56 1.2
| @@ -1,39 +1,17 @@ | | | @@ -1,39 +1,17 @@ |
1 | $NetBSD: patch-xwindow_fb_x.h,v 1.1 2014/06/08 16:46:25 tsutsui Exp $ | | 1 | $NetBSD: patch-xwindow_fb_x.h,v 1.2 2014/07/21 15:42:56 tsutsui Exp $ |
2 | | | 2 | |
3 | Pull upstream changes: | | 3 | - pull post 3.3.7 fixes: |
4 | * fb/x_display.c, x.h: x_display_get_closest_color() caches 512 + 64 pixels. | | 4 | http://sourceforge.net/projects/mlterm/files/01release/mlterm-3.3.7/mlterm-3.3.7-fixes.patch/download |
5 | https://bitbucket.org/arakiken/mlterm/commits/f3ea4bb79134409b0b66ba22676b9b4d1f5e1c02 | | 5 | * x.h: KS_Print -> KS_Print_Screen |
6 | | | 6 | |
7 | --- xwindow/fb/x.h.orig 2014-05-25 05:42:24.000000000 +0000 | | 7 | --- xwindow/fb/x.h.orig 2014-07-05 21:40:41.000000000 +0000 |
8 | +++ xwindow/fb/x.h | | 8 | +++ xwindow/fb/x.h |
9 | @@ -72,8 +72,28 @@ typedef struct | | 9 | @@ -309,7 +309,7 @@ typedef int XFontSet ; /* dummy */ |
10 | fb_cmap_t * cmap ; | | 10 | #define XK_Right KS_Right |
11 | fb_cmap_t * cmap_orig ; | | 11 | #define XK_Down KS_Down |
12 | | | 12 | #define XK_Select KS_Select |
13 | - u_long prev_pixel ; | | 13 | -#define XK_Print KS_Print |
14 | - u_long prev_closest_color ; | | 14 | +#define XK_Print KS_Print_Screen |
15 | + struct | | 15 | #define XK_Execute KS_Execute |
16 | + { | | 16 | #define XK_Insert KS_Insert |
17 | + /* | | 17 | #define XK_Delete KS_Delete |
18 | + * Closest color is searched by 15 bits. | | | |
19 | + * R(3)G(3)B(3): segment(9bits) | | | |
20 | + * R(2)G(2)B(2): offset(6bits) | | | |
21 | + */ | | | |
22 | + | | | |
23 | + /* Closest pixels cached by every segment. */ | | | |
24 | + u_int8_t pixels[512] ; /* 2^9 */ | | | |
25 | + u_int8_t offsets[512] ; /* 2^9 */ | | | |
26 | + | | | |
27 | + /* Closest pixels cached in recent segment. */ | | | |
28 | + u_int8_t seg_pixels[64] ; | | | |
29 | + struct | | | |
30 | + { | | | |
31 | + u_int32_t offsets ; | | | |
32 | + u_int segment ; | | | |
33 | + | | | |
34 | + } seg[2] ; | | | |
35 | + | | | |
36 | + } * color_cache ; | | | |
37 | | | | |
38 | int key_state ; | | | |
39 | int lock_state ; | | | |
--- pkgsrc/x11/mlterm/patches/Attic/patch-xwindow_fb_x__display.c 2014/06/08 16:46:25 1.6
+++ pkgsrc/x11/mlterm/patches/Attic/patch-xwindow_fb_x__display.c 2014/07/21 15:42:56 1.7
| @@ -1,154 +1,47 @@ | | | @@ -1,154 +1,47 @@ |
1 | $NetBSD: patch-xwindow_fb_x__display.c,v 1.6 2014/06/08 16:46:25 tsutsui Exp $ | | 1 | $NetBSD: patch-xwindow_fb_x__display.c,v 1.7 2014/07/21 15:42:56 tsutsui Exp $ |
2 | | | 2 | |
3 | Pull upstream changes: | | 3 | - pull post 3.3.7 fixes: |
4 | * fb/x_display.c, x.h: x_display_get_closest_color() caches 512 + 64 pixels. | | 4 | http://sourceforge.net/projects/mlterm/files/01release/mlterm-3.3.7/mlterm-3.3.7-fixes.patch/download |
5 | https://bitbucket.org/arakiken/mlterm/commits/f3ea4bb79134409b0b66ba22676b9b4d1f5e1c02 | | 5 | * x_display.c: Key squences on NetBSD/x68k are added to the table in |
| | | 6 | receive_stdin_key_event(). |
6 | | | 7 | |
7 | --- xwindow/fb/x_display.c.orig 2014-05-25 05:42:24.000000000 +0000 | | 8 | --- xwindow/fb/x_display.c.orig 2014-07-05 21:40:41.000000000 +0000 |
8 | +++ xwindow/fb/x_display.c | | 9 | +++ xwindow/fb/x_display.c |
9 | @@ -1311,6 +1311,14 @@ cmap_init(void) | | 10 | @@ -1084,6 +1084,20 @@ receive_stdin_key_event(void) |
| | | 11 | { "[B" , XK_Down } , |
| | | 12 | { "[C" , XK_Right } , |
| | | 13 | { "[D" , XK_Left } , |
| | | 14 | + #if defined(USE_GRF) |
| | | 15 | + { "[7~" , XK_End } , |
| | | 16 | + { "[1~" , XK_Home } , |
| | | 17 | + { "OP" , XK_F1 } , |
| | | 18 | + { "OQ" , XK_F2 } , |
| | | 19 | + { "OR" , XK_F3 } , |
| | | 20 | + { "OS" , XK_F4 } , |
| | | 21 | + { "[17~" , XK_F5 } , |
| | | 22 | + { "[18~" , XK_F6 } , |
| | | 23 | + { "[19~" , XK_F7 } , |
| | | 24 | + { "[20~" , XK_F8 } , |
| | | 25 | + { "[21~" , XK_F9 } , |
| | | 26 | + { "[29~" , XK_F10 } , |
| | | 27 | + #else /* USE_GRF */ |
| | | 28 | #if defined(__NetBSD__) || defined(__OpenBSD__) |
| | | 29 | { "[8~" , XK_End } , |
| | | 30 | { "[7~" , XK_Home } , |
| | | 31 | @@ -1117,6 +1131,7 @@ receive_stdin_key_event(void) |
| | | 32 | { "[21~" , XK_F10 } , |
| | | 33 | { "[23~" , XK_F11 } , |
| | | 34 | { "[24~" , XK_F12 } , |
| | | 35 | + #endif /* USE_GRF */ |
| | | 36 | } ; |
10 | | | 37 | |
11 | return 0 ; | | 38 | size_t count ; |
12 | } | | 39 | @@ -1468,7 +1483,7 @@ x_display_close_all(void) |
13 | + | | | |
14 | + if( ! ( _display.color_cache = calloc( 1 , sizeof(*_display.color_cache)))) | | | |
15 | + { | | | |
16 | + free( _display.cmap_orig) ; | | | |
17 | + free( _display.cmap) ; | | | |
18 | + | | | |
19 | + return 0 ; | | | |
20 | + } | | | |
21 | } | | | |
22 | | | | |
23 | if( num_of_colors == 2) | | | |
24 | @@ -1361,9 +1369,6 @@ cmap_init(void) | | | |
25 | } | | | |
26 | #endif | | | |
27 | | | | |
28 | - _display.prev_pixel = 0xff000000 ; | | | |
29 | - _display.prev_closest_color = 0 ; | | | |
30 | - | | | |
31 | return 1 ; | | | |
32 | } | | | |
33 | | | | |
34 | @@ -1383,6 +1388,7 @@ cmap_final(void) | | | |
35 | } | | | |
36 | | | | |
37 | free( _display.cmap) ; | | | |
38 | + free( _display.color_cache) ; | | | |
39 | } | | | |
40 | | | | |
41 | | | | |
42 | @@ -1716,8 +1722,10 @@ x_display_get_group_leader( | | | |
43 | int | | | |
44 | x_display_reset_cmap(void) | | | |
45 | { | | | |
46 | - _display.prev_pixel = 0xff000000 ; | | | |
47 | - _display.prev_closest_color = 0 ; | | | |
48 | + if( _display.color_cache) | | | |
49 | + { | | | |
50 | + memset( _display.color_cache , 0 , sizeof(*_display.color_cache)) ; | | | |
51 | + } | | | |
52 | | | | |
53 | return _display.cmap && cmap_init() | | | |
54 | #ifdef USE_GRF | | | |
55 | @@ -1814,8 +1822,10 @@ x_display_set_cmap( | | | |
56 | gpal_init( ((fb_reg_t*)_display.fb)->gpal) ; | | | |
57 | #endif | | | |
58 | | | | |
59 | - _display.prev_pixel = 0xff000000 ; | | | |
60 | - _display.prev_closest_color = 0 ; | | | |
61 | + if( _display.color_cache) | | | |
62 | + { | | | |
63 | + memset( _display.color_cache , 0 , sizeof(*_display.color_cache)) ; | | | |
64 | + } | | | |
65 | | | | |
66 | kik_msg_printf( "Palette changed.\n") ; | | | |
67 | } | | | |
68 | @@ -2418,7 +2428,10 @@ x_cmap_get_closest_color( | | | |
69 | int blue | | | |
70 | ) | | | |
71 | { | | 40 | { |
72 | - u_long pixel ; | | 41 | if( DISP_IS_INITED) |
73 | + u_int segment ; | | | |
74 | + u_int offset ; | | | |
75 | + u_int offset_arr ; | | | |
76 | + int arr_idx ; | | | |
77 | u_int color ; | | | |
78 | u_long min = 0xffffff ; | | | |
79 | u_long diff ; | | | |
80 | @@ -2429,16 +2442,51 @@ x_cmap_get_closest_color( | | | |
81 | return 0 ; | | | |
82 | } | | | |
83 | | | | |
84 | - /* 0xf8f8f8 ignores least significant 3bits */ | | | |
85 | - if( (((pixel = (red << 16) | (green << 8) | blue) ^ _display.prev_pixel) | | | |
86 | - & 0xfff8f8f8) == 0) | | | |
87 | - { | | | |
88 | - *closest = _display.prev_closest_color ; | | | |
89 | + /* R(3)G(3)B(3) */ | | | |
90 | + segment = ((red << 1) & 0x1c0) | ((green >> 2) & 0x38) | ((blue >> 5) & 0x7) ; | | | |
91 | + /* R(2)G(2)B(2) */ | | | |
92 | + offset = ((red << 1) & 0x30) | ((green >> 1) & 0xc) | ((blue >> 3) & 0x3) ; | | | |
93 | + | | | |
94 | + if( _display.color_cache->offsets[segment] == (offset|0x80)) | | | |
95 | + { | | | |
96 | + *closest = _display.color_cache->pixels[segment] ; | | | |
97 | + #ifdef __DEBUG | | | |
98 | + kik_debug_printf( "CACHED PIXEL %x <= r%x g%x b%x segment %x offset %x\n" , | | | |
99 | + *closest , red , green , blue , segment , offset) ; | | | |
100 | + #endif | | | |
101 | | | | |
102 | return 1 ; | | | |
103 | } | | | |
104 | | | | |
105 | - _display.prev_pixel = pixel ; | | | |
106 | + if( offset >= 32) | | | |
107 | + { | | | |
108 | + arr_idx = 1 ; | | | |
109 | + offset_arr = offset - 32 ; | | | |
110 | + } | | | |
111 | + else | | | |
112 | + { | | | |
113 | + arr_idx = 0 ; | | | |
114 | + offset_arr = offset ; | | | |
115 | + } | | | |
116 | + | | | |
117 | + if( _display.color_cache->seg[arr_idx].segment == segment) | | | |
118 | + { | | | |
119 | + if( _display.color_cache->seg[arr_idx].offsets & (1U << offset_arr)) | | | |
120 | + { | | | |
121 | + *closest = _display.color_cache->seg_pixels[offset] ; | | | |
122 | + #ifdef __DEBUG | | | |
123 | + kik_debug_printf( "CACHED2 PIXEL %x <= r%x g%x b%x segment %x offset %x\n" , | | | |
124 | + *closest , red , green , blue , segment , offset) ; | | | |
125 | + #endif | | | |
126 | + | | | |
127 | + return 1 ; | | | |
128 | + } | | | |
129 | + } | | | |
130 | + else | | | |
131 | + { | | | |
132 | + _display.color_cache->seg[arr_idx].segment = segment ; | | | |
133 | + _display.color_cache->seg[arr_idx].offsets = 0U ; | | | |
134 | + } | | | |
135 | | | | |
136 | for( color = 0 ; color < CMAP_SIZE(_display.cmap) ; color++) | | | |
137 | { | | 42 | { |
138 | @@ -2468,7 +2516,15 @@ x_cmap_get_closest_color( | | 43 | - x_picture_display_closed( &_disp.display) ; |
139 | } | | 44 | + x_picture_display_closed( _disp.display) ; |
140 | } | | | |
141 | | | 45 | |
142 | - _display.prev_closest_color = *closest ; | | 46 | x_virtual_kbd_hide() ; |
143 | + _display.color_cache->seg_pixels[offset] = | | | |
144 | + _display.color_cache->pixels[segment] = *closest ; | | | |
145 | + _display.color_cache->offsets[segment] = (offset|0x80) ; | | | |
146 | + _display.color_cache->seg[arr_idx].offsets |= (1U << offset_arr) ; | | | |
147 | + | | | |
148 | +#ifdef __DEBUG | | | |
149 | + kik_debug_printf( "NEW PIXEL %x <= r%x g%x b%x segment %x offset %x\n" , | | | |
150 | + *closest , red , green , blue , segment , offset) ; | | | |
151 | +#endif | | | |
152 | | | 47 | |
153 | return 1 ; | | | |
154 | } | | | |
--- pkgsrc/x11/mlterm/patches/Attic/patch-xwindow_fb_x__display__wscons.c 2014/06/08 16:46:25 1.3
+++ pkgsrc/x11/mlterm/patches/Attic/patch-xwindow_fb_x__display__wscons.c 2014/07/21 15:42:56 1.4
| @@ -1,18 +1,25 @@ | | | @@ -1,18 +1,25 @@ |
1 | $NetBSD: patch-xwindow_fb_x__display__wscons.c,v 1.3 2014/06/08 16:46:25 tsutsui Exp $ | | 1 | $NetBSD: patch-xwindow_fb_x__display__wscons.c,v 1.4 2014/07/21 15:42:56 tsutsui Exp $ |
2 | | | 2 | |
3 | Pull upstream changes: | | 3 | - pull post 3.3.7 fixes: |
4 | * fb/x_display.c, x.h: x_display_get_closest_color() caches 512 + 64 pixels. | | 4 | http://sourceforge.net/projects/mlterm/files/01release/mlterm-3.3.7/mlterm-3.3.7-fixes.patch/download |
5 | https://bitbucket.org/arakiken/mlterm/commits/f3ea4bb79134409b0b66ba22676b9b4d1f5e1c02 | | 5 | * x_display_wscons.c: The null pointer bug of_display.color_cache in the case |
| | | 6 | of vinfo.depth >= 2 && _disp.depth == 1 is fixed. |
6 | | | 7 | |
7 | --- xwindow/fb/x_display_wscons.c.orig 2014-05-25 05:42:25.000000000 +0000 | | 8 | --- xwindow/fb/x_display_wscons.c.orig 2014-07-05 21:40:42.000000000 +0000 |
8 | +++ xwindow/fb/x_display_wscons.c | | 9 | +++ xwindow/fb/x_display_wscons.c |
9 | @@ -532,9 +532,6 @@ open_display( | | 10 | @@ -522,6 +522,15 @@ open_display( |
| | | 11 | |
| | | 12 | goto error ; |
| | | 13 | } |
| | | 14 | + |
| | | 15 | + if( ! ( _display.color_cache = |
| | | 16 | + calloc( 1 , sizeof(*_display.color_cache)))) |
| | | 17 | + { |
| | | 18 | + free( _display.cmap_orig) ; |
| | | 19 | + free( _display.cmap) ; |
| | | 20 | + |
| | | 21 | + goto error ; |
| | | 22 | + } |
10 | } | | 23 | } |
11 | | | 24 | |
12 | ioctl( _display.fb_fd , FBIOPUTCMAP , _display.cmap) ; | | 25 | for( color = 0 ; color < num_of_colors ; color ++) |
13 | - | | | |
14 | - _display.prev_pixel = 0xff000000 ; | | | |
15 | - _display.prev_closest_color = 0 ; | | | |
16 | } | | | |
17 | else if( ! cmap_init()) | | | |
18 | { | | | |
$NetBSD: patch-xwindow_fb_x__display__x68kgrf.c,v 1.6 2014/07/21 15:42:56 tsutsui Exp $
- pull post 3.3.7 fixes:
http://sourceforge.net/projects/mlterm/files/01release/mlterm-3.3.7/mlterm-3.3.7-fixes.patch/download
* x_display_x68kgrf.c:
- Keyboard events from /dev/kbd are processed instead of stdin.
- x68k_set_use_tvram_colors() and x68k_set_tvram_cmap() resets
_display.color_cache.
--- xwindow/fb/x_display_x68kgrf.c.orig 2014-07-05 21:40:42.000000000 +0000
+++ xwindow/fb/x_display_x68kgrf.c
@@ -4,6 +4,8 @@
#include <dev/wscons/wsdisplay_usl_io.h> /* VT_GETSTATE */
#include <machine/grfioctl.h>
+#include <machine/vuid_event.h>
+#include <dev/sun/kbio.h>
#define get_key_state() (0)
@@ -329,12 +331,32 @@ open_display(
tm.c_cc[VTIME] = 0 ;
tcsetattr( STDIN_FILENO , TCSAFLUSH , &tm) ;
- _display.fd = STDIN_FILENO ;
-
kik_priv_restore_euid() ;
kik_priv_restore_egid() ;
- _mouse.fd = open( "/dev/mouse" , O_RDWR|O_NONBLOCK|O_EXCL) ;
+ if( ( _display.fd = open( "/dev/kbd" , O_RDONLY)) >= 0)
+ {
+ int mode ;
+
+ fcntl( _display.fd , F_SETOWN , getpid()) ;
+ fcntl( _display.fd , F_SETFL , O_NONBLOCK|O_ASYNC) ;
+ mode = 1 ;
+ ioctl( _display.fd , KIOCSDIRECT , &mode) ;
+ }
+ else
+ {
+ _display.fd = STDIN_FILENO ;
+ }
+
+ if( ( _mouse.fd = open( "/dev/mouse" , O_RDONLY)) >= 0)
+ {
+ int format ;
+
+ format = VUID_FIRM_EVENT ;
+ ioctl( _mouse.fd , VUIDSFORMAT , &format) ;
+ fcntl( _mouse.fd , F_SETOWN , getpid()) ;
+ fcntl( _mouse.fd , F_SETFL , O_NONBLOCK|O_ASYNC) ;
+ }
kik_priv_change_euid( kik_getuid()) ;
kik_priv_change_egid( kik_getgid()) ;
@@ -400,13 +422,7 @@ receive_mouse_event(void)
#define VKEY_UP 0
#define VKEY_DOWN 1
- struct
- {
- u_short id ;
- u_short pad ;
- int value ;
- struct timeval time ;
- } ev ;
+ Firm_event ev ;
ssize_t len ;
if( console_id != get_active_console())
@@ -544,7 +560,148 @@ receive_mouse_event(void)
static int
receive_key_event(void)
{
- return receive_stdin_key_event() ;
+ static u_int16_t keymap[] =
+ {
+ XK_Escape , '1' , '2' , '3' , '4' , '5' , '6' , '7' ,
+ '8' , '9' , '0' , '-' , '^' , '\\' , XK_BackSpace , XK_Tab ,
+ 'q' , 'w' , 'e' , 'r' , 't' , 'y' , 'u' , 'i' ,
+ 'o' , 'p' , '@' , '[' , XK_Return , 'a' , 's' , 'd' ,
+ 'f' , 'g' , 'h' , 'j' , 'k' , 'l' , ';' , ':' ,
+ ']' , 'z' , 'x' , 'c' , 'v' , 'b' , 'n' , 'm' ,
+ ',' , '.' , '/' , 0 , ' ' , XK_Home , XK_Delete , XK_Prior ,
+ XK_Next , 0 /* XK_Undo */ , XK_Left , XK_Up , XK_Right , XK_Down ,
+ XK_Clear , XK_KP_Divide ,
+ XK_KP_Multiply , XK_KP_Subtract , XK_KP_7 , XK_KP_8 , XK_KP_9 , XK_KP_Add ,
+ XK_KP_4 , XK_KP_5 ,
+ XK_KP_6 , '=' /* XK_KP_Equal */ , XK_KP_1 , XK_KP_2 , XK_KP_3 ,
+ XK_Return /* XK_KP_Enter */ , XK_KP_0 , ',' ,
+ '.' , 0 , 0 /* XK_Touroku */ , XK_Help , XK_Alt_L , XK_Meta_L ,
+ XK_Meta_R , XK_Alt_R ,
+ XK_Control_R , 0 /* XK_Kana_Lock */ , 0 /* XK_Romaji */ , 0 , XK_Caps_Lock ,
+ XK_Insert , XK_Hiragana_Katakana , XK_Zenkaku_Hankaku ,
+ 0 /* XK_Break */ , XK_Print , XK_F1 , XK_F2 , XK_F3 , XK_F4 , XK_F5 , XK_F6 ,
+ XK_F7 , XK_F8 , XK_F9 , XK_F10 , 0 , 0 , 0 , XK_Shift_L ,
+ XK_Control_L , XK_Super_L , XK_Super_R ,
+ } ;
+ static u_int8_t shift_keymap[] =
+ {
+ 0 , '!' , '\"' , '#' , '$' , '%' , '&' , '\'' ,
+ '(' , ')' , 0 , '=' , '~' , '|' , 0 , 0 ,
+ 'Q' , 'W' , 'E' , 'R' , 'T' , 'Y' , 'U' , 'I' ,
+ 'O' , 'P' , '`' , '{' , 0 , 'A' , 'S' , 'D' ,
+ 'F' , 'G' , 'H' , 'J' , 'K' , 'L' , '+' , '*' ,
+ '}' , 'Z' , 'X' , 'C' , 'V' , 'B' , 'N' , 'M' ,
+ '<' , '>' , '?' , '_' ,
+ } ;
+ Firm_event ev ;
+
+ if( _display.fd == STDIN_FILENO)
+ {
+ return receive_stdin_key_event() ;
+ }
+
+ if( console_id != get_active_console())
+ {
+ return 0 ;
+ }
+
+ while( read( _display.fd , memset( &ev , 0 , sizeof(ev)) , sizeof(ev)) > 0)
+ {
+ XKeyEvent xev ;
+ int pressed ;
+ int shift ;
+
+ pressed = (ev.value == VKEY_DOWN) ;
+
+ ev.id -- ;
+ ev.id &= 0x7f ;
+
+ if( _display.lock_state & CLKED)
+ {
+ shift = ! (_display.key_state & ShiftMask) ;
+ }
+ else
+ {
+ shift = _display.key_state & ShiftMask ;
+ }
+
+ if( ! shift ||
+ ev.id >= sizeof(shift_keymap) / sizeof(*shift_keymap) ||
+ ! ( xev.ksym = shift_keymap[ev.id]))
+ {
+ if( ev.id >= sizeof(keymap) / sizeof(*keymap) ||
+ ! ( xev.ksym = keymap[ev.id]))
+ {
+ continue ;
+ }
+ }
+
+ if( pressed)
+ {
+ if( xev.ksym == XK_Shift_R ||
+ xev.ksym == XK_Shift_L)
+ {
+ _display.key_state |= ShiftMask ;
+ }
+ else if( xev.ksym == XK_Control_R ||
+ xev.ksym == XK_Control_L)
+ {
+ _display.key_state |= ControlMask ;
+ }
+ else if( xev.ksym == XK_Alt_R ||
+ xev.ksym == XK_Alt_L ||
+ xev.ksym == XK_Meta_R ||
+ xev.ksym == XK_Meta_L)
+ {
+ _display.key_state |= ModMask ;
+ }
+ else if( xev.ksym == XK_Num_Lock)
+ {
+ _display.lock_state ^= NLKED ;
+ }
+ else if( xev.ksym == XK_Caps_Lock)
+ {
+ _display.lock_state ^= CLKED ;
+ }
+ else
+ {
+ xev.type = KeyPress ;
+ xev.state = _mouse.button_state |
+ _display.key_state ;
+ xev.keycode = ev.id + 1 ;
+
+ #ifdef __DEBUG
+ kik_debug_printf( KIK_DEBUG_TAG
+ "scancode %d -> ksym 0x%x state 0x%x\n" ,
+ ev.id , xev.ksym , xev.state) ;
+ #endif
+
+ receive_event_for_multi_roots( &xev) ;
+ }
+ }
+ else
+ {
+ if( xev.ksym == XK_Shift_R ||
+ xev.ksym == XK_Shift_L)
+ {
+ _display.key_state &= ~ShiftMask ;
+ }
+ else if( xev.ksym == XK_Control_R ||
+ xev.ksym == XK_Control_L)
+ {
+ _display.key_state &= ~ControlMask ;
+ }
+ else if( xev.ksym == XK_Alt_R ||
+ xev.ksym == XK_Alt_L ||
+ xev.ksym == XK_Meta_R ||
+ xev.ksym == XK_Meta_L)
+ {
+ _display.key_state &= ~ModMask ;
+ }
+ }
+ }
+
+ return 1 ;
}
static int
@@ -590,6 +747,12 @@ x68k_set_use_tvram_colors(
if( _display.cmap == tcmap)
{
_display.cmap = gcmap ;
+
+ if( _display.color_cache)
+ {
+ memset( _display.color_cache , 0 ,
+ sizeof(*_display.color_cache)) ;
+ }
}
use_tvram_cmap = 0 ;
@@ -620,6 +783,12 @@ x68k_set_tvram_cmap(
gcmap = _display.cmap ;
_display.cmap = tcmap ;
+ if( _display.color_cache)
+ {
+ memset( _display.color_cache , 0 ,
+ sizeof(*_display.color_cache)) ;
+ }
+
return 1 ;
}
}
$NetBSD: patch-xwindow_libtype_Makefile.in,v 1.1 2014/07/21 15:42:56 tsutsui Exp $
- pull post 3.3.7 fixes:
http://sourceforge.net/projects/mlterm/files/01release/mlterm-3.3.7/mlterm-3.3.7-fixes.patch/download
* libtype/Makefile.in: Compiling error is fixed.
--- xwindow/libtype/Makefile.in.orig 2014-07-21 09:30:22.000000000 +0000
+++ xwindow/libtype/Makefile.in
@@ -59,7 +59,7 @@ libtype_cairo.la: $(CAIRO_OBJ)
libtype.a: $(NODL_OBJ)
$(LIBTOOL_LINK) -o libtype.a $(NODL_OBJ:.o=.lo)
-x_font_ft.o:
+x_font_ft.o: x_font_ft.c
$(LIBTOOL_CC) @TYPE_CFLAGS@ -c $<
.SUFFIXES: .c .o