133 lines
3.2 KiB
Plaintext
133 lines
3.2 KiB
Plaintext
--- ed.inputl.c
|
|
+++ ed.inputl.c 2010-12-09 10:01:31.000000000 +0000
|
|
@@ -683,7 +683,7 @@ GetNextCommand(KEYCMD *cmdnum, Char *ch)
|
|
#ifdef DSPMBYTE
|
|
_enable_mbdisp &&
|
|
#else
|
|
- MB_LEN_MAX == 1 &&
|
|
+ MB_CUR_MAX == 1 &&
|
|
#endif
|
|
!adrof(STRnokanji) && (*ch & META)) {
|
|
MetaNext = 0;
|
|
--- sh.c
|
|
+++ sh.c 2010-12-10 16:10:45.000000000 +0000
|
|
@@ -804,6 +804,18 @@ main(int argc, char **argv)
|
|
nt_autoset_dspmbyte();
|
|
#endif /* WINNT_NATIVE */
|
|
#endif
|
|
+#if defined(KANJI)
|
|
+#if defined(WIDE_STRINGS) && defined(HAVE_NL_LANGINFO) && defined(CODESET)
|
|
+#if defined(NLS) && defined(LC_CTYPE)
|
|
+ if (setlocale(LC_CTYPE, NULL) != NULL || getenv("LANG") != NULL)
|
|
+#else
|
|
+ if (getenv("LANG") != NULL)
|
|
+#endif
|
|
+ {
|
|
+ autoset_kanji();
|
|
+ }
|
|
+#endif
|
|
+#endif
|
|
|
|
fix_version(); /* publish the shell version */
|
|
|
|
--- sh.decls.h
|
|
+++ sh.decls.h 2010-12-07 10:09:50.000000000 +0000
|
|
@@ -392,6 +392,11 @@ extern Char *unparse (struct command *
|
|
extern void update_dspmbyte_vars (void);
|
|
extern void autoset_dspmbyte (const Char *);
|
|
#endif
|
|
+#if defined(KANJI)
|
|
+#if defined(WIDE_STRINGS) && defined(HAVE_NL_LANGINFO) && defined(CODESET)
|
|
+extern void autoset_kanji (void);
|
|
+#endif
|
|
+#endif
|
|
|
|
/*
|
|
* sh.time.c
|
|
--- sh.func.c
|
|
+++ sh.func.c 2010-12-09 09:15:06.000000000 +0000
|
|
@@ -1422,6 +1422,10 @@ dosetenv(Char **v, struct command *c)
|
|
# endif
|
|
# ifdef LC_CTYPE
|
|
(void) setlocale(LC_CTYPE, ""); /* for iscntrl */
|
|
+# if defined(KANJI) && defined(WIDE_STRINGS) && defined(HAVE_NL_LANGINFO) && defined(CODESET)
|
|
+ autoset_kanji();
|
|
+# endif
|
|
+
|
|
# endif /* LC_CTYPE */
|
|
# ifdef NLS_CATALOGS
|
|
# ifdef LC_MESSAGES
|
|
--- sh.set.c
|
|
+++ sh.set.c 2010-12-09 11:07:56.000000000 +0000
|
|
@@ -1098,7 +1098,8 @@ x:
|
|
}
|
|
}
|
|
|
|
-#if defined(KANJI) && defined(SHORT_STRINGS) && defined(DSPMBYTE)
|
|
+#if defined(KANJI)
|
|
+#if defined(SHORT_STRINGS) && defined(DSPMBYTE)
|
|
extern int dspmbyte_ls;
|
|
|
|
void
|
|
@@ -1273,4 +1274,26 @@ autoset_dspmbyte(const Char *pcp)
|
|
}
|
|
}
|
|
}
|
|
+#elif defined(WIDE_STRINGS) && defined(HAVE_NL_LANGINFO) && defined(CODESET)
|
|
+void
|
|
+autoset_kanji(void)
|
|
+{
|
|
+ char *codeset = nl_langinfo(CODESET);
|
|
+
|
|
+ if (*codeset == '\0') {
|
|
+ if (adrof(STRnokanji) == NULL)
|
|
+ setNS(STRnokanji);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (strcasestr(codeset, "SHIFT_JIS") == (char*)0) {
|
|
+ if (adrof(STRnokanji) == NULL)
|
|
+ setNS(STRnokanji);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (adrof(STRnokanji) != NULL)
|
|
+ unsetv(STRnokanji);
|
|
+}
|
|
+#endif
|
|
#endif
|
|
--- tc.str.c
|
|
+++ tc.str.c 2010-12-14 16:47:24.383925459 +0000
|
|
@@ -94,13 +94,31 @@ one_wctomb(char *s, Char wchar)
|
|
return len;
|
|
}
|
|
|
|
+#if defined(KANJI) && defined(WIDE_STRINGS) && defined(HAVE_NL_LANGINFO) && defined(CODESET)
|
|
+static mbstate_t mb_zero;
|
|
+#endif
|
|
+
|
|
int
|
|
rt_mbtowc(Char *pwc, const char *s, size_t n)
|
|
{
|
|
int ret;
|
|
char back[MB_LEN_MAX];
|
|
wchar_t tmp;
|
|
+#if defined(KANJI) && defined(WIDE_STRINGS) && defined(HAVE_NL_LANGINFO) && defined(CODESET)
|
|
+ static mbstate_t mb;
|
|
+
|
|
+ /*
|
|
+ * Workaround the Shift-JIS endcoding that translates unshifted 7 bit ASCII!
|
|
+ */
|
|
+ if (!adrof(STRnokanji) && n && pwc && s && (*s == '\\' || *s == '~') &&
|
|
+ !memcmp(&mb, &mb_zero, sizeof(mb)))
|
|
+ {
|
|
+ *pwc = *s;
|
|
+ return 1;
|
|
+ }
|
|
+#else
|
|
mbstate_t mb;
|
|
+#endif
|
|
|
|
memset (&mb, 0, sizeof mb);
|
|
ret = mbrtowc(&tmp, s, n, &mb);
|