aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael C . Wu <keichii@FreeBSD.org>2001-10-01 19:46:41 +0000
committerMichael C . Wu <keichii@FreeBSD.org>2001-10-01 19:46:41 +0000
commitd0449546ca93a486051ea6d663302cd85a33f77a (patch)
tree6958786b2f5f609fb5e9d5ac1cb00fea657a3d16
parent9a810cd15661b865dff4abd9506e99bb60b8e13d (diff)
downloadports-d0449546ca93a486051ea6d663302cd85a33f77a.tar.gz
ports-d0449546ca93a486051ea6d663302cd85a33f77a.zip
Add aterm 0.4.2,
a color vt102 terminal emulator with transparency support and XIM support. PR: 30950 Submitted by: gugod@gugod.org
Notes
Notes: svn path=/head/; revision=48317
-rw-r--r--chinese/Makefile1
-rw-r--r--chinese/aterm/Makefile25
-rw-r--r--chinese/aterm/distinfo1
-rw-r--r--chinese/aterm/files/patch-aa1064
-rw-r--r--chinese/aterm/pkg-comment1
-rw-r--r--chinese/aterm/pkg-descr9
-rw-r--r--chinese/aterm/pkg-plist2
7 files changed, 1103 insertions, 0 deletions
diff --git a/chinese/Makefile b/chinese/Makefile
index 054d3bd6f6e5..7da2f418ed82 100644
--- a/chinese/Makefile
+++ b/chinese/Makefile
@@ -8,6 +8,7 @@
SUBDIR += acroread-chsfont
SUBDIR += acroread-chtfont
SUBDIR += arphicttf
+ SUBDIR += aterm
SUBDIR += auto-tw-l10n
SUBDIR += autoconvert
SUBDIR += bg5ps
diff --git a/chinese/aterm/Makefile b/chinese/aterm/Makefile
new file mode 100644
index 000000000000..62018291f63a
--- /dev/null
+++ b/chinese/aterm/Makefile
@@ -0,0 +1,25 @@
+# New ports collection Makefile for: aterm
+# Date created: Oct 1 2001
+# Whom: gugod@gugod.org
+# $FreeBSD$
+#
+
+PORTNAME= aterm
+PORTVERSION= 0.4.2
+CATEGORIES= chinese x11
+MASTER_SITES= http://download.sourceforge.net/aterm/
+DISTNAME= aterm-${PORTVERSION}
+
+MAINTAINER= gugod@gugod.org
+
+USE_XPM= yes
+HAS_CONFIGURE= yes
+PATCH_WRKSRC= ${WRKSRC}/..
+CONFIGURE_ARGS= --enable-fading --enable-xim --enable-big5
+
+post-install:
+ @${CHMOD} 4711 ${PREFIX}/bin/aterm
+
+MAN1= aterm.1
+
+.include <bsd.port.mk>
diff --git a/chinese/aterm/distinfo b/chinese/aterm/distinfo
new file mode 100644
index 000000000000..927b3eeb6024
--- /dev/null
+++ b/chinese/aterm/distinfo
@@ -0,0 +1 @@
+MD5 (aterm-0.4.2.tar.gz) = d046fcf7fadd661dd5efb393a43c57b1
diff --git a/chinese/aterm/files/patch-aa b/chinese/aterm/files/patch-aa
new file mode 100644
index 000000000000..74e0ef524175
--- /dev/null
+++ b/chinese/aterm/files/patch-aa
@@ -0,0 +1,1064 @@
+diff -cNr aterm-0.4.2.orig/autoconf/acconfig.h aterm-0.4.2/autoconf/acconfig.h
+*** aterm-0.4.2.orig/autoconf/acconfig.h Fri Sep 7 00:38:07 2001
+--- aterm-0.4.2/autoconf/acconfig.h Sun Sep 30 15:13:21 2001
+***************
+*** 38,44 ****
+--- 38,49 ----
+ /* Define if Xlocale support doesn't work */
+ #undef NO_XLOCALE
+
++ #undef USE_XIM
++
+ /* Define is setlocale (defined to Xsetlocale) doesn't work */
++ #undef NO_XSETLOCALE
++
++ /* Define is plain setlocale doesn't work */
+ #undef NO_SETLOCALE
+
+ /* Define if you want Menubar support */
+diff -cNr aterm-0.4.2.orig/autoconf/config.h.in aterm-0.4.2/autoconf/config.h.in
+*** aterm-0.4.2.orig/autoconf/config.h.in Fri Sep 7 00:38:07 2001
+--- aterm-0.4.2/autoconf/config.h.in Sun Sep 30 15:14:08 2001
+***************
+*** 88,94 ****
+--- 88,99 ----
+ /* Define if Xlocale support doesn't work */
+ #undef NO_XLOCALE
+
++ #undef USE_XIM
++
+ /* Define is setlocale (defined to Xsetlocale) doesn't work */
++ #undef NO_XSETLOCALE
++
++ /* Define is plain setlocale doesn't work */
+ #undef NO_SETLOCALE
+
+ /* Define if you want Menubar support */
+diff -cNr aterm-0.4.2.orig/autoconf/configure.in aterm-0.4.2/autoconf/configure.in
+*** aterm-0.4.2.orig/autoconf/configure.in Fri Sep 7 00:38:07 2001
+--- aterm-0.4.2/autoconf/configure.in Sun Sep 30 15:18:11 2001
+***************
+*** 106,111 ****
+--- 106,117 ----
+ AC_DEFINE(ZH)
+ fi])
+
++ AC_ARG_ENABLE(xim,
++ [ --enable-xim enable xim support],
++ [if test x$enableval = xyes; then
++ AC_DEFINE(USE_XIM)
++ fi])
++
+ AC_ARG_ENABLE(greek,
+ [ --enable-greek enable greek keyboard support],
+ [if test x$enableval = xyes; then
+***************
+*** 642,647 ****
+--- 648,654 ----
+ dnl# this is a really hack test for some basic Xlocale stuff
+ SAVETHELIBS=$LIBS
+ LIBS="$LIBS $X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS -lX11"
++ CFLAGS="$CFLAGS $X_CFLAGS"
+ AC_CACHE_CHECK(for working Xlocale, rxvt_cv_func_xlocale,
+ [AC_TRY_RUN(
+ [#define X_LOCALE 1
+***************
+*** 667,672 ****
+--- 674,687 ----
+ [setlocale(LC_CTYPE, "");],
+ rxvt_cv_func_xsetlocale=yes, rxvt_cv_func_xsetlocale=no)])
+ if test "${rxvt_cv_func_xsetlocale}" = no; then
++ AC_DEFINE(NO_XSETLOCALE)
++ fi
++
++ AC_CACHE_CHECK(for working plain setlocale, rxvt_cv_func_setlocale,
++ [AC_TRY_LINK([#include <locale.h>],
++ [setlocale(LC_CTYPE, "");],
++ rxvt_cv_func_setlocale=yes, rxvt_cv_func_setlocale=no)])
++ if test x${rxvt_cv_func_setlocale} = xno; then
+ AC_DEFINE(NO_SETLOCALE)
+ fi
+
+diff -cNr aterm-0.4.2.orig/configure aterm-0.4.2/configure
+*** aterm-0.4.2.orig/configure Fri Sep 7 00:38:07 2001
+--- aterm-0.4.2/configure Sun Sep 30 17:00:35 2001
+***************
+*** 36,41 ****
+--- 36,43 ----
+ ac_help="$ac_help
+ --enable-big5 enable big5 support"
+ ac_help="$ac_help
++ --enable-xim enable xim support"
++ ac_help="$ac_help
+ --enable-greek enable greek keyboard support"
+ ac_help="$ac_help
+ --enable-thai enable thai support"
+***************
+*** 786,791 ****
+--- 788,804 ----
+ fi
+ fi
+
++ # Check whether --enable-xim or --disable-xim was given.
++ if test "${enable_xim+set}" = set; then
++ enableval="$enable_xim"
++ if test x$enableval = xyes; then
++ cat >> confdefs.h <<\EOF
++ #define USE_XIM 1
++ EOF
++
++ fi
++ fi
++
+
+ # Check whether --enable-greek or --disable-greek was given.
+ if test "${enable_greek+set}" = set; then
+***************
+*** 4649,4654 ****
+--- 4662,4668 ----
+
+ SAVETHELIBS=$LIBS
+ LIBS="$LIBS $X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS -lX11"
++ CFLAGS="$CFLAGS $X_CFLAGS"
+ echo $ac_n "checking for working Xlocale""... $ac_c" 1>&6
+ echo "configure:4654: checking for working Xlocale" >&5
+ if eval "test \"`echo '$''{'rxvt_cv_func_xlocale'+set}'`\" = set"; then
+***************
+*** 4724,4730 ****
+ echo "$ac_t""$rxvt_cv_func_xsetlocale" 1>&6
+ if test "${rxvt_cv_func_xsetlocale}" = no; then
+ cat >> confdefs.h <<\EOF
+! #define NO_SETLOCALE 1
+ EOF
+
+ fi
+--- 4738,4777 ----
+ echo "$ac_t""$rxvt_cv_func_xsetlocale" 1>&6
+ if test "${rxvt_cv_func_xsetlocale}" = no; then
+ cat >> confdefs.h <<\EOF
+! #define NO_XSETLOCALE 1
+! EOF
+!
+! fi
+!
+! echo $ac_n "checking for working plain setlocale""... $ac_c" 1>&6
+! echo "configure:4659: checking for working plain setlocale" >&5
+! if eval "test \"`echo '$''{'rxvt_cv_func_setlocale'+set}'`\" = set"; then
+! echo $ac_n "(cached) $ac_c" 1>&6
+! else
+! cat > conftest.$ac_ext <<EOF
+! #line 4664 "configure"
+! #include "confdefs.h"
+! #include <locale.h>
+! int main() {
+! setlocale(LC_CTYPE, "");
+! ; return 0; }
+! EOF
+! if { (eval echo configure:4671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+! rm -rf conftest*
+! rxvt_cv_func_setlocale=yes
+! else
+! echo "configure: failed program was:" >&5
+! cat conftest.$ac_ext >&5
+! rm -rf conftest*
+! rxvt_cv_func_setlocale=no
+! fi
+! rm -f conftest*
+! fi
+!
+! echo "$ac_t""$rxvt_cv_func_setlocale" 1>&6
+! if test x${rxvt_cv_func_setlocale} = xno; then
+! cat >> confdefs.h <<\EOF
+! efine NO_SETLOCALE 1
+ EOF
+
+ fi
+diff -cNr aterm-0.4.2.orig/scripts/random_colors aterm-0.4.2/scripts/random_colors
+*** aterm-0.4.2.orig/scripts/random_colors Thu Jan 1 08:00:00 1970
+--- aterm-0.4.2/scripts/random_colors Sun Sep 30 17:01:24 2001
+***************
+*** 0 ****
+--- 1,18 ----
++ #!/bin/bash
++
++ # This script will launch aterm with different tinting color
++ # every time you start it
++ # I don't really know how that can be of any use at all, but some
++ # folks like it - so here it is
++
++ CLRCODE=`expr $RANDOM % 6`
++ ATRMPATH=$DESTDIR/usr/local/bin
++
++ { [ "$CLRCODE" -eq "0" ] && CLRNAME="-tint blue -fg yellow -bg black"; } ||
++ { [ "$CLRCODE" -eq "1" ] && CLRNAME="-tint red -fg white -bg black"; } ||
++ { [ "$CLRCODE" -eq "2" ] && CLRNAME="-tint green -fg white -bg white"; } ||
++ { [ "$CLRCODE" -eq "3" ] && CLRNAME="-tint cyan -fg white -bg white"; } ||
++ { [ "$CLRCODE" -eq "4" ] && CLRNAME="-tint magenta -fg white -bg black"; } ||
++ { [ "$CLRCODE" -eq "5" ] && CLRNAME="-tint yellow -fg blue -bg white"; }
++
++ exec $ATRMPATH/aterm -fg white -tr $CLRNAME $@
+diff -cNr aterm-0.4.2.orig/src/command.c aterm-0.4.2/src/command.c
+*** aterm-0.4.2.orig/src/command.c Fri Sep 7 00:38:07 2001
+--- aterm-0.4.2/src/command.c Sun Sep 30 14:36:49 2001
+***************
+*** 69,80 ****
+ #ifndef NO_XLOCALE
+ # if (XtSpecificationRelease < 6)
+ # define NO_XLOCALE
+- # else
+- # define X_LOCALE
+- # include <X11/Xlocale.h>
+ # endif
+ #endif /* NO_XLOCALE */
+
+ #ifdef TTY_GID_SUPPORT
+ # include <grp.h>
+ #endif
+--- 69,87 ----
+ #ifndef NO_XLOCALE
+ # if (XtSpecificationRelease < 6)
+ # define NO_XLOCALE
+ # endif
+ #endif /* NO_XLOCALE */
+
++ #ifndef NO_XSETLOCALE
++ # define X_LOCALE
++ # include <X11/Xlocale.h>
++ #else
++ # ifndef NO_SETLOCALE
++ # include <locale.h>
++ # endif
++ #endif /* NO_XLOCALE */
++
++
+ #ifdef TTY_GID_SUPPORT
+ # include <grp.h>
+ #endif
+***************
+*** 182,190 ****
+
+ /*{{{ defines: */
+
+! #define KBUFSZ 8 /* size of keyboard mapping buffer */
+! #define STRING_MAX 512 /* max string size for process_xterm_seq() */
+! #define ESC_ARGS 32 /* max # of args for esc sequences */
+
+ /* a large REFRESH_PERIOD causes problems with `cat' */
+ #define REFRESH_PERIOD 1
+--- 189,201 ----
+
+ /*{{{ defines: */
+
+! #ifdef USE_XIM
+! # define KBUFSZ 64 /* size of keyboard mapping buffer */
+! #else
+! # define KBUFSZ 8 /* size of keyboard mapping buffer */
+! #endif
+! #define STRING_MAX 512 /* max string size for process_xterm_seq() */
+! #define ESC_ARGS 32 /* max # of args for esc sequences */
+
+ /* a large REFRESH_PERIOD causes problems with `cat' */
+ #define REFRESH_PERIOD 1
+***************
+*** 308,318 ****
+--- 319,333 ----
+ static Atom DndProtocol, DndSelection;
+ #endif /* OFFIX_DND */
+
++ #ifdef USE_XIM
++ static XIC Input_Context; /* input context */
++ #else
+ #ifndef NO_XLOCALE
+ static char *rs_inputMethod = ""; /* XtNinputMethod */
+ static char *rs_preeditType = NULL; /* XtNpreeditType */
+ static XIC Input_Context; /* input context */
+ #endif /* NO_XLOCALE */
++ #endif /* USE_XIM */
+
+ /* command input buffering */
+ #ifndef BUFSIZ
+***************
+*** 534,540 ****
+ ttydev = tty_name;
+
+ # define PTYCHAR1 "pqrstuvwxyz"
+! # define PTYCHAR2 "0123456789abcdef"
+ for (c1 = PTYCHAR1; *c1; c1++) {
+ ptydev[len - 2] = ttydev[len - 2] = *c1;
+ for (c2 = PTYCHAR2; *c2; c2++) {
+--- 549,555 ----
+ ttydev = tty_name;
+
+ # define PTYCHAR1 "pqrstuvwxyz"
+! # define PTYCHAR2 "0123456789abcdefghijklmnopqrstuvwxyz"
+ for (c1 = PTYCHAR1; *c1; c1++) {
+ ptydev[len - 2] = ttydev[len - 2] = *c1;
+ for (c2 = PTYCHAR2; *c2; c2++) {
+***************
+*** 1137,1143 ****
+--- 1152,1167 ----
+ DndSelection = XInternAtom(Xdisplay, "DndSelection", False);
+ #endif /* OFFIX_DND */
+
++ #ifndef NO_XLOCALE
+ init_xlocale();
++ #else
++ setlocale(LC_CTYPE, "");
++ #endif
++
++ #ifdef USE_XIM
++ setTermFontSet();
++ XRegisterIMInstantiateCallback(Xdisplay, NULL, NULL, NULL, IMInstantiateCallback, NULL);
++ #endif
+
+ /* get number of available file descriptors */
+ #ifdef _POSIX_VERSION
+***************
+*** 1204,1209 ****
+--- 1228,1234 ----
+ init_xlocale(void)
+ {
+ #ifndef NO_XLOCALE
++ #ifndef USE_XIM
+ char *p, *s, buf[32], tmp[1024];
+ XIM xim = NULL;
+ XIMStyle input_style = 0;
+***************
+*** 1212,1218 ****
+
+ Input_Context = NULL;
+
+! # ifndef NO_SETLOCALE
+ /* setlocale(LC_CTYPE, ""); /* XXX: should we do this? */
+ # endif
+ if (rs_inputMethod == NULL || !*rs_inputMethod) {
+--- 1237,1243 ----
+
+ Input_Context = NULL;
+
+! # if !defined(NO_SETLOCALE) || !defined(NO_XSETLOCALE)
+ /* setlocale(LC_CTYPE, ""); /* XXX: should we do this? */
+ # endif
+ if (rs_inputMethod == NULL || !*rs_inputMethod) {
+***************
+*** 1311,1316 ****
+--- 1336,1342 ----
+ print_error("Failed to create input context");
+ XCloseIM(xim);
+ }
++ #endif /* USE_XIM */
+ #endif /* NO_XLOCALE */
+ }
+ /*}}} */
+***************
+*** 1379,1400 ****
+ numlock_state = (ev->xkey.state & ModNumLockMask); /* numlock toggle */
+ PrivMode((!numlock_state), PrivMode_aplKP);
+ }
+! #ifndef NO_XLOCALE
+! if (!XFilterEvent(ev, *(&ev->xkey.window))) {
+! if (Input_Context != NULL) {
+! Status status_return;
+!
+! len = XmbLookupString(Input_Context, &ev->xkey, kbuf,
+! sizeof(kbuf), &keysym,
+! &status_return);
+! } else {
+! len = XLookupString(&ev->xkey, kbuf,
+! sizeof(kbuf), &keysym,
+! &compose);
+! }
+! } else
+! len = 0;
+! #else /* NO_XLOCALE */
+ len = XLookupString(&ev->xkey, (char *) kbuf, sizeof(kbuf), &keysym, &compose);
+ /*
+ * have unmapped Latin[2-4] entries -> Latin1
+--- 1405,1425 ----
+ numlock_state = (ev->xkey.state & ModNumLockMask); /* numlock toggle */
+ PrivMode((!numlock_state), PrivMode_aplKP);
+ }
+! #ifdef USE_XIM
+! len = 0;
+! if (Input_Context != NULL) {
+! Status status_return;
+!
+! kbuf[0] = '\0';
+! len = XmbLookupString(Input_Context, &ev->xkey, kbuf,
+! sizeof(kbuf), &keysym,
+! &status_return);
+! } else {
+! len = XLookupString(&ev->xkey, kbuf,
+! sizeof(kbuf), &keysym,
+! &compose);
+! }
+! #else /* USE_XIM */
+ len = XLookupString(&ev->xkey, (char *) kbuf, sizeof(kbuf), &keysym, &compose);
+ /*
+ * have unmapped Latin[2-4] entries -> Latin1
+***************
+*** 1404,1410 ****
+ len = 1;
+ kbuf[0] = (keysym & 0xFF);
+ }
+! #endif /* NO_XLOCALE */
+
+ if (len && (Options & Opt_scrollKeypress))
+ TermWin.view_start = 0;
+--- 1429,1435 ----
+ len = 1;
+ kbuf[0] = (keysym & 0xFF);
+ }
+! #endif /* USE_XIM */
+
+ if (len && (Options & Opt_scrollKeypress))
+ TermWin.view_start = 0;
+***************
+*** 1977,1984 ****
+--- 2002,2013 ----
+ XEvent ev;
+
+ refreshed = 0;
++ #ifdef USE_XIM
++ XProcessEvent(Xdisplay);
++ #else
+ XNextEvent(Xdisplay, &ev);
+ process_x_event(&ev);
++ #endif
+
+ /* in case button actions pushed chars to cmdbuf */
+ if (cmdbuf_ptr < cmdbuf_endp)
+***************
+*** 2050,2055 ****
+--- 2079,2087 ----
+ refreshed = 1;
+ scr_refresh(refresh_type);
+ scrollbar_show(1);
++ #ifdef USE_XIM
++ IMSendSpot();
++ #endif
+ }
+ }
+ }
+***************
+*** 2225,2231 ****
+ on_colors_changed(Color_bg);
+ }
+ #endif
+! #ifndef NO_XLOCALE
+ if (Input_Context != NULL)
+ XSetICFocus(Input_Context);
+ #endif
+--- 2257,2263 ----
+ on_colors_changed(Color_bg);
+ }
+ #endif
+! #ifndef USE_XIM
+ if (Input_Context != NULL)
+ XSetICFocus(Input_Context);
+ #endif
+***************
+*** 2242,2248 ****
+ on_colors_changed(Color_bg);
+ }
+ #endif
+! #ifndef NO_XLOCALE
+ if (Input_Context != NULL)
+ XUnsetICFocus(Input_Context);
+ #endif
+--- 2274,2280 ----
+ on_colors_changed(Color_bg);
+ }
+ #endif
+! #ifndef USE_XIM
+ if (Input_Context != NULL)
+ XUnsetICFocus(Input_Context);
+ #endif
+***************
+*** 2720,2725 ****
+--- 2752,2760 ----
+ scr_refresh(refresh_type);
+ refresh_count = refresh_limit = 0;
+ scrollbar_show(1);
++ #ifdef USE_XIM
++ IMSendSpot();
++ #endif
+ }
+ break;
+ }
+***************
+*** 3444,3449 ****
+--- 3479,3487 ----
+ }
+ }
+ Gr_do_graphics(cmd, nargs, args, text);
++ #ifdef USE_XIM
++ IMSendSpot();
++ #endif
+ #endif
+ }
+ /*}}} */
+***************
+*** 3611,3617 ****
+--- 3649,4013 ----
+ }
+ }
+
++ #ifdef USE_XIM
++ /* PROTO */
++ void
++ setSize( XRectangle *size )
++ {
++ size->x = TermWin_internalBorder;
++ size->y = TermWin_internalBorder;
++ size->width = Width2Pixel (TermWin.ncol);
++ size->height = Height2Pixel(TermWin.nrow);
++ return;
++ }
++
++ /* PROTO */
++ void
++ setColor( unsigned long *fg, unsigned long *bg )
++ {
++ *fg = PixColors[Color_fg];
++ *bg = PixColors[Color_bg];
++ return;
++ }
+
++ /* PROTO */
++ void
++ IMSendSpot( void )
++ {
++ XPoint spot;
++ XVaNestedList preedit_attr;
++ XIMStyle input_style;
++
++ if( Input_Context == NULL )
++ return;
++ else {
++ XGetICValues(Input_Context,XNInputStyle,&input_style,NULL);
++ if (!(input_style & XIMPreeditPosition))
++ return;
++ }
++ setPosition( &spot );
++
++ preedit_attr = XVaCreateNestedList( 0, XNSpotLocation, &spot, NULL );
++ XSetICValues( Input_Context, XNPreeditAttributes, preedit_attr, NULL );
++ XFree( preedit_attr );
++ return;
++ }
++
++ /* PROTO */
++ void
++ setTermFontSet( void )
++ {
++ char *string;
++ long length, i;
++
++ if( TermWin.fontset != NULL ){
++ XFreeFontSet( Xdisplay, TermWin.fontset );
++ TermWin.fontset = NULL;
++ }
++
++ length = 0;
++ for( i = 0 ; i < NFONTS ; i ++){
++ if( rs_font[ i ] )
++ length += strlen( rs_font[ i ] ) + 1;
++ # ifdef MULTICHAR_SET
++ if( rs_mfont[ i ] )
++ length += strlen( rs_mfont[ i ] ) + 1;
++ # endif
++ }
++ if( ( string = malloc( length ) ) != NULL ){
++ char **missing_charsetlist, *def_string;
++ int missing_charsetcount;
++
++ string[ 0 ] = '\0';
++ for( i = 0 ; i < NFONTS ; i ++){
++ if( rs_font[ i ] ){
++ strcat( string, rs_font[ i ] );
++ strcat( string, "," );
++ }
++ # ifdef MULTICHAR_SET
++ if( rs_mfont[ i ] ){
++ strcat( string, rs_mfont[ i ] );
++ strcat( string, "," );
++ }
++ # endif
++ }
++ length = strlen( string );
++ if( length > 0 && string[ length - 1 ] == ',' ){
++ string[ length - 1 ] = '\0';
++ length --;
++ }
++ if( length > 0 ){
++ TermWin.fontset = XCreateFontSet
++ ( Xdisplay, string,
++ &missing_charsetlist, &missing_charsetcount, &def_string );
++ }
++ free( string );
++ } else {
++ TermWin.fontset = NULL;
++ }
++ return;
++ }
++
++ /* PROTO */
++ void
++ setPreeditArea(XRectangle *preedit_rect, XRectangle *status_rect, XRectangle *needed_rect)
++ {
++ preedit_rect->x = needed_rect->width
++ + (scrollbar_visible() && !(Options & Opt_scrollBar_right)
++ ? (SB_WIDTH + sb_shadow * 2) : 0);
++ preedit_rect->y = Height2Pixel(TermWin.nrow - 1)
++ + ((menuBar.state == 1) ? menuBar_TotalHeight() : 0);
++
++ preedit_rect->width = Width2Pixel(TermWin.ncol + 1) - needed_rect->width
++ + (!(Options & Opt_scrollBar_right)
++ ? (SB_WIDTH + sb_shadow * 2) : 0);
++ preedit_rect->height = Height2Pixel(1);
++
++ status_rect->x = (scrollbar_visible() && !(Options & Opt_scrollBar_right))
++ ? (SB_WIDTH + sb_shadow * 2) : 0;
++ status_rect->y = Height2Pixel(TermWin.nrow - 1)
++ + ((menuBar.state == 1) ? menuBar_TotalHeight() : 0);
++
++ status_rect->width = needed_rect->width ? needed_rect->width
++ : Width2Pixel(TermWin.ncol + 1);
++ status_rect->height = Height2Pixel(1);
++ }
++
++ /* PROTO */
++ void
++ IMDestroyCallback(XIM xim, XPointer client_data, XPointer call_data)
++ {
++ Input_Context = NULL;
++ XRegisterIMInstantiateCallback(Xdisplay, NULL, NULL, NULL, IMInstantiateCallback, NULL);
++ }
++
++
++ /* PROTO */
++ void
++ IMInstantiateCallback(Display *display, XPointer client_data, XPointer call_data)
++ {
++ char *p, *s, buf[64], tmp[1024];
++ char *end, *next_s;
++ XIM xim = NULL;
++ XIMStyle input_style = 0;
++ XIMStyles *xim_styles = NULL;
++ int found;
++ XPoint spot;
++ XRectangle rect, status_rect, needed_rect;
++ unsigned long fg, bg;
++ XVaNestedList preedit_attr = NULL;
++ XVaNestedList status_attr = NULL;
++ XIMCallback ximcallback;
++
++ Input_Context = NULL;
++
++ if (Input_Context)
++ return;
++
++ ximcallback.callback = IMDestroyCallback;
++ ximcallback.client_data = NULL;
++
++ if (rs_inputMethod && *rs_inputMethod) {
++ STRNCPY(tmp, rs_inputMethod, sizeof(tmp) - 1);
++ for (s = tmp; *s; s = next_s + 1) {
++ for (; *s && isspace(*s); s++);
++ if (!*s)
++ break;
++ for (end = s; (*end && (*end != ',')); end++);
++ for (next_s = end--; ((end >= s) && isspace(*end)); end--);
++ *(end + 1) = '\0';
++
++ if (*s) {
++ STRCPY(buf, "@im=");
++ strncat(buf, s, sizeof(buf) - 4 - 1);
++ if ((p = XSetLocaleModifiers(buf)) != NULL && *p
++ && (xim = XOpenIM(Xdisplay, NULL, NULL, NULL)) != NULL)
++ break;
++ }
++ if (!*next_s)
++ break;
++ }
++ }
++
++ /* try with XMODIFIERS env. var. */
++ if (xim == NULL && (p = XSetLocaleModifiers("")) != NULL && *p)
++ xim = XOpenIM(Xdisplay, NULL, NULL, NULL);
++
++ /* try with no modifiers base */
++ if (xim == NULL && (p = XSetLocaleModifiers("@im=none")) != NULL && *p)
++ xim = XOpenIM(Xdisplay, NULL, NULL, NULL);
++
++ if (xim == NULL)
++ return;
++ XSetIMValues(xim, XNDestroyCallback, &ximcallback, NULL);
++
++ if (XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL)
++ || !xim_styles) {
++ print_error("input method doesn't support any style");
++ XCloseIM(xim);
++ return;
++ }
++ STRNCPY(tmp, (rs_preeditType ? rs_preeditType
++ : "OverTheSpot,OffTheSpot,Root"),
++ sizeof(tmp) - 1);
++ for (found = 0, s = tmp; *s && !found; s = next_s + 1) {
++ unsigned short i;
++
++ for (; *s && isspace(*s); s++);
++ if (!*s)
++ break;
++ for (end = s; (*end && (*end != ',')); end++);
++ for (next_s = end--; ((end >= s) && isspace(*end)); end--);
++ *(end + 1) = '\0';
++
++ if (!strcmp(s, "OverTheSpot"))
++ input_style = (XIMPreeditPosition | XIMStatusNothing);
++ else if (!strcmp(s, "OffTheSpot"))
++ input_style = (XIMPreeditArea | XIMStatusArea);
++ else if (!strcmp(s, "Root"))
++ input_style = (XIMPreeditNothing | XIMStatusNothing);
++
++ for (i = 0; i < xim_styles->count_styles; i++)
++ if (input_style == xim_styles->supported_styles[i]) {
++ found = 1;
++ break;
++ }
++ }
++ XFree(xim_styles);
++
++ if (found == 0) {
++ print_error("input method doesn't support my preedit type");
++ XCloseIM(xim);
++ return;
++ }
++ if ((input_style != (XIMPreeditNothing | XIMStatusNothing))
++ && (input_style != (XIMPreeditArea | XIMStatusArea))
++ && (input_style != (XIMPreeditPosition | XIMStatusNothing))) {
++ print_error("This program does not support the preedit type");
++ XCloseIM(xim);
++ return;
++ }
++ if (input_style & XIMPreeditPosition) {
++ setSize(&rect);
++ setPosition(&spot);
++ setColor(&fg, &bg);
++
++ preedit_attr = XVaCreateNestedList(0, XNArea, &rect,
++ XNSpotLocation, &spot,
++ XNForeground, fg,
++ XNBackground, bg,
++ XNFontSet, TermWin.fontset,
++ NULL);
++ } else if (input_style & XIMPreeditArea) {
++ setColor(&fg, &bg);
++
++ /*
++ * The necessary width of preedit area is unknown
++ * until create input context.
++ */
++ needed_rect.width = 0;
++
++ setPreeditArea(&rect, &status_rect, &needed_rect);
++
++ preedit_attr = XVaCreateNestedList(0, XNArea, &rect,
++ XNForeground, fg,
++ XNBackground, bg,
++ XNFontSet, TermWin.fontset,
++ NULL);
++ status_attr = XVaCreateNestedList(0, XNArea, &status_rect,
++ XNForeground, fg,
++ XNBackground, bg,
++ XNFontSet, TermWin.fontset,
++ NULL);
++ }
++ Input_Context = XCreateIC(xim, XNInputStyle, input_style,
++ XNClientWindow, TermWin.parent,
++ XNFocusWindow, TermWin.parent,
++ XNDestroyCallback, &ximcallback,
++ preedit_attr ? XNPreeditAttributes : NULL,
++ preedit_attr,
++ status_attr ? XNStatusAttributes : NULL,
++ status_attr,
++ NULL);
++ XFree(preedit_attr);
++ XFree(status_attr);
++ if (Input_Context == NULL) {
++ print_error("Failed to create input context");
++ XCloseIM(xim);
++ }
++ if (input_style & XIMPreeditArea)
++ IMSetStatusPosition();
++ }
++
++ /* PROTO */
++ void
++ IMSetStatusPosition(void)
++ {
++ XIMStyle input_style;
++ XRectangle rect, status_rect, *needed_rect;
++ XVaNestedList preedit_attr, status_attr;
++
++ if (Input_Context == NULL)
++ return;
++
++ XGetICValues(Input_Context, XNInputStyle, &input_style, NULL);
++
++ if (input_style & XIMPreeditArea) {
++ status_attr = XVaCreateNestedList(0, XNAreaNeeded, &needed_rect, NULL);
++ XGetICValues(Input_Context, XNStatusAttributes, status_attr, NULL);
++ XFree(status_attr);
++
++ rect.x = needed_rect->width;
++ if (menuBar.state == 1) {
++ rect.y = Height2Pixel(TermWin.nrow - 1) - menuBar_TotalHeight();
++ } else {
++ rect.y = Height2Pixel(TermWin.nrow - 1);
++ }
++ if (Options & Opt_scrollBar_right) {
++ rect.width = Width2Pixel(TermWin.ncol + 1) - needed_rect->width;
++ } else {
++ rect.width = Width2Pixel(TermWin.ncol + 1) + SB_WIDTH + SHADOW * 2 - needed_rect->width;
++ }
++ rect.height = needed_rect->height;
++ preedit_attr = XVaCreateNestedList(0, XNArea, &rect, NULL);
++
++ if (scrollbar_visible()) {
++ if (Options & Opt_scrollBar_right) {
++ status_rect.x = 0;
++ } else {
++ status_rect.x = SB_WIDTH + SHADOW * 2;
++ }
++ } else {
++ status_rect.x = 0;
++ }
++ if (menuBar.state == 1) {
++ status_rect.y = Height2Pixel(TermWin.nrow - 1) + menuBar_TotalHeight();
++ } else {
++ status_rect.y = Height2Pixel(TermWin.nrow - 1);
++ }
++ status_rect.width = needed_rect->width;
++ status_rect.height = needed_rect->height;
++ status_attr = XVaCreateNestedList(0, XNArea, &status_rect, NULL);
++ XSetICValues(Input_Context,
++ XNPreeditAttributes, preedit_attr,
++ XNStatusAttributes, status_attr, NULL);
++ XFree(preedit_attr);
++ XFree(status_attr);
++ }
++ }
++
++ /* PROTO */
++ void
++ XProcessEvent( Display *display )
++ {
++ XEvent xev;
++ XNextEvent( display, &xev );
++ if( !XFilterEvent( &xev, xev.xany.window ) )
++ process_x_event( &xev );
++ return;
++ }
++
++ #endif
+
+ /*}}} */
+ /*----------------------- end-of-file (C source) -----------------------*/
+diff -cNr aterm-0.4.2.orig/src/feature.h aterm-0.4.2/src/feature.h
+*** aterm-0.4.2.orig/src/feature.h Fri Sep 7 00:38:07 2001
+--- aterm-0.4.2/src/feature.h Sun Sep 30 14:38:03 2001
+***************
+*** 306,311 ****
+--- 306,317 ----
+ */
+ #define SAVELINES 64
+
++ /*
++ * Default line space
++ */
++ #define LINESPACE 0
++
++
+ /* (Hops) Set to choose a number of lines of context between pages
+ * (rather than a proportion (1/5) of savedlines buffer)
+ * when paging the savedlines with SHIFT-{Prior,Next} keys.
+diff -cNr aterm-0.4.2.orig/src/main.c aterm-0.4.2/src/main.c
+*** aterm-0.4.2.orig/src/main.c Fri Sep 7 00:38:07 2001
+--- aterm-0.4.2/src/main.c Sun Sep 30 14:56:48 2001
+***************
+*** 901,906 ****
+--- 901,909 ----
+
+ XResizeWindow(Xdisplay, TermWin.parent, width, height);
+ resize_window1(width, height);
++ #ifdef USE_XIM
++ IMSetStatusPosition();
++ #endif
+ scr_clear();
+ }
+ }
+***************
+*** 1357,1363 ****
+ fw = TermWin.font->min_bounds.width; /* can be error !!!! */
+ if( fw > 1000 ) fw = 0 ; /* added by suggestion from <suchness>*/
+
+! fh = TermWin.font->ascent + TermWin.font->descent;
+
+ if (TermWin.font->min_bounds.width == TermWin.font->max_bounds.width)
+ TermWin.fprop = 0; /* Mono-spaced (fixed width) font */
+--- 1360,1370 ----
+ fw = TermWin.font->min_bounds.width; /* can be error !!!! */
+ if( fw > 1000 ) fw = 0 ; /* added by suggestion from <suchness>*/
+
+! #ifdef USE_LINESPACE
+! fh = TermWin.font->ascent + TermWin.font->descent + TermWin.lineSpace;
+! #else
+! fh = TermWin.font->ascent + TermWin.font->descent;
+! #endif
+
+ if (TermWin.font->min_bounds.width == TermWin.font->max_bounds.width)
+ TermWin.fprop = 0; /* Mono-spaced (fixed width) font */
+***************
+*** 1624,1629 ****
+--- 1631,1639 ----
+ rs_geometry = NULL; /* window geometry */
+ rs_minBufferWidth = NULL;
+ rs_saveLines = NULL; /* scrollback buffer [lines] */
++ #ifdef USE_LINESPACE
++ rs_lineSpace = NULL;
++ #endif
+ rs_borderWidth = NULL;
+ rs_modifier = NULL; /* modifier */
+ #if defined (HOTKEY_CTRL) || defined (HOTKEY_META)
+***************
+*** 1750,1755 ****
+--- 1760,1769 ----
+ TermWin.min_bcol = 1;
+ if (!rs_saveLines || (TermWin.saveLines = atoi(rs_saveLines)) < 0)
+ TermWin.saveLines = SAVELINES;
++ #ifdef USE_LINESPACE
++ if (!rs_lineSpace || (TermWin.lineSpace = atoi(rs_lineSpace)) < 0)
++ TermWin.lineSpace = LINESPACE;
++ #endif
+ if (!rs_borderWidth || (TermWin.borderWidth = atoi(rs_borderWidth)) < 0)
+ TermWin.borderWidth = BORDERWIDTH;
+
+***************
+*** 1797,1802 ****
+--- 1811,1819 ----
+ rs_mfont[i] = def_mfontName[i];
+ #endif
+ }
++ #ifdef USE_XIM
++ TermWin.fontset = NULL;
++ #endif
+
+ #ifdef XTERM_REVERSE_VIDEO
+ /* this is how xterm implements reverseVideo */
+diff -cNr aterm-0.4.2.orig/src/rxvt.h aterm-0.4.2/src/rxvt.h
+*** aterm-0.4.2.orig/src/rxvt.h Fri Sep 7 00:38:07 2001
+--- aterm-0.4.2/src/rxvt.h Sun Sep 30 15:01:00 2001
+***************
+*** 266,271 ****
+--- 266,274 ----
+ ncol, nrow, /* window size [characters] */
+ bcol, /* current number of columns in the buffer */
+ min_bcol, /* minimum horizontal columns in the buffer */
++ #ifdef USE_LINESPACE
++ lineSpace, /* linespace */
++ #endif
+ focus, /* window has focus */
+ saveLines, /* number of lines that fit in scrollback */
+ borderWidth,/* number of pixels in window border */
+***************
+*** 280,285 ****
+--- 283,291 ----
+ #ifdef MULTICHAR_SET
+ XFontStruct *mfont; /* Multichar font structure */
+ #endif
++ #ifdef USE_XIM
++ XFontSet fontset;
++ #endif
+ #if defined(BACKGROUND_IMAGE) || defined(TRANSPARENT) || defined(_MYSTYLE_)
+ BackgroundInfo background;
+ #endif
+***************
+*** 928,933 ****
+--- 934,942 ----
+ EXTERN const char *rs_geometry; /* window geometry */
+ EXTERN const char *rs_minBufferWidth; /* minimum buffer width - so we can scroll horizontally */
+ EXTERN const char *rs_saveLines; /* scrollback buffer [lines] */
++ #ifdef USE_LINESPACE
++ EXTERN const char *rs_lineSpace; /* line space [pixels] */
++ #endif
+ EXTERN const char *rs_borderWidth; /* border width [pixels] */
+ EXTERN const char *rs_cutchars; /* chars for selection boundaries */
+ #ifdef META8_OPTION
+***************
+*** 948,953 ****
+--- 957,966 ----
+ #endif
+ #ifdef PRINTPIPE
+ EXTERN const char *rs_print_pipe;
++ #endif
++ #ifdef USE_XIM
++ EXTERN const char *rs_preeditType;
++ EXTERN const char *rs_inputMethod;
+ #endif
+ #ifndef NO_BRIGHTCOLOR
+ EXTERN unsigned int colorfgbg;
+diff -cNr aterm-0.4.2.orig/src/screen.c aterm-0.4.2/src/screen.c
+*** aterm-0.4.2.orig/src/screen.c Fri Sep 7 00:38:07 2001
+--- aterm-0.4.2/src/screen.c Sun Sep 30 15:03:36 2001
+***************
+*** 3439,3441 ****
+--- 3439,3455 ----
+ #endif
+ fprintf(stderr, "%s\n", name[color]);
+ }
++
++ #ifdef USE_XIM
++ /* PROTO */
++ void
++ setPosition(XPoint *pos)
++ {
++ XWindowAttributes xwa ;
++
++ XGetWindowAttributes( Xdisplay, TermWin.vt, &xwa ) ;
++ pos->x = Col2Pixel ( screen.cur.col ) + xwa.x;
++ pos->y = Height2Pixel((screen.cur.row + 1)) + xwa.y;
++ return ;
++ }
++ #endif
+diff -cNr aterm-0.4.2.orig/src/xdefaults.c aterm-0.4.2/src/xdefaults.c
+*** aterm-0.4.2.orig/src/xdefaults.c Fri Sep 7 00:38:07 2001
+--- aterm-0.4.2/src/xdefaults.c Sun Sep 30 15:06:21 2001
+***************
+*** 276,281 ****
+--- 276,286 ----
+ STRG(rs_multichar_encoding, "multichar_encoding", "km", "mode",
+ "multiple-character font encoding; mode = eucj | sjis | big5"),
+ #endif /* MULTICHAR_SET */
++ #ifdef USE_XIM
++ STRG(rs_preeditType, "preeditType", "pt", "style",
++ "input style of input method; style = OverTheSpot | OffTheSpot | Root"),
++ STRG(rs_inputMethod, "inputMethod", "im", "name", "name of input method"),
++ #endif /* USE_XIM */
+ #ifdef GREEK_SUPPORT
+ STRG(rs_greek_keyboard, "greek_keyboard", "grk", "mode",
+ "greek keyboard mapping; mode = iso | ibm"),
+***************
+*** 313,318 ****
+--- 318,327 ----
+ "minimum number of columns stored in buffer"),
+ STRG(rs_saveLines, "saveLines", "sl", "number",
+ "number of scrolled lines to save"),
++ #ifdef USE_LINESPACE
++ STRG(rs_lineSpace, "lineSpace", "lsp", "number",
++ "line space"),
++ #endif
+ BOOL(rs_utmpInhibit, "utmpInhibit", "ut", Opt_utmpInhibit,
+ "utmp inhibit"),
+ BOOL(rs_visualBell, "visualBell", "vb", Opt_visualBell, "visual bell"),
diff --git a/chinese/aterm/pkg-comment b/chinese/aterm/pkg-comment
new file mode 100644
index 000000000000..51dd2923467d
--- /dev/null
+++ b/chinese/aterm/pkg-comment
@@ -0,0 +1 @@
+A color vt102 terminal emulator with transparency support
diff --git a/chinese/aterm/pkg-descr b/chinese/aterm/pkg-descr
new file mode 100644
index 000000000000..20d51ed602f0
--- /dev/null
+++ b/chinese/aterm/pkg-descr
@@ -0,0 +1,9 @@
+aterm is a color vt102 terminal emulator, based on rxvt 2.4.8 with
+additions for fast transparency.
+
+It was created with AfterStep users in mind, but is not tied to any
+libraries, and can be used anywhere.
+
+WWW: http://aterm.sourceforge.net/
+
+- Jim <jim@FreeBSD.org>
diff --git a/chinese/aterm/pkg-plist b/chinese/aterm/pkg-plist
new file mode 100644
index 000000000000..670e978158d3
--- /dev/null
+++ b/chinese/aterm/pkg-plist
@@ -0,0 +1,2 @@
+bin/aterm
+man/man1/aterm.1