看板SetupBBS
標 題patch -- SOB-PACK 避免 currboard 隨看板一覽而變更
發信站亞特蘭提斯 (Sun Aug 3 19:04:04 2003)
轉信站ptt!ctu-reader!ctu-peer!news.nctu!news.csie.ncyu!news.cs.nthu!Atlantis
// 本篇 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 [email protected] 利用暫存陣列 */
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