summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-04-21 19:18:44 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-04-21 19:18:44 +0800
commitc431922490f08beb011af18f9ffb72a74b5d3a1c (patch)
treebf928a74c788a892dfc88965b0d866a33eb895a9
parent08bea601fe829e23a80cd66a3809e49590a43e2f (diff)
downloadpttbbs-c431922490f08beb011af18f9ffb72a74b5d3a1c.tar
pttbbs-c431922490f08beb011af18f9ffb72a74b5d3a1c.tar.gz
pttbbs-c431922490f08beb011af18f9ffb72a74b5d3a1c.tar.bz2
pttbbs-c431922490f08beb011af18f9ffb72a74b5d3a1c.tar.lz
pttbbs-c431922490f08beb011af18f9ffb72a74b5d3a1c.tar.xz
pttbbs-c431922490f08beb011af18f9ffb72a74b5d3a1c.tar.zst
pttbbs-c431922490f08beb011af18f9ffb72a74b5d3a1c.zip
- refine key processing of CR(C-M), LF(C-J), BS(C-H), BS2(0x7f)
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4223 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--include/common.h3
-rw-r--r--mbbsd/admin.c2
-rw-r--r--mbbsd/announce.c3
-rw-r--r--mbbsd/bbslua.c2
-rw-r--r--mbbsd/board.c3
-rw-r--r--mbbsd/card.c2
-rw-r--r--mbbsd/chess.c3
-rw-r--r--mbbsd/dark.c3
-rw-r--r--mbbsd/edit.c7
-rw-r--r--mbbsd/io.c42
-rw-r--r--mbbsd/menu.c2
-rw-r--r--mbbsd/name.c16
-rw-r--r--mbbsd/othello.c2
-rw-r--r--mbbsd/read.c3
-rw-r--r--mbbsd/talk.c10
-rw-r--r--mbbsd/user.c2
-rw-r--r--mbbsd/visio.c4
17 files changed, 62 insertions, 47 deletions
diff --git a/include/common.h b/include/common.h
index cf390eee..fe6c428e 100644
--- a/include/common.h
+++ b/include/common.h
@@ -136,6 +136,9 @@
/* 鍵盤設定 */
#define KEY_TAB 9
#define KEY_ESC 27
+#define KEY_CR ('\r') // Ctrl('M'), 0x0D
+#define KEY_LF ('\n') // Ctrl('J'), 0x0A
+#define KEY_ENTER KEY_CR // for backward compatibility
#define KEY_BS (Ctrl('H'))
#define KEY_BS2 (0x7f)
#define KEY_UP 0x0101
diff --git a/mbbsd/admin.c b/mbbsd/admin.c
index 6b95e5bd..68896ce5 100644
--- a/mbbsd/admin.c
+++ b/mbbsd/admin.c
@@ -860,7 +860,7 @@ x_file(void)
"刪除成功\ " : "未刪除");
break;
- case '\n': case '\r': case KEY_RIGHT:
+ case KEY_ENTER: case KEY_RIGHT:
strlcpy(buf, entries[sel], sizeof(buf));
v = strchr(buf, ' '); *v++ = 0;
i = vedit(buf, NA, NULL);
diff --git a/mbbsd/announce.c b/mbbsd/announce.c
index ef8f83d6..233ac5f6 100644
--- a/mbbsd/announce.c
+++ b/mbbsd/announce.c
@@ -1201,8 +1201,7 @@ a_menu(const char *maintitle, const char *path,
me.now = 0;
break;
}
- case '\n':
- case '\r':
+ case KEY_ENTER:
case KEY_RIGHT:
case 'r':
if (me.now < me.num) {
diff --git a/mbbsd/bbslua.c b/mbbsd/bbslua.c
index 2900e17c..b17c44fc 100644
--- a/mbbsd/bbslua.c
+++ b/mbbsd/bbslua.c
@@ -195,7 +195,7 @@ bl_k2s(lua_State* L, int v)
lua_pushstring(L, "TAB");
else if (v == '\b' || v == 0x7F)
lua_pushstring(L, "BS");
- else if (v == '\n' || v == '\r' || v == Ctrl('M'))
+ else if (v == KEY_ENTER)
lua_pushstring(L, "ENTER");
else if (v < ' ')
lua_pushfstring(L, "^%c", v-1+'A');
diff --git a/mbbsd/board.c b/mbbsd/board.c
index 78ca48c9..60c23aac 100644
--- a/mbbsd/board.c
+++ b/mbbsd/board.c
@@ -1605,8 +1605,7 @@ choose_board(int newflag)
break;
case KEY_RIGHT:
- case '\n':
- case '\r':
+ case KEY_ENTER:
case 'r':
{
if (IS_LISTING_FAV()) {
diff --git a/mbbsd/card.c b/mbbsd/card.c
index 0c9a3a9a..6332deee 100644
--- a/mbbsd/card.c
+++ b/mbbsd/card.c
@@ -58,7 +58,7 @@ card_select(int *now)
case '+':
case ',':
return 1;
- case '\r':
+ case KEY_ENTER:
return -1;
case KEY_LEFT:
*now = (*now + 4) % 5;
diff --git a/mbbsd/chess.c b/mbbsd/chess.c
index 1f52b093..3e578a20 100644
--- a/mbbsd/chess.c
+++ b/mbbsd/chess.c
@@ -598,8 +598,7 @@ ChessPlayFuncMy(ChessInfo* info)
}
break;
- case '\r':
- case '\n':
+ case KEY_ENTER:
case ' ':
endturn = info->actions->select(info, info->cursor, &game_result);
break;
diff --git a/mbbsd/dark.c b/mbbsd/dark.c
index 5ca86ae5..1571f2b0 100644
--- a/mbbsd/dark.c
+++ b/mbbsd/dark.c
@@ -294,8 +294,7 @@ playing(struct DarkData *dd, sint fd, sint color, sint ch, sint * b, userinfo_t
rname[dd->brd[dd->my][dd->mx].value], dd->cont);
*b = -1;
break;
- case '\r': /* 吃 or 移動 ly跟lx必須大於0 */
- case '\n':
+ case KEY_ENTER: /* 吃 or 移動 ly跟lx必須大於0 */
if (
dd->mly >= 0 /* 要先選子 */
&&
diff --git a/mbbsd/edit.c b/mbbsd/edit.c
index 6ac14e3c..d32b166c 100644
--- a/mbbsd/edit.c
+++ b/mbbsd/edit.c
@@ -3203,7 +3203,7 @@ upload_file(void)
insert_tab();
szdata ++;
}
- else if (c == '\r' || c == '\n')
+ else if (c == KEY_ENTER)
{
split(curr_buf->currline, curr_buf->currpnt);
curr_buf->oldcurrline = curr_buf->currline;
@@ -3556,8 +3556,7 @@ vedit2(const char *fpath, int saveheader, int *islocal, int flags)
case Ctrl('I'):
insert_tab();
break;
- case '\r':
- case '\n':
+ case KEY_ENTER:
block_cancel();
if (curr_buf->totaln >= EDIT_LINE_LIMIT)
{
@@ -3727,7 +3726,7 @@ vedit2(const char *fpath, int saveheader, int *islocal, int flags)
}
curr_buf->insert_mode ^= 1;
break;
- case Ctrl('H'):
+ case KEY_BS:
case KEY_BS2: /* backspace */
block_cancel();
if (curr_buf->ansimode) {
diff --git a/mbbsd/io.c b/mbbsd/io.c
index 33571109..306fb765 100644
--- a/mbbsd/io.c
+++ b/mbbsd/io.c
@@ -278,19 +278,39 @@ dogetch(void)
lastact = now;
}
- // CR LF are treated as one.
- if (inbuf[icurrchar] == Ctrl('M'))
+ // CRLF Handle:
+ //
+ // (UNIX) LF
+ // (WIN) CRLF
+ // (MAC) CR
+ //
+ // to work in a compatible way, (see KEY_ENTER definition)
+ // let KEY_ENTER = CR
+
{
- if (++icurrchar < ibufsize &&
- inbuf[icurrchar] == Ctrl('J'))
- icurrchar ++;
- return Ctrl('M');
- }
+ unsigned char c = (unsigned char) inbuf[icurrchar++];
- // XXX also treat ^H and 127 (KEY_BS2) the same one?
- // if (inbuf[icurrchar] == KEY_BS2)
- // return Ctrl('H');
- return (unsigned char)inbuf[icurrchar++];
+ // CR LF are treated as one.
+ if (c == KEY_CR)
+ {
+ // peak next character.
+ if (icurrchar < ibufsize && inbuf[icurrchar] == KEY_LF)
+ icurrchar ++;
+ return KEY_ENTER;
+ }
+ else if (c == KEY_LF)
+ {
+ return KEY_ENTER;
+ }
+
+ // XXX also treat ^H and 127 (KEY_BS2) the same one?
+ // else if (c == KEY_BS2)
+ // {
+ // return KEY_BS;
+ // }
+
+ return c;
+ }
}
#ifdef DEBUG
diff --git a/mbbsd/menu.c b/mbbsd/menu.c
index e5d5c276..499efbdc 100644
--- a/mbbsd/menu.c
+++ b/mbbsd/menu.c
@@ -397,7 +397,7 @@ domenu(int cmdmode, const char *cmdtitle, int cmd, const commands_t cmdtable[])
currstat = cmdmode;
break;
}
- if (cmd == '\n' || cmd == '\r' || cmd == KEY_RIGHT) {
+ if (cmd == KEY_ENTER || cmd == KEY_RIGHT) {
move(b_lines, 0);
clrtoeol();
diff --git a/mbbsd/name.c b/mbbsd/name.c
index d170eebd..46d7a253 100644
--- a/mbbsd/name.c
+++ b/mbbsd/name.c
@@ -442,7 +442,7 @@ namecomplete(const char *prompt, char *data)
if ((ch = igetch()) == EOF)
break;
- if (ch == '\n' || ch == '\r') {
+ if (ch == KEY_ENTER) {
*temp = '\0';
// outc('\n');
if (NumInList(cwlist) == 1)
@@ -487,7 +487,7 @@ namecomplete(const char *prompt, char *data)
}
continue;
}
- if (ch == '\177' || ch == '\010') {
+ if (ch == KEY_BS2 || ch == KEY_BS) { /* backspace */
if (temp == data)
continue;
temp--;
@@ -568,7 +568,7 @@ namecomplete2(struct NameList *namelist, const char *prompt, char *data)
if ((ch = igetch()) == EOF)
break;
- if (ch == '\n' || ch == '\r') {
+ if (ch == KEY_ENTER) {
*temp = '\0';
if (NameList_length(&sublist)==1)
strcpy(data, NameList_get(&sublist, 0));
@@ -612,7 +612,7 @@ namecomplete2(struct NameList *namelist, const char *prompt, char *data)
}
continue;
}
- if (ch == '\177' || ch == '\010') {
+ if (ch == KEY_BS2 || ch == KEY_BS) { /* backspace */
if (temp == data)
continue;
temp--;
@@ -693,7 +693,7 @@ usercomplete(const char *prompt, char *data)
if ((ch = igetch()) == EOF)
break;
- if (ch == '\n' || ch == '\r') {
+ if (ch == KEY_ENTER) {
int i;
char *ptr;
@@ -711,7 +711,7 @@ usercomplete(const char *prompt, char *data)
data[0] = '\0';
break;
- } else if (ch == '\177' || ch == '\010') {
+ } else if (ch == KEY_BS2 || ch == KEY_BS) { /* backspace */
if (temp == data)
continue;
temp--;
@@ -916,7 +916,7 @@ generalnamecomplete(const char *prompt, char *data, int len, size_t nmemb,
if ((ch = igetch()) == EOF)
break;
- if (ch == '\n' || ch == '\r') {
+ if (ch == KEY_ENTER) {
data[ptr] = 0;
outc('\n');
if (ptr != 0) {
@@ -978,7 +978,7 @@ generalnamecomplete(const char *prompt, char *data, int len, size_t nmemb,
}
continue;
- } else if (ch == '\177' || ch == '\010') { /* backspace */
+ } else if (ch == KEY_BS2 || ch == KEY_BS) { /* backspace */
if (ptr == 0)
continue;
morelist = -1;
diff --git a/mbbsd/othello.c b/mbbsd/othello.c
index 99dd4794..70fd0961 100644
--- a/mbbsd/othello.c
+++ b/mbbsd/othello.c
@@ -310,7 +310,7 @@ player(struct OthelloData *od, char color)
od->nowx++;
break;
case ' ':
- case '\r':
+ case KEY_ENTER:
if (od->nowboard[(int)od->nowx][(int)od->nowy] != HINT)
break;
od->pass = 0;
diff --git a/mbbsd/read.c b/mbbsd/read.c
index 0140b1a5..341e2320 100644
--- a/mbbsd/read.c
+++ b/mbbsd/read.c
@@ -1042,8 +1042,7 @@ i_read_key(const onekey_t * rcmdlist, keeploc_t * locmem,
mode = TagPruner(bid);
break;
- case '\n':
- case '\r':
+ case KEY_ENTER:
case 'l':
case KEY_RIGHT:
ch = 'r';
diff --git a/mbbsd/talk.c b/mbbsd/talk.c
index 75dd12e0..8622a269 100644
--- a/mbbsd/talk.c
+++ b/mbbsd/talk.c
@@ -1218,8 +1218,7 @@ do_talk_char(talkwin_t * twin, int ch, FILE *flog)
clrtoeol();
return;
- case Ctrl('M'):
- case Ctrl('J'):
+ case KEY_ENTER:
strlcpy(buf, (char *)line->data, line->len + 1);
buf[line->len] = 0;
do_talk_nextline(twin);
@@ -1294,7 +1293,7 @@ do_talk_char(talkwin_t * twin, int ch, FILE *flog)
break;
// complex data change
- case Ctrl('H'):
+ case KEY_BS:
case KEY_BS2:
if (twin->curcol > 0)
{
@@ -1462,7 +1461,7 @@ do_talk(int fd)
if (send(fd, data, 1, 0) != 1)
break;
if (log)
- fputc((ch == Ctrl('M')) ? '\n' : (char)*data, log);
+ fputc((ch == KEY_ENTER) ? '\n' : (char)*data, log);
do_talk_char(&mywin, *data, flog);
}
}
@@ -2862,8 +2861,7 @@ userlist(void)
break;
case KEY_RIGHT:
- case '\n':
- case '\r':
+ case KEY_ENTER:
case 't':
if (HasUserPerm(PERM_LOGINOK)) {
if (uentp->pid != currpid &&
diff --git a/mbbsd/user.c b/mbbsd/user.c
index 00ddf1b8..f26c99db 100644
--- a/mbbsd/user.c
+++ b/mbbsd/user.c
@@ -1529,7 +1529,7 @@ int u_detectDBCSAwareEvilClient()
move(14, 15*2);
ch = igetch();
if(ch != KEY_LEFT && ch != KEY_RIGHT &&
- ch != Ctrl('H') && ch != '\177')
+ ch != KEY_BS && ch != KEY_BS2)
{
move(16, 0);
bell();
diff --git a/mbbsd/visio.c b/mbbsd/visio.c
index 03e835af..89a7b71b 100644
--- a/mbbsd/visio.c
+++ b/mbbsd/visio.c
@@ -957,7 +957,7 @@ vgetstring(char *_buf, int len, int flags, const char *defstr, const VGET_CALLBA
break;
// exiting keys
- case '\n': case '\r':
+ case KEY_ENTER:
abort = 1;
break;
@@ -1009,7 +1009,7 @@ vgetstring(char *_buf, int len, int flags, const char *defstr, const VGET_CALLBA
}
break;
- case Ctrl('H'): case KEY_BS2:
+ case KEY_BS: case KEY_BS2:
if (icurr > 0) {
// kill previous one charracter.
memmove(buf+icurr-1, buf+icurr, iend-icurr+1);