summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--x11/mlterm/Makefile4
-rw-r--r--x11/mlterm/distinfo10
-rw-r--r--x11/mlterm/patches/patch-mlterm_ml__config__proto.c178
-rw-r--r--x11/mlterm/patches/patch-mlterm_ml__config__proto.h17
-rw-r--r--x11/mlterm/patches/patch-mlterm_ml__vt100__parser.c49
-rw-r--r--x11/mlterm/patches/patch-xwindow_fb_x.h39
-rw-r--r--x11/mlterm/patches/patch-xwindow_fb_x__display.c154
-rw-r--r--x11/mlterm/patches/patch-xwindow_fb_x__display__freebsd.c17
-rw-r--r--x11/mlterm/patches/patch-xwindow_fb_x__display__linux.c17
-rw-r--r--x11/mlterm/patches/patch-xwindow_fb_x__display__wscons.c18
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())
+ {