diff options
-rw-r--r-- | mbbsd/chat.c | 36 | ||||
-rw-r--r-- | mbbsd/io.c | 8 |
2 files changed, 37 insertions, 7 deletions
diff --git a/mbbsd/chat.c b/mbbsd/chat.c index 3872bc77..eee47b21 100644 --- a/mbbsd/chat.c +++ b/mbbsd/chat.c @@ -408,11 +408,27 @@ t_chat(void) continue; case KEY_LEFT: if (currchar) + { --currchar; +#ifdef DBCSAWARE_GETDATA + if(currchar > 0 && + ISDBCSAWARE() && + getDBCSstatus(inbuf, currchar) == DBCS_TRAILING) + currchar --; +#endif + } continue; case KEY_RIGHT: if (inbuf[currchar]) + { ++currchar; +#ifdef DBCSAWARE_GETDATA + if(inbuf[currchar] && + ISDBCSAWARE() && + getDBCSstatus(inbuf, currchar) == DBCS_TRAILING) + currchar++; +#endif + } continue; } @@ -461,9 +477,16 @@ t_chat(void) move(b_lines - 1, chatid_len); } else if (ch == Ctrl('H') || ch == '\177') { if (currchar) { - currchar--; + int dbcs_off = 1; +#ifdef DBCSAWARE_GETDATA + if (ISDBCSAWARE() && + getDBCSstatus(inbuf, currchar-1) == DBCS_TRAILING) + dbcs_off = 2; +#endif + currchar -= dbcs_off; inbuf[69] = '\0'; - memcpy(&inbuf[currchar], &inbuf[currchar + 1], 69 - currchar); + memcpy(&inbuf[currchar], &inbuf[currchar + dbcs_off], + 69 - currchar); move(b_lines - 1, currchar + chatid_len); clrtoeol(); outs(&inbuf[currchar]); @@ -478,8 +501,15 @@ t_chat(void) break; } else if (ch == Ctrl('D')) { if ((size_t)currchar < strlen(inbuf)) { + int dbcs_off = 1; +#ifdef DBCSAWARE_GETDATA + if (ISDBCSAWARE() && inbuf[currchar+1] && + getDBCSstatus(inbuf, currchar+1) == DBCS_TRAILING) + dbcs_off = 2; +#endif inbuf[69] = '\0'; - memcpy(&inbuf[currchar], &inbuf[currchar + 1], 69 - currchar); + memcpy(&inbuf[currchar], &inbuf[currchar + dbcs_off], + 69 - currchar); move(b_lines - 1, currchar + chatid_len); clrtoeol(); outs(&inbuf[currchar]); @@ -861,8 +861,8 @@ oldgetdata(int line, int col, const char *prompt, char *buf, int len, int echo) case '\177': case Ctrl('H'): if (currchar) { -#ifdef DBCSAWARE_GETDATA int dbcs_off = 1; +#ifdef DBCSAWARE_GETDATA if (ISDBCSAWARE() && getDBCSstatus(buf, currchar-1) == DBCS_TRAILING) dbcs_off = 2; @@ -874,7 +874,7 @@ oldgetdata(int line, int col, const char *prompt, char *buf, int len, int echo) move(y, x + clen); outc(' '); #ifdef DBCSAWARE_GETDATA - if(dbcs_off > 1) outc(' '); + while(--dbcs_off > 0) outc(' '); #endif move(y, x); edit_outs(buf); @@ -893,8 +893,8 @@ oldgetdata(int line, int col, const char *prompt, char *buf, int len, int echo) case Ctrl('D'): case KEY_DEL: if (buf[currchar]) { -#ifdef DBCSAWARE_GETDATA int dbcs_off = 1; +#ifdef DBCSAWARE_GETDATA if (ISDBCSAWARE() && buf[currchar+1] && getDBCSstatus(buf, currchar+1) == DBCS_TRAILING) dbcs_off = 2; @@ -905,7 +905,7 @@ oldgetdata(int line, int col, const char *prompt, char *buf, int len, int echo) move(y, x + clen); outc(' '); #ifdef DBCSAWARE_GETDATA - if(dbcs_off > 1) outc(' '); + while(--dbcs_off > 0) outc(' '); #endif move(y, x); edit_outs(buf); |