-/* CANNA interface
+/* CANNA interface -*- coding: euc-jp -*-
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995 Sun Microsystems, Inc.
/* Synched up with: Mule 2.3. Not in FSF. */
-/* #### The comments in this file are mostly in EUC-formatted Japanese.
- It would be ***soooo*** much nicer if someone could translate
- them ... */
+/* Japanese comments were translated 2000-12-06 by Stephen Turnbull
+ <stephen@xemacs.org>. I haven't verified that the Japanese comments
+ were correct. YMMV, NO WARRANTY, not even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. (^^;;; as the
+ Japanese say. */
/*
#endif /* !CANNA2 */
extern char *jrKanjiError;
+/* #### is this global really necessary? */
#define KEYTOSTRSIZE 2048
-static unsigned char buf[KEYTOSTRSIZE];
+static unsigned char key_buffer[KEYTOSTRSIZE];
static char **warning;
static int canna_empty_info, canna_through_info;
static Lisp_Object Vcanna_kakutei_yomi;
static Lisp_Object Vcanna_kakutei_romaji;
static Lisp_Object Vcanna_henkan_string;
-static int canna_henkan_length;
-static int canna_henkan_revPos;
-static int canna_henkan_revLen;
+static Fixnum canna_henkan_length;
+static Fixnum canna_henkan_revPos;
+static Fixnum canna_henkan_revLen;
static Lisp_Object Vcanna_ichiran_string;
-static int canna_ichiran_length;
-static int canna_ichiran_revPos;
-static int canna_ichiran_revLen;
+static Fixnum canna_ichiran_length;
+static Fixnum canna_ichiran_revPos;
+static Fixnum canna_ichiran_revLen;
static Lisp_Object Vcanna_mode_string;
static int IRCP_context;
static Lisp_Object storeResults (unsigned char *, int, jrKanjiStatus *);
static Lisp_Object kanjiYomiList (int, int);
+static Lisp_Object CANNA_mode_keys (void);
#ifdef CANNA_MULE
static void m2c (unsigned char *, int, unsigned char *);
static Lisp_Object mule_make_string (unsigned char *, int);
static int mule_strlen (unsigned char *, int);
-static void count_char (unsigned char *,int, int, int, int *, int *, int *);
+static void count_char (unsigned char *,int, int, int, Fixnum *, Fixnum *, Fixnum *);
#define make_string mule_make_string
#endif
int len;
CHECK_CHAR_COERCE_INT (ch);
- len = jrKanjiString (0, XCHAR (ch), buf, KEYTOSTRSIZE, &ks);
- return storeResults (buf, len, &ks);
+ len = jrKanjiString (0, XCHAR (ch), key_buffer, KEYTOSTRSIZE, &ks);
+ return storeResults (key_buffer, len, &ks);
}
static Lisp_Object
}
else
{
- /* ³ÎÄꤷ¤¿Ê¸»úÎó */
+ /* ³ÎÄꤷ¤¿Ê¸»úÎó (the confirmed string) */
Vcanna_kakutei_string = make_string (buf, len);
val = make_int (len);
- /* ³ÎÄꤷ¤¿Ê¸»úÎó¤ÎÆɤߤξðÊó... */
+ /* ³ÎÄꤷ¤¿Ê¸»úÎó¤ÎÆɤߤξðÊó...
+ (info about the reading of the confirmed string) */
Vcanna_kakutei_yomi = Vcanna_kakutei_romaji = Qnil;
if (ks->info & KanjiYomiInfo)
{
{
int yomilen2;
- Vcanna_kakutei_yomi = make_string (p, yomilen); /* ÆÉ¤ß */
+ Vcanna_kakutei_yomi = make_string (p, yomilen); /* Æɤß
+ (reading) */
p += yomilen + 1;
yomilen2 = strlen (p);
if (len + yomilen + yomilen2 + 2 < KEYTOSTRSIZE)
{
- Vcanna_kakutei_romaji = make_string (p, yomilen2); /* ¥í¡¼¥Þ»ú */
+ Vcanna_kakutei_romaji = make_string (p, yomilen2);
+ /* ¥í¡¼¥Þ»ú (romanization) */
}
}
}
- /* ¸õÊäɽ¼¨¤Îʸ»úÎó¤Ç¤¹¡£*/
+ /* ¸õÊäɽ¼¨¤Îʸ»úÎó¤Ç¤¹¡£
+ (string for displaying candidate translations) */
Vcanna_henkan_string = Qnil;
if (ks->length >= 0)
{
{
canna_henkan_length = mule_strlen (ks->echoStr,ks->length);
canna_henkan_revPos = mule_strlen (ks->echoStr,ks->revPos);
- canna_henkan_revLen = mule_strlen (ks->echoStr+ks->revPos,ks->revLen);
+ canna_henkan_revLen = mule_strlen (ks->echoStr+ks->revPos,
+ ks->revLen);
}
else
{
#endif /* CANNA_MULE */
}
- /* °ìÍ÷¤Î¾ðÊó */
+ /* °ìÍ÷¤Î¾ðÊó (information about the echo area menu) */
Vcanna_ichiran_string = Qnil;
if (ks->info & KanjiGLineInfo && ks->gline.length >= 0)
{
- Vcanna_ichiran_string = make_string (ks->gline.line, ks->gline.length);
+ Vcanna_ichiran_string = make_string (ks->gline.line,
+ ks->gline.length);
#ifndef CANNA_MULE
canna_ichiran_length = ks->gline.length;
canna_ichiran_revPos = ks->gline.revPos;
canna_ichiran_revLen = ks->gline.revLen;
#else /* CANNA_MULE */
count_char (ks->gline.line, ks->gline.length,
- ks->gline.revPos, ks->gline.revLen, &canna_ichiran_length,
+ ks->gline.revPos, ks->gline.revLen,
+ &canna_ichiran_length,
&canna_ichiran_revPos, &canna_ichiran_revLen);
#endif /* CANNA_MULE */
}
- /* ¥â¡¼¥É¤Î¾ðÊó */
+ /* ¥â¡¼¥É¤Î¾ðÊó (mode information) */
Vcanna_mode_string = Qnil;
if (ks->info & KanjiModeInfo)
{
Vcanna_mode_string = make_string (ks->mode, strlen (ks->mode));
}
- /* ¤½¤Î¾¤Î¾ðÊó */
+ /* ¤½¤Î¾¤Î¾ðÊó (other information) */
canna_empty_info = (ks->info & KanjiEmptyInfo) ? 1 : 0;
canna_through_info = (ks->info & KanjiThroughInfo) ? 1 : 0;
}
*/
(num))
{
- int kugiri; /* ʸÀá¶èÀÚ¤ê¤ò¤¹¤ë¤«¡© */
+ int kugiri; /* ʸÀá¶èÀÚ¤ê¤ò¤¹¤ë¤«¡© (display clause separator?) */
kugiri = NILP (num) ? 0 : 1;
}
/* For whatever reason, calling Fding directly from libCanna loses */
-static void call_Fding()
+static void
+call_Fding (void)
{
- extern Lisp_Object Fding();
-
Fding (Qnil, Qnil, Qnil);
}
int res;
unsigned char **p, **q;
- int kugiri; /* ʸÀá¶èÀÚ¤ê¤ò¤¹¤ë¤«¡© */
+ int kugiri; /* ʸÀá¶èÀÚ¤ê¤ò¤¹¤ë¤«¡© (display clause separator?) */
IRCP_context = -1;
{
val = Fcons (make_string ((unsigned char*) jrKanjiError,
strlen (jrKanjiError)), val);
- /* ¥¤¥Ë¥·¥ã¥é¥¤¥º¤Ç¼ºÇÔ¤·¤¿¾ì¹ç¡£ */
+ /* ¥¤¥Ë¥·¥ã¥é¥¤¥º¤Ç¼ºÇÔ¤·¤¿¾ì¹ç¡£ (on initialization failure) */
return Fcons (Qnil, val);
}
else
{
- extern void (*jrBeepFunc)();
- Lisp_Object CANNA_mode_keys ();
+ extern void (*jrBeepFunc) (void);
jrBeepFunc = call_Fding;
#ifndef CANNA_MULE
jrKanjiControl (0, KC_INHIBITHANKAKUKANA, (char *) 1);
#else
- /* mule ¤À¤Ã¤¿¤éȾ³Ñ¥«¥¿¥«¥Ê¤â»È¤¨¤ë */
+ /* mule ¤À¤Ã¤¿¤éȾ³Ñ¥«¥¿¥«¥Ê¤â»È¤¨¤ë
+ (Mule can use half-width katakana) */
if (canna_inhibit_hankakukana)
jrKanjiControl (0, KC_INHIBITHANKAKUKANA, (char *) 1);
#endif
- jrKanjiControl (0, KC_YOMIINFO, (char *) 2); /* ¢¨£²: ¥í¡¼¥Þ»ú¤Þ¤ÇÊÖ¤¹ */
+ jrKanjiControl (0, KC_YOMIINFO, (char *) 2); /* ¢¨£²: ¥í¡¼¥Þ»ú¤Þ¤ÇÊÖ¤¹
+ (*2: return to
+ romanized form) */
val = Fcons (Qnil, val);
return Fcons (CANNA_mode_keys (), val);
}
#endif
CHECK_STRING (str);
- ksv.buffer = (unsigned char *) buf;
+ ksv.buffer = (unsigned char *) key_buffer;
ksv.bytes_buffer = KEYTOSTRSIZE;
#ifndef CANNA_MULE
ks.echoStr = XSTRING_DATA (str);
#endif /* CANNA_MULE */
ksv.ks = &ks;
len = jrKanjiControl (0, KC_DEFINEKANJI, (char *)&ksv);
- val = storeResults (buf, ksv.val, ksv.ks);
+ val = storeResults (key_buffer, ksv.val, ksv.ks);
return val;
}
CHECK_INT (num);
- ksv.buffer = (unsigned char *) buf;
+ ksv.buffer = (unsigned char *) key_buffer;
ksv.bytes_buffer = KEYTOSTRSIZE;
ksv.ks = &ks;
ksv.val = XINT (num);
jrKanjiControl (0, KC_CHANGEMODE, (char *)&ksv);
- val = storeResults (buf, ksv.val, ksv.ks);
+ val = storeResults (key_buffer, ksv.val, ksv.ks);
return val;
}
-Lisp_Object
+static Lisp_Object
CANNA_mode_keys (void)
{
#define CANNAWORKBUFSIZE 32
CHECK_STRING (yomi);
#ifndef CANNA_MULE
- strncpy (buf, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi));
+ strncpy (key_buffer, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi));
ks.length = XSTRING_LENGTH (yomi);
- buf[ks.length] = '\0';
+ key_buffer[ks.length] = '\0';
#else /* CANNA_MULE */
- m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), buf);
- ks.length = strlen (buf);
+ m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), key_buffer);
+ ks.length = strlen (key_buffer);
#endif /* CANNA_MULE */
if (NILP (roma))
CHECK_STRING (roma);
#ifndef CANNA_MULE
- strncpy (buf + XSTRING_LENGTH (yomi) + 1, XSTRING_DATA (roma),
+ strncpy (key_buffer + XSTRING_LENGTH (yomi) + 1, XSTRING_DATA (roma),
XSTRING_LENGTH (roma));
- buf[XSTRING_LENGTH (yomi) + 1 + XSTRING_LENGTH (roma)] = '\0';
- ks.mode = (unsigned char *)(buf + XSTRING_LENGTH (yomi) + 1);
+ key_buffer[XSTRING_LENGTH (yomi) + 1 + XSTRING_LENGTH (roma)] = '\0';
+ ks.mode = (unsigned char *)(key_buffer + XSTRING_LENGTH (yomi) + 1);
#else /* CANNA_MULE */
- ks.mode = (unsigned char *)(buf + ks.length + 1);
+ ks.mode = (unsigned char *)(key_buffer + ks.length + 1);
m2c (XSTRING_DATA (roma), XSTRING_LENGTH (roma), ks.mode);
#endif /* CANNA_MULE */
}
- ks.echoStr = (unsigned char *) buf;
- ksv.buffer = (unsigned char *) buf; /* ÊÖÃÍÍÑ */
+ ks.echoStr = (unsigned char *) key_buffer;
+ ksv.buffer = (unsigned char *) key_buffer; /* ÊÖÃÍÍÑ (return value) */
ksv.bytes_buffer = KEYTOSTRSIZE;
ksv.ks = &ks;
jrKanjiControl (0, KC_STOREYOMI, (char *)&ksv);
- return storeResults (buf, ksv.val, ksv.ks);
+ return storeResults (key_buffer, ksv.val, ksv.ks);
}
DEFUN ("canna-do-function", Fcanna_do_function, 1, 2, 0, /*
if (NILP (ch))
{
- *buf = '@';
+ *key_buffer = '@';
}
else
{
CHECK_CHAR (ch);
- *buf = XCHAR (ch);
+ *key_buffer = XCHAR (ch);
}
- ksv.buffer = (unsigned char *) buf;
+ ksv.buffer = (unsigned char *) key_buffer;
ksv.bytes_buffer = KEYTOSTRSIZE;
ksv.ks = &ks;
ksv.val = XINT (num);
jrKanjiControl (0, KC_DO, (char *) &ksv);
- val = storeResults (buf, ksv.val, ksv.ks);
+ val = storeResults (key_buffer, ksv.val, ksv.ks);
return val;
}
CHECK_STRING (str);
#ifndef CANNA_MULE
- strncpy (buf, XSTRING_DATA (str), XSTRING_LENGTH (str));
- buf[XSTRING_LENGTH (str)] = '\0';
+ strncpy (key_buffer, XSTRING_DATA (str), XSTRING_LENGTH (str));
+ key_buffer[XSTRING_LENGTH (str)] = '\0';
#else /* CANNA_MULE */
- m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), buf);
+ m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), key_buffer);
#endif /* CANNA_MULE */
- p = (unsigned char**) buf;
+ p = (unsigned char**) key_buffer;
n = jrKanjiControl (0, KC_PARSE, (char *) &p);
val = Qnil;
while (n > 0)
{
return Qnil;
}
- RkEndBun (IRCP_context, 1); /* ³Ø½¬¤Ï¤¤¤Ä¤Ç¤â¹Ô¤Ã¤ÆÎɤ¤¤â¤Î¤Ê¤Î¤«¡© */
+ RkEndBun (IRCP_context, 1); /* ³Ø½¬¤Ï¤¤¤Ä¤Ç¤â¹Ô¤Ã¤ÆÎɤ¤¤â¤Î¤Ê¤Î¤«¡©
+ (is it OK to invoke learning function
+ at arbitrary times?) */
return Qt;
}
/* variables below this line is constants of Canna */
-static int canna_mode_AlphaMode;
-static int canna_mode_EmptyMode;
-static int canna_mode_KigoMode;
-static int canna_mode_YomiMode;
-static int canna_mode_JishuMode;
-static int canna_mode_TankouhoMode;
-static int canna_mode_IchiranMode;
-static int canna_mode_YesNoMode;
-static int canna_mode_OnOffMode;
+static Fixnum canna_mode_AlphaMode;
+static Fixnum canna_mode_EmptyMode;
+static Fixnum canna_mode_KigoMode;
+static Fixnum canna_mode_YomiMode;
+static Fixnum canna_mode_JishuMode;
+static Fixnum canna_mode_TankouhoMode;
+static Fixnum canna_mode_IchiranMode;
+static Fixnum canna_mode_YesNoMode;
+static Fixnum canna_mode_OnOffMode;
#ifdef CANNA_MODE_AdjustBunsetsuMode
-static int canna_mode_AdjustBunsetsuMode;
+static Fixnum canna_mode_AdjustBunsetsuMode;
#endif
#ifdef CANNA_MODE_ChikujiYomiMode
-static int canna_mode_ChikujiYomiMode;
-static int canna_mode_ChikujiTanMode;
+static Fixnum canna_mode_ChikujiYomiMode;
+static Fixnum canna_mode_ChikujiTanMode;
#endif
-static int canna_mode_HenkanMode;
+static Fixnum canna_mode_HenkanMode;
#ifdef CANNA_MODE_HenkanNyuryokuMode
-static int canna_mode_HenkanNyuryokuMode;
+static Fixnum canna_mode_HenkanNyuryokuMode;
#endif
#ifdef CANNA_MODE_ZenHiraHenkanMode
-static int canna_mode_ZenHiraHenkanMode;
+static Fixnum canna_mode_ZenHiraHenkanMode;
#ifdef CANNA_MODE_HanHiraHenkanMode
-static int canna_mode_HanHiraHenkanMode;
+static Fixnum canna_mode_HanHiraHenkanMode;
#endif
-static int canna_mode_ZenKataHenkanMode;
-static int canna_mode_HanKataHenkanMode;
-static int canna_mode_ZenAlphaHenkanMode;
-static int canna_mode_HanAlphaHenkanMode;
+static Fixnum canna_mode_ZenKataHenkanMode;
+static Fixnum canna_mode_HanKataHenkanMode;
+static Fixnum canna_mode_ZenAlphaHenkanMode;
+static Fixnum canna_mode_HanAlphaHenkanMode;
#endif
-static int canna_mode_ZenHiraKakuteiMode;
+static Fixnum canna_mode_ZenHiraKakuteiMode;
#ifdef CANNA_MODE_HanHiraKakuteiMode
-static int canna_mode_HanHiraKakuteiMode;
+static Fixnum canna_mode_HanHiraKakuteiMode;
#endif
-static int canna_mode_ZenKataKakuteiMode;
-static int canna_mode_HanKataKakuteiMode;
-static int canna_mode_ZenAlphaKakuteiMode;
-static int canna_mode_HanAlphaKakuteiMode;
-static int canna_mode_HexMode;
-static int canna_mode_BushuMode;
-static int canna_mode_ExtendMode;
-static int canna_mode_RussianMode;
-static int canna_mode_GreekMode;
-static int canna_mode_LineMode;
-static int canna_mode_ChangingServerMode;
-static int canna_mode_HenkanMethodMode;
-static int canna_mode_DeleteDicMode;
-static int canna_mode_TourokuMode;
-static int canna_mode_TourokuEmptyMode;
-static int canna_mode_TourokuHinshiMode;
-static int canna_mode_TourokuDicMode;
-static int canna_mode_QuotedInsertMode;
-static int canna_mode_BubunMuhenkanMode;
-static int canna_mode_MountDicMode;
-
-static int canna_fn_SelfInsert;
-static int canna_fn_FunctionalInsert;
-static int canna_fn_QuotedInsert;
-static int canna_fn_JapaneseMode;
-static int canna_fn_AlphaMode;
-static int canna_fn_HenkanNyuryokuMode;
-static int canna_fn_Forward;
-static int canna_fn_Backward;
-static int canna_fn_Next;
-static int canna_fn_Prev;
-static int canna_fn_BeginningOfLine;
-static int canna_fn_EndOfLine;
-static int canna_fn_DeleteNext;
-static int canna_fn_DeletePrevious;
-static int canna_fn_KillToEndOfLine;
-static int canna_fn_Henkan;
-static int canna_fn_Kakutei;
-static int canna_fn_Extend;
-static int canna_fn_Shrink;
+static Fixnum canna_mode_ZenKataKakuteiMode;
+static Fixnum canna_mode_HanKataKakuteiMode;
+static Fixnum canna_mode_ZenAlphaKakuteiMode;
+static Fixnum canna_mode_HanAlphaKakuteiMode;
+static Fixnum canna_mode_HexMode;
+static Fixnum canna_mode_BushuMode;
+static Fixnum canna_mode_ExtendMode;
+static Fixnum canna_mode_RussianMode;
+static Fixnum canna_mode_GreekMode;
+static Fixnum canna_mode_LineMode;
+static Fixnum canna_mode_ChangingServerMode;
+static Fixnum canna_mode_HenkanMethodMode;
+static Fixnum canna_mode_DeleteDicMode;
+static Fixnum canna_mode_TourokuMode;
+static Fixnum canna_mode_TourokuEmptyMode;
+static Fixnum canna_mode_TourokuHinshiMode;
+static Fixnum canna_mode_TourokuDicMode;
+static Fixnum canna_mode_QuotedInsertMode;
+static Fixnum canna_mode_BubunMuhenkanMode;
+static Fixnum canna_mode_MountDicMode;
+
+static Fixnum canna_fn_SelfInsert;
+static Fixnum canna_fn_FunctionalInsert;
+static Fixnum canna_fn_QuotedInsert;
+static Fixnum canna_fn_JapaneseMode;
+static Fixnum canna_fn_AlphaMode;
+static Fixnum canna_fn_HenkanNyuryokuMode;
+static Fixnum canna_fn_Forward;
+static Fixnum canna_fn_Backward;
+static Fixnum canna_fn_Next;
+static Fixnum canna_fn_Prev;
+static Fixnum canna_fn_BeginningOfLine;
+static Fixnum canna_fn_EndOfLine;
+static Fixnum canna_fn_DeleteNext;
+static Fixnum canna_fn_DeletePrevious;
+static Fixnum canna_fn_KillToEndOfLine;
+static Fixnum canna_fn_Henkan;
+static Fixnum canna_fn_Kakutei;
+static Fixnum canna_fn_Extend;
+static Fixnum canna_fn_Shrink;
#ifdef CANNA_FN_AdjustBunsetsu
-static int canna_fn_AdjustBunsetsu;
+static Fixnum canna_fn_AdjustBunsetsu;
#endif
-static int canna_fn_Quit;
-static int canna_fn_ConvertAsHex;
-static int canna_fn_ConvertAsBushu;
-static int canna_fn_KouhoIchiran;
-static int canna_fn_BubunMuhenkan;
-static int canna_fn_Zenkaku;
-static int canna_fn_Hankaku;
-static int canna_fn_ToUpper;
-static int canna_fn_Capitalize;
-static int canna_fn_ToLower;
-static int canna_fn_Hiragana;
-static int canna_fn_Katakana;
-static int canna_fn_Romaji;
+static Fixnum canna_fn_Quit;
+static Fixnum canna_fn_ConvertAsHex;
+static Fixnum canna_fn_ConvertAsBushu;
+static Fixnum canna_fn_KouhoIchiran;
+static Fixnum canna_fn_BubunMuhenkan;
+static Fixnum canna_fn_Zenkaku;
+static Fixnum canna_fn_Hankaku;
+static Fixnum canna_fn_ToUpper;
+static Fixnum canna_fn_Capitalize;
+static Fixnum canna_fn_ToLower;
+static Fixnum canna_fn_Hiragana;
+static Fixnum canna_fn_Katakana;
+static Fixnum canna_fn_Romaji;
#ifdef CANNA_FN_BaseHiragana
-static int canna_fn_BaseHiragana;
-static int canna_fn_BaseKatakana;
-static int canna_fn_BaseEisu;
-static int canna_fn_BaseZenkaku;
-static int canna_fn_BaseHankaku;
-static int canna_fn_BaseKana;
-static int canna_fn_BaseKakutei;
-static int canna_fn_BaseHenkan;
-static int canna_fn_BaseHiraKataToggle;
-static int canna_fn_BaseZenHanToggle;
-static int canna_fn_BaseKanaEisuToggle;
-static int canna_fn_BaseKakuteiHenkanToggle;
-static int canna_fn_BaseRotateForward;
-static int canna_fn_BaseRotateBackward;
+static Fixnum canna_fn_BaseHiragana;
+static Fixnum canna_fn_BaseKatakana;
+static Fixnum canna_fn_BaseEisu;
+static Fixnum canna_fn_BaseZenkaku;
+static Fixnum canna_fn_BaseHankaku;
+static Fixnum canna_fn_BaseKana;
+static Fixnum canna_fn_BaseKakutei;
+static Fixnum canna_fn_BaseHenkan;
+static Fixnum canna_fn_BaseHiraKataToggle;
+static Fixnum canna_fn_BaseZenHanToggle;
+static Fixnum canna_fn_BaseKanaEisuToggle;
+static Fixnum canna_fn_BaseKakuteiHenkanToggle;
+static Fixnum canna_fn_BaseRotateForward;
+static Fixnum canna_fn_BaseRotateBackward;
#endif
-static int canna_fn_ExtendMode;
-static int canna_fn_Touroku;
-static int canna_fn_HexMode;
-static int canna_fn_BushuMode;
-static int canna_fn_KigouMode;
+static Fixnum canna_fn_ExtendMode;
+static Fixnum canna_fn_Touroku;
+static Fixnum canna_fn_HexMode;
+static Fixnum canna_fn_BushuMode;
+static Fixnum canna_fn_KigouMode;
#ifdef CANNA_FN_Mark
-static int canna_fn_Mark;
+static Fixnum canna_fn_Mark;
#endif
#ifdef CANNA_FN_TemporalMode
-static int canna_fn_TemporalMode;
+static Fixnum canna_fn_TemporalMode;
#endif
-static int canna_key_Nfer;
-static int canna_key_Xfer;
-static int canna_key_Up;
-static int canna_key_Left;
-static int canna_key_Right;
-static int canna_key_Down;
-static int canna_key_Insert;
-static int canna_key_Rollup;
-static int canna_key_Rolldown;
-static int canna_key_Home;
-static int canna_key_Help;
-static int canna_key_KP_Key;
-static int canna_key_Shift_Nfer;
-static int canna_key_Shift_Xfer;
-static int canna_key_Shift_Up;
-static int canna_key_Shift_Left;
-static int canna_key_Shift_Right;
-static int canna_key_Shift_Down;
-static int canna_key_Cntrl_Nfer;
-static int canna_key_Cntrl_Xfer;
-static int canna_key_Cntrl_Up;
-static int canna_key_Cntrl_Left;
-static int canna_key_Cntrl_Right;
-static int canna_key_Cntrl_Down;
+static Fixnum canna_key_Nfer;
+static Fixnum canna_key_Xfer;
+static Fixnum canna_key_Up;
+static Fixnum canna_key_Left;
+static Fixnum canna_key_Right;
+static Fixnum canna_key_Down;
+static Fixnum canna_key_Insert;
+static Fixnum canna_key_Rollup;
+static Fixnum canna_key_Rolldown;
+static Fixnum canna_key_Home;
+static Fixnum canna_key_Help;
+static Fixnum canna_key_KP_Key;
+static Fixnum canna_key_Shift_Nfer;
+static Fixnum canna_key_Shift_Xfer;
+static Fixnum canna_key_Shift_Up;
+static Fixnum canna_key_Shift_Left;
+static Fixnum canna_key_Shift_Right;
+static Fixnum canna_key_Shift_Down;
+static Fixnum canna_key_Cntrl_Nfer;
+static Fixnum canna_key_Cntrl_Xfer;
+static Fixnum canna_key_Cntrl_Up;
+static Fixnum canna_key_Cntrl_Left;
+static Fixnum canna_key_Cntrl_Right;
+static Fixnum canna_key_Cntrl_Down;
Lisp_Object VCANNA; /* by MORIOKA Tomohiko <morioka@jaist.ac.jp>
1996/6/7 */
static void
c2mu (unsigned char *cp, int l, unsigned char *mp)
{
- unsigned char ch, *ep = cp+l;
+ unsigned char ch, *ep = cp+l;
+#ifdef UTF2000
+ Emchar chr;
+ while ((cp < ep) && (ch = *cp++))
+ {
+ if (ch == ISO_CODE_SS2)
+ {
+ chr = (*cp++) + MIN_CHAR_HALFWIDTH_KATAKANA - 0x20;
+ }
+ else if (ch == ISO_CODE_SS3)
+ {
+ ch = *cp++;
+ chr = MAKE_CHAR (Vcharset_japanese_jisx0212,
+ ch & 0x7f, (*cp++) & 0x7f);
+ }
+ else if (ch & 0x80)
+ {
+ chr = MAKE_CHAR (Vcharset_japanese_jisx0208,
+ ch & 0x7f, (*cp++) & 0x7f);
+ }
+ else
+ {
+ chr = ch;
+ }
+ if ( chr <= 0x7f )
+ {
+ *mp++ = chr;
+ }
+ else if ( chr <= 0x7ff )
+ {
+ *mp++ = (chr >> 6) | 0xc0;
+ *mp++ = (chr & 0x3f) | 0x80;
+ }
+ else if ( chr <= 0xffff )
+ {
+ *mp++ = (chr >> 12) | 0xe0;
+ *mp++ = ((chr >> 6) & 0x3f) | 0x80;
+ *mp++ = (chr & 0x3f) | 0x80;
+ }
+ else if ( chr <= 0x1fffff )
+ {
+ *mp++ = (chr >> 18) | 0xf0;
+ *mp++ = ((chr >> 12) & 0x3f) | 0x80;
+ *mp++ = ((chr >> 6) & 0x3f) | 0x80;
+ *mp++ = (chr & 0x3f) | 0x80;
+ }
+ else if ( chr <= 0x3ffffff )
+ {
+ *mp++ = (chr >> 24) | 0xf8;
+ *mp++ = ((chr >> 18) & 0x3f) | 0x80;
+ *mp++ = ((chr >> 12) & 0x3f) | 0x80;
+ *mp++ = ((chr >> 6) & 0x3f) | 0x80;
+ *mp++ = (chr & 0x3f) | 0x80;
+ }
+ else
+ {
+ *mp++ = (chr >> 30) | 0xfc;
+ *mp++ = ((chr >> 24) & 0x3f) | 0x80;
+ *mp++ = ((chr >> 18) & 0x3f) | 0x80;
+ *mp++ = ((chr >> 12) & 0x3f) | 0x80;
+ *mp++ = ((chr >> 6) & 0x3f) | 0x80;
+ *mp++ = (chr & 0x3f) | 0x80;
+ }
+ }
+#else
while ((cp < ep) && (ch = *cp))
{
if ((unsigned char) ch == ISO_CODE_SS2)
}
*mp++ = *cp++;
}
+#endif
*mp = 0;
}
m2c (unsigned char *mp, int l, unsigned char *cp)
{
unsigned char ch, *ep = mp + l;
+#ifdef UTF2000
+ unsigned char fb;
+ int len;
+ Emchar chr;
+#endif
while ((mp < ep) && (ch = *mp++))
{
+#ifdef UTF2000
+ if ( ch >= 0xfc )
+ {
+ chr = (ch & 0x01);
+ len = 5;
+ }
+ else if ( ch >= 0xf8 )
+ {
+ chr = ch & 0x03;
+ len = 4;
+ }
+ else if ( ch >= 0xf0 )
+ {
+ chr = ch & 0x07;
+ len = 3;
+ }
+ else if ( ch >= 0xe0 )
+ {
+ chr = ch & 0x0f;
+ len = 2;
+ }
+ else if ( ch >= 0xc0 )
+ {
+ chr = ch & 0x1f;
+ len = 1;
+ }
+ else
+ {
+ chr = ch;
+ len = 0;
+ }
+ for( ; len > 0; len-- )
+ {
+ ch = *mp++;
+ chr = ( chr << 6 ) | ( ch & 0x3f );
+ }
+ if ( chr <= 0x7f )
+ *cp++ = chr;
+ else if ( chr <= MAX_CHAR_HALFWIDTH_KATAKANA )
+ {
+ *cp++ = ISO_CODE_SS2;
+ *cp++ = ( chr & 0x7f ) | 0x80;
+ }
+ else
+ {
+ Lisp_Object charset;
+ int c1, c2;
+
+ BREAKUP_CHAR (chr, charset, c1, c2);
+ fb = XCHARSET_FINAL (charset);
+ switch (fb)
+ {
+ case 'D':
+ *cp++ = ISO_CODE_SS3;
+ default:
+ *cp++ = c1;
+ *cp++ = c2;
+ }
+ }
+#else
switch (ch)
{
case LEADING_BYTE_KATAKANA_JISX0201:
*cp++ = ch;
break;
}
+#endif
}
*cp = 0;
}
/* count number of characters */
static void
-count_char (unsigned char *p, int len, int pos, int rev, int *clen, int *cpos,
- int *crev)
+count_char (unsigned char *p, int len, int pos, int rev,
+ Fixnum *clen, Fixnum *cpos, Fixnum *crev)
{
unsigned char *q = p;