看板SetupBBS
标 题SOB 选择式更新 -- 看板人气 (1) 基本使用
发信站亚特兰提斯 (Fri Dec 11 02:05:39 2009)
转信站ptt!news.ntu!ctu-gate!ctu-peer!news.nctu!news.NHCUE!Leo.mi.chu!Atlanti
// 基本上本 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