Package-Name: iiimf-sdk
# required for iiimgcf:
Requires: gtk+ intltool
Rebuild-For: libgnomeui Mule-UCS
Compile-Requires: autoconf automake
Homepage: http://www.openi18n.org/
#Source: http://www.openi18n.org/modules.php?op=modload&name=Downloads&file=index&req=viewsdownload&sid=1&orderby=dateD/(im-sdk-src-r(\d+)_(\d+)(_(\d+))?-svn(\d+)\.tar\.bz2)/[\0-\377]*(im-sdk-src-r(\d+)_(\d+)(_(\d+))?-svn(\d+).tar.bz2) e:"$2.$3.".($5||"0") http://www.openi18n.org/download/im-sdk/src/$1
Source: svn://http/svn.openi18n.org:8081/repos/im-sdk/trunk@2059/iiimf-sdk/([\0-\377]*) 12.1.0.2059
# FIXME: be careful with this! it's fragile, recompilation may break atokx2
Explicit-Only: 1
#Zap-Before-Install: 1
Repack:
	tar xzvfp "$(SOURCE)"
	rm -rf iiimf-sdk*/packages
	test -d iiimf-sdk-"$(VERSION)" || mv iiimf-sdk* iiimf-sdk-"$(VERSION)"
Compile:
# FIXME: including SSL/TLS support seems to cause linkage problems
	perl -pi -e 's/^(IM_CHECK_TLS)/#$$1/' `find . -name configure.ac`
	if packager c libgnomeui ; then GNOME_IM_SWITCHER=gnome-im-switcher ; else GNOME_IM_SWITCHER= ; fi ; \
	$(MAKE) build PREFIX="$(PREFIX)" PKG_CFLAGS="-O3 $(GCC_OPT_FLAGS)" CONFIGURE_OPTS="" GNOME_IM_SWITCHER="$$GNOME_IM_SWITCHER"
# FIXME: build bug? mkinstalldirs doesn't get copied to iiimgcf/ and the install fails
	cp -p acfiles/mkinstalldirs iiimgcf/
	$(MAKE) install
	mkdir -p "$(PREFIX)"/etc/iiim "$(PREFIX)"/etc/rc.d/init.d
	cp -pf iiimsf/src/le.xml.conf "$(PREFIX)"/etc/iiim/le.xml.conf.example
	cp -pf IIim "$(PREFIX)"/etc/rc.d/init.d/
	chmod 700 "$(PREFIX)"/etc/rc.d/init.d/IIim
# FIXME: build bug? note lack of .so suffix
	set -e; if test -f "$(PREFIX)"/lib/libiiimp; then \
		for lib in libiiimcf libiiimp; do \
			v=`cd $(PREFIX)/lib; echo $$lib.[0-9].* | sed "s/^$$lib\.//"`; \
			mv -f "$(PREFIX)/lib/$$lib.$$v" "$(PREFIX)/lib/$$lib.so.$$v"; \
			rm -f "$(PREFIX)/lib/$$lib"{,.[0-9]}; \
			v1=`echo "$$v" | cut -d. -f1`; \
			ln -fs "$$lib.so.$$v" "$(PREFIX)/lib/$$lib.so.$$v1"; \
			ln -fs "$$lib.so.$$v1" "$(PREFIX)/lib/$$lib.so"; \
		done; \
	fi
	mkdir -p "$(PREFIX)"/im/leif
	rm -rf "$(PREFIX)"/iiimecf
	set -e; if packager c Mule-UCS; then \
		cd iiimecf; \
		emacs -q --no-site-file -batch -l iiimcf-comp.el; \
		cp -al lisp "$(PREFIX)"/iiimecf; \
		cp -pf COPYING README* "$(PREFIX)"/iiimecf/; \
		rm -rf /usr/share/emacs/site-lisp/iiimecf; \
		ln -s "$(PREFIX)"/iiimecf /usr/share/emacs/site-lisp/; \
	fi
Install:
	$(MAKE) instetc DIR=iiim ETC="htt.xml.conf le.xml.conf"
	$(MAKE) instinit SRC=etc/rc.d/init.d/IIim DEST=IIim S=3/50
	$(MAKE) instlib LIB="iiimcf iiimp"
	$(MAKE) addldso
	$(MAKE) instlocale FILE=iiimgcf
	rm -rf /usr/lib/im
	ln -s "$(PREFIX)"/im /usr/lib/
	set -e; cd "$(PREFIX)"/lib; for i in `find gtk-* -type f`; do \
		d=`dirname "$$i"`; \
		ln -fs "$(PREFIX)/lib/$$i" "/usr/lib/$$d/"; \
	done
Patch: <<EOT
######## begin local patch to force status window off
--- iiimgcf/gtkimcontextiiim.c.old	2005-09-22 13:23:47 +0900
+++ iiimgcf/gtkimcontextiiim.c	2006-02-23 17:59:29 +0900
@@ -2189,9 +2189,9 @@
 static void
 update_status_window (GtkIMContextIIIM *context_iiim)
 {
-  if (context_iiim->in_toplevel && context_iiim->has_focus)
-    claim_status_window (context_iiim);
-  else
+//  if (context_iiim->in_toplevel && context_iiim->has_focus)
+//    claim_status_window (context_iiim);
+//  else
     disclaim_status_window (context_iiim);
 }
 
######## end local patch to force status window off
######## begin GCC 4.1 fixes
--- iiimsf/src/IMSvrXMLConf.hh.old	2005-09-22 13:20:23 +0900
+++ iiimsf/src/IMSvrXMLConf.hh	2006-04-24 00:35:39 +0900
@@ -13,7 +13,7 @@
 
     IMAuth::access_type get_access_type(xmlChar *key);
 
-    string IMSvrXMLConf::parse_text_node(xmlNodePtr &node);
+    string parse_text_node(xmlNodePtr &node);
     string parse_hostname_node(xmlNodePtr &node);
     string parse_port_node(xmlNodePtr &node);
     string parse_file_node(xmlNodePtr &node);
