diff options
-rw-r--r-- | x11/mlterm/Makefile | 4 | ||||
-rw-r--r-- | x11/mlterm/distinfo | 10 | ||||
-rw-r--r-- | x11/mlterm/patches/patch-mlterm_ml__config__proto.c | 178 | ||||
-rw-r--r-- | x11/mlterm/patches/patch-mlterm_ml__config__proto.h | 17 | ||||
-rw-r--r-- | x11/mlterm/patches/patch-mlterm_ml__vt100__parser.c | 49 | ||||
-rw-r--r-- | x11/mlterm/patches/patch-xwindow_fb_x.h | 39 | ||||
-rw-r--r-- | x11/mlterm/patches/patch-xwindow_fb_x__display.c | 154 | ||||
-rw-r--r-- | x11/mlterm/patches/patch-xwindow_fb_x__display__freebsd.c | 17 | ||||
-rw-r--r-- | x11/mlterm/patches/patch-xwindow_fb_x__display__linux.c | 17 | ||||
-rw-r--r-- | x11/mlterm/patches/patch-xwindow_fb_x__display__wscons.c | 18 |
10 files changed, 500 insertions, 3 deletions
diff --git a/x11/mlterm/Makefile b/x11/mlterm/Makefile index 465a16cbe2a..c685dc8b1eb 100644 --- a/x11/mlterm/Makefile +++ b/x11/mlterm/Makefile @@ -1,7 +1,7 @@ -# $NetBSD: Makefile,v 1.107 2014/06/01 18:11:35 wiz Exp $ +# $NetBSD: Makefile,v 1.108 2014/06/08 16:46:25 tsutsui Exp $ DISTNAME= mlterm-3.3.6 -PKGREVISION= 1 +PKGREVISION= 2 CATEGORIES= x11 MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=mlterm/} diff --git a/x11/mlterm/distinfo b/x11/mlterm/distinfo index 6f303233221..1706716f350 100644 --- a/x11/mlterm/distinfo +++ b/x11/mlterm/distinfo @@ -1,7 +1,15 @@ -$NetBSD: distinfo,v 1.47 2014/06/01 18:11:35 wiz Exp $ +$NetBSD: distinfo,v 1.48 2014/06/08 16:46:25 tsutsui Exp $ SHA1 (mlterm-3.3.6.tar.gz) = 02ce7544c17aa6c33ddc4ad4e103d2e2bbfde85a RMD160 (mlterm-3.3.6.tar.gz) = a4145851a09595f1c07c9151f939a30fc55865bb Size (mlterm-3.3.6.tar.gz) = 3600399 bytes SHA1 (patch-configure) = 5e3b0c709d447c49b0d26c40bde8ded4ade013c3 SHA1 (patch-etc_font-fb) = c9f116aae7640807f4adc4042adc49ddd9805e67 +SHA1 (patch-mlterm_ml__config__proto.c) = 49f10818a07b5bd9114d48f37b7274dc289d9a18 +SHA1 (patch-mlterm_ml__config__proto.h) = f768eb18ad021aa85a734cf755334d09fdfacf89 +SHA1 (patch-mlterm_ml__vt100__parser.c) = 79fdd1ab3e539eef098dbedeed25e1c77455a95f +SHA1 (patch-xwindow_fb_x.h) = 4def4f9f72fc2b5c34e3da476ef29d810880a0bb +SHA1 (patch-xwindow_fb_x__display.c) = 22113aea58162ba650ee22fe6d39c667aa754030 +SHA1 (patch-xwindow_fb_x__display__freebsd.c) = 9dcb1cc6c8d73b1ee5ed990eb4f6f3eed49b1737 +SHA1 (patch-xwindow_fb_x__display__linux.c) = aec0904457ffcaebab6d1af99ef3147d0df62c40 +SHA1 (patch-xwindow_fb_x__display__wscons.c) = f94ada7963477ba43fa2cd8db0cc0202e8bd1fc9 diff --git a/x11/mlterm/patches/patch-mlterm_ml__config__proto.c b/x11/mlterm/patches/patch-mlterm_ml__config__proto.c new file mode 100644 index 00000000000..2ab913f4e3b --- /dev/null +++ b/x11/mlterm/patches/patch-mlterm_ml__config__proto.c @@ -0,0 +1,178 @@ +$NetBSD: patch-mlterm_ml__config__proto.c,v 1.1 2014/06/08 16:46:25 tsutsui Exp $ + +Pull post-3.3.6 fix: + * Fix the failure of saving font configurations from mlconfig. +http://sourceforge.net/projects/mlterm/files/01release/mlterm-3.3.6/mlterm-3.3.6-fixes.patch/download + +--- mlterm/ml_config_proto.c.orig 2014-05-25 05:42:15.000000000 +0000 ++++ mlterm/ml_config_proto.c +@@ -63,27 +63,6 @@ read_challenge(void) + return 1 ; + } + +-static int +-challenge_it( +- char * chal +- ) +-{ +- if( challenge && strcmp( chal , challenge) == 0) +- { +- return 1 ; +- } +- +- /* +- * Challenge could be re-generated. +- */ +- if( read_challenge() && challenge && strcmp( chal , challenge) == 0) +- { +- return 1 ; +- } +- +- return 0 ; +-} +- + + /* --- global functions --- */ + +@@ -138,15 +117,44 @@ ml_gen_proto_challenge(void) + return 1 ; + } + +-char * ++/* ++ * Returns 0 if dev is not found. ++ * Returns -1 if do_challenge is 1 and challenge failed. ++ */ ++int + ml_parse_proto_prefix( +- char ** str ++ char ** dev , /* can be NULL */ ++ char ** str , ++ int do_challenge + ) + { +- char * beg ; + char * p ; + +- beg = p = *str ; ++ p = *str ; ++ ++ while( do_challenge) ++ { ++ char * chal ; ++ ++ chal = p ; ++ ++ if( ( p = strchr( p , ';'))) ++ { ++ *(p ++) = '\0' ; ++ ++ if( ( challenge && strcmp( chal , challenge) == 0) || ++ /* Challenge could have been re-generated. */ ++ ( read_challenge() && challenge && strcmp( chal , challenge) == 0)) ++ { ++ /* challenge succeeded. */ ++ break ; ++ } ++ } ++ ++ return -1 ; ++ } ++ ++ *str = p ; /* for no_dev */ + + if( strncmp( p , "/dev" , 4) == 0) + { +@@ -161,7 +169,7 @@ ml_parse_proto_prefix( + kik_warn_printf( KIK_DEBUG_TAG " Illegal protocol format.\n") ; + #endif + +- return NULL ; ++ goto no_dev ; + } + } + } +@@ -187,15 +195,28 @@ ml_parse_proto_prefix( + } + else + { +- return NULL ; ++ goto no_dev ; + } + } + } + ++ if( dev) ++ { ++ *dev = *str ; ++ } ++ + *(p ++) = '\0' ; + *str = p ; + +- return beg ; ++ return 1 ; ++ ++no_dev: ++ if( dev) ++ { ++ *dev = NULL ; ++ } ++ ++ return 0 ; + } + + /* +@@ -214,36 +235,12 @@ ml_parse_proto( + ) + { + char * p ; +- char * _dev ; + + p = *str ; +- +- if( do_challenge) +- { +- char * chal ; +- +- chal = p ; + +- if( ( p = strchr( p , ';')) == NULL) +- { +- /* Illegal format */ +- +- #ifdef DEBUG +- kik_warn_printf( KIK_DEBUG_TAG " Illegal protocol format.\n") ; +- #endif +- +- return 0 ; +- } +- +- *(p ++) = '\0' ; +- +- if( ! challenge_it( chal)) +- { +- kik_msg_printf( "Protocol 5380 is not permitted " +- "because client password is wrong.\n") ; +- +- return -1 ; +- } ++ if( ml_parse_proto_prefix( dev , &p , do_challenge) < 0) ++ { ++ return -1 ; + } + + if( sep_by_semicolon) +@@ -259,12 +256,6 @@ ml_parse_proto( + *str = NULL ; + } + +- _dev = ml_parse_proto_prefix( &p) ; +- if( dev) +- { +- *dev = _dev ; +- } +- + if( key) + { + *key = p ; diff --git a/x11/mlterm/patches/patch-mlterm_ml__config__proto.h b/x11/mlterm/patches/patch-mlterm_ml__config__proto.h new file mode 100644 index 00000000000..32b67b9fb0e --- /dev/null +++ b/x11/mlterm/patches/patch-mlterm_ml__config__proto.h @@ -0,0 +1,17 @@ +$NetBSD: patch-mlterm_ml__config__proto.h,v 1.1 2014/06/08 16:46:25 tsutsui Exp $ + +Pull post-3.3.6 fix: + * Fix the failure of saving font configurations from mlconfig. +http://sourceforge.net/projects/mlterm/files/01release/mlterm-3.3.6/mlterm-3.3.6-fixes.patch/download + +--- mlterm/ml_config_proto.h.orig 2014-05-25 05:42:15.000000000 +0000 ++++ mlterm/ml_config_proto.h +@@ -16,7 +16,7 @@ int ml_config_proto_final(void) ; + + int ml_gen_proto_challenge(void) ; + +-char * ml_parse_proto_prefix( char ** str) ; ++int ml_parse_proto_prefix( char ** dev , char ** str , int do_challenge) ; + + int ml_parse_proto( char ** dev , char ** key , char ** val , char ** str , + int do_challenge , int sep_by_semicolon) ; diff --git a/x11/mlterm/patches/patch-mlterm_ml__vt100__parser.c b/x11/mlterm/patches/patch-mlterm_ml__vt100__parser.c new file mode 100644 index 00000000000..c18e98a5c74 --- /dev/null +++ b/x11/mlterm/patches/patch-mlterm_ml__vt100__parser.c @@ -0,0 +1,49 @@ +$NetBSD: patch-mlterm_ml__vt100__parser.c,v 1.3 2014/06/08 16:46:25 tsutsui Exp $ + +Pull post-3.3.6 fix: + * Fix the failure of saving font configurations from mlconfig. +http://sourceforge.net/projects/mlterm/files/01release/mlterm-3.3.6/mlterm-3.3.6-fixes.patch/download + +--- mlterm/ml_vt100_parser.c.orig 2014-05-25 05:42:15.000000000 +0000 ++++ mlterm/ml_vt100_parser.c +@@ -1553,7 +1553,12 @@ config_protocol_set( + { + char * dev ; + +- dev = ml_parse_proto_prefix( &pt) ; ++ if( ml_parse_proto_prefix( &dev , &pt , save) == -1) ++ { ++ kik_msg_printf( "Forbid config protocol.\n") ; ++ ++ return ; ++ } + + if( strcmp( pt , "gen_proto_challenge") == 0) + { +@@ -1689,7 +1694,7 @@ config_protocol_set( + char * key ; + char * val ; + +- if( ml_parse_proto( NULL , &key , &val , &pt , save , 0) && val && ++ if( ml_parse_proto( NULL , &key , &val , &pt , 0 , 0) && val && + HAS_CONFIG_LISTENER(vt100_parser,set_font)) + { + /* +@@ -1716,7 +1721,7 @@ config_protocol_set( + char * key ; + char * val ; + +- if( ml_parse_proto( NULL , &key , &val , &pt , save , 0) && val && ++ if( ml_parse_proto( NULL , &key , &val , &pt , 0 , 0) && val && + HAS_CONFIG_LISTENER(vt100_parser,set_color)) + { + /* +@@ -1772,7 +1777,7 @@ config_protocol_set( + char * val ; + + if( ! ml_parse_proto( dev ? NULL : &dev , +- &key , &val , &pt , save , 1)) ++ &key , &val , &pt , 0 , 1)) + { + break ; + } diff --git a/x11/mlterm/patches/patch-xwindow_fb_x.h b/x11/mlterm/patches/patch-xwindow_fb_x.h new file mode 100644 index 00000000000..2eeab10143a --- /dev/null +++ b/x11/mlterm/patches/patch-xwindow_fb_x.h @@ -0,0 +1,39 @@ +$NetBSD: patch-xwindow_fb_x.h,v 1.1 2014/06/08 16:46:25 tsutsui Exp $ + +Pull upstream changes: + * fb/x_display.c, x.h: x_display_get_closest_color() caches 512 + 64 pixels. +https://bitbucket.org/arakiken/mlterm/commits/f3ea4bb79134409b0b66ba22676b9b4d1f5e1c02 + +--- xwindow/fb/x.h.orig 2014-05-25 05:42:24.000000000 +0000 ++++ xwindow/fb/x.h +@@ -72,8 +72,28 @@ typedef struct + fb_cmap_t * cmap ; + fb_cmap_t * cmap_orig ; + +- u_long prev_pixel ; +- u_long prev_closest_color ; ++ struct ++ { ++ /* ++ * Closest color is searched by 15 bits. ++ * R(3)G(3)B(3): segment(9bits) ++ * R(2)G(2)B(2): offset(6bits) ++ */ ++ ++ /* Closest pixels cached by every segment. */ ++ u_int8_t pixels[512] ; /* 2^9 */ ++ u_int8_t offsets[512] ; /* 2^9 */ ++ ++ /* Closest pixels cached in recent segment. */ ++ u_int8_t seg_pixels[64] ; ++ struct ++ { ++ u_int32_t offsets ; ++ u_int segment ; ++ ++ } seg[2] ; ++ ++ } * color_cache ; + + int key_state ; + int lock_state ; diff --git a/x11/mlterm/patches/patch-xwindow_fb_x__display.c b/x11/mlterm/patches/patch-xwindow_fb_x__display.c new file mode 100644 index 00000000000..4ea7e36758d --- /dev/null +++ b/x11/mlterm/patches/patch-xwindow_fb_x__display.c @@ -0,0 +1,154 @@ +$NetBSD: patch-xwindow_fb_x__display.c,v 1.6 2014/06/08 16:46:25 tsutsui Exp $ + +Pull upstream changes: + * fb/x_display.c, x.h: x_display_get_closest_color() caches 512 + 64 pixels. +https://bitbucket.org/arakiken/mlterm/commits/f3ea4bb79134409b0b66ba22676b9b4d1f5e1c02 + +--- xwindow/fb/x_display.c.orig 2014-05-25 05:42:24.000000000 +0000 ++++ xwindow/fb/x_display.c +@@ -1311,6 +1311,14 @@ cmap_init(void) + + return 0 ; + } ++ ++ if( ! ( _display.color_cache = calloc( 1 , sizeof(*_display.color_cache)))) ++ { ++ free( _display.cmap_orig) ; ++ free( _display.cmap) ; ++ ++ return 0 ; ++ } + } + + if( num_of_colors == 2) +@@ -1361,9 +1369,6 @@ cmap_init(void) + } + #endif + +- _display.prev_pixel = 0xff000000 ; +- _display.prev_closest_color = 0 ; +- + return 1 ; + } + +@@ -1383,6 +1388,7 @@ cmap_final(void) + } + + free( _display.cmap) ; ++ free( _display.color_cache) ; + } + + +@@ -1716,8 +1722,10 @@ x_display_get_group_leader( + int + x_display_reset_cmap(void) + { +- _display.prev_pixel = 0xff000000 ; +- _display.prev_closest_color = 0 ; ++ if( _display.color_cache) ++ { ++ memset( _display.color_cache , 0 , sizeof(*_display.color_cache)) ; ++ } + + return _display.cmap && cmap_init() + #ifdef USE_GRF +@@ -1814,8 +1822,10 @@ x_display_set_cmap( + gpal_init( ((fb_reg_t*)_display.fb)->gpal) ; + #endif + +- _display.prev_pixel = 0xff000000 ; +- _display.prev_closest_color = 0 ; ++ if( _display.color_cache) ++ { ++ memset( _display.color_cache , 0 , sizeof(*_display.color_cache)) ; ++ } + + kik_msg_printf( "Palette changed.\n") ; + } +@@ -2418,7 +2428,10 @@ x_cmap_get_closest_color( + int blue + ) + { +- u_long pixel ; ++ u_int segment ; ++ u_int offset ; ++ u_int offset_arr ; ++ int arr_idx ; + u_int color ; + u_long min = 0xffffff ; + u_long diff ; +@@ -2429,16 +2442,51 @@ x_cmap_get_closest_color( + return 0 ; + } + +- /* 0xf8f8f8 ignores least significant 3bits */ +- if( (((pixel = (red << 16) | (green << 8) | blue) ^ _display.prev_pixel) +- & 0xfff8f8f8) == 0) +- { +- *closest = _display.prev_closest_color ; ++ /* R(3)G(3)B(3) */ ++ segment = ((red << 1) & 0x1c0) | ((green >> 2) & 0x38) | ((blue >> 5) & 0x7) ; ++ /* R(2)G(2)B(2) */ ++ offset = ((red << 1) & 0x30) | ((green >> 1) & 0xc) | ((blue >> 3) & 0x3) ; ++ ++ if( _display.color_cache->offsets[segment] == (offset|0x80)) ++ { ++ *closest = _display.color_cache->pixels[segment] ; ++ #ifdef __DEBUG ++ kik_debug_printf( "CACHED PIXEL %x <= r%x g%x b%x segment %x offset %x\n" , ++ *closest , red , green , blue , segment , offset) ; ++ #endif + + return 1 ; + } + +- _display.prev_pixel = pixel ; ++ if( offset >= 32) ++ { ++ arr_idx = 1 ; ++ offset_arr = offset - 32 ; ++ } ++ else ++ { ++ arr_idx = 0 ; ++ offset_arr = offset ; ++ } ++ ++ if( _display.color_cache->seg[arr_idx].segment == segment) ++ { ++ if( _display.color_cache->seg[arr_idx].offsets & (1U << offset_arr)) ++ { ++ *closest = _display.color_cache->seg_pixels[offset] ; ++ #ifdef __DEBUG ++ kik_debug_printf( "CACHED2 PIXEL %x <= r%x g%x b%x segment %x offset %x\n" , ++ *closest , red , green , blue , segment , offset) ; ++ #endif ++ ++ return 1 ; ++ } ++ } ++ else ++ { ++ _display.color_cache->seg[arr_idx].segment = segment ; ++ _display.color_cache->seg[arr_idx].offsets = 0U ; ++ } + + for( color = 0 ; color < CMAP_SIZE(_display.cmap) ; color++) + { +@@ -2468,7 +2516,15 @@ x_cmap_get_closest_color( + } + } + +- _display.prev_closest_color = *closest ; ++ _display.color_cache->seg_pixels[offset] = ++ _display.color_cache->pixels[segment] = *closest ; ++ _display.color_cache->offsets[segment] = (offset|0x80) ; ++ _display.color_cache->seg[arr_idx].offsets |= (1U << offset_arr) ; ++ ++#ifdef __DEBUG ++ kik_debug_printf( "NEW PIXEL %x <= r%x g%x b%x segment %x offset %x\n" , ++ *closest , red , green , blue , segment , offset) ; ++#endif + + return 1 ; + } diff --git a/x11/mlterm/patches/patch-xwindow_fb_x__display__freebsd.c b/x11/mlterm/patches/patch-xwindow_fb_x__display__freebsd.c new file mode 100644 index 00000000000..7195bd31860 --- /dev/null +++ b/x11/mlterm/patches/patch-xwindow_fb_x__display__freebsd.c @@ -0,0 +1,17 @@ +$NetBSD: patch-xwindow_fb_x__display__freebsd.c,v 1.1 2014/06/08 16:46:25 tsutsui Exp $ + +Pull upstream changes: + * fb/x_display.c, x.h: x_display_get_closest_color() caches 512 + 64 pixels. +https://bitbucket.org/arakiken/mlterm/commits/f3ea4bb79134409b0b66ba22676b9b4d1f5e1c02 + +--- xwindow/fb/x_display_freebsd.c.orig 2014-05-25 05:42:24.000000000 +0000 ++++ xwindow/fb/x_display_freebsd.c +@@ -108,6 +108,8 @@ open_display( + if( _display.pixels_per_byte > 1 && + ! ( _display.back_fb = malloc( _display.smem_len))) + { ++ cmap_final() ; ++ + goto error ; + } + #endif diff --git a/x11/mlterm/patches/patch-xwindow_fb_x__display__linux.c b/x11/mlterm/patches/patch-xwindow_fb_x__display__linux.c new file mode 100644 index 00000000000..ca7f3b72b90 --- /dev/null +++ b/x11/mlterm/patches/patch-xwindow_fb_x__display__linux.c @@ -0,0 +1,17 @@ +$NetBSD: patch-xwindow_fb_x__display__linux.c,v 1.1 2014/06/08 16:46:25 tsutsui Exp $ + +Pull upstream changes: + * fb/x_display.c, x.h: x_display_get_closest_color() caches 512 + 64 pixels. +https://bitbucket.org/arakiken/mlterm/commits/f3ea4bb79134409b0b66ba22676b9b4d1f5e1c02 + +--- xwindow/fb/x_display_linux.c.orig 2014-05-25 05:42:25.000000000 +0000 ++++ xwindow/fb/x_display_linux.c +@@ -295,6 +295,8 @@ open_display( + if( _display.pixels_per_byte > 1 && + ! ( _display.back_fb = malloc( _display.smem_len))) + { ++ cmap_final() ; ++ + goto error ; + } + #endif diff --git a/x11/mlterm/patches/patch-xwindow_fb_x__display__wscons.c b/x11/mlterm/patches/patch-xwindow_fb_x__display__wscons.c new file mode 100644 index 00000000000..8db8bd5b659 --- /dev/null +++ b/x11/mlterm/patches/patch-xwindow_fb_x__display__wscons.c @@ -0,0 +1,18 @@ +$NetBSD: patch-xwindow_fb_x__display__wscons.c,v 1.3 2014/06/08 16:46:25 tsutsui Exp $ + +Pull upstream changes: + * fb/x_display.c, x.h: x_display_get_closest_color() caches 512 + 64 pixels. +https://bitbucket.org/arakiken/mlterm/commits/f3ea4bb79134409b0b66ba22676b9b4d1f5e1c02 + +--- xwindow/fb/x_display_wscons.c.orig 2014-05-25 05:42:25.000000000 +0000 ++++ xwindow/fb/x_display_wscons.c +@@ -532,9 +532,6 @@ open_display( + } + + ioctl( _display.fb_fd , FBIOPUTCMAP , _display.cmap) ; +- +- _display.prev_pixel = 0xff000000 ; +- _display.prev_closest_color = 0 ; + } + else if( ! cmap_init()) + { |