From f7257771166c2e08f30dc3b0d0163757fcdcd395 Mon Sep 17 00:00:00 2001 From: ptt Date: Thu, 22 Apr 2004 22:36:19 +0000 Subject: segfault fixed git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1816 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/board.c | 50 +++++++++++++++----------------------------------- 1 file changed, 15 insertions(+), 35 deletions(-) diff --git a/mbbsd/board.c b/mbbsd/board.c index 2cbd6df5..29d5a299 100644 --- a/mbbsd/board.c +++ b/mbbsd/board.c @@ -186,10 +186,9 @@ load_boards(char *key) int type = cuser.uflag & BRDSORT_FLAG ? 1 : 0; int i, n; int state; - char byMALLOC = 0, needREALLOC = 0; if (class_bid > 0) { - bptr = &bcache[class_bid - 1]; + bptr = getbcache(class_bid); if (bptr->firstchild[type] == NULL || bptr->childcount <= 0) load_uidofgid(class_bid, type); } @@ -214,7 +213,7 @@ load_boards(char *key) else if (get_item_type(&fav->favh[i]) == FAVT_FOLDER ) state = NBRD_FOLDER; else { - bptr = &bcache[ fav_getid(&fav->favh[i]) - 1]; + bptr = getbcache(fav_getid(&fav->favh[i])); state = NBRD_BOARD; if (is_set_attr(&fav->favh[i], FAVH_UNREAD)) state |= NBRD_UNREAD; @@ -231,7 +230,7 @@ load_boards(char *key) else continue; }else{ - bptr = &bcache[ fav_getid(&fav->favh[i]) - 1]; + bptr = getbcache(fav_getid(&fav->favh[i])); if( HasPerm(bptr) && strcasestr(bptr->title, key)) state = NBRD_BOARD; else @@ -249,8 +248,6 @@ load_boards(char *key) } if (brdnum == 0) addnewbrdstat(0, 0); - byMALLOC = 0; - needREALLOC = (get_data_number(fav) != brdnum); } #if HOTBOARDCACHE else if( class_bid == -1 ){ @@ -277,12 +274,6 @@ load_boards(char *key) continue; addnewbrdstat(n, state); } -#ifdef CRITICAL_MEMORY - byMALLOC = 1; -#else - byMALLOC = 0; -#endif - needREALLOC = 1; } #if ! HOTBOARDCACHE if (class_bid == -1) @@ -290,9 +281,10 @@ load_boards(char *key) #endif } else { /* load boards of a subclass */ int childcount = bptr->childcount; - nbrd = (boardstat_t *) malloc(childcount * sizeof(boardstat_t)); - for (bptr = bptr->firstchild[type]; bptr != NULL; - bptr = bptr->next[type]) { + nbrd = (boardstat_t *) malloc((childcount+2) * sizeof(boardstat_t)); + // 預留兩個以免大量開版時掛調 + for (bptr = bptr->firstchild[type], brdnum=0; bptr != NULL && + brdnum < childcount+2; bptr = bptr->next[type], brdnum++) { n = getbid(bptr); state = HasPerm(bptr); if ( !(state || GROUPOP()) || TITLE_MATCH(bptr, key) ) @@ -308,21 +300,9 @@ load_boards(char *key) } addnewbrdstat(n, state); } - byMALLOC = 0; - needREALLOC = (childcount != brdnum); - } - - if( needREALLOC ){ - if( byMALLOC ){ - boardstat_t *newnbrd; - newnbrd = (boardstat_t *)malloc(sizeof(boardstat_t) * brdnum); - memcpy(newnbrd, nbrd, sizeof(boardstat_t) * brdnum); - FREE(nbrd); - nbrd = newnbrd; - } - else { - nbrd = (boardstat_t *)realloc(nbrd, sizeof(boardstat_t) * brdnum); - } + if(childcount != brdnum) //fix soon + getbcache(class_bid)->childcount = brdnum; + } } @@ -584,7 +564,7 @@ set_menu_BM(char *BM) static void replace_link_by_target(boardstat_t *board) { - board->bid = BRD_LINK_TARGET(&bcache[board->bid - 1]); + board->bid = BRD_LINK_TARGET(getbcache(board->bid)); board->myattr &= ~NBRD_SYMBOLIC; } @@ -750,7 +730,7 @@ choose_board(int newflag) case 'F': case 'f': if (class_bid>0 && HAS_PERM(PERM_SYSOP)) { - bcache[class_bid - 1].firstchild[cuser.uflag & BRDSORT_FLAG ? 1 : 0] + getbcache(class_bid)->firstchild[cuser.uflag & BRDSORT_FLAG ? 1 : 0] = NULL; brdnum = -1; } @@ -789,7 +769,7 @@ choose_board(int newflag) ptr = &nbrd[num]; if (ptr->myattr & NBRD_SYMBOLIC) { if (getans("確定刪除連結?[N/y]") == 'y') - delete_symbolic_link(&bcache[ptr->bid - 1], ptr->bid); + delete_symbolic_link(getbcache(ptr->bid), ptr->bid); } brdnum = -1; } @@ -818,7 +798,7 @@ choose_board(int newflag) fav_t *fav = get_current_fav(); for (tmp = 0; tmp < fav->DataTail; tmp++) { short bid = fav_getid(&fav->favh[tmp]); - boardheader_t *bh = &bcache[ bid - 1 ]; + boardheader_t *bh = getbcache(bid); if( !is_set_attr(&fav->favh[tmp], FAVH_ADM_TAG)) continue; set_attr(&fav->favh[tmp], FAVH_ADM_TAG, 0); @@ -1030,7 +1010,7 @@ choose_board(int newflag) case 'W': if (class_bid > 0 && (HAS_PERM(PERM_SYSOP) || GROUPOP())) { - setbpath(buf, bcache[class_bid - 1].brdname); + setbpath(buf, getbcache(class_bid)->brdname); mkdir(buf, 0755); /* Ptt:開群組目錄 */ b_note_edit_bname(class_bid); brdnum = -1; -- cgit v1.2.3 From 4654a3c8e9e2eff62c293117ae8ae5b38cb9c735 Mon Sep 17 00:00:00 2001 From: ptt Date: Thu, 22 Apr 2004 22:45:07 +0000 Subject: seg fault of board.c git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1817 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/board.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mbbsd/board.c b/mbbsd/board.c index 29d5a299..3765c854 100644 --- a/mbbsd/board.c +++ b/mbbsd/board.c @@ -283,8 +283,8 @@ load_boards(char *key) int childcount = bptr->childcount; nbrd = (boardstat_t *) malloc((childcount+2) * sizeof(boardstat_t)); // 預留兩個以免大量開版時掛調 - for (bptr = bptr->firstchild[type], brdnum=0; bptr != NULL && - brdnum < childcount+2; bptr = bptr->next[type], brdnum++) { + for (bptr = bptr->firstchild[type]; bptr != NULL && + brdnum < childcount+2; bptr = bptr->next[type]) { n = getbid(bptr); state = HasPerm(bptr); if ( !(state || GROUPOP()) || TITLE_MATCH(bptr, key) ) -- cgit v1.2.3 From f0c603cf34b4c9053996913cc27a72328a7db566 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 02:05:54 +0000 Subject: fix brd.firstchild error git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1818 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/admin.c | 1 + mbbsd/board.c | 51 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/mbbsd/admin.c b/mbbsd/admin.c index f6d35a6c..53140e27 100644 --- a/mbbsd/admin.c +++ b/mbbsd/admin.c @@ -705,6 +705,7 @@ m_newbrd(int recover) } add_board_record(&newboard); + getbcache(class_bid)->childcount = 0; pressanykey(); setup_man(&newboard); diff --git a/mbbsd/board.c b/mbbsd/board.c index 3765c854..d4240c2c 100644 --- a/mbbsd/board.c +++ b/mbbsd/board.c @@ -567,6 +567,31 @@ static void replace_link_by_target(boardstat_t *board) board->bid = BRD_LINK_TARGET(getbcache(board->bid)); board->myattr &= ~NBRD_SYMBOLIC; } +static int +paste_taged_brds(int gid) +{ + fav_t *fav; + int bid, tmp; + + if (gid == 0 || ! (HAS_PERM(PERM_SYSOP) || GROUPOP()) || + getans("貼上標記的看板?(y/N)")=='n') return 0; + fav = get_current_fav(); + for (tmp = 0; tmp < fav->DataTail; tmp++) { + bid = fav_getid(&fav->favh[tmp]); + boardheader_t *bh = getbcache(bid); + if( !is_set_attr(&fav->favh[tmp], FAVH_ADM_TAG)) + continue; + set_attr(&fav->favh[tmp], FAVH_ADM_TAG, 0); + if (bh->gid != gid) { + bh->gid = gid; + substitute_record(FN_BOARD, bh, + sizeof(boardheader_t), bid); + reset_board(bid); + log_usies("SetBoardGID", bh->brdname); + } + } + return 1; +} static void choose_board(int newflag) @@ -602,7 +627,8 @@ choose_board(int newflag) continue; } if (HAS_PERM(PERM_SYSOP) || GROUPOP()) { - if (m_newbrd(0) == -1) + if (paste_tag_brds(class_bid) || + m_newbrd(0) == -1) break; brdnum = -1; continue; @@ -793,26 +819,9 @@ choose_board(int newflag) } break; case Ctrl('P'): - if (class_bid != 0 && - (HAS_PERM(PERM_SYSOP) || GROUPOP())) { - fav_t *fav = get_current_fav(); - for (tmp = 0; tmp < fav->DataTail; tmp++) { - short bid = fav_getid(&fav->favh[tmp]); - boardheader_t *bh = getbcache(bid); - if( !is_set_attr(&fav->favh[tmp], FAVH_ADM_TAG)) - continue; - set_attr(&fav->favh[tmp], FAVH_ADM_TAG, 0); - if (bh->gid != class_bid) { - bh->gid = class_bid; - substitute_record(FN_BOARD, bh, - sizeof(boardheader_t), bid); - reset_board(bid); - log_usies("SetBoardGID", bh->brdname); - } - } - brdnum = -1; - } - break; + if (paste_taged_brds(class_bid)) + brdnum = -1; + break; case 'L': if (HAS_PERM(PERM_SYSOP) && class_bid > 0) { if (make_symbolic_link_interactively(class_bid) < 0) -- cgit v1.2.3 From 30eb83a227b6bc5b6efdeeec5052ae1ef4bba45e Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 02:07:03 +0000 Subject: typo of last update git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1819 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/board.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mbbsd/board.c b/mbbsd/board.c index d4240c2c..7cfeabd1 100644 --- a/mbbsd/board.c +++ b/mbbsd/board.c @@ -627,7 +627,7 @@ choose_board(int newflag) continue; } if (HAS_PERM(PERM_SYSOP) || GROUPOP()) { - if (paste_tag_brds(class_bid) || + if (paste_taged_brds(class_bid) || m_newbrd(0) == -1) break; brdnum = -1; -- cgit v1.2.3 From 592c2af2c653d8525e9809effb4dddb2b6d9ff96 Mon Sep 17 00:00:00 2001 From: victor Date: Fri, 23 Apr 2004 02:45:50 +0000 Subject: revert the river name git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1820 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/chc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mbbsd/chc.c b/mbbsd/chc.c index 17cda17e..12aed0ad 100644 --- a/mbbsd/chc.c +++ b/mbbsd/chc.c @@ -49,7 +49,7 @@ static const char *chess_brd[BRD_ROW * 2 - 1] = { "├─┼─┼─┼─┼─┼─┼─┼─┤", /* 3 */ "│ │ │ │ │ │ │ │ │", "├─┴─┴─┴─┴─┴─┴─┴─┤", /* 4 */ - "│ 凱 達 格 藍 大 道 │", + "│ 楚 河 漢 界 │", "├─┬─┬─┬─┬─┬─┬─┬─┤", /* 5 */ "│ │ │ │ │ │ │ │ │", "├─┼─┼─┼─┼─┼─┼─┼─┤", /* 6 */ -- cgit v1.2.3 From 9f968c8886542a57ef9a9c56730857252100acd7 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 03:19:01 +0000 Subject: debug of segfault on userlist git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1821 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- include/perm.h | 5 ++--- mbbsd/mbbsd.c | 6 +++--- mbbsd/talk.c | 5 ++++- mbbsd/user.c | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/include/perm.h b/include/perm.h index 2d676bae..02c03d0f 100644 --- a/include/perm.h +++ b/include/perm.h @@ -11,7 +11,7 @@ #define PERM_CLOAK 000000000100 /* 目前隱形中 */ #define PERM_SEECLOAK 000000000200 /* 看見忍者 */ #define PERM_XEMPT 000000000400 /* 永久保留帳號 */ -#define PERM_DENYPOST 000000001000 /* 站長隱身術 */ +#define PERM_SYSOPHIDE 000000001000 /* 站長隱身術 */ #define PERM_BM 000000002000 /* 板主 */ #define PERM_ACCOUNTS 000000004000 /* 帳號總管 */ #define PERM_CHATROOM 000000010000 /* 聊天室總管 */ @@ -51,8 +51,7 @@ #define HAS_PERM(x) ((x) ? cuser.userlevel & (x) : 1) #define HAVE_PERM(x) (cuser.userlevel&(x)) -#define PERM_HIDE(u) ((u)->userlevel & PERM_SYSOP && \ - (u)->userlevel & PERM_DENYPOST) +#define PERM_HIDE(u) (u && (u)->userlevel & PERM_SYSOPHIDE) #define IS_BOARD(bptr) ((bptr)->brdname[0] && \ !((bptr)->brdattr & BRD_GROUPBOARD)) diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c index 927a7333..d881c2b2 100644 --- a/mbbsd/mbbsd.c +++ b/mbbsd/mbbsd.c @@ -168,7 +168,7 @@ u_exit(char *mode) cuser.pager = currutmp->pager; memcpy(cuser.mind, currutmp->mind, 4); setutmpbid(0); - if (!(HAS_PERM(PERM_SYSOP) && HAS_PERM(PERM_DENYPOST)) && + if (!(HAS_PERM(PERM_SYSOP) && HAS_PERM(PERM_SYSOPHIDE)) && !currutmp->invisible) do_aloha("<<下站通知>> -- 我走囉!"); @@ -604,7 +604,7 @@ login_query() cuser.userlevel = PERM_BASIC | PERM_CHAT | PERM_PAGE | PERM_POST | PERM_LOGINOK | PERM_MAILLIMIT | PERM_CLOAK | PERM_SEECLOAK | PERM_XEMPT | - PERM_DENYPOST | PERM_BM | PERM_ACCOUNTS | + PERM_SYSOPHIDE | PERM_BM | PERM_ACCOUNTS | PERM_CHATROOM | PERM_BOARD | PERM_SYSOP | PERM_BBSADM; mkuserdir(cuser.userid); #endif @@ -949,7 +949,7 @@ user_login() SHM->max_time = now; } - if (!(HAS_PERM(PERM_SYSOP) && HAS_PERM(PERM_DENYPOST)) && + if (!(HAS_PERM(PERM_SYSOP) && HAS_PERM(PERM_SYSOPHIDE)) && !currutmp->invisible) do_aloha("<<上站通知>> -- 我來啦!"); diff --git a/mbbsd/talk.c b/mbbsd/talk.c index d667fb0a..3ad7e731 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -1741,6 +1741,7 @@ draw_pickup(int drawall, pickup_t * pickup, int pickup_way, int idletime; #endif +pressanykey(); if (drawall) { showtitle((cuser.uflag & FRIEND_FLAG) ? "好友列表" : "休閒聊天", BBSName); @@ -1759,13 +1760,14 @@ draw_pickup(int drawall, pickup_t * pickup, int pickup_way, "\033[31m(w)\033[30m水球 \033[31m(m)\033[30m寄信 \033[31m(h)" "\033[30m線上輔助 \033[m"); } +pressanykey(); move(1, 0); prints(" 排序:[%s] 上站人數:%-4d\033[1;32m我的朋友:%-3d" "\033[33m與我為友:%-3d\033[36m板友:%-4d\033[31m壞人:" "%-2d\033[m\n", msg_pickup_way[pickup_way], SHM->UTMPnumber, myfriend, friendme, currutmp->brc_id ? (bfriend + 1) : 0, badfriend); - +pressanykey(); for (i = 0, ch = page * nPickups + 1; i < nPickups; ++i, ++ch) { move(i + 3, 0); prints("a"); @@ -1855,6 +1857,7 @@ draw_pickup(int drawall, pickup_t * pickup, int pickup_way, ); refresh(); +pressanykey(); } } diff --git a/mbbsd/user.c b/mbbsd/user.c index 4a544620..4a531d10 100644 --- a/mbbsd/user.c +++ b/mbbsd/user.c @@ -1500,7 +1500,7 @@ u_list_CB(int num, userec_t * uentp) permstr[0] = 'S'; else if (level & PERM_ACCOUNTS) permstr[0] = 'A'; - else if (level & PERM_DENYPOST) + else if (level & PERM_SYSOPHIDE) permstr[0] = 'p'; if (level & (PERM_BOARD)) -- cgit v1.2.3 From 6da8daa02f1563d8c0af993e377d2e98634cede5 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 03:23:44 +0000 Subject: debug of seg fault on userlist git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1822 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/talk.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mbbsd/talk.c b/mbbsd/talk.c index 3ad7e731..4412470d 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -58,7 +58,7 @@ iswritable_stat(userinfo_t * uentp, int fri_stat) int isvisible_stat(userinfo_t * me, userinfo_t * uentp, int fri_stat) { - if (uentp->userid[0] == 0) + if (!uentp || uentp->userid[0] == 0) return 0; if (PERM_HIDE(uentp) && !(PERM_HIDE(me))) /* 對方紫色隱形而你沒有 */ @@ -1857,7 +1857,6 @@ pressanykey(); ); refresh(); -pressanykey(); } } @@ -1968,7 +1967,7 @@ userlist(void) case 'H': if (HAS_PERM(PERM_SYSOP)) { - currutmp->userlevel ^= PERM_DENYPOST; + currutmp->userlevel ^= PERM_SYSOPHIDE; redrawall = redraw = 1; } break; -- cgit v1.2.3 From 0343ed119db348831553a455ce923ca65381a966 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 03:25:17 +0000 Subject: debug of seg fault finally git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1823 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/talk.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/mbbsd/talk.c b/mbbsd/talk.c index 4412470d..ca337041 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -1741,7 +1741,6 @@ draw_pickup(int drawall, pickup_t * pickup, int pickup_way, int idletime; #endif -pressanykey(); if (drawall) { showtitle((cuser.uflag & FRIEND_FLAG) ? "好友列表" : "休閒聊天", BBSName); @@ -1760,14 +1759,12 @@ pressanykey(); "\033[31m(w)\033[30m水球 \033[31m(m)\033[30m寄信 \033[31m(h)" "\033[30m線上輔助 \033[m"); } -pressanykey(); move(1, 0); prints(" 排序:[%s] 上站人數:%-4d\033[1;32m我的朋友:%-3d" "\033[33m與我為友:%-3d\033[36m板友:%-4d\033[31m壞人:" "%-2d\033[m\n", msg_pickup_way[pickup_way], SHM->UTMPnumber, myfriend, friendme, currutmp->brc_id ? (bfriend + 1) : 0, badfriend); -pressanykey(); for (i = 0, ch = page * nPickups + 1; i < nPickups; ++i, ++ch) { move(i + 3, 0); prints("a"); -- cgit v1.2.3 From 8e4fc118458e0c32c8f332541cb6e455ba5d8110 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 07:02:47 +0000 Subject: rewrite read.c git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1824 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/more.c | 1 - mbbsd/read.c | 429 ++++++++++++++++++++++++++--------------------------------- 2 files changed, 186 insertions(+), 244 deletions(-) diff --git a/mbbsd/more.c b/mbbsd/more.c index 25b3d8dc..5e3c993a 100644 --- a/mbbsd/more.c +++ b/mbbsd/more.c @@ -23,7 +23,6 @@ static char *more_help[] = { "(TAB) URL連結", "(Ctrl-T) 存到暫存檔", "(:/f/b) 跳至某頁/下/上篇", - "(F/B) 跳至同一搜尋主題下/上篇", "(a/A) 跳至同一作者下/上篇", "([/]) 主題式閱\讀 上/下", "(t) 主題式循序閱\讀", diff --git a/mbbsd/read.c b/mbbsd/read.c index 6826202a..2ea602cb 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -232,8 +232,12 @@ fixkeep(char *s, int first) static int cursor_pos(keeploc_t * locmem, int val, int from_top) { - int top; - + int top=locmem->top_ln; + if (!last_line) + { + cursor_show(3 + val - top, 0); + return DONOTHING; + } if (val > last_line) { bell(); val = last_line; @@ -242,7 +246,6 @@ cursor_pos(keeploc_t * locmem, int val, int from_top) bell(); val = 1; } - top = locmem->top_ln; if (val >= top && val < top + p_lines) { cursor_clear(3 + locmem->crs_ln - top, 0); locmem->crs_ln = val; @@ -256,42 +259,9 @@ cursor_pos(keeploc_t * locmem, int val, int from_top) return PARTUPDATE; } -static int -move_cursor_line(keeploc_t * locmem, int mode) -{ - int top, crs; - int reload = 0; - - top = locmem->top_ln; - crs = locmem->crs_ln; - if (mode == READ_PREV) { - if (crs <= top) { - top -= p_lines - 1; - if (top < 1) - top = 1; - reload = 1; - } - if (--crs < 1) { - crs = 1; - reload = -1; - } - } else if (mode == READ_NEXT) { - if (crs >= top + p_lines - 1) { - top += p_lines - 1; - reload = 1; - } - if (++crs > last_line) { - crs = last_line; - reload = -1; - } - } - locmem->top_ln = top; - locmem->crs_ln = crs; - return reload; -} static int -thread(keeploc_t * locmem, int stype) +thread(keeploc_t * locmem, int stype, int *new_ln) { static char a_ans[32], t_ans[32]; char ans[32], s_pmt[64]; @@ -379,7 +349,7 @@ thread(keeploc_t * locmem, int stype) close(fd); if ((stype & RS_FIRST) && (near)) { hit_thread = 1; - return cursor_pos(locmem, near, 10); + *new_ln = near; } return DONOTHING; } @@ -402,7 +372,8 @@ thread(keeploc_t * locmem, int stype) hit_thread = 1; if( fd ) close(fd); - return cursor_pos(locmem, now, 10); + *new_ln = now; + return DONOTHING; } continue; } @@ -418,7 +389,7 @@ thread(keeploc_t * locmem, int stype) continue; } hit_thread = 1; - match = cursor_pos(locmem, now, 10); + *new_ln = now; if ((!(stype & RS_CURRENT)) && (stype & RS_RELATED) && strncmp(currtitle, query, TTLEN)) { @@ -588,130 +559,131 @@ select_read(keeploc_t * locmem, int sr_mode) return READ_REDRAW; } +#define select_read_mode(m) select_read(locmem, m) ? NEWDIRECT:READ_REDRAW static int -i_read_key(onekey_t * rcmdlist, keeploc_t * locmem, int ch, int bid, int bottom_line) +i_read_key(onekey_t * rcmdlist, char default_ch, keeploc_t * locmem, + int bid, int bottom_line) { - int mode = DONOTHING; + int mode = DONOTHING; int num; char direct[60]; - switch (ch) { - case 'q': - case 'e': - case KEY_LEFT: - if(currmode & MODE_SELECT){ - char genbuf[256]; - fileheader_t *fhdr = &headers[locmem->crs_ln - locmem->top_ln]; - board_select(); - setbdir(genbuf, currboard); - locmem = getkeep(genbuf, 0, 1); - locmem->crs_ln = getindex(genbuf, fhdr->filename, sizeof(fileheader_t)); - num = locmem->crs_ln - p_lines + 1; - locmem->top_ln = num < 1 ? 1 : num; - - return NEWDIRECT; - } - return (currmode & MODE_ETC) ? board_etc() : - (currmode & MODE_DIGEST) ? board_digest() : DOQUIT; - case Ctrl('L'): - redoscr(); - break; - case Ctrl('H'): - if (select_read(locmem, RS_NEWPOST)) - return NEWDIRECT; - else - return READ_REDRAW; - case 'a': - case 'A': - if (select_read(locmem, RS_AUTHOR)) - return NEWDIRECT; - else - return READ_REDRAW; - - case 'G': - if (select_read(locmem,RS_THREAD)) /* marked articles */ - return NEWDIRECT; - else - return READ_REDRAW; + int ch, new_ln= locmem->crs_ln; + + do { + if(default_ch) + { + ch = default_ch; + default_ch=0; + } + else + { + if((mode=cursor_pos(locmem, new_ln, 10))!=DONOTHING) + return mode; + ch = egetch(); + } + switch (ch) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if((num = search_num(ch, last_line))!=-1) + new_ln = num; + break; + case 'q': + case 'e': + case KEY_LEFT: + if(currmode & MODE_SELECT){ + char genbuf[256]; + fileheader_t *fhdr = &headers[locmem->crs_ln - locmem->top_ln]; + board_select(); + setbdir(genbuf, currboard); + locmem = getkeep(genbuf, 0, 1); + locmem->crs_ln = + getindex(genbuf, fhdr->filename, sizeof(fileheader_t)); + num = locmem->crs_ln - p_lines + 1; + locmem->top_ln = num < 1 ? 1 : num; + + return NEWDIRECT; + } + return (currmode & MODE_ETC) ? board_etc() : + (currmode & MODE_DIGEST) ? board_digest() : DOQUIT; + case Ctrl('L'): + redoscr(); + break; - case '/': - case '?': - if (select_read(locmem, RS_RELATED)) - return NEWDIRECT; - else - return READ_REDRAW; - case 'S': - if (select_read(locmem, RS_TITLE)) - return NEWDIRECT; - else - return READ_REDRAW; - /* quick search title first */ - case '=': - return thread(locmem, RELATE_FIRST); - case '\\': - return thread(locmem, CURSOR_FIRST); - /* quick search title forword */ - case ']': - return thread(locmem, RELATE_NEXT); - case '+': - return thread(locmem, CURSOR_NEXT); - /* quick search title backword */ - case '[': - return thread(locmem, RELATE_PREV); - case '-': - return thread(locmem, CURSOR_PREV); - case '<': - case ',': - return thread(locmem, THREAD_PREV); - case '.': - case '>': - return thread(locmem, THREAD_NEXT); - case 'p': - case 'k': + case Ctrl('H'): + mode = select_read_mode(RS_NEWPOST); + break; + case 'a': + case 'A': + mode = select_read_mode(RS_AUTHOR); + break; + case 'G': + mode = select_read_mode(RS_THREAD); + break; + case '/': + case '?': + mode = select_read_mode(RS_RELATED); + break; + case 'S': + mode = select_read_mode(RS_TITLE); + break; + case '=': + mode = thread(locmem, RELATE_FIRST, &new_ln); + break; + case '\\': + mode = thread(locmem, CURSOR_FIRST, &new_ln); + break; + case ']': + mode = thread(locmem, RELATE_NEXT, &new_ln); + break; + case '+': + mode = thread(locmem, CURSOR_NEXT, &new_ln); + break; + case '[': + mode = thread(locmem, RELATE_PREV, &new_ln); + break; + case '-': + mode = thread(locmem, CURSOR_PREV, &new_ln); + break; + case '<': + case ',': + mode = thread(locmem, THREAD_PREV, &new_ln); + break; + case '.': + case '>': + mode = thread(locmem, THREAD_NEXT, &new_ln); + break; + case 'p': + case 'k': case KEY_UP: - return cursor_pos(locmem, locmem->crs_ln - 1, p_lines - 2); + new_ln = locmem->crs_ln - 1; + break; case 'n': case 'j': case KEY_DOWN: - return cursor_pos(locmem, locmem->crs_ln + 1, 1); + new_ln = locmem->crs_ln + 1; + break; case ' ': case KEY_PGDN: case 'N': case Ctrl('F'): - if (last_line >= locmem->top_ln + p_lines) { - if (last_line > locmem->top_ln + p_lines) - locmem->top_ln += p_lines; - else - locmem->top_ln += p_lines - 1; - locmem->crs_ln = locmem->top_ln; - return PARTUPDATE; - } - cursor_clear(3 + locmem->crs_ln - locmem->top_ln, 0); - locmem->crs_ln = last_line; - cursor_show(3 + locmem->crs_ln - locmem->top_ln, 0); + new_ln = locmem->crs_ln + p_lines; break; case KEY_PGUP: case Ctrl('B'): case 'P': - if (locmem->top_ln > 1) { - locmem->top_ln -= p_lines; - if (locmem->top_ln <= 0) - locmem->top_ln = 1; - locmem->crs_ln = locmem->top_ln; - return PARTUPDATE; - } + new_ln = locmem->crs_ln - p_lines; break; case KEY_END: case '$': - if (last_line >= locmem->top_ln + p_lines) { - locmem->top_ln = last_line - p_lines + 1; - if (locmem->top_ln <= 0) - locmem->top_ln = 1; - locmem->crs_ln = last_line; - return PARTUPDATE; - } - cursor_clear(3 + locmem->crs_ln - locmem->top_ln, 0); - locmem->crs_ln = last_line; - cursor_show(3 + locmem->crs_ln - locmem->top_ln, 0); + new_ln = last_line; break; case 'F': case 'U': @@ -719,11 +691,11 @@ i_read_key(onekey_t * rcmdlist, keeploc_t * locmem, int ch, int bid, int bottom_ mail_forward(&headers[locmem->crs_ln - locmem->top_ln], currdirect, ch /* == 'U' */ ); /* by CharlieL */ - return READ_REDRAW; + mode = READ_REDRAW; } break; case Ctrl('Q'): - return my_query(headers[locmem->crs_ln - locmem->top_ln].owner); + mode = my_query(headers[locmem->crs_ln - locmem->top_ln].owner); case Ctrl('S'): if (HAS_PERM(PERM_ACCOUNTS)) { int id; @@ -734,12 +706,13 @@ i_read_key(onekey_t * rcmdlist, keeploc_t * locmem, int ch, int bid, int bottom_ sizeof(currauthor)); stand_title("使用者設定"); move(1, 0); - if ((id = getuser(headers[locmem->crs_ln - locmem->top_ln].owner))) { + if ((id = getuser(headers[locmem->crs_ln - locmem->top_ln].owner))) + { memcpy(&muser, &xuser, sizeof(muser)); user_display(&muser, 1); uinfo_query(&muser, 1, id); } - return FULLUPDATE; + mode = FULLUPDATE; } break; @@ -759,20 +732,22 @@ i_read_key(onekey_t * rcmdlist, keeploc_t * locmem, int ch, int bid, int bottom_ (currmode & MODE_SELECT) ? (headers[locmem->crs_ln - locmem->top_ln].money & ~FHR_REFERENCE) : locmem->crs_ln, TAG_TOGGLE)) - return POS_NEXT; - return DONOTHING; + new_ln = locmem->crs_ln + 1; + break; case Ctrl('C'): if (TagNum) { TagNum = 0; - return FULLUPDATE; + mode = FULLUPDATE; } - return DONOTHING; + break; case Ctrl('T'): - return TagThread(currdirect); + mode = TagThread(currdirect); + break; case Ctrl('D'): - return TagPruner(bid); + mode = TagPruner(bid); + break; case '\n': case '\r': case 'l': @@ -780,25 +755,28 @@ i_read_key(onekey_t * rcmdlist, keeploc_t * locmem, int ch, int bid, int bottom_ ch = 'r'; default: if( ch == 'h' && currmode & (MODE_ETC | MODE_DIGEST) ) - return DONOTHING; + break; if (ch > 0 && ch <= onekey_size) { int (*func)() = rcmdlist[ch - 1]; if (func != NULL) { - num = locmem->crs_ln - bottom_line; - if (num>0) - { - sprintf(direct,"%s.bottom", currdirect); - mode = (*func)(num, &headers[locmem->crs_ln-locmem->top_ln], + num = locmem->crs_ln - bottom_line; + + if (num>0) + { + sprintf(direct,"%s.bottom", currdirect); + mode= (*func)(num, &headers[locmem->crs_ln-locmem->top_ln], direct); - } - else - mode = (*func)(locmem->crs_ln, + } + else + mode = (*func)(locmem->crs_ln, &headers[locmem->crs_ln - locmem->top_ln], currdirect); } - break; - } + } + break; + } // end switch } + while (mode == DONOTHING); return mode; } @@ -809,6 +787,7 @@ get_records_and_bottom(char *direct, fileheader_t* headers, int n = bottom_line - recbase + 1, rv; char directbottom[60]; + if(!last_line) return 0; if(n>=p_lines || (currmode & (MODE_SELECT | MODE_DIGEST))) return get_records(direct, headers, sizeof(fileheader_t), recbase, p_lines); @@ -829,12 +808,10 @@ void i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey_t * rcmdlist, int bidcache) { keeploc_t *locmem = NULL; - int recbase = 0, mode, ch; + int recbase = 0, mode; int num = 0, entries = 0, n_bottom=0; int i; - int jump = 0; - char genbuf[4]; - char currdirect0[64]; + char currdirect0[64], default_ch = 0; int last_line0 = last_line; int bottom_line = 0; int hit_thread0 = hit_thread; @@ -866,9 +843,6 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey bottom_line = last_line = get_num_records(currdirect, FHSZ); if (mode == NEWDIRECT) { - if (last_line == 0) { - outs("沒有任何文章..\n"); - } num = last_line - p_lines + 1; locmem = getkeep(currdirect, num < 1 ? 1 : num, last_line); } @@ -892,9 +866,7 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey recbase = -1; } } - if (last_line == 0) - goto return_i_read; - else if (recbase != locmem->top_ln) { + if (recbase != locmem->top_ln) { recbase = locmem->top_ln; if (recbase > last_line) { recbase = last_line - p_lines + 1; @@ -911,8 +883,11 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey clrtobot(); case PART_REDRAW: move(3, 0); - for (i = 0; i < entries; i++) - (*doentry) (locmem->top_ln + i, &headers[i]); + if(last_line==0) + outs(" 沒有文章..."); + else + for (i = 0; i < entries; i++) + (*doentry) (locmem->top_ln + i, &headers[i]); case READ_REDRAW: outmsg(curredit & EDIT_ITEM ? "\033[44m 私人收藏 \033[30;47m 繼續? \033[m" : @@ -921,78 +896,46 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey case TITLE_REDRAW: (*dotitle) (); break; - case READ_PREV: - case READ_NEXT: - case RELATE_PREV: - case RELATE_NEXT: - case RELATE_FIRST: - case POS_NEXT: - case 'A': - case 'a': - case '/': - case '?': - jump = 1; - break; } - /* 讀取鍵盤,加以處理,設定 mode */ - if (!jump) { - assert(3 + locmem->crs_ln - locmem->top_ln>=0); // FIXME dunno why - cursor_show(3 + locmem->crs_ln - locmem->top_ln, 0); - ch = egetch(); - mode = DONOTHING; - } else - ch = ' '; - - if (mode == POS_NEXT) { - mode = cursor_pos(locmem, locmem->crs_ln + 1, 1); - if (mode == DONOTHING) - mode = PART_REDRAW; - jump = 0; - } else if (ch >= '0' && ch <= '9') { - if ((i = search_num(ch, last_line)) != -1) - mode = cursor_pos(locmem, i + 1, 10); - } else { - if (!jump) - mode = i_read_key(rcmdlist, locmem, ch, currbid, + mode = i_read_key(rcmdlist, default_ch, locmem, currbid, bottom_line); - while (mode == READ_NEXT || mode == READ_PREV || - mode == RELATE_FIRST || mode == RELATE_NEXT || - mode == RELATE_PREV || mode == THREAD_NEXT || - mode == THREAD_PREV || mode == 'A' || mode == 'a' || - mode == '/' || mode == '?') { - int reload; - - if (mode == READ_NEXT || mode == READ_PREV) - reload = move_cursor_line(locmem, mode); - else { - reload = thread(locmem, mode); - if (!hit_thread) { - mode = FULLUPDATE; - break; - } - } - - if (reload == -1) { - mode = FULLUPDATE; - break; - } else if (reload) { - recbase = locmem->top_ln; - - entries=get_records_and_bottom(currdirect, - headers, recbase, p_lines, last_line, bottom_line); - - } - num = locmem->crs_ln - locmem->top_ln; - if (headers[num].owner[0] != '-') - mode = i_read_key(rcmdlist, locmem, ch, currbid, - bottom_line); - } - } + switch(mode) // 以下這幾種 mode 要再處理游標 + { + case READ_PREV: + default_ch = 'r'; + mode = cursor_pos(locmem, locmem->crs_ln - 1, 10); + break; + case READ_NEXT: + default_ch = 'r'; + mode = cursor_pos(locmem, locmem->crs_ln + 1, 10); + break; + case RELATE_PREV: + default_ch = 'r'; + mode = thread(locmem, RELATE_PREV, &locmem->crs_ln); + break; + case RELATE_NEXT: + default_ch = 'r'; + mode = thread(locmem, RELATE_NEXT, &locmem->crs_ln); + break; + case RELATE_FIRST: + default_ch = 'r'; + mode = thread(locmem, RELATE_FIRST, &locmem->crs_ln); + break; + case 'A': + default_ch = 'r'; + mode = thread(locmem, 'A', &locmem->crs_ln); + break; + case 'a': + default_ch = 'r'; + mode = thread(locmem, 'a', &locmem->crs_ln); + break; + default: + default_ch=0; + } } while (mode != DOQUIT); #undef FHSZ -return_i_read: free(headers); last_line = last_line0; hit_thread = hit_thread0; -- cgit v1.2.3 From 432105a135d72c756520d12ece397d52091585ba Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 07:07:35 +0000 Subject: cursor fixed git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1825 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/read.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mbbsd/read.c b/mbbsd/read.c index 2ea602cb..59eae987 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -235,7 +235,7 @@ cursor_pos(keeploc_t * locmem, int val, int from_top) int top=locmem->top_ln; if (!last_line) { - cursor_show(3 + val - top, 0); + cursor_show(3 , 0); return DONOTHING; } if (val > last_line) { -- cgit v1.2.3 From b640fe2c00e591888ecc1ca594e5e51336c3bf44 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 15:03:54 +0000 Subject: remove useless functions integrate similiar functions git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1827 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- include/proto.h | 7 +++--- mbbsd/bbs.c | 4 ++-- mbbsd/card.c | 2 +- mbbsd/io.c | 25 -------------------- mbbsd/mail.c | 4 ++-- mbbsd/menu.c | 21 +---------------- mbbsd/more.c | 2 +- mbbsd/read.c | 71 ++++++++++++++++++++++++++++++--------------------------- mbbsd/stuff.c | 71 +++++++++++++++++++++++++++------------------------------ mbbsd/talk.c | 1 - mbbsd/user.c | 2 +- mbbsd/var.c | 1 - 12 files changed, 83 insertions(+), 128 deletions(-) diff --git a/include/proto.h b/include/proto.h index b3fed5a6..82865f8d 100644 --- a/include/proto.h +++ b/include/proto.h @@ -312,7 +312,6 @@ void init_alarm(void); int num_in_buf(void); int ochar(int c); int rget(int x,char *prompt); -char getans(char *prompt); /* kaede */ int Rename(char* src, char* dst); @@ -480,11 +479,13 @@ void out_lines(char *str, int line); #define isprint2(ch) ((ch & 0x80) || isprint(ch)) #define not_alpha(ch) (ch < 'A' || (ch > 'Z' && ch < 'a') || ch > 'z') #define not_alnum(ch) (ch < '0' || (ch > '9' && ch < 'A') || (ch > 'Z' && ch < 'a') || ch > 'z') +#define pressanykey() vmsg_lines(b_lines, "") +int vmsg_lines(int lines, const char *msg); time_t gettime(int line, time_t dt, char* head); void setcalfile(char *buf, char *userid); void stand_title(char *title); -void pressanykey(void); -int vmsg (const char *fmt,...) GCC_CHECK_FORMAT(1,2); +int getans(const char *fmt,...) GCC_CHECK_FORMAT(1,2); +int vmsg(const char *fmt,...) GCC_CHECK_FORMAT(1,2); void trim(char *buf); void bell(void); void setbpath(char *buf, char *boardname); diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c index 519ac5aa..a079c11a 100644 --- a/mbbsd/bbs.c +++ b/mbbsd/bbs.c @@ -1176,7 +1176,7 @@ read_post(int ent, fileheader_t * fhdr, char *direct) "(=[]<>)\033[30m相關主題 \033[31m(↑↓)\033[30m上下封 \033[31m(←)" "\033[30m離開 \033[m"); - switch (egetch()) { + switch (igetch()) { case 'q': case 'Q': case KEY_LEFT: @@ -2078,7 +2078,7 @@ sequent_messages(fileheader_t * fptr) "\033[30m下一封 \033[31m(←,q)\033[30m離開 \033[m"); continue_flag = 0; - switch (egetch()) { + switch (igetch()) { case KEY_LEFT: case 'e': case 'q': diff --git a/mbbsd/card.c b/mbbsd/card.c index 2ed12260..4906e5e9 100644 --- a/mbbsd/card.c +++ b/mbbsd/card.c @@ -41,7 +41,7 @@ card_select(int *now) (*now == 2) ? cc[1] : cc[0], (*now == 3) ? cc[1] : cc[0], (*now == 4) ? cc[1] : cc[0]); - switch (egetch()) { + switch (igetch()) { case 'Q': case 'q': return 0; diff --git a/mbbsd/io.c b/mbbsd/io.c index 829386f8..c0f5d721 100644 --- a/mbbsd/io.c +++ b/mbbsd/io.c @@ -587,14 +587,6 @@ getdata_buf(int line, int col, char *prompt, char *buf, int len, int echo) return oldgetdata(line, col, prompt, buf, len, echo); } -char -getans(char *prompt) -{ - char ans[5]; - - getdata(b_lines, 0, prompt, ans, sizeof(ans), LCECHO); - return ans[0]; -} int getdata_str(int line, int col, char *prompt, char *buf, int len, int echo, char *defaultstr) @@ -611,23 +603,6 @@ getdata(int line, int col, char *prompt, char *buf, int len, int echo) return oldgetdata(line, col, prompt, buf, len, echo); } -int -rget(int x, char *prompt) -{ - register int ch; - - move(x, 0); - clrtobot(); - outs(prompt); - refresh(); - - ch = igetch(); - if (ch >= 'A' && ch <= 'Z') - ch = tolower(ch); - - return ch; -} - int igetkey() diff --git a/mbbsd/mail.c b/mbbsd/mail.c index 6c0ae7c7..04c54c97 100644 --- a/mbbsd/mail.c +++ b/mbbsd/mail.c @@ -751,7 +751,7 @@ read_new_mail(fileheader_t * fptr) outs(msg_mailer); refresh(); - switch (egetch()) { + switch (igetch()) { case 'r': case 'R': mail_reply(idc, fptr, currmaildir); @@ -928,7 +928,7 @@ mail_read(int ent, fileheader_t * fhdr, char *direct) refresh(); outs(msg_mailer); - switch (egetch()) { + switch (igetch()) { case 'r': case 'R': replied = YEA; diff --git a/mbbsd/menu.c b/mbbsd/menu.c index 5f8276b8..3c4dcbae 100644 --- a/mbbsd/menu.c +++ b/mbbsd/menu.c @@ -5,25 +5,6 @@ static int refscreen = NA; extern char *boardprefix; extern struct utmpfile_t *utmpshm; - -int -egetch() -{ - int rval; - - while (1) { - rval = igetkey(); - if (talkrequest) { - talkreply(); - refscreen = YEA; - return rval; - } - if (rval != Ctrl('L')) - return rval; - redoscr(); - } -} - extern char *fn_board; extern char board_hidden_status; @@ -311,7 +292,7 @@ domenu(int cmdmode, char *cmdtitle, int cmd, commands_t cmdtable[]) pos++; cursor_show(menu_row + pos, menu_column); - } while (((cmd = egetch()) != EOF) || refscreen); + } while (((cmd = igetch()) != EOF) || refscreen); abort_bbs(0); } diff --git a/mbbsd/more.c b/mbbsd/more.c index 5e3c993a..d8fb9306 100644 --- a/mbbsd/more.c +++ b/mbbsd/more.c @@ -329,7 +329,7 @@ more(char *fpath, int promptend) while (line == b_lines || (line > 0 && viewed == fsize)) { - switch ((ch = egetch())) { + switch ((ch = igetch())) { case ':': { char buf[10]; diff --git a/mbbsd/read.c b/mbbsd/read.c index 59eae987..7fcc9f1e 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -95,7 +95,7 @@ AskTag(char *msg) num = TagNum; snprintf(buf, sizeof(buf), "◆ %s A)文章 T)標記 Q)uit?", msg); - switch (rget(b_lines - 1, buf)) { + switch (getans(buf)) { case 'q': num = -1; break; @@ -579,7 +579,7 @@ i_read_key(onekey_t * rcmdlist, char default_ch, keeploc_t * locmem, { if((mode=cursor_pos(locmem, new_ln, 10))!=DONOTHING) return mode; - ch = egetch(); + ch = igetch(); } switch (ch) { case '0': @@ -598,58 +598,60 @@ i_read_key(onekey_t * rcmdlist, char default_ch, keeploc_t * locmem, case 'q': case 'e': case KEY_LEFT: - if(currmode & MODE_SELECT){ - char genbuf[256]; - fileheader_t *fhdr = &headers[locmem->crs_ln - locmem->top_ln]; - board_select(); - setbdir(genbuf, currboard); - locmem = getkeep(genbuf, 0, 1); - locmem->crs_ln = - getindex(genbuf, fhdr->filename, sizeof(fileheader_t)); - num = locmem->crs_ln - p_lines + 1; - locmem->top_ln = num < 1 ? 1 : num; - - return NEWDIRECT; - } - return (currmode & MODE_ETC) ? board_etc() : - (currmode & MODE_DIGEST) ? board_digest() : DOQUIT; - case Ctrl('L'): - redoscr(); - break; + if(currmode & MODE_SELECT){ + char genbuf[256]; + fileheader_t *fhdr = &headers[locmem->crs_ln - locmem->top_ln]; + board_select(); + setbdir(genbuf, currboard); + locmem = getkeep(genbuf, 0, 1); + locmem->crs_ln = + getindex(genbuf, fhdr->filename, sizeof(fileheader_t)); + num = locmem->crs_ln - p_lines + 1; + locmem->top_ln = num < 1 ? 1 : num; + + mode = NEWDIRECT; + } + else + mode = (currmode & MODE_ETC) ? board_etc() : + (currmode & MODE_DIGEST) ? board_digest() : DOQUIT; + break; + case Ctrl('L'): + redoscr(); + break; - case Ctrl('H'): + case Ctrl('H'): mode = select_read_mode(RS_NEWPOST); break; - case 'a': - case 'A': + case 'a': + case 'A': mode = select_read_mode(RS_AUTHOR); break; - case 'G': + case 'G': mode = select_read_mode(RS_THREAD); break; - case '/': - case '?': + case '/': + case '?': mode = select_read_mode(RS_RELATED); break; - case 'S': + case 'S': mode = select_read_mode(RS_TITLE); break; - case '=': + case '=': mode = thread(locmem, RELATE_FIRST, &new_ln); break; - case '\\': + case '\\': mode = thread(locmem, CURSOR_FIRST, &new_ln); break; - case ']': + case ']': mode = thread(locmem, RELATE_NEXT, &new_ln); break; - case '+': + case '+': mode = thread(locmem, CURSOR_NEXT, &new_ln); break; - case '[': + case '[': mode = thread(locmem, RELATE_PREV, &new_ln); break; - case '-': + case '-': mode = thread(locmem, CURSOR_PREV, &new_ln); break; case '<': @@ -732,7 +734,8 @@ i_read_key(onekey_t * rcmdlist, char default_ch, keeploc_t * locmem, (currmode & MODE_SELECT) ? (headers[locmem->crs_ln - locmem->top_ln].money & ~FHR_REFERENCE) : locmem->crs_ln, TAG_TOGGLE)) - new_ln = locmem->crs_ln + 1; + locmem->crs_ln = locmem->crs_ln + 1; + mode = PART_REDRAW; break; case Ctrl('C'): diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index e088b116..ba29c84e 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -401,47 +401,19 @@ capture_screen() } } -void -pressanykey() -{ - int ch; - - outmsg("\033[37;45;1m " - "● 請按 \033[33m(Space/Return)\033[37m 繼續 ●" - " \033[33m(^T)\033[37m 存暫存檔 \033[m"); - do { - ch = igetkey(); - - if (ch == Ctrl('T')) { - capture_screen(); - break; - } - } while ((ch != ' ') && (ch != KEY_LEFT) && (ch != '\r') && (ch != '\n')); - move(b_lines, 0); - clrtoeol(); - refresh(); -} - int -vmsg(const char *fmt,...) +vmsg_lines(const int lines, const char msg[]) { - va_list ap; - char msg[80] = {0}; int ch; - va_start(ap, fmt); - vsnprintf(msg, sizeof(msg), fmt, ap); - va_end(ap); - - move(b_lines, 0); + move(lines, 0); clrtoeol(); - if (*msg) - prints("\033[1;36;44m ◆ %-55.54s \033[33;46m \033[200m\033[1431m\033[506m[請按任意鍵繼續]\033[201m \033[m", msg); + if (msg) + outs(msg); else - outs("\033[46;1m \033[37m" - "\033[200m\033[1431m\033[506m□ 請按 \033[33m(Space/Return)\033[37m 繼續 □\033[201m" - " \033[m"); + outs("\033[46;1m \033[37m" + "\033[200m\033[1431m\033[506m□ 請按 \033[33m(Space/Return)\033[37m 繼續 □\033[201m (^T) 收到暫存檔 \033[m"); do { ch = igetkey(); @@ -453,12 +425,37 @@ vmsg(const char *fmt,...) } while ((ch != ' ') && (ch != KEY_LEFT) && (ch != '\r') && (ch != '\n')); - move(b_lines, 0); + move(lines, 0); clrtoeol(); - refresh(); return ch; } +int +getans(const char *fmt,...) +{ + char msg[80] = {0}; + va_list ap; + va_start(ap, fmt); + vsnprintf(msg, sizeof(msg), fmt, ap); + va_end(ap); + return vmsg_lines(b_lines, msg); +} + +int +vmsg(const char *fmt,...) +{ + char msg[80] = "\033[1;36;44m ◆ ", i; + va_list ap; + va_start(ap, fmt); + vsnprintf(msg+14, 55, fmt, ap); + va_end(ap); + for(i=69; i>0 && *(msg+i); i--) + *(msg+i) = ' '; + strcat(msg+69,"\033[33;46m \033[200m\033[1431m\033[506m[請按任意鍵繼續]\033[201m \033[m"); + return vmsg_lines(b_lines, msg); +} + + void bell() { @@ -548,7 +545,7 @@ cursor_key(int row, int column) int ch; cursor_show(row, column); - ch = egetch(); + ch = igetch(); move(row, column); outs(STR_UNCUR); return ch; diff --git a/mbbsd/talk.c b/mbbsd/talk.c index ca337041..818591dc 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -2616,7 +2616,6 @@ talkreply(void) char genbuf[200]; int a, sig = currutmp->sig; - talkrequest = NA; uip = &SHM->uinfo[currutmp->destuip]; snprintf(page_requestor, sizeof(page_requestor), "%s (%s)", uip->userid, uip->username); diff --git a/mbbsd/user.c b/mbbsd/user.c index 4a531d10..103bd2d7 100644 --- a/mbbsd/user.c +++ b/mbbsd/user.c @@ -1551,6 +1551,6 @@ u_list() clrtoeol(); prints("\033[34;46m 已顯示 %d/%d 的使用者(系統容量無上限) " "\033[31;47m (請按任意鍵繼續) \033[m", usercounter, totalusers); - egetch(); + igetch(); return 0; } diff --git a/mbbsd/var.c b/mbbsd/var.c index c9347b20..f559eb6a 100644 --- a/mbbsd/var.c +++ b/mbbsd/var.c @@ -382,7 +382,6 @@ char real_name[IDLEN + 1]; int local_article; /* mbbsd.c */ -int talkrequest = NA; char fromhost[STRLEN] = "\0"; char water_usies = 0; FILE *fp_writelog = NULL; -- cgit v1.2.3 From 91f6682a7690a4dd6ae160804b2009a0a98f8122 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 16:26:20 +0000 Subject: integrate igetkey igetch egetch git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1828 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/chat.c | 2 +- mbbsd/chc.c | 6 ++-- mbbsd/chicken.c | 2 +- mbbsd/dark.c | 4 +-- mbbsd/edit.c | 4 +-- mbbsd/gomo.c | 2 +- mbbsd/io.c | 95 ++++++++++++++++++++++----------------------------------- mbbsd/mbbsd.c | 2 +- mbbsd/othello.c | 4 +-- mbbsd/stuff.c | 11 ++----- mbbsd/talk.c | 4 +-- 11 files changed, 55 insertions(+), 81 deletions(-) diff --git a/mbbsd/chat.c b/mbbsd/chat.c index f94cfc5f..06f706c3 100644 --- a/mbbsd/chat.c +++ b/mbbsd/chat.c @@ -386,7 +386,7 @@ t_chat() while (chatting) { move(b_lines - 1, currchar + chatid_len); - ch = igetkey(); + ch = igetch(); switch (ch) { case KEY_DOWN: diff --git a/mbbsd/chc.c b/mbbsd/chc.c index 12aed0ad..d80cf276 100644 --- a/mbbsd/chc.c +++ b/mbbsd/chc.c @@ -575,14 +575,14 @@ hisplay(int s, chcusr_t *user1, chcusr_t *user2, board_t board, board_t tmpbrd) if (chc_lefttime < 0) { chc_lefttime = 0; - /* to make him break out igetkey() */ + /* to make him break out igetch() */ chc_from.r = -2; chc_broadcast_send(act_list, board); } chc_drawline(board, user1, user2, TIME_ROW); move(1, 0); oflush(); - switch (igetkey()) { + switch (igetch()) { case 'q': endgame = 2; endturn = 1; @@ -653,7 +653,7 @@ myplay(int s, chcusr_t *user1, chcusr_t *user2, board_t board, board_t tmpbrd) chc_drawline(board, user1, user2, TIME_ROW); chc_movecur(chc_cursor.r, chc_cursor.c); oflush(); - ch = igetkey(); + ch = igetch(); chc_lefttime = CHC_TIMEOUT - (now - start_time); if (chc_lefttime < 0) ch = 'q'; diff --git a/mbbsd/chicken.c b/mbbsd/chicken.c index 1685d842..bc97cc58 100644 --- a/mbbsd/chicken.c +++ b/mbbsd/chicken.c @@ -941,7 +941,7 @@ chickenpk(int fd) add_io(fd, 3); /* 把fd加到igetch監視 */ while (1) { r = rand(); - ch = igetkey(); + ch = igetch(); getuser(mateid); memcpy(&ouser, &xuser, sizeof(userec_t)); reload_chicken(); diff --git a/mbbsd/dark.c b/mbbsd/dark.c index 4c9c6486..60f64dbd 100644 --- a/mbbsd/dark.c +++ b/mbbsd/dark.c @@ -1,4 +1,4 @@ -/* $Id: dark.c,v 1.8 2002/07/22 19:02:00 in2 Exp $ */ +/* $Id$ */ #include "bbs.h" #define RED 1 @@ -396,7 +396,7 @@ main_dark(int fd, userinfo_t * uin) end = -1; break; } - ch = igetkey(); + ch = igetch(); if (ch == I_OTHERDATA) { ch = recv(fd, &curr, sizeof(curr), 0); if (ch != sizeof(curr)) { diff --git a/mbbsd/edit.c b/mbbsd/edit.c index acc7bac0..897c7178 100644 --- a/mbbsd/edit.c +++ b/mbbsd/edit.c @@ -258,7 +258,7 @@ ask(char *prompt) standout(); prints("%s", prompt); standend(); - ch = igetkey(); + ch = igetch(); move(0, 0); clrtoeol(); return (ch); @@ -1682,7 +1682,7 @@ vedit(char *fpath, int saveheader, int *islocal) move(curr_window_line, ch); if (!line_dirty && strcmp(line, currline->data)) strcpy(line, currline->data); - ch = igetkey(); + ch = igetch(); /* jochang debug */ if ((interval = (now - th))) { th = now; diff --git a/mbbsd/gomo.c b/mbbsd/gomo.c index 55060b67..82e9af8f 100644 --- a/mbbsd/gomo.c +++ b/mbbsd/gomo.c @@ -371,7 +371,7 @@ gomoku(int fd) } else clrtoeol(); BGOTOCUR(mv.x, mv.y); - ch = igetkey(); + ch = igetch(); if (ch != I_OTHERDATA) iwantpass = 0; if (ch == 'q') { diff --git a/mbbsd/io.c b/mbbsd/io.c index c0f5d721..3429a3c3 100644 --- a/mbbsd/io.c +++ b/mbbsd/io.c @@ -174,6 +174,7 @@ dogetch() if (len == 0 || errno != EINTR) abort_bbs(0); /* raise(SIGHUP); */ + } #ifdef SKIP_TELNET_CONTROL_SIGNAL } while( inbuf[0] == -1 ); @@ -198,9 +199,34 @@ static int water_which_flag = 0; int igetch() { - register int ch; - while ((ch = dogetch())) { + register int ch, mode =0, last; + while ((ch = dogetch())) { + if (mode == 0 && ch == KEY_ESC) // here is state machine for 2 bytes key + mode = 1; + else if (mode == 1) { /* Escape sequence */ + if (ch == '[' || ch == 'O') + mode = 2; + else if (ch == '1' || ch == '4') + { mode = 3; last = ch; } + else + { + KEY_ESC_arg = ch; + return KEY_ESC; + } + } else if (mode == 2) { /* Cursor key */ + if (ch >= 'A' && ch <= 'D') + return KEY_UP + (ch - 'A'); + else if (ch >= '1' && ch <= '6') + { mode = 3; last = ch; } + } else if (mode == 3) { /* Ins Del Home End PgUp PgDn */ + if (ch == '~') + return KEY_HOME + (last - '1'); + } + else // here is switch for default keys switch (ch) { + case IAC: + case '\n': /* filters */ + continue; #ifdef DEBUG case Ctrl('Q'):{ struct rusage ru; @@ -234,8 +260,8 @@ igetch() free(screen0); redoscr(); continue; - } else - return (ch); + } + return ch; case KEY_TAB: if (WATERMODE(WATER_ORIG) || WATERMODE(WATER_NEW)) if (currutmp != NULL && watermode > 0) { @@ -244,8 +270,7 @@ igetch() t_display_new(); continue; } - return ch; - break; + return ch; case Ctrl('R'): if (currutmp == NULL) @@ -304,9 +329,7 @@ igetch() continue; } } - return ch; - case '\n': /* Ptt把 \n拿掉 */ - continue; + return ch; case Ctrl('T'): if (WATERMODE(WATER_ORIG) || WATERMODE(WATER_NEW)) { if (watermode > 0) { @@ -318,7 +341,7 @@ igetch() continue; } } - return (ch); + return ch; case Ctrl('F'): if (WATERMODE(WATER_NEW)) { @@ -337,7 +360,7 @@ igetch() continue; } } - return ch; + return ch; case Ctrl('G'): if (WATERMODE(WATER_NEW)) { @@ -352,14 +375,10 @@ igetch() continue; } } - return ch; - case IAC: - // disallow user input telnet protocol leading char IAC chr(255) - // TODO parse telnet protocol - continue; + return ch; default: - return ch; + return ch; } } return 0; @@ -485,7 +504,7 @@ oldgetdata(int line, int col, char *prompt, char *buf, int len, int echo) edit_outs(buf); clen = currchar = strlen(buf); - while (move(y, x + currchar), (ch = igetkey()) != '\r') { + while (move(y, x + currchar), (ch = igetch()) != '\r') { switch (ch) { case KEY_DOWN: case Ctrl('N'): case KEY_UP: case Ctrl('P'): @@ -604,43 +623,3 @@ getdata(int line, int col, char *prompt, char *buf, int len, int echo) } -int -igetkey() -{ - int mode; - int ch, last; - - mode = last = 0; - while (1) { - if( !(ch = igetch()) ) - continue; - if (mode == 0) { - if (ch == KEY_ESC) - mode = 1; - else - return ch; /* Normal Key */ - } else if (mode == 1) { /* Escape sequence */ - if (ch == '[' || ch == 'O') - mode = 2; - else if (ch == '1' || ch == '4') - mode = 3; - else { - KEY_ESC_arg = ch; - return KEY_ESC; - } - } else if (mode == 2) { /* Cursor key */ - if (ch >= 'A' && ch <= 'D') - return KEY_UP + (ch - 'A'); - else if (ch >= '1' && ch <= '6') - mode = 3; - else - return ch; - } else if (mode == 3) { /* Ins Del Home End PgUp PgDn */ - if (ch == '~') - return KEY_HOME + (last - '1'); - else - return ch; - } - last = ch; - } -} diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c index d881c2b2..41af43fb 100644 --- a/mbbsd/mbbsd.c +++ b/mbbsd/mbbsd.c @@ -424,7 +424,7 @@ write_request(int sig) memmove(&currutmp->msgs[0], &currutmp->msgs[1], sizeof(msgque_t) * currutmp->msgcount); - igetkey(); + igetch(); } } diff --git a/mbbsd/othello.c b/mbbsd/othello.c index 96fea2e2..eba90375 100644 --- a/mbbsd/othello.c +++ b/mbbsd/othello.c @@ -124,7 +124,7 @@ get_key(char nowx, char nowy) int ch; move(STARTX - 1 + nowx * 2, STARTY - 1 + nowy * 4); - ch = igetkey(); + ch = igetch(); move(STARTX - 1 + nowx * 2, STARTY - 2 + nowy * 4); if (nowboard[(int)nowx][(int)nowy] != HINT || if_hint == 1) outs(CHESS_TYPE[(int)nowboard[(int)nowx][(int)nowy]]); @@ -274,7 +274,7 @@ end_of_game(int quit) if (fp) fclose(fp); move(1, 1); - igetkey(); + igetch(); } static void diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index ba29c84e..605e8cd3 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -415,15 +415,10 @@ vmsg_lines(const int lines, const char msg[]) outs("\033[46;1m \033[37m" "\033[200m\033[1431m\033[506m□ 請按 \033[33m(Space/Return)\033[37m 繼續 □\033[201m (^T) 收到暫存檔 \033[m"); - do { - ch = igetkey(); - - if (ch == Ctrl('T')) { + ch = igetch(); + if (ch == Ctrl('T')) { capture_screen(); - break; } - } while ((ch != ' ') && (ch != KEY_LEFT) && (ch != '\r') && (ch != '\n')); - move(lines, 0); clrtoeol(); @@ -449,7 +444,7 @@ vmsg(const char *fmt,...) va_start(ap, fmt); vsnprintf(msg+14, 55, fmt, ap); va_end(ap); - for(i=69; i>0 && *(msg+i); i--) + for(i=69; i>0 && *(msg+i+1); i--) *(msg+i) = ' '; strcat(msg+69,"\033[33;46m \033[200m\033[1431m\033[506m[請按任意鍵繼續]\033[201m \033[m"); return vmsg_lines(b_lines, msg); diff --git a/mbbsd/talk.c b/mbbsd/talk.c index 818591dc..92053e60 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -512,7 +512,7 @@ my_write2(void) which = 0; do { - switch ((ch = igetkey())) { + switch ((ch = igetch())) { case Ctrl('T'): case KEY_UP: if (water_usies != 1) { @@ -1055,7 +1055,7 @@ do_talk(int fd) add_io(fd, 0); while (1) { - ch = igetkey(); + ch = igetch(); if (ch == I_OTHERDATA) { datac = recv(fd, data, sizeof(data), 0); if (datac <= 0) -- cgit v1.2.3 From 747a79d7325bfc5064275448a8580ab49588db5a Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 16:34:21 +0000 Subject: a small bug fixed git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1829 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/io.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/mbbsd/io.c b/mbbsd/io.c index 3429a3c3..21a8045b 100644 --- a/mbbsd/io.c +++ b/mbbsd/io.c @@ -213,13 +213,11 @@ igetch() KEY_ESC_arg = ch; return KEY_ESC; } - } else if (mode == 2) { /* Cursor key */ - if (ch >= 'A' && ch <= 'D') - return KEY_UP + (ch - 'A'); - else if (ch >= '1' && ch <= '6') + } else if (mode == 2 && ch >= 'A' && ch <= 'D') /* Cursor key */ + return KEY_UP + (ch - 'A'); + else if (mode == 2 && ch >= '1' && ch <= '6') { mode = 3; last = ch; } - } else if (mode == 3) { /* Ins Del Home End PgUp PgDn */ - if (ch == '~') + else if (mode == 3 && ch == '~') { /* Ins Del Home End PgUp PgDn */ return KEY_HOME + (last - '1'); } else // here is switch for default keys -- cgit v1.2.3 From fac5bbd80755f185a26df033a9783aae182b600e Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 17:34:42 +0000 Subject: chage a little on color git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1830 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/menu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mbbsd/menu.c b/mbbsd/menu.c index 3c4dcbae..a8dacf3c 100644 --- a/mbbsd/menu.c +++ b/mbbsd/menu.c @@ -87,9 +87,9 @@ show_status(void) i = ptime->tm_wday << 1; snprintf(mystatus, sizeof(mystatus), - "\033[34;46m[%d/%d 星期%c%c %d:%02d]\033[1;33;45m%-14s" - "\033[30;47m 目前坊裡有\033[31m%d\033[30m人, 我是\033[31m%-12s" - "\033[30m[扣機]\033[31m%s\033[0m", + TITLE_COLOR" %d/%d 星期%c%c %d:%02d %-14s" + "\033[1;30;47m 目前坊裡有\033[;31;47m%d\033[1;30;47m人, " + "我是\033[0;31;47m%-12s\033[1;30;47m[扣機]\033[0;31;47m%s\033[0m", ptime->tm_mon + 1, ptime->tm_mday, myweek[i], myweek[i + 1], ptime->tm_hour, ptime->tm_min, currutmp->birth ? "生日要請客唷" : SHM->today_is, -- cgit v1.2.3 From 8e3a8b2bcaadc819bf4bfa5fd7d36d8701d2076c Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 17:46:00 +0000 Subject: for foreigner git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1831 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/mbbsd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c index 41af43fb..2b1db5a8 100644 --- a/mbbsd/mbbsd.c +++ b/mbbsd/mbbsd.c @@ -873,7 +873,7 @@ static void init_guest_info(void) currutmp->pager = 2; } -#ifdef FOREIGN_REG +#ifdef FOREIGN_REG_DAY inline static void foreign_warning(void){ if ((cuser.uflag2 & FOREIGN) && !(cuser.uflag2 & LIVERIGHT)){ if (login_start_time - cuser.firstlogin > (FOREIGN_REG_DAY - 5) * 24 * 3600){ @@ -981,7 +981,7 @@ user_login() if (!PERM_HIDE(currutmp)) cuser.lastlogin = login_start_time; -#ifdef FOREIGN_REG +#ifdef FOREIGN_REG_DAY foreign_warning(); #endif passwd_update(usernum, &cuser); -- cgit v1.2.3 From b282f3c6dca2a15ef4da7ee6c1f970e5ae926b67 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 20:14:20 +0000 Subject: reoragnize functions mprints, pprints -> mouts remove useless refresh, pressanykey(), sleep,... git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1833 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- include/modes.h | 2 +- include/proto.h | 1 - mbbsd/admin.c | 14 +++++------- mbbsd/announce.c | 7 ++---- mbbsd/bbs.c | 40 +++++++++++---------------------- mbbsd/board.c | 23 ++++++++++--------- mbbsd/cal.c | 54 ++++++--------------------------------------- mbbsd/card.c | 48 ++++++++++------------------------------ mbbsd/chicken.c | 13 ++++------- mbbsd/dark.c | 36 +++++++++++++++--------------- mbbsd/edit.c | 3 +-- mbbsd/gamble.c | 4 +--- mbbsd/io.c | 2 +- mbbsd/mail.c | 67 ++++++++++++++------------------------------------------ mbbsd/mbbsd.c | 18 ++------------- mbbsd/name.c | 14 +++--------- mbbsd/read.c | 13 ++++++----- mbbsd/register.c | 21 ++++-------------- mbbsd/screen.c | 2 +- mbbsd/talk.c | 22 ++++--------------- mbbsd/vote.c | 3 +-- mbbsd/xyz.c | 6 ++--- 22 files changed, 116 insertions(+), 297 deletions(-) diff --git a/include/modes.h b/include/modes.h index 16d23754..1a180055 100644 --- a/include/modes.h +++ b/include/modes.h @@ -13,7 +13,7 @@ #define READ_REDRAW 9 #define PART_REDRAW 10 #define TITLE_REDRAW 11 -#define POS_NEXT 101 /* cursor_pos(locmem, locmem->crs_ln + 1, 1);*/ +#define READ_SKIP 12 /* user 操作狀態與模式 */ #define IDLE 0 diff --git a/include/proto.h b/include/proto.h index 82865f8d..097829b7 100644 --- a/include/proto.h +++ b/include/proto.h @@ -459,7 +459,6 @@ void clrtoeol(void); void clear(void); void refresh(void); void clrtobot(void); -void mprints(int y, int x, char *str); void outmsg(char *msg); void region_scroll_up(int top, int bottom); void outc(unsigned char ch); diff --git a/mbbsd/admin.c b/mbbsd/admin.c index 53140e27..02bab271 100644 --- a/mbbsd/admin.c +++ b/mbbsd/admin.c @@ -134,7 +134,6 @@ search_key_user(char *passwdfile, int mode) fclose(fp1); return 0; } else { - move(b_lines - 1, 0); getdata(0, 0, "目前的 PASSWD 檔沒有此 ID,新增嗎?[y/N]", genbuf, 3, LCECHO); @@ -955,15 +954,13 @@ scan_register_form(char *regfile, int automode, int neednum) prints("%d.%-12s:%s\n", n - 2, finfo[n], fdata[n]); } if (muser.userlevel & PERM_LOGINOK) { - getdata(b_lines - 1, 0, "\033[1;32m此帳號已經完成註冊, " - "更新(Y/N/Skip)?\033[m[N] ", ans, sizeof(ans), LCECHO); + ans[0]=getans("此帳號已經完成註冊, " + "更新(Y/N/Skip)?[N] "); if (ans[0] != 'y' && ans[0] != 's') ans[0] = 'd'; } else { - move(b_lines - 1, 0); - prints("是否接受此資料(Y/N/Q/Del/Skip)?[S] "); if (search_ulist(unum) == NULL) - ans[0] = igetch(); + ans[0] = getans("是否接受此資料(Y/N/Q/Del/Skip)?[S] "); else ans[0] = 's'; if ('A' <= ans[0] && ans[0] <= 'Z') @@ -1161,10 +1158,9 @@ cat_register() { if (system("cat register.new.tmp >> register.new") == 0 && system("rm -f register.new.tmp") == 0) - mprints(22, 0, "OK 嚕~~ 繼續去奮鬥吧!!"); + vmsg(22, 0, "OK 嚕~~ 繼續去奮鬥吧!!"); else - mprints(22, 0, "沒辦法CAT過去呢 去檢查一下系統吧!!"); - pressanykey(); + vmsg(22, 0, "沒辦法CAT過去呢 去檢查一下系統吧!!"); return 0; } diff --git a/mbbsd/announce.c b/mbbsd/announce.c index 21696789..30fe76f3 100644 --- a/mbbsd/announce.c +++ b/mbbsd/announce.c @@ -317,8 +317,7 @@ a_pasteitem(menu_t * pm, int mode) if (dashd(copyfile)) { for (i = 0; copyfile[i] && copyfile[i] == pm->path[i]; i++); if (!copyfile[i]) { - outs("將目錄拷進自己的子目錄中,會造成無窮迴圈!"); - igetch(); + vmsg("將目錄拷進自己的子目錄中,會造成無窮迴圈!"); return; } } @@ -682,9 +681,7 @@ a_showname(menu_t * pm) sym = 1; } if (sym) { - pressanykey(); - move(b_lines - 1, 1); - prints("此 symbolic link 指向 %s\n", &buf[i + 1]); + vmsg("此 symbolic link 指向 %s\n", &buf[i + 1]); } } } diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c index a079c11a..4bf0fab4 100644 --- a/mbbsd/bbs.c +++ b/mbbsd/bbs.c @@ -57,7 +57,7 @@ save_violatelaw() stand_title("繳罰單中心"); if (!(cuser.userlevel & PERM_VIOLATELAW)) { - mprints(22, 0, "\033[1;31m你無聊啊? 你又沒有被開罰單~~\033[m"); + mouts(22, 0, "\033[1;31m你無聊啊? 你又沒有被開罰單~~\033[m"); pressanykey(); return 0; } @@ -66,7 +66,7 @@ save_violatelaw() snprintf(buf, sizeof(buf), "\033[1;31m這是你第 %d 次違反本站法規" "必須繳出 %d $Ptt ,你只有 %d 元, 錢不夠啦!!\033[m", (int)cuser.vl_count, (int)cuser.vl_count * 1000, cuser.money); - mprints(22, 0, buf); + mouts(22, 0, buf); pressanykey(); return 0; } @@ -77,19 +77,19 @@ save_violatelaw() if (!getdata(10, 0, "確定嗎?[y/n]:", ok, sizeof(ok), LCECHO) || ok[0] == 'n' || ok[0] == 'N') { - mprints(22, 0, "\033[1;31m等你想通了再來吧!! " + mouts(22, 0, "\033[1;31m等你想通了再來吧!! " "我相信你不會知錯不改的~~~\033[m"); pressanykey(); return 0; } snprintf(buf, sizeof(buf), "這是你第 %d 次違法 必須繳出 %d $Ptt", cuser.vl_count, cuser.vl_count * 1000); - mprints(11, 0, buf); + mouts(11, 0, buf); if (!getdata(10, 0, "要付錢[y/n]:", ok, sizeof(ok), LCECHO) || ok[0] == 'N' || ok[0] == 'n') { - mprints(22, 0, "\033[1;31m 嗯 存夠錢 再來吧!!!\033[m"); + mouts(22, 0, "\033[1;31m 嗯 存夠錢 再來吧!!!\033[m"); pressanykey(); return 0; } @@ -1129,12 +1129,12 @@ read_post(int ent, fileheader_t * fhdr, char *direct) int more_result; if (fhdr->owner[0] == '-') - return DONOTHING; + return READ_SKIP; setdirpath(genbuf, direct, fhdr->filename); if ((more_result = more(genbuf, YEA)) == -1) - return FULLUPDATE; + return READ_SKIP; brc_addlist(fhdr->filename); strncpy(currtitle, subject(fhdr->title), TTLEN); @@ -1321,9 +1321,7 @@ hold_gamble(int ent, fileheader_t * fhdr, char *direct) openticket(currbid); return FULLUPDATE; } else if (dashf(genbuf)) { - move(b_lines - 1, 0); - prints(" 目前系統正在處理開獎事宜, 請結果出爐後再舉辦......."); - pressanykey(); + vmsg(" 目前系統正在處理開獎事宜, 請結果出爐後再舉辦......."); return FULLUPDATE; } getdata(b_lines - 2, 0, "要舉辦賭盤 (N/y):", yn, 3, LCECHO); @@ -1687,9 +1685,7 @@ recommend(int ent, fileheader_t * fhdr, char *direct) #ifndef DEBUG if (!(currmode & MODE_BOARD) && getuser(cuser.userid) && now - lastrecommend < 40) { - move(b_lines - 1, 0); - prints("離上次推薦時間太近囉, 請多花點時間仔細閱\讀文章!"); - pressanykey(); + vmsg("離上次推薦時間太近囉, 請多花點時間仔細閱\讀文章!"); return FULLUPDATE; } #endif @@ -1933,13 +1929,9 @@ del_post(int ent, fileheader_t * fhdr, char *direct) if (cuser.numposts) cuser.numposts--; if (!(currmode & MODE_DIGEST && currmode & MODE_BOARD)){ - move(b_lines - 1, 0); - clrtoeol(); demoney(-fhdr->money); - prints("%s,您的文章減為 %d 篇,支付清潔費 %d 銀", msg_del_ok, + vmsg("%s,您的文章減為 %d 篇,支付清潔費 %d 銀", msg_del_ok, cuser.numposts, fhdr->money); - refresh(); - pressanykey(); } } return DIRCHANGED; @@ -1953,30 +1945,24 @@ show_filename(int ent, fileheader_t * fhdr, char *direct) { if(!HAS_PERM(PERM_SYSOP)) return DONOTHING; - move(b_lines - 1, 0); - prints("檔案名稱: %s ", fhdr->filename); - pressanykey(); + vmsg("檔案名稱: %s ", fhdr->filename); return PART_REDRAW; } static int view_postmoney(int ent, fileheader_t * fhdr, char *direct) { - move(b_lines - 1, 0); if(currmode & MODE_SELECT){ vmsg("請在離開目前的選擇模式再查詢"); return FULLUPDATE; } - clrtoeol(); if(fhdr->filemode & FILE_ANONYMOUS) /* When the file is anonymous posted, fhdr->money is author. * see do_general() */ - prints("匿名管理編號: %d (同一人被查詢時編號相同, 此編號每人看到不相同)", + vmsg("匿名管理編號: %d (同一人被查詢時編號相同, 此編號每人看到不相同)", fhdr->money + currutmp->pid); else - prints("這一篇文章值 %d 銀", fhdr->money); - refresh(); - pressanykey(); + vmsg("這一篇文章值 %d 銀", fhdr->money); return FULLUPDATE; } diff --git a/mbbsd/board.c b/mbbsd/board.c index 7cfeabd1..dd7dba76 100644 --- a/mbbsd/board.c +++ b/mbbsd/board.c @@ -432,7 +432,7 @@ show_brdlist(int head, int clsflag, int newflag) if (yank_flag == 0 && get_fav_type(&nbrd[0]) == 0){ move(3, 0); - prints(" --- 空目錄 ---"); + outs(" --- 空目錄 ---"); return; } @@ -468,9 +468,9 @@ show_brdlist(int head, int clsflag, int newflag) } if (class_bid == 1) - prints(" "); + outs(" "); if (!newflag) { - prints("%5d%c%s", head, + outs("%5d%c%s", head, !(B_BH(ptr)->brdattr & BRD_HIDE) ? ' ' : (B_BH(ptr)->brdattr & BRD_POSTMASK) ? ')' : '-', (ptr->myattr & NBRD_TAG) ? "D " : @@ -478,14 +478,14 @@ show_brdlist(int head, int clsflag, int newflag) unread[ptr->myattr & NBRD_UNREAD ? 1 : 0]); } else { if (B_BH(ptr)->brdattr & BRD_GROUPBOARD) - prints(" "); + outs(" "); else prints("%6d%s", (int)(B_TOTAL(ptr)), unread[ptr->myattr & NBRD_UNREAD ? 1 : 0]); } if (class_bid != 1) { if (!GROUPOP() && !HasPerm(B_BH(ptr))) { - prints("Unknown?? 隱板 ?這個板是隱板"); + outs("Unknown?? 隱板 ?這個板是隱板"); } else { prints("%s%-13s\033[m%s%5.5s\033[0;37m%2.2s\033[m" @@ -499,15 +499,15 @@ show_brdlist(int head, int clsflag, int newflag) B_BH(ptr)->title, B_BH(ptr)->title + 5, B_BH(ptr)->title + 7); if (B_BH(ptr)->brdattr & BRD_BAD) - prints(" X "); + outs(" X "); else if (B_BH(ptr)->nuser >= 5000) - prints("\033[1;34m爆!\033[m"); + outs("\033[1;34m爆!\033[m"); else if (B_BH(ptr)->nuser >= 2000) - prints("\033[1;31m爆!\033[m"); + outs("\033[1;31m爆!\033[m"); else if (B_BH(ptr)->nuser >= 1000) - prints("\033[1m爆!\033[m"); + outs("\033[1m爆!\033[m"); else if (B_BH(ptr)->nuser >= 100) - prints("\033[1mHOT\033[m"); + outs("\033[1mHOT\033[m"); else if (B_BH(ptr)->nuser > 50) prints("\033[1;31m%2d\033[m ", B_BH(ptr)->nuser); else if (B_BH(ptr)->nuser > 10) @@ -614,9 +614,8 @@ choose_board(int newflag) load_boards(keyword); if (brdnum <= 0 && yank_flag > 0) { if (keyword[0] != 0) { - mprints(b_lines - 1, 0, "沒有任何看板標題有此關鍵字 " + vmsg("沒有任何看板標題有此關鍵字 " "(板主應注意看板標題命名)"); - pressanykey(); keyword[0] = 0; brdnum = -1; continue; diff --git a/mbbsd/cal.c b/mbbsd/cal.c index dca13c4d..3430ae75 100644 --- a/mbbsd/cal.c +++ b/mbbsd/cal.c @@ -96,18 +96,13 @@ osong(char *defaultid) /* Jaky 一人一天點一首 */ if (!strcmp(buf, Cdatedate(&cuser.lastsong)) && !HAS_PERM(PERM_SYSOP)) { move(22, 0); - outs("你今天已經點過囉,明天再點吧...."); - refresh(); - pressanykey(); - + vmsg("你今天已經點過囉,明天再點吧...."); unlockutmpmode(); return 0; } if (cuser.money < 200) { move(22, 0); - outs("點歌要200銀唷!...."); - refresh(); - pressanykey(); + vmsg("點歌要200銀唷!...."); unlockutmpmode(); return 0; } @@ -262,18 +257,12 @@ inmailbox(int m) int p_cloak() { - char buf[4]; - getdata(b_lines - 1, 0, - currutmp->invisible ? "確定要現身?[y/N]" : "確定要隱身?[y/N]", - buf, sizeof(buf), LCECHO); - if (buf[0] != 'y') + if (getans(currutmp->invisible ? "確定要現身?[y/N]" : "確定要隱身?[y/N]") != 'y') return 0; if (cuser.money >= 19) { vice(19, "付費隱身"); currutmp->invisible %= 2; - outs((currutmp->invisible ^= 1) ? MSG_CLOAKED : MSG_UNCLOAK); - refresh(); - safe_sleep(1); + vmsg((currutmp->invisible ^= 1) ? MSG_CLOAKED : MSG_UNCLOAK); } return 0; } @@ -282,10 +271,7 @@ p_cloak() int p_from() { - char ans[4]; - - getdata(b_lines - 2, 0, "確定要改故鄉?[y/N]", ans, sizeof(ans), LCECHO); - if (ans[0] != 'y') + if (getans("確定要改故鄉?[y/N]") != 'y') return 0; reload_money(); if (cuser.money < 49) @@ -305,8 +291,7 @@ p_exmail() int n; if (cuser.exmailbox >= MAX_EXKEEPMAIL) { - prints("容量最多增加 %d 封,不能再買了。", MAX_EXKEEPMAIL); - refresh(); + vmsg("容量最多增加 %d 封,不能再買了。", MAX_EXKEEPMAIL); return 0; } snprintf(buf, sizeof(buf), @@ -393,9 +378,7 @@ p_give() snprintf(genbuf, sizeof(genbuf), "%s\t給%s\t%d\t%s", cuser.userid, id, money - tax, ctime(&now)); log_file(FN_MONEY, genbuf, 1); - genbuf[0] = 'n'; - getdata(3, 0, "要自行書寫紅包袋嗎?[y/N]", genbuf, 2, LCECHO); - mail_redenvelop(cuser.userid, id, money - tax, genbuf[0]); + mail_redenvelop(cuser.userid, id, money - tax, getans("要自行書寫紅包袋嗎?[y/N]")); } return 0; } @@ -444,26 +427,3 @@ p_sysinfo(void) return 0; } -/* 小計算機 */ -#if 0 -static void -ccount(float *a, float b, int cmode) -{ - switch (cmode) { - case 0: - case 1: - case 2: - *a += b; - break; - case 3: - *a -= b; - break; - case 4: - *a *= b; - break; - case 5: - *a /= b; - break; - } -} -#endif diff --git a/mbbsd/card.c b/mbbsd/card.c index 4906e5e9..b46ce2bc 100644 --- a/mbbsd/card.c +++ b/mbbsd/card.c @@ -450,16 +450,12 @@ card_jack(int *db) if ((card_number(me[0]) == 0 && card_number(me[1]) == 12) || (card_number(me[1]) == 0 && card_number(me[0]) == 12)) { if (card_flower(me[0]) == 0 && card_flower(me[1]) == 0) { - move(b_lines - 1, 0); - prints("非常不錯唷! (超級黑傑克!! 加 %d 元)", JACK * 10); game_log(JACK, JACK * 10); - pressanykey(); + vmsg("非常不錯唷! (超級黑傑克!! 加 %d 元)", JACK * 10); return 0; } else { - move(b_lines - 1, 0); - prints("很不錯唷! (黑傑克!! 加 %d 元)", JACK * 5); game_log(JACK, JACK * 5); - pressanykey(); + vmsg("很不錯唷! (黑傑克!! 加 %d 元)", JACK * 5); return 0; } } @@ -467,10 +463,8 @@ card_jack(int *db) (card_number(cpu[1]) == 0 && card_number(cpu[0]) == 12)) { c[0] = 1; card_show(cpu, c, me, m); - move(b_lines - 1, 0); - prints("嘿嘿...不好意思....黑傑克!!"); game_log(JACK, 0); - pressanykey(); + vmsg("嘿嘿...不好意思....黑傑克!!"); return 0; } if ((*db < 0) && (card_number(me[0]) == card_number(me[1])) && @@ -485,27 +479,21 @@ card_jack(int *db) m[i] = 1; card_show(cpu, c, me, m); if (card_alls_lower(me) > 21) { - move(b_lines - 1, 0); - prints("嗚嗚...爆掉了!"); game_log(JACK, 0); - pressanykey(); + vmsg("嗚嗚...爆掉了!"); return 0; } i++; if ((i == 3) && (card_number(me[0]) == 7) && (card_number(me[1]) == 7) && (card_number(me[2]) == 7)) { - move(b_lines - 1, 0); - prints("很不錯唷! (幸運七號!! 加 %d 元)", JACK * 7); game_log(JACK, JACK * 7); - pressanykey(); + vmsg("很不錯唷! (幸運七號!! 加 %d 元)", JACK * 7); return 0; } } if (i == 5) { /* 過五關 */ - move(b_lines - 1, 0); - prints("好厲害唷! 過五關嘍! 加P幣 %d 元!", 5 * JACK); game_log(JACK, JACK * 5); - pressanykey(); + vmsg("好厲害唷! 過五關嘍! 加P幣 %d 元!", 5 * JACK); return 0; } j = 2; @@ -516,19 +504,15 @@ card_jack(int *db) c[j] = 1; if (card_alls_lower(cpu) > 21) { card_show(cpu, c, me, m); - move(b_lines - 1, 0); - prints("呵呵...電腦爆掉了! 你贏了! 可得P幣 %d 元", JACK * 2); game_log(JACK, JACK * 2); - pressanykey(); + vmsg("呵呵...電腦爆掉了! 你贏了! 可得P幣 %d 元", JACK * 2); return 0; } j++; } card_show(cpu, c, me, m); - move(b_lines - 1, 0); - prints("哇哇...電腦贏了!"); game_log(JACK, 0); - pressanykey(); + vmsg("哇哇...電腦贏了!"); return 0; } @@ -595,19 +579,15 @@ ten_helf() m[i] = 1; card_show(cpu, c, me, m); if (card_all(me) > 21) { - move(b_lines - 1, 0); - prints("嗚嗚...爆掉了!"); game_log(TEN_HALF, 0); - pressanykey(); + vmsg("嗚嗚...爆掉了!"); return 0; } i++; } if (i == 5) { /* 過五關 */ - move(b_lines - 1, 0); - prints("好厲害唷! 過五關嘍! 加P幣 %d 元!", 5 * PMONEY); game_log(TEN_HALF, PMONEY * 5); - pressanykey(); + vmsg("好厲害唷! 過五關嘍! 加P幣 %d 元!", 5 * PMONEY); return 0; } j = 1; @@ -618,19 +598,15 @@ ten_helf() c[j] = 1; if (card_all(cpu) > 21) { card_show(cpu, c, me, m); - move(b_lines - 1, 0); - prints("呵呵...電腦爆掉了! 你贏了! 可得P幣 %d 元", PMONEY * 2); game_log(TEN_HALF, PMONEY * 2); - pressanykey(); + vmsg("呵呵...電腦爆掉了! 你贏了! 可得P幣 %d 元", PMONEY * 2); return 0; } j++; } card_show(cpu, c, me, m); - move(b_lines - 1, 0); - prints("哇哇...電腦贏了!"); game_log(TEN_HALF, 0); - pressanykey(); + vmsg("哇哇...電腦贏了!"); return 0; } diff --git a/mbbsd/chicken.c b/mbbsd/chicken.c index bc97cc58..e285856d 100644 --- a/mbbsd/chicken.c +++ b/mbbsd/chicken.c @@ -127,8 +127,7 @@ new_chicken() reload_money(); price = egg_price[(int)mychicken->type]; if (cuser.money < price) { - prints("\n 錢不夠買蛋蛋,蛋蛋要 %d 元", price); - refresh(); + vmsg("\n 錢不夠買蛋蛋,蛋蛋要 %d 元", price); return 0; } vice(price, "寵物蛋"); @@ -400,12 +399,10 @@ ch_buyitem(int money, char *picture, int *item, int haveticket) else demoney(-money * num); show_file(picture, 5, 14, NO_RELOAD); + pressanykey(); } else { - move(b_lines - 1, 0); - clrtoeol(); - outs("現金不夠 !!!"); + vmsg("現金不夠 !!!"); } - pressanykey(); } static void @@ -928,13 +925,11 @@ chickenpk(int fd) memcpy(&ouser, &xuser, sizeof(userec_t)); reload_chicken(); if (!ochicken->name[0] || !mychicken->name[0]) { - outmsg("有一方沒有寵物"); /* Ptt:妨止page時把寵物賣掉 */ bell(); - refresh(); + vmsg("有一方沒有寵物"); /* Ptt:妨止page時把寵物賣掉 */ add_io(0, 0); close(fd); unlockutmpmode(); - sleep(1); return 0; } show_chicken_data(ochicken, mychicken); diff --git a/mbbsd/dark.c b/mbbsd/dark.c index 60f64dbd..65fd85ab 100644 --- a/mbbsd/dark.c +++ b/mbbsd/dark.c @@ -34,7 +34,7 @@ brdswap(sint y, sint x, sint ly, sint lx) } static void -pprints(sint y, sint x, char *s) +mouts(sint y, sint x, char *s) { move(y, x); clrtoeol(); @@ -370,11 +370,11 @@ main_dark(int fd, userinfo_t * uin) if (currutmp->turn) { brd_rand(); send(fd, &brd, sizeof(brd), 0); - pprints(21, 0, " ◆你是先手"); - pprints(22, 0, " ◆輪到你下了"); + mouts(21, 0, " ◆你是先手"); + mouts(22, 0, " ◆輪到你下了"); } else { recv(fd, &brd, sizeof(brd), 0); - pprints(21, 0, " ◆你是後手"); + mouts(21, 0, " ◆你是後手"); } move(12, 3); prints("%s[0勝0敗]vs.%s[0勝0敗]", currutmp->userid, currutmp->mateid); @@ -412,20 +412,20 @@ main_dark(int fd, userinfo_t * uin) break; } if (curr.end == -3) - pprints(23, 30, "\033[33m要求合棋\033[m"); + mouts(23, 30, "\033[33m要求合棋\033[m"); else if (curr.end == -4) - pprints(23, 30, "\033[33m要求換邊\033[m"); + mouts(23, 30, "\033[33m要求換邊\033[m"); else if (curr.end == -5) - pprints(23, 30, "\033[33m要求連吃\033[m"); + mouts(23, 30, "\033[33m要求連吃\033[m"); else - pprints(23, 30, ""); + mouts(23, 30, ""); recv(fd, &brd, sizeof(brd), 0); my = curr.y; mx = curr.x; redraw(); if (curr.end) - pprints(22, 0, " ◆輪到你下了"); + mouts(22, 0, " ◆輪到你下了"); move(cury[my], curx[mx]); } else { if (currutmp->turn == 'p') { @@ -434,7 +434,7 @@ main_dark(int fd, userinfo_t * uin) currutmp->turn = 'e'; break; } else { - pprints(23, 30, ""); + mouts(23, 30, ""); *buf = 0; currutmp->turn = (uin->turn) ? 0 : 1; } @@ -442,17 +442,17 @@ main_dark(int fd, userinfo_t * uin) if (ch == 'y') { currutmp->color = (currutmp->color == '1') ? '0' : '1'; uin->color = (uin->color == '1') ? '0' : '1'; - pprints(21, 0, (currutmp->color == '1') ? " \033[1;33m◆你持紅色棋\033[m" : " \033[1;33m◆你持黑色棋\033[m"); + mouts(21, 0, (currutmp->color == '1') ? " \033[1;33m◆你持紅色棋\033[m" : " \033[1;33m◆你持黑色棋\033[m"); } else { - pprints(23, 30, ""); + mouts(23, 30, ""); currutmp->turn = (uin->turn) ? 0 : 1; } } else if (currutmp->turn == 'g') { if (ch == 'y') { cont = 1; - pprints(21, 0, " \033[1;33m◆你持紅色棋\033[m 可連吃"); + mouts(21, 0, " \033[1;33m◆你持紅色棋\033[m 可連吃"); } else { - pprints(23, 30, ""); + mouts(23, 30, ""); currutmp->turn = (uin->turn) ? 0 : 1; } } @@ -460,7 +460,7 @@ main_dark(int fd, userinfo_t * uin) if (uin->turn == 'g') { cont = 1; uin->turn = (currutmp->turn) ? 0 : 1; - pprints(21, 10, "可連吃"); + mouts(21, 10, "可連吃"); } end = playing(fd, currutmp->color - '0', ch, &go_on, uin); @@ -493,12 +493,12 @@ main_dark(int fd, userinfo_t * uin) continue; } if (!i && currutmp->color == '1') { - pprints(21, 0, " \033[1;33m◆你持紅色棋\033[m"); + mouts(21, 0, " \033[1;33m◆你持紅色棋\033[m"); i++; move(cury[my], curx[mx]); } if (!i && currutmp->color == '0') { - pprints(21, 0, " \033[1;33m◆你持黑色棋\033[m"); + mouts(21, 0, " \033[1;33m◆你持黑色棋\033[m"); i++; move(cury[my], curx[mx]); } @@ -540,7 +540,7 @@ main_dark(int fd, userinfo_t * uin) } break; case -3: - pprints(22, 0, "合棋唷!! 下次在分高下吧 ^_^"); + mouts(22, 0, "合棋唷!! 下次在分高下吧 ^_^"); break; default: add_io(0, 0); diff --git a/mbbsd/edit.c b/mbbsd/edit.c index 897c7178..f9cb439a 100644 --- a/mbbsd/edit.c +++ b/mbbsd/edit.c @@ -965,8 +965,7 @@ write_file(char *fpath, int saveheader, int *islocal) switch (ans[0]) { case 'a': - outs("文章\033[1m 沒有 \033[m存入"); - safe_sleep(1); + vmsg("文章\033[1m 沒有 \033[m存入"); aborted = -1; break; case 'r': diff --git a/mbbsd/gamble.c b/mbbsd/gamble.c index 33e67bb8..512df7f2 100644 --- a/mbbsd/gamble.c +++ b/mbbsd/gamble.c @@ -159,9 +159,7 @@ ticket(int bid) ch_buyitem(price, "etc/buyticket", &n, 0); if (bid && !dashf(fn_ticket)) { - move(b_lines - 1, 0); - prints("哇!! 耐ㄚ捏...板主已經停止下注了 不能賭嚕"); - pressanykey(); + vmsg("哇!! 耐ㄚ捏...板主已經停止下注了 不能賭嚕"); break; } diff --git a/mbbsd/io.c b/mbbsd/io.c index 21a8045b..029fae38 100644 --- a/mbbsd/io.c +++ b/mbbsd/io.c @@ -126,7 +126,7 @@ dogetch() if (flushf) (*flushf) (); - refresh(); + oflush(); if (i_newfd) { diff --git a/mbbsd/mail.c b/mbbsd/mail.c index 04c54c97..6198004b 100644 --- a/mbbsd/mail.c +++ b/mbbsd/mail.c @@ -24,20 +24,14 @@ setforward() getdata(b_lines, 0, "確定開啟自動轉信功\能?(Y/n)", yn, sizeof(yn), LCECHO); if (yn[0] != 'n' && (fp = fopen(buf, "w"))) { - move(b_lines, 0); - clrtoeol(); fprintf(fp, "%s", ip); fclose(fp); - outs("設定完成!"); - refresh(); + vmsg("設定完成!"); return 0; } } - move(b_lines, 0); - clrtoeol(); - outs("取消自動轉信!"); unlink(buf); - refresh(); + vmsg("取消自動轉信!"); return 0; } @@ -163,27 +157,13 @@ chkmailbox() mailmaxkeep = max_keepmail + cuser.exmailbox; m_init(); if ((mailkeep = get_num_records(currmaildir, sizeof(fileheader_t))) > - mailmaxkeep) { - move(b_lines, 0); - clrtoeol(); - bell(); - prints("您保存信件數目 %d 超出上限 %d, 請整理", - mailkeep, mailmaxkeep); + mailmaxkeep || + (mailsum = get_sum_records(currmaildir, sizeof(fileheader_t))) > + mailsumlimit) { bell(); - refresh(); - igetch(); - return mailkeep; - } - if ((mailsum = get_sum_records(currmaildir, sizeof(fileheader_t))) > - mailsumlimit) { - move(b_lines, 0); - clrtoeol(); bell(); - prints("您保存信件容量 %d(k)超出上限 %d(k), 請整理", - mailsum, mailsumlimit); - bell(); - refresh(); - igetch(); + vmsg("您保存信件數目或容量 %d 超出上限 %d, 請整理", + mailkeep, mailmaxkeep); return mailkeep; } } @@ -498,13 +478,9 @@ multi_send(char *title) if (vedit(fpath, YEA, NULL) == -1) { unlink(fpath); curredit = 0; - outs(msg_cancel); - pressanykey(); + vmsg(msg_cancel); return; } - stand_title("寄信中..."); - refresh(); - listing = 80; for (p = toplev; p; p = p->next) { @@ -530,15 +506,14 @@ multi_send(char *title) mymail.filemode |= FILE_MULTI; /* multi-send flag */ sethomedir(genbuf, p->word); if (append_record_forward(genbuf, &mymail, sizeof(mymail)) == -1) - outs(err_uid); + vmsg(err_uid); mailalert(p->word); } hold_mail(fpath, NULL); unlink(fpath); curredit = 0; } else - outs(msg_cancel); - pressanykey(); + vmsg(msg_cancel); } static int @@ -636,8 +611,7 @@ mail_all() outs(err_uid); snprintf(genbuf, sizeof(genbuf), "%*s %5d / %5d", IDLEN + 1, userid, i + 1, unum); - outmsg(genbuf); - refresh(); + vmsg(genbuf); } } return 0; @@ -746,10 +720,7 @@ read_new_mail(fileheader_t * fptr) multi_reply(idc, fptr, currmaildir); return FULLUPDATE; } - move(b_lines, 0); - clrtoeol(); - outs(msg_mailer); - refresh(); + outmsg(msg_mailer); switch (igetch()) { case 'r': @@ -923,10 +894,7 @@ mail_read(int ent, fileheader_t * fhdr, char *direct) multi_reply(ent, fhdr, direct); return FULLUPDATE; } - move(b_lines, 0); - clrtoeol(); - refresh(); - outs(msg_mailer); + outmsg(msg_mailer); switch (igetch()) { case 'r': @@ -1606,8 +1574,7 @@ doforward(char *direct, fileheader_t * fh, int mode) strlcpy(address, cuser.email, sizeof(address)); if( mode == 'U' ){ - move(b_lines, 0); - prints("將進行 uuencode 。若您不清楚什麼是 uuencode 請改用 F轉寄。"); + vmsg("將進行 uuencode 。若您不清楚什麼是 uuencode 請改用 F轉寄。"); } if (address[0]) { @@ -1632,7 +1599,7 @@ doforward(char *direct, fileheader_t * fh, int mode) snprintf(address, sizeof(address), "%s.bbs@%s", fname, MYHOSTNAME); } else { - outmsg("取消轉寄"); + vmsg("取消轉寄"); return 1; } } while (mode == 'Z' && strstr(address, MYHOSTNAME)); @@ -1640,9 +1607,7 @@ doforward(char *direct, fileheader_t * fh, int mode) if (invalidaddr(address)) return -2; - snprintf(fname, sizeof(fname), "正轉寄給 %s, 請稍候...", address); - outmsg(fname); - move(b_lines, 0); + outmsg("正轉寄請稍候..."); refresh(); /* 追蹤使用者 */ diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c index 2b1db5a8..fe8ad16c 100644 --- a/mbbsd/mbbsd.c +++ b/mbbsd/mbbsd.c @@ -182,18 +182,6 @@ u_exit(char *mode) log_usies(mode, NULL); } -void -system_abort() -{ - if (currmode) - u_exit("ABORT"); - - clear(); - refresh(); - fprintf(stdout, "謝謝光臨, 記得常來喔 !\n"); - exit(0); -} - void abort_bbs(int sig) { @@ -473,14 +461,12 @@ multi_user_check() log_usies("KICK ", cuser.username); } else { if (search_ulistn(usernum, 3) != NULL) - system_abort(); /* Goodbye(); */ + abort_bbs(); /* Goodbye(); */ } } else { /* allow multiple guest user */ if (search_ulistn(usernum, 100) != NULL) { - outs("\n抱歉,目前已有太多 guest 在站上, 請用new註冊。\n"); - pressanykey(); - oflush(); + vmsg("\n抱歉,目前已有太多 guest 在站上, 請用new註冊。\n"); exit(1); } } diff --git a/mbbsd/name.c b/mbbsd/name.c index 9d467352..3cb2b698 100644 --- a/mbbsd/name.c +++ b/mbbsd/name.c @@ -264,7 +264,6 @@ namecomplete(char *prompt, char *data) prints("%*s", IDLEN + 1, ""); standend(); move(y, x); - refresh(); while ((ch = igetch()) != EOF) { if (ch == '\n' || ch == '\r') { @@ -309,8 +308,7 @@ namecomplete(char *prompt, char *data) len = MaxLen(morelist, p_lines); } if (morelist) { - move(b_lines, 0); - outs(msg_more); + vmsg(msg_more); } move(y, x); continue; @@ -356,7 +354,6 @@ namecomplete(char *prompt, char *data) raise(SIGHUP); /* jochang: don't know if this is * necessary... */ outc('\n'); - refresh(); if (clearbot) { move(2, 0); clrtobot(); @@ -434,8 +431,7 @@ usercomplete(char *prompt, char *data) len = UserMaxLen((arrptr) cwlist, cwnum, morenum, p_lines); } if (morenum < cwnum) { - move(b_lines, 0); - outs(msg_more); + vmsg(msg_more); } else morenum = 0; move(y, x); @@ -478,7 +474,6 @@ usercomplete(char *prompt, char *data) /* longjmp(byebye, -1); */ raise(SIGHUP); /* jochang: don't know if this is necessary */ outc('\n'); - refresh(); if (clearbot) { move(2, 0); clrtobot(); @@ -561,7 +556,6 @@ generalnamecomplete(char *prompt, char *data, int len, size_t nmemb, prints("%*s", IDLEN + 1, ""); standend(); move(y, x); - refresh(); ptr = 0; data[ptr] = 0; @@ -611,8 +605,7 @@ generalnamecomplete(char *prompt, char *data, int len, size_t nmemb, col += len + 2; } if (morelist != end + 1) { - move(b_lines, 0); - outs(msg_more); + vmsg(msg_more); } move(y, x); continue; @@ -651,7 +644,6 @@ generalnamecomplete(char *prompt, char *data, int len, size_t nmemb, } outc('\n'); - refresh(); if (clearbot) { move(2, 0); clrtobot(); diff --git a/mbbsd/read.c b/mbbsd/read.c index 7fcc9f1e..40561cb8 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -419,19 +419,17 @@ mail_forward(fileheader_t * fhdr, char *direct, int mode) *p = '\0'; switch (i = doforward(buf, fhdr, mode)) { case 0: - outmsg(msg_fwd_ok); + vmsg(msg_fwd_ok); break; case -1: - outmsg(msg_fwd_err1); + vmsg(msg_fwd_err1); break; case -2: - outmsg(msg_fwd_err2); + vmsg(msg_fwd_err2); break; default: break; } - refresh(); - sleep(1); } #endif @@ -811,7 +809,7 @@ void i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey_t * rcmdlist, int bidcache) { keeploc_t *locmem = NULL; - int recbase = 0, mode; + int recbase = 0, mode, lastmode; int num = 0, entries = 0, n_bottom=0; int i; char currdirect0[64], default_ch = 0; @@ -903,6 +901,8 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey mode = i_read_key(rcmdlist, default_ch, locmem, currbid, bottom_line); + if(mode == READ_SKIP) + mode = lastmode; switch(mode) // 以下這幾種 mode 要再處理游標 { case READ_PREV: @@ -936,6 +936,7 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey default: default_ch=0; } + lastmode = mode; } while (mode != DOQUIT); #undef FHSZ diff --git a/mbbsd/register.c b/mbbsd/register.c index 9e6c60b3..71d653a2 100644 --- a/mbbsd/register.c +++ b/mbbsd/register.c @@ -175,9 +175,7 @@ getnewuserid() i = searchnewuser(1); if ((i <= 0) || (i > MAX_USERS)) { passwd_unlock(); - if (more("etc/user_full", NA) == -1) - fprintf(stdout, "抱歉,使用者帳號已經滿了,無法註冊新的帳號\n\r"); - safe_sleep(2); + vmsg("抱歉,使用者帳號已經滿了,無法註冊新的帳號"); exit(1); } snprintf(genbuf, sizeof(genbuf), "uid %d", i); @@ -203,10 +201,7 @@ new_register() if( passbuf[0] == 'y' ) break; if( passbuf[0] == 'n' ){ - clear(); - outs("\n抱歉, 您須要接受使用者條款才能註冊帳號享受我們的服務唷!"); - pressanykey(); - oflush(); + vmsg("\n抱歉, 您須要接受使用者條款才能註冊帳號享受我們的服務唷!"); exit(1); } vmsg("請輸入 y表示接受, n表示不接受"); @@ -217,11 +212,7 @@ new_register() try = 0; while (1) { if (++try >= 6) { - outs("\n您嘗試錯誤的輸入太多,請下次再來吧\n"); - refresh(); - - pressanykey(); - oflush(); + vmsg("\n您嘗試錯誤的輸入太多,請下次再來吧\n"); exit(1); } getdata(17, 0, msg_uid, newuser.userid, @@ -243,11 +234,7 @@ new_register() try = 0; while (1) { if (++try >= 6) { - outs("\n您嘗試錯誤的輸入太多,請下次再來吧\n"); - refresh(); - - pressanykey(); - oflush(); + vmsg("\n您嘗試錯誤的輸入太多,請下次再來吧\n"); exit(1); } if ((getdata(19, 0, "請設定密碼:", passbuf, diff --git a/mbbsd/screen.c b/mbbsd/screen.c index 43df3757..dcfafe2e 100644 --- a/mbbsd/screen.c +++ b/mbbsd/screen.c @@ -445,7 +445,7 @@ prints(char *fmt,...) } void -mprints(int y, int x, char *str) +mouts(int y, int x, char *str) { move(y, x); clrtoeol(); diff --git a/mbbsd/talk.c b/mbbsd/talk.c index 92053e60..d7550ba3 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -592,9 +592,7 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) strlcpy(destid, id, sizeof(destid)); if (!uin && !(flag == 0 && water_which->count > 0)) { - outmsg("\033[1;33;41m糟糕! 對方已落跑了(不在站上)! \033[37m~>_<~\033[m"); - clrtoeol(); - refresh(); + vmsg("糟糕! 對方已落跑了(不在站上)! "); watermode = -1; return 0; } @@ -608,9 +606,6 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) /* 一般水球 */ watermode = 0; if (!(len = getdata(0, 0, prompt, msg, 56, DOECHO))) { - outmsg("\033[1;33;42m算了! 放你一馬...\033[m"); - clrtoeol(); - refresh(); currutmp->chatid[0] = c0; currutmp->mode = mode0; currstat = currstat0; @@ -635,9 +630,6 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) snprintf(buf, sizeof(buf), "丟給 %s : %s [Y/n]?", uin->userid, msg); getdata(0, 0, buf, genbuf, 3, LCECHO); if (genbuf[0] == 'n') { - outmsg("\033[1;33;42m算了! 放你一馬...\033[m"); - clrtoeol(); - refresh(); currutmp->chatid[0] = c0; currutmp->mode = mode0; currstat = currstat0; @@ -647,9 +639,7 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) } watermode = -1; if (!uin || !*uin->userid || strcasecmp(destid, uin->userid)) { - outmsg("\033[1;33;41m糟糕! 對方已落跑了(不在站上)! \033[37m~>_<~\033[m"); - clrtoeol(); - refresh(); + vmsg("糟糕! 對方已落跑了(不在站上)! "); currutmp->chatid[0] = c0; currutmp->mode = mode0; currstat = currstat0; @@ -712,7 +702,6 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) } clrtoeol(); - refresh(); currutmp->chatid[0] = c0; currutmp->mode = mode0; @@ -1853,7 +1842,7 @@ draw_pickup(int drawall, pickup_t * pickup, int pickup_way, #endif ); - refresh(); + //refresh(); } } @@ -2397,12 +2386,9 @@ userlist(void) cuser.uflag2 -= tmp; tmp = (tmp + 1) % 3; cuser.uflag2 |= tmp; - move(4, 0); - prints("系統提供 一般 進階 未來 三種模式\n" + vmsg("系統提供 一般 進階 未來 三種模式\n" "在切換後請正常下線再重新登入, 以確保結構正確\n" "目前切換到 %s 水球模式\n", wm[tmp]); - refresh(); - sleep(2); redrawall = redraw = 1; } break; diff --git a/mbbsd/vote.c b/mbbsd/vote.c index a6cb52c4..5325e64c 100644 --- a/mbbsd/vote.c +++ b/mbbsd/vote.c @@ -535,7 +535,7 @@ vote_view_all(char *bname) setbfile(buf, bname, STR_new_control); move(0, 0); if ((fp = fopen(buf, "r"))) { - prints("(0) "); + outs("(0) "); x = 0; fclose(fp); @@ -760,7 +760,6 @@ vote_maintain(char *bname) move((i % 15) + 2, (i / 15) * 40); prints(buf); } - refresh(); } snprintf(buf, sizeof(buf), "%c) ", num + 'A'); getdata((num % 15) + 2, (num / 15) * 40, buf, diff --git a/mbbsd/xyz.c b/mbbsd/xyz.c index e0b850b5..b20b9d74 100644 --- a/mbbsd/xyz.c +++ b/mbbsd/xyz.c @@ -180,9 +180,7 @@ note() notedata_t myitem; if (cuser.money < 5) { - outmsg("\033[1;41m 哎呀! 要投五銀才能留言...沒錢耶..\033[m"); - clrtoeol(); - refresh(); + vmsg("\033[1;41m 哎呀! 要投五銀才能留言...沒錢耶..\033[m"); return 0; } setutmpmode(EDNOTE); @@ -313,7 +311,7 @@ mail_sysop() move(12, 0); clrtobot(); - prints("%16s %-18s權責劃分\n\n", "編號", "站長 ID"); + outs(" 編號 站長 ID 權責劃分\n\n"); for (i = 0; i < j; i++) prints("%15d. \033[1;%dm%-16s%s\033[0m\n", -- cgit v1.2.3 From a115db7e89c83779769f07044b4b3bb914bcef13 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 20:19:12 +0000 Subject: a little bug fixed git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1834 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/board.c | 2 +- mbbsd/mbbsd.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mbbsd/board.c b/mbbsd/board.c index dd7dba76..0c813609 100644 --- a/mbbsd/board.c +++ b/mbbsd/board.c @@ -470,7 +470,7 @@ show_brdlist(int head, int clsflag, int newflag) if (class_bid == 1) outs(" "); if (!newflag) { - outs("%5d%c%s", head, + prints("%5d%c%s", head, !(B_BH(ptr)->brdattr & BRD_HIDE) ? ' ' : (B_BH(ptr)->brdattr & BRD_POSTMASK) ? ')' : '-', (ptr->myattr & NBRD_TAG) ? "D " : diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c index fe8ad16c..8cef890c 100644 --- a/mbbsd/mbbsd.c +++ b/mbbsd/mbbsd.c @@ -461,7 +461,7 @@ multi_user_check() log_usies("KICK ", cuser.username); } else { if (search_ulistn(usernum, 3) != NULL) - abort_bbs(); /* Goodbye(); */ + abort_bbs(0); /* Goodbye(); */ } } else { /* allow multiple guest user */ -- cgit v1.2.3 From 9638054c27af6c986d72ffe416152208fb8da006 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 20:22:40 +0000 Subject: two mouts clean one mouts git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1835 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- include/proto.h | 1 + mbbsd/admin.c | 4 ++-- mbbsd/dark.c | 8 -------- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/include/proto.h b/include/proto.h index 097829b7..773a5a0c 100644 --- a/include/proto.h +++ b/include/proto.h @@ -453,6 +453,7 @@ void check_register(void); char *genpasswd(char *pw); /* screen */ +void mouts(int y, int x, char *str); void move(int y, int x); void outs(char *str); void clrtoeol(void); diff --git a/mbbsd/admin.c b/mbbsd/admin.c index 02bab271..5379d0be 100644 --- a/mbbsd/admin.c +++ b/mbbsd/admin.c @@ -1158,9 +1158,9 @@ cat_register() { if (system("cat register.new.tmp >> register.new") == 0 && system("rm -f register.new.tmp") == 0) - vmsg(22, 0, "OK 嚕~~ 繼續去奮鬥吧!!"); + vmsg("OK 嚕~~ 繼續去奮鬥吧!!"); else - vmsg(22, 0, "沒辦法CAT過去呢 去檢查一下系統吧!!"); + vmsg("沒辦法CAT過去呢 去檢查一下系統吧!!"); return 0; } diff --git a/mbbsd/dark.c b/mbbsd/dark.c index 65fd85ab..e26dd890 100644 --- a/mbbsd/dark.c +++ b/mbbsd/dark.c @@ -33,14 +33,6 @@ brdswap(sint y, sint x, sint ly, sint lx) brd[ly][lx].value = -1; } -static void -mouts(sint y, sint x, char *s) -{ - move(y, x); - clrtoeol(); - prints("%s", s); -} - static sint Is_win(item att, item det, sint y, sint x, sint ly, sint lx) { -- cgit v1.2.3 From da56c5ed1f424f78040d2bd7f11833978eeb46b8 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 20:25:32 +0000 Subject: last one buggy in io.c git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1836 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mbbsd/io.c b/mbbsd/io.c index 029fae38..21a8045b 100644 --- a/mbbsd/io.c +++ b/mbbsd/io.c @@ -126,7 +126,7 @@ dogetch() if (flushf) (*flushf) (); - oflush(); + refresh(); if (i_newfd) { -- cgit v1.2.3 From 77977eec595648e9143769c7993c65490b753b99 Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 20:49:16 +0000 Subject: modify a little for vmsg git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1837 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- include/proto.h | 2 +- mbbsd/bbs.c | 2 +- mbbsd/edit.c | 4 ++-- mbbsd/stuff.c | 9 +++++---- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/include/proto.h b/include/proto.h index 773a5a0c..01593227 100644 --- a/include/proto.h +++ b/include/proto.h @@ -479,7 +479,7 @@ void out_lines(char *str, int line); #define isprint2(ch) ((ch & 0x80) || isprint(ch)) #define not_alpha(ch) (ch < 'A' || (ch > 'Z' && ch < 'a') || ch > 'z') #define not_alnum(ch) (ch < '0' || (ch > '9' && ch < 'A') || (ch > 'Z' && ch < 'a') || ch > 'z') -#define pressanykey() vmsg_lines(b_lines, "") +#define pressanykey() vmsg_lines(b_lines, NULL) int vmsg_lines(int lines, const char *msg); time_t gettime(int line, time_t dt, char* head); void setcalfile(char *buf, char *userid); diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c index 4bf0fab4..7719f140 100644 --- a/mbbsd/bbs.c +++ b/mbbsd/bbs.c @@ -1930,7 +1930,7 @@ del_post(int ent, fileheader_t * fhdr, char *direct) cuser.numposts--; if (!(currmode & MODE_DIGEST && currmode & MODE_BOARD)){ demoney(-fhdr->money); - vmsg("%s,您的文章減為 %d 篇,支付清潔費 %d 銀", msg_del_ok, + vmsg("您的文章減為 %d 篇,支付清潔費 %d 銀", cuser.numposts, fhdr->money); } } diff --git a/mbbsd/edit.c b/mbbsd/edit.c index f9cb439a..02eca6b2 100644 --- a/mbbsd/edit.c +++ b/mbbsd/edit.c @@ -965,7 +965,7 @@ write_file(char *fpath, int saveheader, int *islocal) switch (ans[0]) { case 'a': - vmsg("文章\033[1m 沒有 \033[m存入"); + outs("文章\033[1m 沒有 \033[m存入"); aborted = -1; break; case 'r': @@ -2022,7 +2022,7 @@ vedit(char *fpath, int saveheader, int *islocal) case '\n': #ifdef MAX_EDIT_LINE if( totaln == MAX_EDIT_LINE ){ - vmsg("MAX_EDIT_LINE exceed"); + outs("MAX_EDIT_LINE exceed"); break; } #endif diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index 605e8cd3..fc2ce69d 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -439,14 +439,15 @@ getans(const char *fmt,...) int vmsg(const char *fmt,...) { - char msg[80] = "\033[1;36;44m ◆ ", i; + char msg[128] = "\033[1;36;44m ◆ ", i; va_list ap; va_start(ap, fmt); - vsnprintf(msg+14, 55, fmt, ap); + i = vsnprintf(msg+14, 100, fmt, ap); va_end(ap); - for(i=69; i>0 && *(msg+i+1); i--) + for(; i<69; i++) *(msg+i) = ' '; - strcat(msg+69,"\033[33;46m \033[200m\033[1431m\033[506m[請按任意鍵繼續]\033[201m \033[m"); + strcat(msg+69, + "\033[33;46m \033[200m\033[1431m\033[506m[請按任意鍵繼續]\033[201m \033[m"); return vmsg_lines(b_lines, msg); } -- cgit v1.2.3 From f3021d4093e35eace1044c6517cf69687acde46d Mon Sep 17 00:00:00 2001 From: ptt Date: Fri, 23 Apr 2004 20:57:45 +0000 Subject: add function to skip dummy post when reading git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1838 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/read.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mbbsd/read.c b/mbbsd/read.c index 40561cb8..06ed39b7 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -907,36 +907,42 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey { case READ_PREV: default_ch = 'r'; + lastmode = mode; mode = cursor_pos(locmem, locmem->crs_ln - 1, 10); break; case READ_NEXT: default_ch = 'r'; + lastmode = mode; mode = cursor_pos(locmem, locmem->crs_ln + 1, 10); break; case RELATE_PREV: default_ch = 'r'; + lastmode = mode; mode = thread(locmem, RELATE_PREV, &locmem->crs_ln); break; case RELATE_NEXT: default_ch = 'r'; + lastmode = mode; mode = thread(locmem, RELATE_NEXT, &locmem->crs_ln); break; case RELATE_FIRST: default_ch = 'r'; + lastmode = mode; mode = thread(locmem, RELATE_FIRST, &locmem->crs_ln); break; case 'A': default_ch = 'r'; + lastmode = mode; mode = thread(locmem, 'A', &locmem->crs_ln); break; case 'a': default_ch = 'r'; + lastmode = mode; mode = thread(locmem, 'a', &locmem->crs_ln); break; default: default_ch=0; } - lastmode = mode; } while (mode != DOQUIT); #undef FHSZ -- cgit v1.2.3 From b35685ff078b08f1b87bbe12ab3422e8abaf19c0 Mon Sep 17 00:00:00 2001 From: ptt Date: Sat, 24 Apr 2004 01:29:10 +0000 Subject: =?UTF-8?q?little=20bug=20report=20fixed=20=20=E4=BD=9C=E8=80=85?= =?UTF-8?q?=20=20Toy=20(WeiTing)=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=E7=9C=8B=E6=9D=BF=20=20SYSOP=20=20=E6=A8=99?= =?UTF-8?q?=E9=A1=8C=20=20=E8=89=B2=E7=A2=BC=E8=BC=B8=E5=85=A5=E7=84=A1?= =?UTF-8?q?=E6=B3=95=E6=AD=A3=E5=B8=B8=E9=81=8B=E4=BD=9C.=20=20=E6=99=82?= =?UTF-8?q?=E9=96=93=20=20Fri=20Apr=2023=2018:13:42=202004=20=E2=94=80?= =?UTF-8?q?=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80?= =?UTF-8?q?=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80?= =?UTF-8?q?=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80?= =?UTF-8?q?=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80?= =?UTF-8?q?=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80?= =?UTF-8?q?=E2=94=80=E2=94=80=E2=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 嗆ctrl+v脣丕NSI ctrl+c頛詨亦脩Ⅳ⊥甇撣賊雿 暻餌孟ysop鈭:) git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1839 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/edit.c | 13 ++++++------- mbbsd/read.c | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/mbbsd/edit.c b/mbbsd/edit.c index 02eca6b2..eda5da08 100644 --- a/mbbsd/edit.c +++ b/mbbsd/edit.c @@ -1835,28 +1835,27 @@ vedit(char *fpath, int saveheader, int *islocal) char *tmp, *apos = ans; int fg, bg; - strlcpy(color, "\033[", sizeof(color)); + strcpy(color, "\033["); if (isdigit(*apos)) { - snprintf(color, sizeof(color), - "%s%c", color, *(apos++)); + sprintf(color,"%s%c", color, *(apos++)); if (*apos) - snprintf(color, sizeof(color), "%s;", color); + strcat(color, ";"); } if (*apos) { if ((tmp = strchr(t, toupper(*(apos++))))) fg = tmp - t + 30; else fg = 37; - snprintf(color, sizeof(color), "%s%d", color, fg); + sprintf(color, "%s%d", color, fg); } if (*apos) { if ((tmp = strchr(t, toupper(*(apos++))))) bg = tmp - t + 40; else bg = 40; - snprintf(color, sizeof(color), "%s;%d", color, bg); + sprintf(color, "%s;%d", color, bg); } - snprintf(color, sizeof(color), "%sm", color); + strcat(color, "m"); insert_string(color); } else insert_string(reset_color); diff --git a/mbbsd/read.c b/mbbsd/read.c index 06ed39b7..b2db9715 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -591,7 +591,7 @@ i_read_key(onekey_t * rcmdlist, char default_ch, keeploc_t * locmem, case '8': case '9': if((num = search_num(ch, last_line))!=-1) - new_ln = num; + new_ln = num+1; break; case 'q': case 'e': -- cgit v1.2.3 From 6d2bbbc9932595ea1a0ef4732864d077c01ff010 Mon Sep 17 00:00:00 2001 From: ptt Date: Sat, 24 Apr 2004 02:54:10 +0000 Subject: fix forever loop in read.c git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1841 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/read.c | 63 ++++++++++++++++++++++++++++-------------------------------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/mbbsd/read.c b/mbbsd/read.c index b2db9715..133c85b5 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -809,7 +809,7 @@ void i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey_t * rcmdlist, int bidcache) { keeploc_t *locmem = NULL; - int recbase = 0, mode, lastmode; + int recbase = 0, mode, lastmode, last_ln; int num = 0, entries = 0, n_bottom=0; int i; char currdirect0[64], default_ch = 0; @@ -903,46 +903,41 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey bottom_line); if(mode == READ_SKIP) mode = lastmode; - switch(mode) // 以下這幾種 mode 要再處理游標 - { - case READ_PREV: - default_ch = 'r'; - lastmode = mode; + // 以下這幾種 mode 要再處理游標 + if(mode == READ_PREV || mode == READ_NEXT || mode == RELATE_PREV || + mode == RELATE_FIRST || mode == 'A' || mode == 'a' ) + { + lastmode = mode; + last_ln = locmem->crs_ln; + + switch(mode) + { + case READ_PREV: mode = cursor_pos(locmem, locmem->crs_ln - 1, 10); - break; - case READ_NEXT: - default_ch = 'r'; - lastmode = mode; + break; + case READ_NEXT: mode = cursor_pos(locmem, locmem->crs_ln + 1, 10); - break; - case RELATE_PREV: - default_ch = 'r'; - lastmode = mode; + break; + case RELATE_PREV: mode = thread(locmem, RELATE_PREV, &locmem->crs_ln); - break; - case RELATE_NEXT: - default_ch = 'r'; - lastmode = mode; + break; + case RELATE_NEXT: mode = thread(locmem, RELATE_NEXT, &locmem->crs_ln); - break; - case RELATE_FIRST: - default_ch = 'r'; - lastmode = mode; + break; + case RELATE_FIRST: mode = thread(locmem, RELATE_FIRST, &locmem->crs_ln); - break; - case 'A': - default_ch = 'r'; - lastmode = mode; + break; + case 'A': mode = thread(locmem, 'A', &locmem->crs_ln); - break; - case 'a': - default_ch = 'r'; - lastmode = mode; + break; + case 'a': mode = thread(locmem, 'a', &locmem->crs_ln); - break; - default: - default_ch=0; - } + break; + } + if(locmem->crs_ln != last_ln) default_ch = 'r'; + } + else + default_ch=0; } while (mode != DOQUIT); #undef FHSZ -- cgit v1.2.3 From 55dc11d584c1995a53fd90002e4a1184d2b1cdfe Mon Sep 17 00:00:00 2001 From: ptt Date: Sat, 24 Apr 2004 03:02:32 +0000 Subject: fix for foreverloop git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1842 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/read.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mbbsd/read.c b/mbbsd/read.c index 133c85b5..9e698a4c 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -904,6 +904,7 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey if(mode == READ_SKIP) mode = lastmode; // 以下這幾種 mode 要再處理游標 + default_ch=0; if(mode == READ_PREV || mode == READ_NEXT || mode == RELATE_PREV || mode == RELATE_FIRST || mode == 'A' || mode == 'a' ) { @@ -934,10 +935,8 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey mode = thread(locmem, 'a', &locmem->crs_ln); break; } - if(locmem->crs_ln != last_ln) default_ch = 'r'; + if(locmem->crs_ln != last_ln) default_ch = 'r'; } - else - default_ch=0; } while (mode != DOQUIT); #undef FHSZ -- cgit v1.2.3 From 38bde17fbfd3ebd01089fa6418bfdfb0ac7c2c27 Mon Sep 17 00:00:00 2001 From: jack Date: Sat, 24 Apr 2004 03:04:14 +0000 Subject: create i18n string array in shm git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1843 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- include/config.h | 8 ++++++++ include/pttstruct.h | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/include/config.h b/include/config.h index d44ce8a0..5f9a5a73 100644 --- a/include/config.h +++ b/include/config.h @@ -25,6 +25,14 @@ #define MAX_CPULOAD (70) /* CPU 最高load */ #endif +#ifndef MAX_LANG +#define MAX_LANG (1) /* 最多使用語言 */ +#endif + +#ifndef MAX_STRING +#define MAX_STRING (8000) /* 系統最多使用字串 */ +#endif + #ifndef MAX_POST_MONEY /* 發表文章稿費的上限 */ #define MAX_POST_MONEY 100 #endif diff --git a/include/pttstruct.h b/include/pttstruct.h index 80cef86c..eafc8636 100644 --- a/include/pttstruct.h +++ b/include/pttstruct.h @@ -424,6 +424,15 @@ typedef struct { time_t Fuptime; time_t Ftouchtime; int Fbusystate; + +#ifdef I18N + /* i18n(internationlization) */ + char *i18nstrptr[MAX_LANG][MAX_STRING]; + char i18nstrbody[16 * MAX_LANG * MAX_STRING]; + /* Based on the statistis, we found the lengh of one string + is 16 bytes approximately. + */ +#endif } SHM_t; typedef struct { -- cgit v1.2.3 From b117dde9ba6212b64bee572aac622fd8a578dfe0 Mon Sep 17 00:00:00 2001 From: ptt Date: Sat, 24 Apr 2004 03:35:20 +0000 Subject: slight change git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1844 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/read.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mbbsd/read.c b/mbbsd/read.c index 9e698a4c..a2a56528 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -936,6 +936,7 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey break; } if(locmem->crs_ln != last_ln) default_ch = 'r'; + else mode = FULLUPDATE; } } while (mode != DOQUIT); #undef FHSZ -- cgit v1.2.3 From 5aeba397cdc49d740d90a8a239a0c784c549dd0d Mon Sep 17 00:00:00 2001 From: jack Date: Sat, 24 Apr 2004 04:50:40 +0000 Subject: modified the festival function git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1845 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- util/account.c | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/util/account.c b/util/account.c index bb1b1bc4..6c05b569 100644 --- a/util/account.c +++ b/util/account.c @@ -1,6 +1,7 @@ /* $Id$ */ #include "bbs.h" +//test #define ACCOUNT_MAX_LINE 16 #define ADJUST_M 6 /* adjust back 5 minutes */ @@ -90,9 +91,10 @@ void gzip(source, target, stamp) int main(int argc, char **argv) { int hour, max, item, total, i, j, mo, da, max_user = 0, max_login = 0, - max_reg = 0, mahour = 0, k; + max_reg = 0, mahour = 0, k, wday; char *act_file = ".act"; char *log_file = "usies"; + char *wday_str = "UMTWRFS"; char buf[256], buf1[256], *p; FILE *fp, *fp1; int act[27]; /* 次數/累計時間/pointer */ @@ -328,11 +330,29 @@ int main(int argc, char **argv) if((fp = fopen("etc/feast", "r"))) { while(fgets(buf1, sizeof(buf1), fp)) { if(buf[0] != '#' && - sscanf(buf1, "%d %d ", &mo, &da) == 2) { - if(ptime->tm_mday == da && ptime->tm_mon + 1 == mo) { - i = 1; - fprintf(fp1, "%-14.14s", &buf1[6]); - } + sscanf(buf1, "%d %c%c", &mo, buf, buf+1) == 3) { + if (isdigit(buf[0])) { + if (isdigit(buf[1])) { + da = 10 * (buf[0] - '0') + (buf[1] - '0'); + if(ptime->tm_mday == da && ptime->tm_mon + 1 == mo) { + i = 1; + fprintf(fp1, "%-14.14s", &buf1[6]); + } + } + else { + if (buf[0] - '0' <= 4) { + wday = 0; + buf[1] = toupper(buf[1]); + while(wday < 7 && buf[1] != *(wday_str + wday)) + wday++; + if (ptime->tm_mon + 1 == mo && ptime->tm_wday == wday && + (ptime->tm_mday - 1)/7 + 1 == (buf[0] - '0')) { + i = 1; + fprintf(fp1, "%-14.14s", &buf1[6]); + } + } + } + } } } fclose(fp); @@ -341,7 +361,7 @@ int main(int argc, char **argv) if(i == 0) { if((fp = fopen("etc/today_boring", "r"))) { while(fgets(buf1, sizeof(buf1), fp)) - if(strlen(buf) > 3) + if(strlen(buf1) > 3) fprintf(fp1, "%s", buf1); fclose(fp); } else -- cgit v1.2.3 From d5f6cda0c60bbb2dbe4b57eca207b83696178dca Mon Sep 17 00:00:00 2001 From: ptt Date: Sat, 24 Apr 2004 12:08:57 +0000 Subject: 2 bugs fixed 1. vmsg 2. read git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1846 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/read.c | 3 ++- mbbsd/stuff.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mbbsd/read.c b/mbbsd/read.c index a2a56528..cb0a8467 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -906,7 +906,8 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey // 以下這幾種 mode 要再處理游標 default_ch=0; if(mode == READ_PREV || mode == READ_NEXT || mode == RELATE_PREV || - mode == RELATE_FIRST || mode == 'A' || mode == 'a' ) + mode == RELATE_FIRST || mode == 'A' || mode == 'a' || + mode == RELATE_NEXT) { lastmode = mode; last_ln = locmem->crs_ln; diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index fc2ce69d..cde95cb0 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -444,7 +444,7 @@ vmsg(const char *fmt,...) va_start(ap, fmt); i = vsnprintf(msg+14, 100, fmt, ap); va_end(ap); - for(; i<69; i++) + for(i=i+14; i<69; i++) *(msg+i) = ' '; strcat(msg+69, "\033[33;46m \033[200m\033[1431m\033[506m[請按任意鍵繼續]\033[201m \033[m"); -- cgit v1.2.3 From 222cc56e375934b18a4fc886ca3a769e4df58f73 Mon Sep 17 00:00:00 2001 From: ptt Date: Sun, 25 Apr 2004 00:51:09 +0000 Subject: debug of read.c git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1848 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/read.c | 36 +++++++++++------------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/mbbsd/read.c b/mbbsd/read.c index cb0a8467..b059ffac 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -3,7 +3,6 @@ static fileheader_t *headers = NULL; static int last_line; // PTT: last_line 游標可指的最後一個 -static int hit_thread; #include @@ -259,7 +258,6 @@ cursor_pos(keeploc_t * locmem, int val, int from_top) return PARTUPDATE; } - static int thread(keeploc_t * locmem, int stype, int *new_ln) { @@ -271,7 +269,7 @@ thread(keeploc_t * locmem, int stype, int *new_ln) int circulate_flag = 1; /* circulate at end or begin */ int fd = -1; - match = hit_thread = 0; + match = 0; now = pos = locmem->crs_ln; if (stype == 'A') { if (!*currowner) @@ -287,18 +285,6 @@ thread(keeploc_t * locmem, int stype, int *new_ln) query = a_ans; circulate_flag = 0; stype = RS_FORWARD; - } else if (stype == '/') { - if (!*t_ans) - return DONOTHING; - query = t_ans; - circulate_flag = 0; - stype = RS_TITLE | RS_FORWARD; - } else if (stype == '?') { - if (!*t_ans) - return DONOTHING; - circulate_flag = 0; - query = t_ans; - stype = RS_TITLE; } else if (stype & RS_RELATED) { tag = headers[pos - locmem->top_ln].title; if (stype & RS_CURRENT) { @@ -348,7 +334,6 @@ thread(keeploc_t * locmem, int stype, int *new_ln) if( fd ) close(fd); if ((stype & RS_FIRST) && (near)) { - hit_thread = 1; *new_ln = near; } return DONOTHING; @@ -369,7 +354,6 @@ thread(keeploc_t * locmem, int stype, int *new_ln) if (stype & RS_THREAD) { if (strncasecmp(fh.title, str_reply, 3)) { - hit_thread = 1; if( fd ) close(fd); *new_ln = now; @@ -388,7 +372,6 @@ thread(keeploc_t * locmem, int stype, int *new_ln) near = now; continue; } - hit_thread = 1; *new_ln = now; if ((!(stype & RS_CURRENT)) && (stype & RS_RELATED) && @@ -815,7 +798,6 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey char currdirect0[64], default_ch = 0; int last_line0 = last_line; int bottom_line = 0; - int hit_thread0 = hit_thread; fileheader_t *headers0 = headers; strlcpy(currdirect0, currdirect, sizeof(currdirect0)); @@ -921,19 +903,24 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey mode = cursor_pos(locmem, locmem->crs_ln + 1, 10); break; case RELATE_PREV: - mode = thread(locmem, RELATE_PREV, &locmem->crs_ln); + thread(locmem, RELATE_PREV, &num); + mode = cursor_pos(locmem, num, 10); break; case RELATE_NEXT: - mode = thread(locmem, RELATE_NEXT, &locmem->crs_ln); + thread(locmem, RELATE_NEXT, &num); + mode = cursor_pos(locmem, num, 10); break; case RELATE_FIRST: - mode = thread(locmem, RELATE_FIRST, &locmem->crs_ln); + thread(locmem, RELATE_FIRST, &num); + mode = cursor_pos(locmem, num, 10); break; case 'A': - mode = thread(locmem, 'A', &locmem->crs_ln); + thread(locmem, 'A', &num); + mode = cursor_pos(locmem, num, 10); break; case 'a': - mode = thread(locmem, 'a', &locmem->crs_ln); + thread(locmem, 'a', &num); + mode = cursor_pos(locmem, num, 10); break; } if(locmem->crs_ln != last_ln) default_ch = 'r'; @@ -944,7 +931,6 @@ i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey free(headers); last_line = last_line0; - hit_thread = hit_thread0; headers = headers0; strlcpy(currdirect, currdirect0, sizeof(currdirect)); return; -- cgit v1.2.3 From 37ca2e52ffe3986eb4cf57fb825926426a753245 Mon Sep 17 00:00:00 2001 From: in2 Date: Sun, 25 Apr 2004 09:40:08 +0000 Subject: remove annoying bell() git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1849 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/read.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/mbbsd/read.c b/mbbsd/read.c index b059ffac..4a110b40 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -237,14 +237,10 @@ cursor_pos(keeploc_t * locmem, int val, int from_top) cursor_show(3 , 0); return DONOTHING; } - if (val > last_line) { - bell(); + if (val > last_line) val = last_line; - } - if (val <= 0) { - bell(); + if (val <= 0) val = 1; - } if (val >= top && val < top + p_lines) { cursor_clear(3 + locmem->crs_ln - top, 0); locmem->crs_ln = val; -- cgit v1.2.3 From 8cb2775bb364a740a107fe74cc39d723fd63babc Mon Sep 17 00:00:00 2001 From: in2 Date: Sun, 25 Apr 2004 09:58:02 +0000 Subject: warning free git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1850 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/io.c | 2 +- mbbsd/stuff.c | 2 +- mbbsd/user.c | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/mbbsd/io.c b/mbbsd/io.c index 21a8045b..78adddda 100644 --- a/mbbsd/io.c +++ b/mbbsd/io.c @@ -199,7 +199,7 @@ static int water_which_flag = 0; int igetch() { - register int ch, mode =0, last; + register int ch, mode = 0, last = 0; while ((ch = dogetch())) { if (mode == 0 && ch == KEY_ESC) // here is state machine for 2 bytes key mode = 1; diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index cde95cb0..4e5fa46c 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -410,7 +410,7 @@ vmsg_lines(const int lines, const char msg[]) clrtoeol(); if (msg) - outs(msg); + outs((char *)msg); else outs("\033[46;1m \033[37m" "\033[200m\033[1431m\033[506m□ 請按 \033[33m(Space/Return)\033[37m 繼續 □\033[201m (^T) 收到暫存檔 \033[m"); diff --git a/mbbsd/user.c b/mbbsd/user.c index 103bd2d7..f6681cc2 100644 --- a/mbbsd/user.c +++ b/mbbsd/user.c @@ -1061,6 +1061,7 @@ toregister(char *email, char *genbuf, char *phone, char *career, } } +#ifndef FOREIGN_REG static int HaveRejectStr(char *s, char **rej) { int i; @@ -1088,6 +1089,7 @@ static int HaveRejectStr(char *s, char **rej) } return 0; } +#endif static char *isvalidname(char *rname) { @@ -1368,11 +1370,11 @@ u_register(void) getfield(11, "含\033[1;33m縣市\033[m及門寢號碼" "(台北請加\033[1;33m行政區\033[m)", "目前住址", addr, 50); - if( (errcode = isvalidaddr(addr) + if( (errcode = isvalidaddr(addr)) == NULL #ifdef FOREIGN_REG - && fore[0] ==0 + && fore[0] == 0 #endif - ) == NULL ) + ) break; else vmsg(errcode); -- cgit v1.2.3 From c8b988071cbd66574a6efbaa0cd7af3dbec5a3db Mon Sep 17 00:00:00 2001 From: in2 Date: Sun, 25 Apr 2004 10:20:17 +0000 Subject: r1850 igetch() in vmsg_lines() doesn't work :( dirty hack here git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1851 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/stuff.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index 4e5fa46c..ab542695 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -412,13 +412,13 @@ vmsg_lines(const int lines, const char msg[]) if (msg) outs((char *)msg); else - outs("\033[46;1m \033[37m" + outs("\033[45;1m \033[37m" "\033[200m\033[1431m\033[506m□ 請按 \033[33m(Space/Return)\033[37m 繼續 □\033[201m (^T) 收到暫存檔 \033[m"); - ch = igetch(); - if (ch == Ctrl('T')) { + do { + if( (ch = igetch()) == Ctrl('T') ) capture_screen(); - } + } while( (ch != ' ') && (ch != KEY_LEFT) && (ch != '\r') && (ch != '\n') ); move(lines, 0); clrtoeol(); -- cgit v1.2.3 From 9146a462298fea7f1c286a5d36a5f9a7a1671d8a Mon Sep 17 00:00:00 2001 From: in2 Date: Sun, 25 Apr 2004 10:20:38 +0000 Subject: undo 1830 git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1852 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/menu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mbbsd/menu.c b/mbbsd/menu.c index a8dacf3c..3c4dcbae 100644 --- a/mbbsd/menu.c +++ b/mbbsd/menu.c @@ -87,9 +87,9 @@ show_status(void) i = ptime->tm_wday << 1; snprintf(mystatus, sizeof(mystatus), - TITLE_COLOR" %d/%d 星期%c%c %d:%02d %-14s" - "\033[1;30;47m 目前坊裡有\033[;31;47m%d\033[1;30;47m人, " - "我是\033[0;31;47m%-12s\033[1;30;47m[扣機]\033[0;31;47m%s\033[0m", + "\033[34;46m[%d/%d 星期%c%c %d:%02d]\033[1;33;45m%-14s" + "\033[30;47m 目前坊裡有\033[31m%d\033[30m人, 我是\033[31m%-12s" + "\033[30m[扣機]\033[31m%s\033[0m", ptime->tm_mon + 1, ptime->tm_mday, myweek[i], myweek[i + 1], ptime->tm_hour, ptime->tm_min, currutmp->birth ? "生日要請客唷" : SHM->today_is, -- cgit v1.2.3 From 4998037cba9abef044b4d3d0626d2626970e5eea Mon Sep 17 00:00:00 2001 From: in2 Date: Sun, 25 Apr 2004 10:22:29 +0000 Subject: warning free git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1853 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/read.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mbbsd/read.c b/mbbsd/read.c index 4a110b40..3b723841 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -788,7 +788,7 @@ void i_read(int cmdmode, char *direct, void (*dotitle) (), void (*doentry) (), onekey_t * rcmdlist, int bidcache) { keeploc_t *locmem = NULL; - int recbase = 0, mode, lastmode, last_ln; + int recbase = 0, mode, lastmode = 0, last_ln; int num = 0, entries = 0, n_bottom=0; int i; char currdirect0[64], default_ch = 0; -- cgit v1.2.3 From 9597ae1b4e39c723c06bab688474a28d59ac08ef Mon Sep 17 00:00:00 2001 From: in2 Date: Sun, 25 Apr 2004 11:37:47 +0000 Subject: r1851 dirty fixed vmsg_lines(), but broke getans() this patch dirty fixes getans() and sould be discarded after fix dogetch(). git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1854 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/stuff.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index ab542695..1bf292ea 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -428,12 +428,13 @@ vmsg_lines(const int lines, const char msg[]) int getans(const char *fmt,...) { - char msg[80] = {0}; + char msg[80] = {0}, ans[2] = {0}; va_list ap; va_start(ap, fmt); vsnprintf(msg, sizeof(msg), fmt, ap); va_end(ap); - return vmsg_lines(b_lines, msg); + getdata(b_lines - 1, 0, msg, ans, sizeof(ans), LCECHO); + return ans[0]; } int -- cgit v1.2.3 From 1ebeeb92186b0631fe1f04ffed1e6a150b2a40e6 Mon Sep 17 00:00:00 2001 From: in2 Date: Sun, 25 Apr 2004 12:00:45 +0000 Subject: discard r1854, dirty hack to ignore "\0" in vmsg_lines() (but igetch() should NOT return "\0") git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1855 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/stuff.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index 1bf292ea..3141cc26 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -418,7 +418,7 @@ vmsg_lines(const int lines, const char msg[]) do { if( (ch = igetch()) == Ctrl('T') ) capture_screen(); - } while( (ch != ' ') && (ch != KEY_LEFT) && (ch != '\r') && (ch != '\n') ); + } while( ch == 0 ); move(lines, 0); clrtoeol(); @@ -428,13 +428,12 @@ vmsg_lines(const int lines, const char msg[]) int getans(const char *fmt,...) { - char msg[80] = {0}, ans[2] = {0}; + char msg[80] = {0}; va_list ap; va_start(ap, fmt); vsnprintf(msg, sizeof(msg), fmt, ap); va_end(ap); - getdata(b_lines - 1, 0, msg, ans, sizeof(ans), LCECHO); - return ans[0]; + return vmsg_lines(b_lines, msg); } int -- cgit v1.2.3 From a08baf738de7959e912f5b12314da85eaea5a3c9 Mon Sep 17 00:00:00 2001 From: ptt Date: Sun, 25 Apr 2004 14:20:36 +0000 Subject: enlarge getans git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1856 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/stuff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index 3141cc26..7f5e495a 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -428,7 +428,7 @@ vmsg_lines(const int lines, const char msg[]) int getans(const char *fmt,...) { - char msg[80] = {0}; + char msg[128] = {0}; va_list ap; va_start(ap, fmt); vsnprintf(msg, sizeof(msg), fmt, ap); -- cgit v1.2.3