From c431922490f08beb011af18f9ffb72a74b5d3a1c Mon Sep 17 00:00:00 2001 From: piaip Date: Mon, 21 Apr 2008 11:18:44 +0000 Subject: - 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 --- mbbsd/admin.c | 2 +- mbbsd/announce.c | 3 +-- mbbsd/bbslua.c | 2 +- mbbsd/board.c | 3 +-- mbbsd/card.c | 2 +- mbbsd/chess.c | 3 +-- mbbsd/dark.c | 3 +-- mbbsd/edit.c | 7 +++---- mbbsd/io.c | 42 +++++++++++++++++++++++++++++++----------- mbbsd/menu.c | 2 +- mbbsd/name.c | 16 ++++++++-------- mbbsd/othello.c | 2 +- mbbsd/read.c | 3 +-- mbbsd/talk.c | 10 ++++------ mbbsd/user.c | 2 +- mbbsd/visio.c | 4 ++-- 16 files changed, 59 insertions(+), 47 deletions(-) (limited to 'mbbsd') 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); -- cgit v1.2.3