--- emacs-21.3-emcws-20030507/src/canna.c	Mon Dec  8 03:22:46 2003
+++ emacs-21.3/src/canna.c	Mon Dec  8 03:47:51 2003
@@ -154,6 +154,11 @@
 #include "coding.h"
 #endif
 
+#define CANNA3_7
+#ifdef CANNA3_7
+# define CANNA_NEW_WCHAR_AWARE
+#endif
+
 #ifdef CANNA2
 #define IROHA_BC
 #include "canna/jrkanji.h"
@@ -162,7 +167,9 @@
 #include "iroha/jrkanji.h"
 #include "iroha/RK.h"
 #endif /* !CANNA2 */
+#ifndef CANNA3_7
 extern char *jrKanjiError;
+#endif
 
 #define KEYTOSTRSIZE 2048
 static unsigned char buf[KEYTOSTRSIZE];
@@ -332,6 +339,18 @@
   return Qnil;
 }
 
+/*
+ * Mule-canna.c of XEmacs-21.4.14 reads
+ * "For whatever reason, calling Fding directly from libCanna loses".
+ * In any case following glue is needed for new jrBeepFunc prototype.
+ */
+static int
+call_Fding (void)
+{
+  Fding (Qnil);
+  return 0;
+}
+
 DEFUN ("canna-initialize", Fcanna_initialize, Scanna_initialize, 0, 3, 0,
 "Initialize ``canna'', which is a kana-to-kanji converter for GNU Emacs.\n\
 The first arg specifies if inserting space character between BUNSETSU when\n\
@@ -410,16 +429,18 @@
     return Fcons(Qnil, val);
   }
   else {
-    extern (*jrBeepFunc)();
-    Lisp_Object Fding(), CANNA_mode_keys();
+#ifndef CANNA_JR_BEEP_FUNC_DECLARED
+    extern int (*jrBeepFunc) (void);
+#endif
+    Lisp_Object CANNA_mode_keys();
 
-    jrBeepFunc = Fding;
+    jrBeepFunc = call_Fding;
 
 #ifdef KC_SETAPPNAME
 #ifndef CANNA_MULE
-    wcKanjiControl(0, KC_SETAPPNAME, "nemacs");
+    jrKanjiControl(0, KC_SETAPPNAME, "nemacs");
 #else /* CANNA_MULE */
-    wcKanjiControl(0, KC_SETAPPNAME, "mule");
+    jrKanjiControl(0, KC_SETAPPNAME, "mule");
 #endif /* CANNA_MULE */
 #endif /* KC_SETAPPNAME */
 
