static FILE *log = NULL;
#endif
+struct dictionary *dictionary = NULL;
+
static inline void cmdwin_clear_no_repaint()
{
memset(cmdwin.buf, 0, cmdwin.blen);
log_msg("%s\n", cmdwin.buf);
cmdwin_clear();
}
+
+int kana_to_english(char *kana, char *english, char *kanji)
+{
+ int i;
+
+ for (i = 0; dictionary[i].kana != NULL; i++) {
+ if (!strcmp(kana, dictionary[i].kana)) {
+ if (english) {
+ strcpy(english, dictionary[i].english);
+ }
+ if (kanji) {
+ strcpy(kanji, dictionary[i].kanji);
+ }
+ return true;
+ }
+ }
+
+ if (english) {
+ strcpy(english, kana);
+ }
+ if (kanji) {
+ strcpy(kanji, kana);
+ }
+ return false;
+}
+
+int alpha_to_kana(int key, char *buf)
+{
+ const static struct {
+ const char *alpha;
+ const char *kana;
+ } kana[] = {
+ { "ayb", "¥Ó¥ã" },
+ { "iyb", "¥Ó¥£" },
+ { "uyb", "¥Ó¥å" },
+ { "eyb", "¥Ó¥§" },
+ { "oyb", "¥Ó¥ç" },
+ { "ayc", "¥Á¥ã" },
+ { "iyc", "¥Á¥£" },
+ { "uyc", "¥Á¥å" },
+ { "eyc", "¥Á¥§" },
+ { "oyc", "¥Á¥ç" },
+ { "ayd", "¥Â¥ã" },
+ { "iyd", "¥Â¥£" },
+ { "uyd", "¥Â¥å" },
+ { "eyd", "¥Â¥§" },
+ { "oyd", "¥Â¥ç" },
+ { "ayf", "¥Õ¥ã" },
+ { "iyf", "¥Õ¥£" },
+ { "uyf", "¥Õ¥å" },
+ { "eyf", "¥Õ¥§" },
+ { "oyf", "¥Õ¥ç" },
+ { "ayg", "¥®¥ã" },
+ { "iyg", "¥®¥£" },
+ { "uyg", "¥®¥å" },
+ { "eyg", "¥®¥§" },
+ { "oyg", "¥®¥ç" },
+ { "ayh", "¥Ò¥ã" },
+ { "iyh", "¥Ò¥£" },
+ { "uyh", "¥Ò¥å" },
+ { "eyh", "¥Ò¥§" },
+ { "oyh", "¥Ò¥ç" },
+ { "ayj", "¥¸¥ã" },
+ { "iyj", "¥¸¥£" },
+ { "uyj", "¥¸¥å" },
+ { "eyj", "¥¸¥§" },
+ { "oyj", "¥¸¥ç" },
+ { "ayk", "¥¥ã" },
+ { "iyk", "¥¥£" },
+ { "uyk", "¥¥å" },
+ { "eyk", "¥¥§" },
+ { "oyk", "¥¥ç" },
+ { "aym", "¥ß¥ã" },
+ { "iym", "¥ß¥£" },
+ { "uym", "¥ß¥å" },
+ { "eym", "¥ß¥§" },
+ { "oym", "¥ß¥ç" },
+ { "ayn", "¥Ë¥ã" },
+ { "iyn", "¥Ë¥£" },
+ { "uyn", "¥Ë¥å" },
+ { "eyn", "¥Ë¥§" },
+ { "oyn", "¥Ë¥ç" },
+ { "ayp", "¥Ô¥ã" },
+ { "iyp", "¥Ô¥£" },
+ { "uyp", "¥Ô¥å" },
+ { "eyp", "¥Ô¥§" },
+ { "oyp", "¥Ô¥ç" },
+ { "ayq", "¥¯¥¡" },
+ { "iyq", "¥¯¥£" },
+ { "uyq", "¥¯¥¥" },
+ { "eyq", "¥¯¥§" },
+ { "oyq", "¥¯¥©" },
+ { "ayr", "¥ê¥ã" },
+ { "iyr", "¥ê¥£" },
+ { "uyr", "¥ê¥å" },
+ { "eyr", "¥ê¥§" },
+ { "oyr", "¥ê¥ç" },
+ { "ays", "¥·¥ã" },
+ { "iys", "¥·¥£" },
+ { "uys", "¥·¥å" },
+ { "eys", "¥·¥§" },
+ { "oys", "¥·¥ç" },
+ { "ayt", "¥Á¥ã" },
+ { "iyt", "¥Á¥£" },
+ { "uyt", "¥Á¥å" },
+ { "eyt", "¥Á¥§" },
+ { "oyt", "¥Á¥ç" },
+ { "ayv", "¥ô¥ã" },
+ { "iyv", "¥ô¥£" },
+ { "uyv", "¥ô¥å" },
+ { "eyv", "¥ô¥§" },
+ { "oyv", "¥ô¥ç" },
+ { "ayx", "¥ã" },
+ { "iyx", "¥£" },
+ { "uyx", "¥å" },
+ { "eyx", "¥§" },
+ { "oyx", "¥ç" },
+ { "ayz", "¥¸¥ã" },
+ { "iyz", "¥¸¥£" },
+ { "uyz", "¥¸¥å" },
+ { "eyz", "¥¸¥§" },
+ { "oyz", "¥¸¥ç" },
+ { "ahc", "¥Á¥ã" },
+ { "ihc", "¥Á" },
+ { "uhc", "¥Á¥å" },
+ { "ehc", "¥Á¥§" },
+ { "ohc", "¥Á¥ç" },
+ { "ahd", "¥Ç¥ã" },
+ { "ihd", "¥Ç¥£" },
+ { "uhd", "¥Ç¥å" },
+ { "ehd", "¥Ç¥§" },
+ { "ohd", "¥Ç¥ç" },
+ { "ahp", "¥Õ¥¡" },
+ { "ihp", "¥Õ¥£" },
+ { "uhp", "¥Õ" },
+ { "ehp", "¥Õ¥§" },
+ { "ohp", "¥Õ¥©" },
+ { "ahs", "¥·¥ã" },
+ { "ihs", "¥·" },
+ { "uhs", "¥·¥å" },
+ { "ehs", "¥·¥§" },
+ { "ohs", "¥·¥ç" },
+ { "aht", "¥Æ¥ã" },
+ { "iht", "¥Æ¥£" },
+ { "uht", "¥Æ¥å" },
+ { "eht", "¥Æ¥§" },
+ { "oht", "¥Æ¥ç" },
+ { "ahw", "¥¦¥¡" },
+ { "ihw", "¥¦¥£" },
+ { "uhw", "¥¦" },
+ { "ehw", "¥¦¥§" },
+ { "ohw", "¥¦¥©" },
+ { "ast", "¥Ä¥¡" },
+ { "ist", "¥Ä¥£" },
+ { "ust", "¥Ä" },
+ { "est", "¥Ä¥§" },
+ { "ost", "¥Ä¥©" },
+ { "ab", "¥Ð" },
+ { "ib", "¥Ó" },
+ { "ub", "¥Ö" },
+ { "eb", "¥Ù" },
+ { "ob", "¥Ü" },
+ { "ac", "¥«" },
+ { "ic", "¥" },
+ { "uc", "¥¯" },
+ { "ec", "¥±" },
+ { "oc", "¥³" },
+ { "ad", "¥À" },
+ { "id", "¥Â" },
+ { "ud", "¥Å" },
+ { "ed", "¥Ç" },
+ { "od", "¥É" },
+ { "af", "¥Õ¥¡" },
+ { "if", "¥Õ¥£" },
+ { "uf", "¥Õ" },
+ { "ef", "¥Õ¥§" },
+ { "of", "¥Õ¥©" },
+ { "ag", "¥¬" },
+ { "ig", "¥®" },
+ { "ug", "¥°" },
+ { "eg", "¥²" },
+ { "og", "¥´" },
+ { "ah", "¥Ï" },
+ { "ih", "¥Ò" },
+ { "uh", "¥Õ" },
+ { "eh", "¥Ø" },
+ { "oh", "¥Û" },
+ { "aj", "¥¸¥ã" },
+ { "ij", "¥¸" },
+ { "uj", "¥¸¥å" },
+ { "ej", "¥¸¥§" },
+ { "oj", "¥¸¥ç" },
+ { "ak", "¥«" },
+ { "ik", "¥" },
+ { "uk", "¥¯" },
+ { "ek", "¥±" },
+ { "ok", "¥³" },
+ { "al", "¥¡" },
+ { "il", "¥£" },
+ { "ul", "¥¥" },
+ { "el", "¥§" },
+ { "ol", "¥©" },
+ { "am", "¥Þ" },
+ { "im", "¥ß" },
+ { "um", "¥à" },
+ { "em", "¥á" },
+ { "om", "¥â" },
+ { "an", "¥Ê" },
+ { "in", "¥Ë" },
+ { "un", "¥Ì" },
+ { "en", "¥Í" },
+ { "on", "¥Î" },
+ { "nn", "¥ó" },
+ { "ap", "¥Ñ" },
+ { "ip", "¥Ô" },
+ { "up", "¥×" },
+ { "ep", "¥Ú" },
+ { "op", "¥Ý" },
+ { "aq", "¥¯¥¡" },
+ { "iq", "¥¯¥£" },
+ { "uq", "¥¯¥¥" },
+ { "eq", "¥¯¥§" },
+ { "oq", "¥¯¥©" },
+ { "ar", "¥é" },
+ { "ir", "¥ê" },
+ { "ur", "¥ë" },
+ { "er", "¥ì" },
+ { "or", "¥í" },
+ { "as", "¥µ" },
+ { "is", "¥·" },
+ { "us", "¥¹" },
+ { "es", "¥»" },
+ { "os", "¥½" },
+ { "at", "¥¿" },
+ { "it", "¥Á" },
+ { "ut", "¥Ä" },
+ { "et", "¥Æ" },
+ { "ot", "¥È" },
+ { "av", "¥ô¥¡" },
+ { "iv", "¥ô¥£" },
+ { "uv", "¥ô" },
+ { "ev", "¥ô¥§" },
+ { "ov", "¥ô¥©" },
+ { "aw", "¥ï" },
+ { "iw", "¥ð" },
+ { "uw", "¥¦" },
+ { "ew", "¥¦¥§" },
+ { "ow", "¥ò" },
+ { "ax", "¥¡" },
+ { "ix", "¥£" },
+ { "ux", "¥¥" },
+ { "ex", "¥§" },
+ { "ox", "¥©" },
+ { "ay", "¥ä" },
+ { "iy", "¥¤" },
+ { "uy", "¥æ" },
+ { "ey", "¥¤¥§" },
+ { "oy", "¥è" },
+ { "az", "¥¶" },
+ { "iz", "¥¸" },
+ { "uz", "¥º" },
+ { "ez", "¥¼" },
+ { "oz", "¥¾" },
+ { "'n", "¥ó" },
+ { "a", "¥¢" },
+ { "i", "¥¤" },
+ { "u", "¥¦" },
+ { "e", "¥¨" },
+ { "o", "¥ª" },
+ { " ", "¡¡" },
+ { "!", "¡ª" },
+ { "\"", "¡É" },
+ { "#", "¡ô" },
+ { "$", "¡ð" },
+ { "%", "¡ó" },
+ { "&", "¡õ" },
+ { "'", "¡Ç" },
+ { "(", "¡Ê" },
+ { ")", "¡Ë" },
+ { "*", "¡ö" },
+ { "+", "¡Ü" },
+ { ",", "¡¢" },
+ { "-", "¡¼" },
+ { ".", "¡£" },
+ { "/", "¡¦" },
+ { "0", "£°" },
+ { "1", "£±" },
+ { "2", "£²" },
+ { "3", "£³" },
+ { "4", "£´" },
+ { "5", "£µ" },
+ { "6", "£¶" },
+ { "7", "£·" },
+ { "8", "£¸" },
+ { "9", "£¹" },
+ { ":", "¡§" },
+ { ";", "¡¨" },
+ { "<", "¡ã" },
+ { "=", "¡á" },
+ { ">", "¡ä" },
+ { "?", "¡©" },
+ { "@", "¡÷" },
+ { "[", "¡Ö" },
+ { "\\", "¡ï" },
+ { "]", "¡×" },
+ { "^", "¡°" },
+ { "_", "¡²" },
+ { "`", "¡Æ" },
+ { "{", "¡Ð" },
+ { "|", "¡Ã" },
+ { "}", "¡Ñ" },
+ { "~", "¡Á" },
+ { NULL, NULL }
+ };
+ static int roman = true;
+ static char roman_buf[] = { "\0\0\0\0\0" };
+ int i;
+ int len;
+ int n;
+ int soku;
+
+ if (key == 0) { /* Clear roman buffer */
+ memset(roman_buf, 0, sizeof(roman_buf));
+ return 0;
+ }
+ if (key == -1) { /* Roman mode off */
+ roman = false;
+ return 0;
+ }
+ if (key == '\t') { /* Toggle roman mode */
+ roman = !roman;
+ memset(roman_buf, 0, sizeof(roman_buf));
+ return 0;
+ }
+
+ if (!roman || (key & 0x80) || !isprint(key)) {
+ memset(roman_buf, 0, sizeof(roman_buf));
+ return 0;
+ }
+
+ memmove(roman_buf + 1, roman_buf, sizeof (roman_buf) - 1);
+ roman_buf[0] = key;
+
+ for (i = 0; kana[i].alpha != NULL; i++) {
+ len = strlen(kana[i].alpha);
+
+ if (!strncasecmp(roman_buf, kana[i].alpha, len)) {
+ soku = (roman_buf[len - 1] == roman_buf[len]);
+
+ if(soku)
+ n = (roman_buf[len + 1] == 'n');
+ else
+ n = (roman_buf[len] == 'n');
+
+ sprintf (buf, "%.*s%s%s%s", len + n + soku, "\b\b\b\b\b", (n ? "¥ó": ""), (soku ? "¥Ã": ""), kana[i].kana);
+
+ memset(roman_buf, 0, sizeof (roman_buf));
+ return strlen(buf);
+ }
+ }
+ return 0;
+}