diff -ru nicolatter-1.7.7.orig/config.h nicolatter-1.7.7/config.h
--- nicolatter-1.7.7.orig/config.h	Sat May 17 16:22:20 2003
+++ nicolatter-1.7.7/config.h	Mon Dec  8 05:21:38 2003
@@ -21,6 +21,9 @@
 // Define if your system has a Canna conversion server
 #define USE_CANNA
 
+// Define if your system has a Canna 3.7 or later
+#define CANNA3_7
+
 // Define if your system has a Wnn4 compatible conversion server
 #define USE_WNN
 
diff -ru nicolatter-1.7.7.orig/configure nicolatter-1.7.7/configure
--- nicolatter-1.7.7.orig/configure	Sat Apr 19 12:39:45 2003
+++ nicolatter-1.7.7/configure	Mon Dec  8 05:15:35 2003
@@ -69,6 +69,10 @@
                    '/usr/local/include/canna/jrkanji.h',
                    '/usr/include/canna/jrkanji.h');
   
+  my @CANNA3_7_INC = ('/usr/local/canna/include/canna/sysdep.h',
+                   '/usr/local/include/canna/sysdep.h',
+                   '/usr/include/canna/sysdep.h');
+
   my @CANNA_LIB = ('/usr/local/canna/lib/libcanna16.a',
                    '/usr/local/lib/libcanna16.a',
                    '/usr/lib/libcanna16.a');
@@ -78,6 +82,18 @@
   if (!$canna_inc) { print "failed.\n"; exit 1; }
   print "found.\n";
 
+  # sysdep.hは内部ヘッダなので好ましい方法ではない。
+  # 本当はjrkanji.hでCANNAWC_DEFINEDが定義されているかどうかを調べるべき。
+  print "Looking for sysdep.h...";
+  $canna3_7_inc = look_for(@CANNA3_7_INC);
+  if (!$canna3_7_inc) {
+    print "not found. it seems to be old canna.\n";
+    $canna3_7 = 0
+  } else {
+    print "found.\n";
+    $canna3_7 = 1
+  }
+
   print "Looking for libcanna16...";
   $canna_lib = look_for(@CANNA_LIB);
   if (!$canna_lib) { print "failed.\n"; exit 1; }
@@ -152,6 +168,10 @@
     if (/#define USE_CANNA/ || /#undef USE_CANNA/) {
         if ($use_canna) { print OUT "#define USE_CANNA\n"; next; }
         else { print OUT "#undef USE_CANNA\n"; next; }
+    }
+    if (/#define CANNA3_7/ || /#undef CANNA3_7/) {
+        if ($canna3_7) { print OUT "#define CANNA3_7\n"; next; }
+        else { print OUT "#undef CANNA3_7\n"; next; }
     }
     elsif (/#define USE_WNN/ || /#undef USE_WNN/) {
         if ($use_wnn) { print OUT "#define USE_WNN\n"; next; }
diff -ru nicolatter-1.7.7.orig/nicolatter/CannaConv.cc nicolatter-1.7.7/nicolatter/CannaConv.cc
--- nicolatter-1.7.7.orig/nicolatter/CannaConv.cc	Sat May 10 15:23:36 2003
+++ nicolatter-1.7.7/nicolatter/CannaConv.cc	Mon Dec  8 05:00:45 2003
@@ -15,7 +15,14 @@
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
 
-#define _WCHAR_T
+#ifdef CANNA3_7
+# define CANNA_NEW_WCHAR_AWARE
+# ifdef WCHAR16
+#  define CANNA_WCHAR16
+# endif
+#else /* !CANNA3_7 */
+# define _WCHAR_T
+#endif /* !CANNA3_7 */
 #include <canna/jrkanji.h>
 
 #include "CannaConv.h"
@@ -202,7 +209,7 @@
             int clen = c16_mbtowc(&ch, p, MB_CUR_MAX);
             if (clen > 0) {
                 result += wcKanjiString(context, (int) ch,
-                                        (wchar_t*) wc_buf + result,
+                                        wc_buf + result,
                                         sizeof(wc_buf) / sizeof(CannaWChar),
                                         &status);
                 p += clen;
@@ -239,7 +246,7 @@
         if (!ch)
             return THROUGH;
         result = wcKanjiString(context, (int) ch,
-                (wchar_t*) wc_buf, sizeof(wc_buf) / sizeof(CannaWChar),
+                wc_buf, sizeof(wc_buf) / sizeof(CannaWChar),
                 &status);
     }
 
@@ -338,7 +345,7 @@
     buf[0] = 0;
 
     ksv.ks = &ks;
-    ksv.buffer = (wchar_t*) buf;
+    ksv.buffer = buf;
     ksv.n_buffer = sizeof(buf) / sizeof(CannaWChar);
 
     if (mode == MODE_OFF)
diff -ru nicolatter-1.7.7.orig/nicolatter/CannaConv.h nicolatter-1.7.7/nicolatter/CannaConv.h
--- nicolatter-1.7.7.orig/nicolatter/CannaConv.h	Sat Jun  8 17:32:22 2002
+++ nicolatter-1.7.7/nicolatter/CannaConv.h	Mon Dec  8 05:11:52 2003
@@ -8,15 +8,27 @@
 
 #include "conv.h"
 
+#include <inttypes.h> // uint16_t, uint32_t
 //////////////////////////////////////////////////////////////////////
 // CannaConv
 
+#ifdef CANNA3_7
+# ifndef CANNA_WCHAR
+#  define CANNA_WCHAR
+# endif
+# ifdef WCHAR16
+typedef uint16_t CannaWChar;
+# else
+typedef uint32_t CannaWChar;
+# endif
+#else /* !CANNA3_7 */
 #ifdef WCHAR16
 typedef unsigned short CannaWChar;
     // canna16はワイド文字として固定長EUCを仮定
 #else
 typedef wchar_t CannaWChar;
 #endif
+#endif /* !CANNA3_7 */
 
 #ifdef CANNA_WCHAR
   extern int c16_mbtowc(CannaWChar* wc, const char* p, size_t );
