diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-07-09 01:16:29 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-07-09 01:16:29 +0800 |
commit | c39715918ba67de5779be19de4715be3c6cead9a (patch) | |
tree | f6a8fe5b0d9a1e938ad58b925d2c7543429eb67c | |
parent | 49ba5a716f909c36afa8084b59d1f4f8ac072b7b (diff) | |
download | pttbbs-c39715918ba67de5779be19de4715be3c6cead9a.tar pttbbs-c39715918ba67de5779be19de4715be3c6cead9a.tar.gz pttbbs-c39715918ba67de5779be19de4715be3c6cead9a.tar.bz2 pttbbs-c39715918ba67de5779be19de4715be3c6cead9a.tar.lz pttbbs-c39715918ba67de5779be19de4715be3c6cead9a.tar.xz pttbbs-c39715918ba67de5779be19de4715be3c6cead9a.tar.zst pttbbs-c39715918ba67de5779be19de4715be3c6cead9a.zip |
dbcs aware chat
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2925 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-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); |