--- plt_old/src/mzscheme/src/read.c 2004-04-19 14:48:08.000000000 +0900 +++ plt/src/mzscheme/src/read.c 2004-08-28 07:40:49.365542400 +0900 @@ -1517,7 +1517,8 @@ char *buf, *oldbuf, onstack[32]; int i, j, n, n1, ch; long size = 31, oldsize; - Scheme_Object *result; + Scheme_Object *result; + int prev_mbcs = 0; /* Previously appeared MBCS leady byte. */ i = 0; buf = onstack; @@ -1534,7 +1535,15 @@ scheme_read_err(port, stxsrc, line, col, pos, SPAN(port, pos), SCHEME_SPECIAL, indentation, "read: found non-character while reading a string"); return NULL; - } + } + + /* [BEGIN] Added to support MBCS. */ + if (prev_mbcs) { + prev_mbcs = 0; + goto NORMAL_CHAR; + } + /* [END] */ + /* Note: errors will tend to leave junk on the port, with an open \". */ /* Escape-sequence handling by Eli Barzilay. */ if (ch == '\\') { @@ -1628,6 +1637,13 @@ } } } + + /* --- [BEGIN] Added to support MBCS. */ + if (isleadbyte(ch)) { + prev_mbcs = 1; + } +NORMAL_CHAR: + /* -- [END] */ if (i >= size) { oldsize = size; @@ -1636,7 +1652,8 @@ size *= 2; buf = (char *)scheme_malloc_atomic(size + 1); memcpy(buf, oldbuf, oldsize); - } + } + buf[i++] = ch; } buf[i] = '\0';