看板 SetupBBS 關於我們 聯絡資訊
// 本篇 patch 來自 Terry (frequency.twbbs.org) 兄的建議 內容提到 SOB 家族在 // 看板一覽或是新文章列表時 右上角的閱讀中看板會隨著翻頁而不斷改變其值 造成 // 閱文的不便 (我是覺得再多個 select 動作就好 ...) 所以做此 patch // 請注意此 patch 雖適用於 SOB 家族 但是因為是以我先日釋出的 SOB-PACK 為修改 // 基準 可能會與各位友站的 Code 不盡相同 請參照修改 勿直接照抄 // src/maple/bbs.c int Read() { int mode0 = currutmp->mode; int stat0 = currstat; char buf[40]; boardheader *bp; setutmpmode(READING); if(!(bp = getbcache(currboard))) return 0; /* 避免無此看板造成溢位錯誤 */ set_board(); ... brc_initial(currboard); /* 避免 v 文後 boardstat 未更新 */ i_read(READING, buf, readtitle, readdoent, read_comms); brc_update(currboard); /* 變更 brc_update() 函式型別 */ currutmp->mode = mode0; currstat = stat0; return 0; } // src/maple/board.c extern int numboards; extern boardheader *bcache; char tmpcurrboard[IDLEN+1]; typedef struct { int pos, total; char *name, *title, *BM; uschar unread, zap, bvote; } boardstat; void brc_update(char *brdname) { ... while(tmp < &tmp_buf[tmp_size] && (*tmp >= ' ' && *tmp <= 'z')) { tmp = brc_getrecord(tmp, tmp_name, &tmp_num, tmp_list); if(strncmp(tmp_name, brdname, BRC_STRLEN)) ptr = brc_putrecord(ptr, tmp_name, tmp_num, tmp_list); } ... } int brc_initial(char *boardname) { char dirfile[STRLEN], *ptr; int fd; if(strcmp(currboard, boardname) == 0) return brc_num; /* 避免誤判 */ brc_update(boardname); /* Dopin: idea by Terry.bbs@frequency.twbbs.org 利用暫存陣列 */ strcpy(tmpcurrboard, boardname); if(brc_buf[0] == '\0') { ... while(ptr < &brc_buf[brc_size] && (*ptr >= ' ' && *ptr <= 'z')) { ptr = brc_getrecord(ptr, brc_name, &brc_num, brc_list); if(strncmp(brc_name, tmpcurrboard, BRC_STRLEN) == 0) { strcpy(tmpcurrboard, currboard); return brc_num; } } ... strcpy(tmpcurrboard, currboard); return 1; } static void choose_board(int newflag) { ... case 'v': case 'V': ... brc_num = brc_changed = 1; brc_update(ptr->name); if(newflag) show_brdlist(head, 0, 1); break; case KEY_RIGHT: case '\n': case '\r': case 'r': { char buf[STRLEN]; ptr = &nbrd[num]; strcpy(currboard, ptr->name); brc_initial(ptr->name); ... } void force_board(char *brdname) { ... strcpy(currboard, ptr->name); /* 讓 Read() 少傳引數 */ while(check_newpost(ptr) && ptr->unread) { clear(); move(10, 15); prints("*[1;37;41m %s 看板有新文章! 請讀完後再離開... *[m", brdname); pressanykey(); if(Read()) return; /* 若看板閱讀過程有誤則跳離 避免無窮迴圈 */ } } // src/maple/main.c / src/maple/mbbsd.c static void user_login() { ... { brc_initial(DEFAULT_BOARD); set_board(); /* 已有 force_board() 初始化看板 不需多跑 */ } } // 本 patch 雖經測試 但尚不敢保證正確性一定完全沒問題 請備份好原來的程式後再 // 做修正 相關原始碼在 ftp://ftp.ats.idv.tw/pub/SOB/sob_20030803_pack.tgz -- Origin: Atlantis DN: bbs.ats.idv.tw IP : 203.73.231.195 ST: atlantis