--- iiimsf/src/IMUtil.hh.old	2005-09-22 13:20:23 +0900
+++ iiimsf/src/IMUtil.hh	2006-04-24 00:33:41 +0900
@@ -220,7 +220,7 @@
 {
     IMKeySpecList keys;
 
-    IMKeySpec *IMKeyParser::parse_key(string s);
+    IMKeySpec *parse_key(string s);
   public:
     string generate_key(IMKeySpec &spec);
     IMKeySpecList& get_parsedkeys()
--- iiimsf/src/LEMgr.cpp.old	2005-09-22 13:20:23 +0900
+++ iiimsf/src/LEMgr.cpp	2006-04-24 00:37:11 +0900
@@ -263,7 +263,7 @@
 	for (IMModuleInfoVec::iterator i = lev->begin(); i != lev->end(); i++) {
 	    LOG_DEBUG("searching lang... %s", i->lang.c_str());
 	    if (*preq_lang == i->lang) {
-		itl = NULL;
+		itl = (LEBaseMap::iterator)NULL;
 		LOG_DEBUG("considering to use lang %s", i->lang.c_str());
 		for (ModuleInfoVec::iterator j = i->modules.begin(); j != i->modules.end(); j++) {
 		    char fname[j->size()+1];
--- leif/sampleja3/xaux_common/xaux_ext_common.c.old	2005-09-22 13:16:46 +0900
+++ leif/sampleja3/xaux_common/xaux_ext_common.c	2006-04-24 01:12:51 +0900
@@ -101,6 +101,8 @@
 		return True;
 }
 
+static Bool xaux_xs_send_message();
+
 static Bool
 xaux_xs_send_property(
 	Display *		display,
--- leif/sampleja3/xaux_common/xaux_ext_common.h.old	2005-09-22 13:16:46 +0900
+++ leif/sampleja3/xaux_common/xaux_ext_common.h	2006-04-24 01:12:06 +0900
@@ -80,10 +80,6 @@
 extern Bool xaux_ext_Draw(xaux_class_t *, aux_ext_data_t *);
 extern Bool xaux_ext_Done(xaux_class_t *, aux_ext_data_t *);
 
-/* conversion utilities */
-extern size_t utf16_mb(const char **, size_t *, char **, size_t *);
-extern size_t mb_utf16(const char **, size_t *, char **, size_t *);
-
 #ifndef	linux
 #include <Xm/Xm.h>
 #endif
######## end GCC 4.1 fixes
######## begin automake fixes
--- acfiles/check_canna.m4.old	2005-09-22 13:23:45 +0900
+++ acfiles/check_canna.m4	2006-02-23 18:10:43 +0900
@@ -3,7 +3,7 @@
 
 dnl output:
 dnl       HAVE_CANNA
-AC_DEFUN(IM_CHECK_CANNA,
+AC_DEFUN([IM_CHECK_CANNA],
 [
 	AC_CHECK_HEADER(canna/jrkanji.h, [ HAVE_CANNA="yes" ])
 	AC_CHECK_LIB(canna, jrKanjiControl, [ HAVE_LIBCANNA="yes" ])
@@ -12,4 +12,4 @@
 	else
 		HAVE_CANNA="no"
 	fi
-])
\ No newline at end of file
+])
--- acfiles/check_freewnn.m4.old	2005-09-22 13:23:45 +0900
+++ acfiles/check_freewnn.m4	2006-02-23 18:10:37 +0900
@@ -3,7 +3,7 @@
 
 dnl output:
 dnl       HAVE_FREEWNN
-AC_DEFUN(IM_CHECK_FREEWNN,
+AC_DEFUN([IM_CHECK_FREEWNN],
 [
 	ldflags_backup="${LDFLAGS}"
 	LDFLAGS="${LDFLAGS} -lcrypt"
--- acfiles/check_gtk.m4.old	2005-09-22 13:23:45 +0900
+++ acfiles/check_gtk.m4	2006-02-23 18:10:30 +0900
@@ -3,7 +3,7 @@
 
 dnl output:
 dnl      HAVE_GTK
-AC_DEFUN(IM_CHECK_GTK,
+AC_DEFUN([IM_CHECK_GTK],
 [
 	AC_CHECK_HEADER(gtk.h, [ HAVE_GTK="yes" ])
 	AC_CHECK_LIB(gtk, gtk_init, [ HAVE_LIBGTK="yes" ], , -lgdk)
@@ -14,7 +14,7 @@
 
 dnl output:
 dnl      GTK2_VERSION, GTK2_LIBDIR
-AC_DEFUN(IM_CHECK_GTK2_VERSION,
+AC_DEFUN([IM_CHECK_GTK2_VERSION],
 [
 	AC_PATH_PROG(pkg_config_prog, pkg-config, no)
 	if test "X$pkg_config_prog" = "Xno" ; then
--- acfiles/check_socket.m4.old	2005-09-22 13:23:45 +0900
+++ acfiles/check_socket.m4	2006-02-23 18:10:25 +0900
@@ -8,7 +8,7 @@
 dnl       HAVE_UNIX_SOCKET
 dnl	  HAVE_SOCKADDR_STORAGE
 dnl       SOCKET_LIBS
-AC_DEFUN(IM_CHECK_SOCKET,
+AC_DEFUN([IM_CHECK_SOCKET],
 [
 	socket_lib_flag=""
 	nsl_lib_flag=""
--- acfiles/check_sys.m4.old	2005-09-22 13:23:45 +0900
+++ acfiles/check_sys.m4	2006-02-23 18:10:18 +0900
@@ -1,7 +1,7 @@
 dnl system checking configure definitions for im-sdk
 dnl               Author: MIYASHITA Hisashi<himi@li18nux.org>
 
-AC_DEFUN(IM_SYSTEM_AUTOHEADER,
+AC_DEFUN([IM_SYSTEM_AUTOHEADER],
 [
 AH_VERBATIM([ARCH], [/* architecture */
 #ifndef ARCH
@@ -9,7 +9,7 @@
 #endif])
 ])
 
-AC_DEFUN(IM_CHECK_SYSTEM,
+AC_DEFUN([IM_CHECK_SYSTEM],
 [
 dnl     This must be called beforehand!
 dnl	AC_CANONICAL_TARGET
@@ -122,7 +122,7 @@
 	fi
 ])
 
-AC_DEFUN(IM_CHECK_DLOPEN,
+AC_DEFUN([IM_CHECK_DLOPEN],
 [
 	DLOPEN_CXX_CFLAGS=""
 	AC_CHECK_HEADERS(dlfcn.h, [ HAVE_DLFCN_H="yes" ])
@@ -133,7 +133,7 @@
 	fi
 ])
 
-AC_DEFUN(IM_CHECK_TLS,
+AC_DEFUN([IM_CHECK_TLS],
 [
 	AC_CHECK_HEADERS(openssl/ssl.h, [ HAVE_OPENSSL_H="yes" ])
 	AC_CHECK_LIB(ssl, SSL_new, [ HAVE_LIBSSL="yes" ])
@@ -145,7 +145,7 @@
 	fi
 ])
 
-AC_DEFUN(IM_CONSTRUCT_FLAGS,
+AC_DEFUN([IM_CONSTRUCT_FLAGS],
 [
 	COMMON_CXX_CFLAGS="-I${srcdir} -I${IM_INCLUDEDIR} -DARCH=\\\"${ARCH}\\\" -DHAVE_CONFIG_H"
 	COMMON_CFLAGS=""
@@ -276,7 +276,7 @@
 ;;       THREAD_CXX_CFLAGS
 ;;       THREAD_LDFLAGS
 ;;       THREAD_LIBS
-AC_DEFUN(IM_CONSTRUCT_THREAD_FLAGS,
+AC_DEFUN([IM_CONSTRUCT_THREAD_FLAGS],
 [
 	THREAD_CXX_CFLAGS=""
 	THREAD_LDFLAGS=""
@@ -313,7 +313,7 @@
 	fi
 ])
 
-AC_DEFUN(IM_SYSTEM_SUBST,
+AC_DEFUN([IM_SYSTEM_SUBST],
 [
 # System Info.
 	AC_SUBST(ARCH)
--- acfiles/check_x.m4.old	2005-09-22 13:23:45 +0900
+++ acfiles/check_x.m4	2006-02-23 18:10:00 +0900
@@ -5,7 +5,7 @@
 dnl      HAVE_X
 dnl      X_LIBS
 dnl      X_CFLAGS
-AC_DEFUN(IM_CHECK_X,
+AC_DEFUN([IM_CHECK_X],
 [
 	AC_PATH_XTRA
 	if test "X${no_x}" = "Xyes" ; then
@@ -19,7 +19,7 @@
 
 dnl output:
 dnl      XLIB_HAS_XUTF8
-AC_DEFUN(IM_CHECK_XUTF8API,
+AC_DEFUN([IM_CHECK_XUTF8API],
 [
 	ldflags_backup="${LDFLAGS}"
 	LDFLAGS="${LDFLAGS} ${X_LIBS}"
@@ -39,7 +39,7 @@
 
 dnl output:
 dnl       HAVE_MOTIF
-AC_DEFUN(IM_CHECK_MOTIF,
+AC_DEFUN([IM_CHECK_MOTIF],
 [
 	HAVE_MOTIF="no"
 	if test "X${HAVE_X}" = "Xyes" ; then
@@ -57,7 +57,7 @@
 
 dnl output:
 dnl      HAVE_XICCALLBACK
-AC_DEFUN(IM_TEST_XICCALLBACK,
+AC_DEFUN([IM_TEST_XICCALLBACK],
 [
 	cflags_backup="${CFLAGS}"
 	CFLAGS="${CFLAGS} ${X_CFLAGS}"
@@ -81,9 +81,9 @@
 	CFLAGS="${cflags_backup}"
 ])
 
-AC_DEFUN(IM_X_SUBST,
+AC_DEFUN([IM_X_SUBST],
 [
 	AC_SUBST(X_PRIVATEINC)
 	AC_SUBST(X_LIBS)
 	AC_SUBST(X_CFLAGS)
-])
\ No newline at end of file
+])
--- acfiles/im_common.m4.old	2005-09-22 13:23:45 +0900
+++ acfiles/im_common.m4	2006-02-23 18:09:47 +0900
@@ -1,7 +1,7 @@
 dnl common configuration for im-sdk
 dnl               Author: MIYASHITA Hisashi<himi@li18nux.org>
 
-AC_DEFUN(IM_INIT,
+AC_DEFUN([IM_INIT],
 [
 	TOPDIR="$1"
 	IM_ACDIR="$1/acfiles"
@@ -32,7 +32,7 @@
 	AC_CANONICAL_TARGET
 ])
 
-AC_DEFUN(IM_SUBST,
+AC_DEFUN([IM_SUBST],
 [
 	AC_SUBST(PACKAGE)
 	AC_SUBST(VERSION)
@@ -47,7 +47,7 @@
 	AC_SUBST(CSCONV_DIR)
 ])
 
-AC_DEFUN(IM_ADD_TARGET,
+AC_DEFUN([IM_ADD_TARGET],
 [
 	if test "X${$2}" = "Xyes" ; then
 		$1="${$1} $3"
######## end automake fixes
######## begin compilation error fixes
diff -urN ../iiimf-sdk-12.1.0.2059-orig/Makefile ../iiimf-sdk-12.1.0.2059/Makefile
--- ../iiimf-sdk-12.1.0.2059-orig/Makefile	2005-09-22 13:23:55 +0900
+++ ../iiimf-sdk-12.1.0.2059/Makefile	2005-09-22 13:31:17 +0900
@@ -9,13 +9,13 @@
              $(AUTOCONF)
 
 CONFIGDIRS = lib/EIMIL lib/iiimp lib/iiimcf \
-             iiimsf leif leif/sun_le_korea leif/sun_le_asia\
+             iiimsf leif \
              iiimxcf/xiiimp.so iiimxcf/htt_xbe \
-             iiimgcf gnome-im-switcher doc
+             iiimgcf $(GNOME_IM_SWITCHER) doc
 BUILDDIRS = lib/CSConv lib/EIMIL lib/iiimp lib/iiimcf \
-            iiimsf leif leif/sun_le_korea leif/sun_le_asia \
+            iiimsf leif \
             iiimxcf/xiiimp.so iiimxcf/htt_xbe \
-            iiimgcf gnome-im-switcher doc
+            iiimgcf $(GNOME_IM_SWITCHER) doc
 
 all: build
 
@@ -25,54 +25,61 @@
         rm -f Makefile.in aclocal.m4
 
 config:
+	set -e; \
 	for dir in $(CONFIGDIRS); do  \
 		acfilesdir=`pwd` ; \
 		acfilesdir="$${acfilesdir}/acfiles" ; \
-		topdir=`pwd` ; \
-		cd $$dir && $(CONFIG_CMD) && cd $$topdir ; \
+		(cd $$dir && $(CONFIG_CMD)) ; \
+		res=$$?; if test $$res -ne 0; then exit $$res; fi; \
 	done
 
 build:
+	set -e; \
 	for dir in $(BUILDDIRS); do  \
-		topdir=`pwd` ; \
-		cd $$dir && \
+		(cd $$dir && \
 		if test -f ./autogen.sh; then \
-		   sh ./autogen.sh && $(MAKE) all && cd $$topdir ; \
+		   CFLAGS="$(PKG_CFLAGS)" LDFLAGS="-L$(PREFIX)/lib" sh ./autogen.sh --prefix="$(PREFIX)" $(CONFIGURE_OPTS) && $(MAKE) all; \
 		else \
 		 if test -f ./configure; then \
-		   sh ./configure && $(MAKE) all && cd $$topdir ; \
+		   CFLAGS="$(PKG_CFLAGS)" LDFLAGS="-L$(PREFIX)/lib" sh ./configure --prefix="$(PREFIX)" $(CONFIGURE_OPTS) && $(MAKE) all; \
 		 else :; fi; \
-		fi; \
+		fi); \
+		res=$$?; if test $$res -ne 0; then exit $$res; fi; \
 	done
 
 debug:
+	set -e; \
 	for dir in $(BUILDDIRS); do  \
-		topdir=`pwd` ; \
-		cd $$dir && \
+		(cd $$dir && \
 		if test -f ./autogen.sh; then \
-		   sh ./autogen.sh --enable-debug && $(MAKE) all && cd $$topdir ; \
+		   CFLAGS="$(PKG_CFLAGS)" LDFLAGS="-L$(PREFIX)/lib" sh ./autogen.sh --prefix="$(PREFIX)" $(CONFIGURE_OPTS) --enable-debug && $(MAKE) all; \
 		else \
 		 if test -f ./configure; then \
-		   sh ./configure --enable-debug && $(MAKE) all && cd $$topdir ; \
+		   CFLAGS="$(PKG_CFLAGS)" LDFLAGS="-L$(PREFIX)/lib" sh ./configure --prefix="$(PREFIX)" $(CONFIGURE_OPTS) --enable-debug && $(MAKE) all; \
 		 else :; fi; \
-		fi; \
+		fi); \
+		res=$$?; if test $$res -ne 0; then exit $$res; fi; \
 	done
 
 install:
+	set -e; \
 	for dir in $(BUILDDIRS); do  \
-		topdir=`pwd` ; \
-		cd $$dir && $(MAKE) install && cd $$topdir ; \
+		(cd $$dir && $(MAKE) install); \
+		res=$$?; if test $$res -ne 0; then exit $$res; fi; \
 	done
 
 clean:
+	set -e; \
 	for dir in $(BUILDDIRS); do  \
 		topdir=`pwd` ; \
-		cd $$dir && $(MAKE) clean ; cd $$topdir ; \
+		(cd $$dir && $(MAKE) clean); \
+		res=$$?; if test $$res -ne 0; then exit $$res; fi; \
 	done
 
 distclean:
+	set -e; \
 	for dir in $(BUILDDIRS); do  \
-		topdir=`pwd` ; \
-		cd $$dir && $(MAKE) distclean ; cd $$topdir ; \
+		(cd $$dir && $(MAKE) distclean); \
+		res=$$?; if test $$res -ne 0; then exit $$res; fi; \
 	done
 
--- iiimgcf/Makefile.am.old	2005-09-22 13:23:47 +0900
+++ iiimgcf/Makefile.am	2005-09-22 14:28:15 +0900
@@ -6,10 +6,10 @@
 
 AUTOMAKE_OPTIONS = foreign
 
-moduledir = $(GTK2_LIBDIR)/gtk-2.0/$(GTK2_BINARY_VERSION)/immodules
+moduledir = $(libdir)/gtk-2.0/$(GTK2_BINARY_VERSION)/immodules
 
 im_iiim_la_CFLAGS = $(SHLIBCFLAGS) $(THREAD_CXX_CFLAGS) $(GTK_CFLAGS)
-im_iiim_la_LDFLAGS = -rpath $(moduledir) -avoid-version -module -no-undefined
+im_iiim_la_LDFLAGS = -rpath $(GTK2_LIBDIR)/gtk-2.0/$(GTK2_BINARY_VERSION)/immodules -avoid-version -module -no-undefined
 
 im_iiim_la_SOURCES = IIIMGdkEventKey.c IIIMGdkEventKey.h \
                      gtkimcontextiiim.c gtkimcontextiiim.h \
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/Makefile.am ../iiimf-sdk-12.1.0.2059/iiimsf/src/Makefile.am
--- ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/Makefile.am	2005-09-22 13:20:23 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimsf/src/Makefile.am	2005-09-22 13:31:17 +0900
@@ -62,6 +62,7 @@
 	$(LIBPAM_FLAGS)			\
 	$(LIBWRAP_FLAGS)		\
 	$(THREAD_LIBS)			\
+	$(XML_LIBS)			\
 	libiiimsf.la			\
 	$(NULL)
 
diff -urN ../iiimf-sdk-12.1.0.2059-orig/leif/unit/phonetic_im/mapfile/Makefile.am ../iiimf-sdk-12.1.0.2059/leif/unit/phonetic_im/mapfile/Makefile.am
--- ../iiimf-sdk-12.1.0.2059-orig/leif/unit/phonetic_im/mapfile/Makefile.am	2005-09-22 13:16:44 +0900
+++ leif/unit/phonetic_im/mapfile/Makefile.am	2006-04-24 00:56:41 +0900
@@ -1,5 +1,5 @@
 SUBDIRS = mapfile2c
-LEX = /usr/bin/lex
+LEX = /usr/bin/flex
 
 MAPFILES = bengali.mapfile gurmukhi.mapfile hindi.mapfile kannada.mapfile malayalam.mapfile tamil.mapfile telugu.mapfile gujarati.mapfile
 
@@ -57,10 +57,13 @@
 	-e "s/^# define unput(c).*/# define unput(c) (\*--global_ptr=c)/g" \
 	-e "s/^#define unput(c).*/#define unput(c) (\*--global_ptr=c)/g" \
 	-e "/^#line/d" \
+	-e "/^extern int yyleng/d" \
+	-e "/^extern FILE \*yyin/d" \
+	-e "s/^extern \(\("C" \)*int yywrap\)/static \1/g" \
 	-e "/^static char \*global_ptr\;/i\
-#define YY_NO_INPUT" -e "/^static char \*global_ptr\;/i\
-#define YY_NO_UNPUT" -e "/^static char \*global_ptr\;/i\
-#define input() (\*global_ptr++)" $*.tc > $*.c
+ #define YY_NO_INPUT" -e "/^static char \*global_ptr\;/i\
+ #define YY_NO_UNPUT" -e "/^static char \*global_ptr\;/i\
+ #define input() (\*global_ptr++)" $*.tc > $*.c
 	rm -f  $*.tc
 
 noinst_LTLIBRARIES = libphonetic_temp.la
######## end compilation error fixes
######## begin hardcoded package path fixes (ARGH HELLO let's at least try to be portable!! damn idiots)
diff -urN ../iiimf-sdk-12.1.0-orig/acfiles/im_common.m4 acfiles/im_common.m4
--- ../iiimf-sdk-12.1.0-orig/acfiles/im_common.m4	2003-06-13 01:29:10 +0900
+++ acfiles/im_common.m4	2005-03-15 03:13:10 +0900
@@ -9,7 +9,7 @@
 	PACKAGE="im-sdk"
 	VERSION="11.0"
 
-	IMDIR="/usr/lib/im"
+	IMDIR="/pkg/iiimf-sdk/im"
 	IMBINDIR=${IMDIR}
 	IM_LEIFDIR="${IMDIR}/leif"
 	IM_LOCALEDIR="${IMDIR}/locale"
diff -urN ../iiimf-sdk-12.1.0-orig/lib/CSConv/aclocal.m4 lib/CSConv/aclocal.m4
--- ../iiimf-sdk-12.1.0-orig/lib/CSConv/aclocal.m4	2003-06-13 01:27:08 +0900
+++ lib/CSConv/aclocal.m4	2005-03-15 03:10:27 +0900
@@ -22,7 +22,7 @@
 	PACKAGE="im-sdk"
 	VERSION="11.0"
 
-	IMDIR="/usr/lib/im"
+	IMDIR="/pkg/iiimf-sdk/im"
 	IMBINDIR=${IMDIR}
 	IM_LEIFDIR="${IMDIR}/leif"
 	IM_LOCALEDIR="${IMDIR}/locale"
diff -urN ../iiimf-sdk-12.1.0-orig/lib/CSConv/configure lib/CSConv/configure
--- ../iiimf-sdk-12.1.0-orig/lib/CSConv/configure	2003-06-13 01:27:08 +0900
+++ lib/CSConv/configure	2005-03-15 03:11:29 +0900
@@ -1360,7 +1360,7 @@
 	PACKAGE="im-sdk"
 	VERSION="11.0"
 
-	IMDIR="/usr/lib/im"
+	IMDIR="/pkg/iiimf-sdk/im"
 	IMBINDIR=${IMDIR}
 	IM_LEIFDIR="${IMDIR}/leif"
 	IM_LOCALEDIR="${IMDIR}/locale"
######## end harcoded path fixes
######## begin init script
--- /no/such/file	1970-01-01 00:00:00 +0000
+++ IIim	2005-03-15 01:22:32 +0900
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+case "x$1" in
+    xstart)
+	echo >&2 -n "Starting IIIM services... "
+	for i in htt; do
+	    echo -n "($i) "
+	    (/usr/lib/im/"$i" &) &>/dev/null
+	done
+	echo >&2 "done."
+	;;
+    xstop)
+	echo >&2 -n "Stopping IIIM services... "
+	killall -9 httx htt_xbe &>/dev/null
+	killall htt htt_server
+	echo >&2 "done."
+	;;
+    xrestart)
+	"$0" stop
+	sleep 1
+	exec "$0" start
+	;;
+    *)
+	echo >&2 "Usage: $0 {start|stop|restart} [args...]"
+	exit 1
+	;;
+esac
######## end init script
######## remainder is ATOK patches (through js2)
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimgcf/IIIMGdkEventKey.c ../iiimf-sdk-12.1.0.2059/iiimgcf/IIIMGdkEventKey.c
--- ../iiimf-sdk-12.1.0.2059-orig/iiimgcf/IIIMGdkEventKey.c	2005-09-22 13:23:47 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimgcf/IIIMGdkEventKey.c	2005-09-22 13:30:11 +0900
@@ -206,10 +206,19 @@
 #endif /* USE_KANA_TABLE */
 
 #if	USE_KANA_TABLE
+static int
+ignore_error(Display *displayp, XErrorEvent *eventp)
+{
+  return 0;
+}
+#endif /* USE_KANA_TABLE */
+
+#if	USE_KANA_TABLE
 static gint
 get_kana_flag (GdkEventKey *e)
 {
   static int KanaMode = -1;
+  int (*oldhandler)(Display *, XErrorEvent *) = NULL;
   Window kana_w;
   GdkDisplay *gdkdisplay;
   Display *xdisplay;
@@ -221,6 +230,9 @@
   if (KanaMode == -2)
     return 0;
 
+  if (!e->window)
+    return -2;
+
   gdkdisplay = gdk_drawable_get_display (e->window);
   xdisplay = GDK_DISPLAY_XDISPLAY (gdkdisplay);
 
@@ -242,10 +254,15 @@
       kanaflag_atom = XInternAtom(xdisplay, "HTT_KANA_FLAG", False);
     }
 
+  XSync(xdisplay, False);
+  oldhandler = XSetErrorHandler(ignore_error);
+ 
   kana_w = XGetSelectionOwner(xdisplay, kanawin_atom);
 
   if (kana_w == None)
     {
+      XSync(xdisplay, False);
+      XSetErrorHandler(oldhandler);
       return 0;
     }
 
@@ -254,7 +271,10 @@
                      &ret_type, &ret_format,
                      &nitems, &bytes_left, (unsigned char **) &tmp);
 
-  if ((ret_type == XA_WINDOW) && ((*tmp == 0) || (*tmp == 1)))
+  XSync(xdisplay, False);
+  XSetErrorHandler(oldhandler);
+
+  if ((tmp != NULL) && (ret_type == XA_WINDOW) && ((*tmp == 0) || (*tmp == 1)))
     KanaMode = *tmp;
   if (tmp)
     free((char*)tmp);
@@ -267,6 +287,7 @@
 static void
 toggle_kana_flag (GdkEventKey *e)
 {
+  int (*oldhandler)(Display *, XErrorEvent *) = NULL;
   int kanamode;
   Window kana_w;
   GdkDisplay *gdkdisplay;
@@ -284,6 +305,9 @@
   gdkdisplay = gdk_drawable_get_display (e->window);
   xdisplay = GDK_DISPLAY_XDISPLAY (gdkdisplay);
 
+  XSync(xdisplay, False);
+  oldhandler = XSetErrorHandler(ignore_error);
+
   kana_w = XGetSelectionOwner(xdisplay, kanawin_atom);
 
   if (kana_w != None)
@@ -293,6 +317,9 @@
                       (unsigned char*) &kanamode,
                       sizeof(kanamode));
     }
+
+  XSync(xdisplay, False);
+  XSetErrorHandler(oldhandler);
 }
 #endif /* USE_KANA_TABLE */
 
@@ -756,6 +783,9 @@
     case GDK_EuroSign:
       return IIIMF_KEYCODE_EURO_SIGN;
 
+    case GDK_Zenkaku_Hankaku:
+      return IIIMF_KEYCODE_KANJI;
+
     default:
       return 0;
     }
@@ -818,8 +848,11 @@
                   pkev->keycode = kana_shift_keymapTable[i].iiimf_keycode;
                   pkev->keychar = kana_shift_keymapTable[i].iiimf_keychar;
                   if (pkev->keycode)
-                    return IIIMF_STATUS_SUCCESS;
-
+                    {
+                      pkev->modifier = modifier (e->state);
+                      pkev->time_stamp = e->time;
+                      return IIIMF_STATUS_SUCCESS;
+                    }
                   break;
                 }
             }
@@ -832,8 +865,11 @@
               pkev->keycode = kana_normal_keymapTable[i].iiimf_keycode;
               pkev->keychar = kana_normal_keymapTable[i].iiimf_keychar;
               if (pkev->keycode)
-                return IIIMF_STATUS_SUCCESS;
-
+                {
+                  pkev->modifier = modifier (e->state);
+                  pkev->time_stamp = e->time;
+                  return IIIMF_STATUS_SUCCESS;
+                }
               break;
             }
         }
@@ -845,8 +881,11 @@
               pkev->keycode = kana_shift_keymapTable[i].iiimf_keycode;
               pkev->keychar = kana_shift_keymapTable[i].iiimf_keychar;
               if (pkev->keycode)
-                return IIIMF_STATUS_SUCCESS;
-
+                {
+                  pkev->modifier = modifier (e->state);
+                  pkev->time_stamp = e->time;
+                  return IIIMF_STATUS_SUCCESS;
+                }
               break;
             }
         }
@@ -860,8 +899,11 @@
               pkev->keycode = kana_normal_keymapTable[i].iiimf_keycode;
               pkev->keychar = kana_normal_keymapTable[i].iiimf_keychar;
               if (pkev->keycode)
-                return IIIMF_STATUS_SUCCESS;
-
+                {
+                  pkev->modifier = modifier (e->state);
+                  pkev->time_stamp = e->time;
+                  return IIIMF_STATUS_SUCCESS;
+                }
               break;
             }
         }
@@ -873,8 +915,11 @@
               pkev->keycode = kana_normal_keymapTable[i].iiimf_keycode;
               pkev->keychar = kana_normal_keymapTable[i].iiimf_keychar;
               if (pkev->keycode)
-                return IIIMF_STATUS_SUCCESS;
-
+                {
+                  pkev->modifier = modifier (e->state);
+                  pkev->time_stamp = e->time;
+                  return IIIMF_STATUS_SUCCESS;
+                }
               break;
             }
         }
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimgcf/gtkimcontextiiim.c ../iiimf-sdk-12.1.0.2059/iiimgcf/gtkimcontextiiim.c
--- ../iiimf-sdk-12.1.0.2059-orig/iiimgcf/gtkimcontextiiim.c	2005-09-22 13:23:47 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimgcf/gtkimcontextiiim.c	2005-09-22 13:29:46 +0900
@@ -1829,12 +1829,15 @@
   IIIMCF_context c;
   GtkIMContextIIIM *context_iiim = GTK_IM_CONTEXT_IIIM (context);
   GtkWidget *cand_win = iiim_get_candidate_window (context_iiim);
+  guint has_focus;
 
   DEBUG_DO (g_message ("im_context_iiim_focus_in"));
 
   get_im_settings_property ();
 
-  if (!context_iiim->has_focus)
+  has_focus = context_iiim->has_focus;
+
+  if (!has_focus)
     {
       c = iiim_get_session_context (context_iiim);
       if (!c)
@@ -1845,19 +1848,22 @@
       im_context_switcher_set_focus (context_iiim);
       /* tell switcher that I'm the current client */
       im_context_switcher_set_focus (context_iiim);
+    }
 
-      st = iiimcf_create_seticfocus_event (&ev);
-      if (st != IIIMF_STATUS_SUCCESS)
-	return;
+  st = iiimcf_create_seticfocus_event (&ev);
+  if (st != IIIMF_STATUS_SUCCESS)
+    return;
 
-      if (forward_event (context_iiim, ev, NULL))
-	iiim_event_dispatch (context_iiim);
+  if (forward_event (context_iiim, ev, NULL))
+    iiim_event_dispatch (context_iiim);
 
-      if (cand_win && !GTK_WIDGET_VISIBLE (cand_win))
-	{
-	  gtk_widget_show (cand_win);
-	}
+  if (cand_win && !GTK_WIDGET_VISIBLE (cand_win))
+    {
+      gtk_widget_show (cand_win);
+    }
 
+  if (!has_focus)
+    {
       if (im_info_switcher_active (context_iiim->iiim_info))
 	{
 	  IIIMCF_language *lang_list;
@@ -1900,14 +1906,14 @@
 	{
 	  gtk_widget_hide (cand_win);
 	}
+    }
 
-      st = iiimcf_create_unseticfocus_event (&ev);
-      if (st != IIIMF_STATUS_SUCCESS)
-	return;
+  st = iiimcf_create_unseticfocus_event (&ev);
+  if (st != IIIMF_STATUS_SUCCESS)
+    return;
 
-      if (forward_event (context_iiim, ev, NULL))
-	iiim_event_dispatch (context_iiim);
-    }
+  if (forward_event (context_iiim, ev, NULL))
+    iiim_event_dispatch (context_iiim);
   return;
 }
 
@@ -2504,6 +2510,7 @@
   if (iiim)
     iiimcf_destroy_handle (iiim);
   iiimcf_finalize ();
+  iiim_is_initialized = FALSE;
   while (status_windows)
     status_window_free (status_windows->data);
 
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimgcf/imaux.c ../iiimf-sdk-12.1.0.2059/iiimgcf/imaux.c
--- ../iiimf-sdk-12.1.0.2059-orig/iiimgcf/imaux.c	2005-09-22 13:23:47 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimgcf/imaux.c	2005-09-22 13:29:46 +0900
@@ -787,6 +787,9 @@
   aux_ic_info_t *aux_ic;
   IIIMCF_handle handle;
 
+  if (!context_iiim || !context_iiim->context)
+    return NULL;
+
   if (auxname == NULL)
     {
       st = iiimcf_get_aux_event_value (ev, &auxname,
@@ -1094,16 +1097,17 @@
     aux_ic_info_t *prev_aux_ic;
 
     aux = aux_get (context_iiim, NULL, (IIIMP_card16 *)"");
-    if (!aux)
-	return;
-
-    for (aux_im = aux->im_list; aux_im; aux_im = aux_im->next) {
-	if (aux_im->ae->if_version >= AUX_IF_VERSION_2
-	    && aux_im->ae->dir.method->destroy_ic != NULL) {
-	    aux->im = aux_im;
-	    aux_im->ae->dir.method->destroy_ic(aux);
+    if (aux)
+      {
+	for (aux_im = aux->im_list; aux_im; aux_im = aux_im->next) {
+	  if (aux_im->ae->if_version >= AUX_IF_VERSION_2
+	      && aux_im->ae->dir.method->destroy_ic != NULL)
+	    {
+	      aux->im = aux_im;
+	      aux_im->ae->dir.method->destroy_ic(aux);
+	    }
 	}
-    }
+      }
 
     prev_aux_ic = NULL;
     for (aux_ic = aux_ic_info; aux_ic != NULL; aux_ic = aux_ic->next) {
@@ -1299,7 +1303,10 @@
 {
   GtkIMContextIIIM *context = (GtkIMContextIIIM*)aux->ic;
   GdkScreen *screen = im_info_get_screen (context->iiim_info);
-  return GDK_SCREEN_XDISPLAY (screen);
+  if (screen != NULL)
+    return GDK_SCREEN_XDISPLAY (screen);
+  else
+    return NULL;
 }
 
 
@@ -1324,7 +1331,7 @@
   GtkIMContextIIIM *context = (GtkIMContextIIIM*)aux->ic;
 
   point->x = context->cursor.x;
-  point->y = context->cursor.y;
+  point->y = context->cursor.y + context->cursor.height;
   return point;
 }
 
@@ -1527,7 +1534,10 @@
 {
   GtkIMContextIIIM *context = (GtkIMContextIIIM*)aux->ic;
   GdkScreen *screen = im_info_get_screen (context->iiim_info);
-  return gdk_screen_get_number (screen);
+  if (screen != NULL)
+    return gdk_screen_get_number (screen);
+  else
+    return -1;
 }
 
 static int
@@ -1545,6 +1555,12 @@
   int new_y;
 
   display = service_display (aux);
+  if (display == NULL)
+    {
+      point->x = -1;
+      point->y = -1;
+      return -1;
+    }
   screen_number = service_screen_number (aux);
   root_window = RootWindow (display, screen_number);
   service_point (aux, point);
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimsf/htt.xml.conf ../iiimf-sdk-12.1.0.2059/iiimsf/htt.xml.conf
--- ../iiimf-sdk-12.1.0.2059-orig/iiimsf/htt.xml.conf	2005-09-22 13:20:24 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimsf/htt.xml.conf	2005-09-22 13:29:46 +0900
@@ -13,7 +13,7 @@
 	    <port>9010</port>
 	</listen>
 	<listen type="unix">
-	    <file>foo</file>
+	    <file>/var/run/iiim/.iiimp-unix/9010</file>
 	</listen>
 	-->
 	<!--
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/IIIMP_hotkey_profile.cpp ../iiimf-sdk-12.1.0.2059/iiimsf/src/IIIMP_hotkey_profile.cpp
--- ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/IIIMP_hotkey_profile.cpp	2005-09-22 13:20:23 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimsf/src/IIIMP_hotkey_profile.cpp	2005-09-22 13:30:11 +0900
@@ -58,7 +58,7 @@
     default_hotkey_lang_switch_id = m->hotkey_id + 1;
     sflag = 0;
     aflag = 1;
-    hks.push_back(IMKeySpec(IM_VK_M, 0, IM_CTRL_MASK|IM_SHIFT_MASK, 0));
+    hks.push_back(IMKeySpec(IM_VK_SPACE, 0, IM_CTRL_MASK|IM_ALT_MASK, 0));
     hks.push_back(IMKeySpec(IM_VK_SPACE, 0, IM_CTRL_MASK|IM_SHIFT_MASK, 0));
     label = "LE SWITCH";
 
@@ -93,8 +93,14 @@
 	} else
 #endif /* HOTKEYTEST */
 	    {
-		hks.push_back(IMKeySpec(IM_VK_SPACE, 0, IM_CTRL_MASK, 0));
-		hks.push_back(IMKeySpec(IM_VK_SPACE, 0, IM_SHIFT_MASK, 0));
+#define	JUSTSYSTEM_TRIGGER_SHIFT_SPACE "JUSTSYSTEM_TRIGGER_SHIFT_SPACE"
+		char *esss = getenv(JUSTSYSTEM_TRIGGER_SHIFT_SPACE);
+		if(esss && !strncasecmp(esss, "t", 1)) {
+		    hks.push_back(IMKeySpec(IM_VK_SPACE, 0, IM_SHIFT_MASK, 0));
+		} else {
+		    hks.push_back(IMKeySpec(IM_VK_SPACE, 0, IM_CTRL_MASK, 0));
+		}
+		hks.push_back(IMKeySpec(IM_VK_KANJI, 0, 0, 0));
 	    }
 	label = "TRIGGER KEYS";
     }
@@ -106,7 +112,7 @@
     sflag = 0;
     aflag = 1;
     hks.push_back(IMKeySpec(IM_VK_BACK_SLASH, 0, IM_CTRL_MASK, 0));
-    hks.push_back(IMKeySpec(IM_VK_CLOSE_BRACKET, 0, IM_CTRL_MASK, 0));
+/*  hks.push_back(IMKeySpec(IM_VK_CLOSE_BRACKET, 0, IM_CTRL_MASK, 0)); */
     hks.push_back(IMKeySpec(IM_VK_COMMA, 0, IM_ALT_MASK, 0));
     label = "SUPER HELP";
 
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/IMAuth.cpp ../iiimf-sdk-12.1.0.2059/iiimsf/src/IMAuth.cpp
--- ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/IMAuth.cpp	2005-09-22 13:20:23 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimsf/src/IMAuth.cpp	2005-09-22 13:29:46 +0900
@@ -739,6 +739,11 @@
 
     at = get_access_type(fd);
     if (at != IMAuth::DENY) {
+	if (auth_type == IMAuth::UNIX) {
+	    LOG_INFO("Allow the connection by PF_UNIX.");
+	    return 1;
+	}
+
 	if (permit_access(command_name, fd)) {
 	    if (at != IMAuth::UNKNOWN) {
 		LOG_INFO("Allow the connection from %s.", from_hostname);
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/IMSvr.cpp ../iiimf-sdk-12.1.0.2059/iiimsf/src/IMSvr.cpp
--- ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/IMSvr.cpp	2005-09-22 13:20:23 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimsf/src/IMSvr.cpp	2005-09-22 13:30:11 +0900
@@ -60,7 +60,14 @@
     const char *keys
 )
 {
-    IMKeyParser *pkp = new IMKeyParser(keys);
+    IMKeyParser *pkp;
+#define	JUSTSYSTEM_TRIGGER_SHIFT_SPACE "JUSTSYSTEM_TRIGGER_SHIFT_SPACE"
+    char *esss = getenv(JUSTSYSTEM_TRIGGER_SHIFT_SPACE);
+    if(esss && !strncasecmp(esss, "t", 1)) {
+		pkp = new IMKeyParser("Zenkaku_Hankaku,<shift>space");
+    } else {
+		pkp = new IMKeyParser("Zenkaku_Hankaku,<ctrl>space");
+    }
 
     if (!pkp)
         return false;
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/basictype.hh ../iiimf-sdk-12.1.0.2059/iiimsf/src/basictype.hh
--- ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/basictype.hh	2005-09-22 13:20:23 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimsf/src/basictype.hh	2005-09-22 13:29:46 +0900
@@ -86,7 +86,7 @@
     static bool lt(const char_type& c1, const char_type& c2)
     { return (c1 < c2); }
     static int compare(const char_type* s1, const char_type* s2, size_t n)
-    { return memcmp(s1, s2, n); }
+    { return memcmp(s1, s2, n * sizeof(char_type)); }
     static size_t length(const char_type* s)
     { 
 	int i;
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/keysyms.h ../iiimf-sdk-12.1.0.2059/iiimsf/src/keysyms.h
--- ../iiimf-sdk-12.1.0.2059-orig/iiimsf/src/keysyms.h	2005-09-22 13:20:23 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimsf/src/keysyms.h	2005-09-22 13:30:11 +0900
@@ -69,7 +69,7 @@
   {"plus", 47, 0x0209 /* 0x002b */},
   {"colon", 48, 0x0201 /* 0x003a */},
   {"asterisk", 48, 0x0097 /* 0x002a */},
-  {"Zenkaku_Hankaku", 49, 0xff2a},
+  {"Zenkaku_Hankaku", 49, 0x0019 /* 0xff2a */},
   {"Kanji", 49, 0x0019 /* 0xff21 */},
   {"bracketright", 51, 0x005d},
   {"braceright", 51, 0x007d},
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimxcf/xiiimp.so/iiimp/KeyMap.c ../iiimf-sdk-12.1.0.2059/iiimxcf/xiiimp.so/iiimp/KeyMap.c
--- ../iiimf-sdk-12.1.0.2059-orig/iiimxcf/xiiimp.so/iiimp/KeyMap.c	2005-09-22 13:20:31 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimxcf/xiiimp.so/iiimp/KeyMap.c	2005-09-22 13:29:46 +0900
@@ -83,7 +83,6 @@
 static int KanaMode = -1;
 static Atom kanawin_atom = 0;
 static Atom kanaflag_atom = 0;
-static Window kana_w = 0;
 #endif /* linux */
 
 /* extract the definitions below from java header files */
@@ -616,11 +615,13 @@
     { java_awt_event_KeyEvent_VK_F9, XK_F9, FALSE },
     { java_awt_event_KeyEvent_VK_F10, XK_F10, FALSE },
     /* next two entries for for 4173902 */
+#if defined (sun)
     { java_awt_event_KeyEvent_VK_F11, SunXK_F36, FALSE },
     { java_awt_event_KeyEvent_VK_F12, SunXK_F37, FALSE },
+#else
     { java_awt_event_KeyEvent_VK_F11, XK_F11, FALSE },
     { java_awt_event_KeyEvent_VK_F12, XK_F12, FALSE },
-
+#endif
     { java_awt_event_KeyEvent_VK_DELETE, XK_Delete, TRUE },
     { java_awt_event_KeyEvent_VK_DELETE, XK_KP_Delete, TRUE },
 
@@ -831,6 +832,21 @@
 					kana_shift_keymapTable[i].keycode);
 #endif
     }
+#endif /* linux */
+}
+
+#ifdef linux
+void
+CreateKanaWindow(Display *disp)
+{
+    Window kana_w;
+
+    /* hack for Linux XFree86 */
+    if (getenv("HTT_GENERATES_KANAKEY")){
+	KanaMode = 0;
+    } else {
+	return;
+    }
 
     if (!kanawin_atom) {
 	kanawin_atom = XInternAtom(disp, "HTT_KANA_WIN", False);
@@ -844,32 +860,59 @@
 			0, 0, 1, 1, 0, 0, 0);
 
 	XSetSelectionOwner(disp, kanawin_atom, kana_w, CurrentTime);
-
-	XChangeProperty(disp, kana_w, kanaflag_atom, XA_WINDOW, 32,
-			PropModeReplace,
-			(unsigned char*) &KanaMode,
-			sizeof(KanaMode));
+	if (kana_w == XGetSelectionOwner(disp, kanawin_atom)) {
+	    XChangeProperty(disp, kana_w, kanaflag_atom, XA_WINDOW, 32,
+			    PropModeReplace,
+			    (unsigned char*) &KanaMode,
+			    sizeof(KanaMode));
+	}
     }
-
-    GetKanaFlag(disp);
+}
 #endif /* linux */
+
+#ifdef linux
+static int
+IgnoreError(Display *disp, XErrorEvent *event)
+{
+    return 0;
 }
+#endif /* linux */
 
 #ifdef linux
 static void
 GetKanaFlag(Display *disp)
 {
+    int           (*oldhandler)(Display *, XErrorEvent *) = NULL;
+    Window          kana_w;
     Atom            ret_type;
     int             ret_format;
     unsigned long   nitems, bytes_left;
     unsigned long  *tmp = 0;
 
+    if (!kanawin_atom) {
+        return;
+    }
+
+    XSync(disp, False);
+    oldhandler = XSetErrorHandler(IgnoreError);
+
+    kana_w = XGetSelectionOwner(disp, kanawin_atom);
+    if (!kana_w) {
+        KanaMode = 0;
+        XSync(disp, False);
+        XSetErrorHandler(oldhandler);
+        return;
+    }
+
     XGetWindowProperty(disp, kana_w,
-			kanaflag_atom, 0, 4, False, XA_WINDOW,
-			&ret_type, &ret_format,
-			&nitems, &bytes_left, (unsigned char **) &tmp);
+		       kanaflag_atom, 0, 4, False, XA_WINDOW,
+		       &ret_type, &ret_format,
+		       &nitems, &bytes_left, (unsigned char **) &tmp);
+
+    XSync(disp, False);
+    XSetErrorHandler(oldhandler);
 
-    if (ret_type == XA_WINDOW) {
+    if ((tmp != NULL) && (ret_type == XA_WINDOW)) {
        KanaMode = *tmp;
     }
     if (tmp) {
@@ -934,7 +977,8 @@
 	      default:
 	 	if (keysym < 254) {
 		  if (modifiers & java_awt_event_InputEvent_SHIFT_MASK) {
-		    if (isalpha(keysym + 'A' - 1)) {
+		    if (isalpha(keysym + 'A' - 1)
+			&& isupper(keysym + 'A' - 1)) {
 		      keysym += ('A' - 1);
 		    }
 		  } else {
@@ -1104,7 +1148,13 @@
 
 #ifdef	linux
     if (KanaMode != -1){
+  	GetKanaFlag(ev->display);
+    }	 
+
+    if (KanaMode != -1){
 	if (keysym == XK_Hiragana_Katakana){
+	   int    (*oldhandler)(Display *, XErrorEvent *) = NULL;
+	   Window   kana_w;
 #ifdef	DEBUG
 	    printf("Kanakey is pressed\n");
 #endif
@@ -1119,19 +1169,26 @@
 		printf("	on\n");
 #endif
 	    }
-	    XChangeProperty(ev->display, kana_w, kanaflag_atom,
-			    XA_WINDOW, 32,
-			    PropModeReplace,
-			    (unsigned char*) &KanaMode,
-			    sizeof(KanaMode));
+
+	    XSync(ev->display, False);
+	    oldhandler = XSetErrorHandler(IgnoreError);
+
+	    kana_w = XGetSelectionOwner(ev->display, kanawin_atom);
+	    if (kana_w) {
+		XChangeProperty(ev->display, kana_w, kanaflag_atom,
+				XA_WINDOW, 32,
+				PropModeReplace,
+				(unsigned char*) &KanaMode,
+				sizeof(KanaMode));
+	    }
+
+	    XSync(ev->display, False);
+	    XSetErrorHandler(oldhandler);
+
 	    return False;
 	}
     }
 
-    if (KanaMode != -1){
-  	GetKanaFlag(ev->display);
-    }	 
-
     if (KanaMode == 1) {
 	if (ev->state & ShiftMask) {
 	    /* check kana_shift_keymapTable first is ShiftMask */
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimxcf/xiiimp.so/iiimp/KeyMap.h ../iiimf-sdk-12.1.0.2059/iiimxcf/xiiimp.so/iiimp/KeyMap.h
--- ../iiimf-sdk-12.1.0.2059-orig/iiimxcf/xiiimp.so/iiimp/KeyMap.h	2005-09-22 13:20:31 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimxcf/xiiimp.so/iiimp/KeyMap.h	2005-09-22 13:29:46 +0900
@@ -69,6 +69,12 @@
     IIIMCF_keyevent *pkev
 );
 
+#ifdef	linux
+extern void CreateKanaWindow(
+    Display *disp
+);
+#endif	/* linux */
+
 #endif /* !_KEYMAP_H */
 
 /* Local Variables: */
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimxcf/xiiimp.so/iiimp/iiimcfFun.c ../iiimf-sdk-12.1.0.2059/iiimxcf/xiiimp.so/iiimp/iiimcfFun.c
--- ../iiimf-sdk-12.1.0.2059-orig/iiimxcf/xiiimp.so/iiimp/iiimcfFun.c	2005-09-22 13:20:31 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimxcf/xiiimp.so/iiimp/iiimcfFun.c	2005-09-22 13:29:46 +0900
@@ -768,7 +768,14 @@
     }
 
     st = iiimcf_create_context(XIM_IIIMP(im, handle), attr, pc);
-    XIM_IIIMP(im, inited) = True;
+    if (XIM_IIIMP(im, inited) == False) {
+#ifdef	linux
+	if (0 == strcmp(XIM_IIIMP(im, client_type), "Htt XIM Server")) {
+	    CreateKanaWindow(im->core.display);
+	}
+#endif	/* linux */
+	XIM_IIIMP(im, inited) = True;
+    }
 
 exit:
     iiimcf_destroy_attr(attr);
diff -urN ../iiimf-sdk-12.1.0.2059-orig/iiimxcf/xiiimp.so/iiimp/iiimpUtil.c ../iiimf-sdk-12.1.0.2059/iiimxcf/xiiimp.so/iiimp/iiimpUtil.c
--- ../iiimf-sdk-12.1.0.2059-orig/iiimxcf/xiiimp.so/iiimp/iiimpUtil.c	2005-09-22 13:20:31 +0900
+++ ../iiimf-sdk-12.1.0.2059/iiimxcf/xiiimp.so/iiimp/iiimpUtil.c	2005-09-22 13:30:11 +0900
@@ -267,7 +267,7 @@
     if (ev->xkey.keycode == XIM_COMPOSE_KEYCODE) return False;
     if (!XKeyEvent_To_IIIMCF_keyevent((XKeyEvent*)ev, &kev)) return False;
 
-    for (i = 0; i < num; i++) {
+    for (i = 0; i < num; i++, pkev++) {
 	if ((kev.keycode == pkev->keycode)
 	    /* && (kev.keychar == pkev->keychar )*/
 	    && (kev.modifier == pkev->modifier)) {
diff -urN ../iiimf-sdk-12.1.0.2059-orig/lib/EIMIL/EIMIL.c ../iiimf-sdk-12.1.0.2059/lib/EIMIL/EIMIL.c
--- ../iiimf-sdk-12.1.0.2059-orig/lib/EIMIL/EIMIL.c	2005-09-22 13:20:52 +0900
+++ ../iiimf-sdk-12.1.0.2059/lib/EIMIL/EIMIL.c	2005-09-22 13:29:46 +0900
@@ -3664,10 +3664,10 @@
 
     EIMIL_free_engine(pengines);
 
-
-    /* EIMIL_destruct_symbol(pEIMIL_t_sym); */
-    /* EIMIL_destruct_symbol(pEIMIL_feedback_sym); */
-    /* EIMIL_destruct_symbol(pEIMIL_candidates_sym); */
+    pEIMIL_nil_sym = NULL;
+    pEIMIL_t_sym = NULL;
+    pEIMIL_feedback_sym = NULL;
+    pEIMIL_candidates_sym = NULL;
     pdic_internal = NULL;
     EIMIL_inited = 0;
 
diff -urN ../iiimf-sdk-12.1.0.2059-orig/lib/iiimcf/clientenv.c ../iiimf-sdk-12.1.0.2059/lib/iiimcf/clientenv.c
--- ../iiimf-sdk-12.1.0.2059-orig/lib/iiimcf/clientenv.c	2005-09-22 13:20:54 +0900
+++ ../iiimf-sdk-12.1.0.2059/lib/iiimcf/clientenv.c	2005-09-22 13:29:46 +0900
@@ -794,7 +794,7 @@
         /* 
          * first try to /var/run/iiim/.iiimp-unix-${USERNAME}/
          */
-        node_len = strlen(penv->user_name) + 17;
+        node_len = strlen(penv->user_name) + strlen(SOCKETDIR "/.iiimp-unix-");
         tmp_node = malloc(node_len + 1);
         if (!tmp_node) goto memory_error;
         snprintf(tmp_node, node_len + 1, SOCKETDIR "/.iiimp-unix-%s", penv->user_name);
diff -urN ../iiimf-sdk-12.1.0.2059-orig/lib/iiimcf/context.c ../iiimf-sdk-12.1.0.2059/lib/iiimcf/context.c
--- ../iiimf-sdk-12.1.0.2059-orig/lib/iiimcf/context.c	2005-09-22 13:20:54 +0900
+++ ../iiimf-sdk-12.1.0.2059/lib/iiimcf/context.c	2005-09-22 13:29:46 +0900
@@ -590,6 +590,11 @@
 {
     IIIMCF_context_rec *pc = (IIIMCF_context_rec*) context;
 
+    if (!pc) {
+	*pic_id = -1;
+	return IIIMF_STATUS_IC_INVALID;
+    }
+
     *pic_id = pc->ic_id;
 
     if (pc->ic_id < 0)
diff -urN ../iiimf-sdk-12.1.0.2059-orig/lib/iiimcf/iiimcf.c ../iiimf-sdk-12.1.0.2059/lib/iiimcf/iiimcf.c
--- ../iiimf-sdk-12.1.0.2059-orig/lib/iiimcf/iiimcf.c	2005-09-22 13:20:54 +0900
+++ ../iiimf-sdk-12.1.0.2059/lib/iiimcf/iiimcf.c	2005-09-22 13:29:46 +0900
@@ -24,7 +24,7 @@
 #include <EIMIL.h>
 
 #define IIIMCF_DEFAULT_IC_HASH_TABLE_SIZE 17
-#define IIIMCF_DEFAULT_TIMEOUT 2000
+#define IIIMCF_DEFAULT_TIMEOUT 10000
 
 static void free_object_descriptor(
     IIIMCF_object_descriptor *pod,
@@ -760,17 +760,17 @@
 			initialization & finalization
 ********************************************************************************/
 
+static int iiimcf_inited = 0;
+
 IIIMF_status
 iiimcf_initialize(
     IIIMCF_attr attr
 )
 {
-    static int inited;
-
-    if (inited) return IIIMF_STATUS_SUCCESS;
+    if (iiimcf_inited) return IIIMF_STATUS_SUCCESS;
     if (!EIMIL_initialize())
 	return IIIMF_STATUS_FAIL;
-    inited = 1;
+    iiimcf_inited = 1;
 
     return IIIMF_STATUS_SUCCESS;
 }
@@ -779,6 +779,7 @@
 iiimcf_finalize()
 {
     EIMIL_finalize();
+    iiimcf_inited = 0;
     return IIIMF_STATUS_SUCCESS;
 }
 
@@ -919,6 +920,11 @@
 {
     IIIMCF_handle_rec *ph = (IIIMCF_handle_rec*) handle;
 
+    if (!ph) {
+	*pim_id = -1;
+	return IIIMF_STATUS_IM_INVALID;
+    }
+
     *pim_id = ph->im_id;
 
     if (ph->im_id < 0)
EOT

-/etc/iiim/
/etc/iiim/
/etc/rc.d/init.d/IIim
/etc/rc.d/rc3.d/S50IIim
/pkg/iiimf-sdk/
/usr/lib/gtk-*/*/immodules/im-iiim.*
/usr/lib/im
/usr/lib/libiiimcf.*
/usr/lib/libiiimp.*
/usr/share/locale/*/LC_MESSAGES/iiimgcf.mo
