// 基本上本 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