summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-07-09 01:16:29 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-07-09 01:16:29 +0800
commitc39715918ba67de5779be19de4715be3c6cead9a (patch)
treef6a8fe5b0d9a1e938ad58b925d2c7543429eb67c
parent49ba5a716f909c36afa8084b59d1f4f8ac072b7b (diff)
downloadpttbbs-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.c36
-rw-r--r--mbbsd/io.c8
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]);
diff --git a/mbbsd/io.c b/mbbsd/io.c
index 4d58e9fd..0189f612 100644
--- a/mbbsd/io.c
+++ b/mbbsd/io.c
@@ -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);