看板 SetupBBS 關於我們 聯絡資訊
// 基本上本 patch 單純就是讓人氣可以顯示與運作 不含統計與其他功能 Orz // 適用版本 maple 2.36 / SOB 2009/12/09(含) 以前的版本 / 其他 SOB 家族 [重要 !! 在 patch 之前] ve src/maple/abc.c (或取任何一個不會跟目錄中檔案重疊的 "name.c") /* 從這開始新增檔案 */ #include "bbs.h" /* 請 "務必" 拷貝 struct.h 中的 boardheader 到下面 此為範例 */ struct boardheader_n { char brdname[IDLEN + 1]; /* bid */ char title[BTLEN - 1]; short readers; // 如果需要定義成 int 則 title 要再減 2 但不建議 char BM[IDLEN * 3 + 3]; /* BMs' uid, token '/' */ char yankflags[11]; /* Dopin: for extra_mode */ time_t bupdate; /* note update time */ char outgo_mode; /* usenet outgo mode */ char pad2[2]; uschar bvote; /* Vote flags */ time_t vtime; /* Vote close time */ usint level; }; typedef struct boardheader_n boardheader_n; int main(void) { printf("Old %d ; New %d\n", sizeof(boardheader), sizeof(boardheader_n)); return 0; } /* 到這裡 */ bbs<home:/home/bbs/src/maple> make abc ; ./abc cc -O -pipe abc.c -o abc Old 128 ; New 128 bbs<home:/home/bbs/src/maple> /* 請注意 新舊 boardheader 的大小一定要調到 New 跟 Old 一樣才可以用 */ [完全確定結構大小沒問題 再開始動工] bbs<home:/home/bbs/src/maple> rm abc* // 砍掉剛剛的測試程式 不砍也行 // src/maple/struct.h // 請依貴站經上述動作調整好之實際狀況修改 struct boardheader { char brdname[IDLEN + 1]; /* bid */ char title[BTLEN - 1]; short readers; /* count readers */ char BM[IDLEN * 3 + 3]; /* BMs' uid, token '/' */ ... }; // src/maple/admin.c // 避免以後開看板變更看板破表 int m_newbrd() { ... if(boardname) strcpy(newboard.title, brdcname); else getdata(2, 0, "看板主題: ", newboard.title, BTLEN - 1, DOECHO, 0); ... } int m_board() { ... if(getdata(12, 0, "新的看板說明: ", genbuf, BTLEN - 1, DOECHO, newbh.title)) strcpy(newbh.title, genbuf); ... } // 如果發現到 現存的看板 有的中文板名很長 要記得修改 以免蓋到新欄位 // src/maple/bbs.c int Read() { char buf[40]; int mode0 = currutmp->mode; int stat0 = currstat; time_t usetime; boardheader *bp; // 請檢查是否有這兩行敘述 沒有請加上 if(!(bp = getbcache(currboard))) return -1; ... brc_initial(currboard); if(bp->readers < 0) bp->readers = 0; if(bp->readers < 30000) bp->readers++; // short 極值 32767 這樣定應該安全 /* Dopin: 加入判斷 以免站長沒進去看板裡也被系統記錄 */ if(i_read(READING, buf, readtitle, readdoent, read_comms)) { log_board(currboard, time(0) - usetime); brc_update(currboard); } if(bp->readers > 0) bp->readers --; else bp->readers = 0; ... } // menu.c void showtitle(title, mid1) char *title, *mid1; { char buf[40], *mid, midbuf[TTLEN], readers[16] = ""; int spc, pad; boardheader *bp = NULL; if(currstat == READING) if(bp = getbcache(currboard)) { // 多少算人數破表可以自己改 這裡是 9999 if(bp->readers > 99999) sprintf(readers, "人氣: 破 表 "); else sprintf(readers, "人氣: %-4d ", bp->readers); } else return; mid = strcpy(midbuf, mid1); ... } if(currstat == READING) // 預設最高人數是四位數 0000 位數有變更格式要改 spc = 66-strlen(title)-spc-strlen(currboard)-strlen(" 人氣: 0000 "); else spc = 66 - strlen(title) - spc - strlen(currboard); /* woju */ ... clear(); prints("*[1;44;37m【%s】%s*[33m%s%s%s%s*[3%s《%s》*[0m\n", title, buf, mid, buf, " " + pad, readers, currmode & MODE_SELECT ? "6m系列" : currmode & MODE_ETC ? "5m其他" : currmode & MODE_DIGEST ? "2m文摘" : "7m看板", currboard); } // 這樣修改後就會以如下的效果 : 【板主:徵求中】 沙質測試…… 人氣: 1 看板《Test》 [←]離開 [→]閱讀 [^P]發表文章 [b]備忘錄 [d]刪除 [z]精華區 [TAB]文摘 [h]elp 編號 日 期 作 者 文 章 標 題 ● 1 10/09 1SYSOP □ 本板功能 // 祝變更愉快 切務注意一定要比對過新舊的 boardheader 才動工 否則要轉換結構 -- Origin: Atlantis DN: bbs.bsd.com.tw IP : 203.70.65.27 ST: atlantis