☆─────────────────────────────────────☆
hace.bbs@bbs.ccie.net.cn (半边海) 于 (Mon Dec 8 00:02:12 2003) 提到:
firebird 系统判断是否为同一主题采用的是比较标题的方法,
这样如果标题一样就认为是同一主题了,很明显, 这种算法存在误判断.
原来使用的是全局变量 ReadPost 和 ReplyPost, 在 bbs.c 的 setqtitle() 中,
现在定义另外一全局变量: unsigned char ext_acc[12];
而把 setqtitle() 改为:
void setqtitle(char *accessed)
{
FFLL = 1;
memcpy(ext_acc, accessed, 12);
}
也就是利用 struct fileheader {} 中的 accessed[] 来判断同主题,
令 struct fileheader info1, info2;
现在要判断的是 info1, info2, 在我的代码中是:
若 accessed[4] == 1 , 则为同主题第一篇.
若 accessed[4] == 0 , 则为其它同主题.
若 !strncmp(info1.accessed + 6, info1.accessed + 6, 5) 为真,
则 info1 和 info2 为同一主题.
RE 文章的时候 accessed + 6 与被Re的文章相同,
新发表的文章要设置一个唯一的 accessed + 6 ,
我想到了用时间来表示, 所以使用了下面的函数:
__128(char *s)
{
char *p = s;
time_t t = time(NULL);
while(t){
*p++ = t % 128;
t = t / 128;
}
}
假定要发表的文章为 struct fileheader postfile , 要先进行:
postfile.accessed[4] = 1;
__128(postfile.accessed + 6);
改动还算比较烦, 比如 search_articles() 要增加一参数 char *accessed , 等等.
以上只是我用的算法, 写出来让大家改进改进, :)
☆─────────────────────────────────────☆
KCN (毒中之毒~life so hard) 于 (Mon Dec 8 00:35:52 2003) 提到:
这个同主题不如参照ytht和smth的做法加入文章id,主题id和re文
id字段好
【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: firebird 系统判断是否为同一主题采用的是比较标题的方法,
: 这样如果标题一样就认为是同一主题了,很明显, 这种算法存在误判断.
: 原来使用的是全局变量 ReadPost 和 ReplyPost, 在 bbs.c 的 setqtitle() 中,
: 现在定义另外一全局变量: unsigned char ext_acc[12];
: 而把 setqtitle() 改为:
: void setqtitle(char *accessed)
: {
: FFLL = 1;
: memcpy(ext_acc, accessed, 12);
: }
: 也就是利用 struct fileheader {} 中的 accessed[] 来判断同主题,
: ...................
☆─────────────────────────────────────☆
stiger (stiger) 于 (Mon Dec 8 00:43:23 2003) 提到:
nod
这个fb2000里我早就作了,很简单
然后水母loc_util下有一个gentitle还是啥忘记了
就是生成新的.DIR的程序,非常好用.
【 在 KCN (毒中之毒~life so hard) 的大作中提到: 】
: 这个同主题不如参照ytht和smth的做法加入文章id,主题id和re文
: id字段好
☆─────────────────────────────────────☆
jemy.bbs@bbs.sjtu.edu.cn (kaka释然:)) 于 (Mon Dec 8 00:41:46 2003) 提到:
恩,sp
只要让文章id字段相符就可以了
【 在 KCN@smth.org (毒中之毒~life so hard) 的大作中提到: 】
: 这个同主题不如参照ytht和smth的做法加入文章id,主题id和re文
: id字段好
: 【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: : firebird 系统判断是否为同一主题采用的是比较标题的方法,
: : 这样如果标题一样就认为是同一主题了,很明显, 这种算法存在误判断.
: : 原来使用的是全局变量 ReadPost 和 ReplyPost, 在 bbs.c 的 setqtitle() 中,
: : 现在定义另外一全局变量: unsigned char ext_acc[12];
: : 而把 setqtitle() 改为:
: : void setqtitle(char *accessed)
: : {
: .................(以下省略)
☆─────────────────────────────────────☆
hace.bbs@bbs.ccie.net.cn (半边海) 于 (Mon Dec 8 00:50:38 2003) 提到:
能具体说说这几个 id 是什么吗?
再加这几个太乱了, 然后又为了凑到 256 字节,又要 改 owner,
转换好麻烦的说, 还不如用 accessed 好过.
【 在 jemy.bbs@bbs.sjtu.edu.cn (kaka释然:)) 的大作中提到: 】
: 恩,sp
: 只要让文章id字段相符就可以了
: 【 在 KCN@smth.org (毒中之毒~life so hard) 的大作中提到: 】
: : 这个同主题不如参照ytht和smth的做法加入文章id,主题id和re文
: : id字段好
: : .................(以下省略)
☆─────────────────────────────────────☆
stiger (stiger) 于 (Mon Dec 8 00:52:12 2003) 提到:
【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: 能具体说说这几个 id 是什么吗?
id,文章id
groupip, 同主题id
reid, re的原文章的id
: 再加这几个太乱了, 然后又为了凑到 256 字节,又要 改 owner,
改呗,这么长干嘛用
其他用unused[]农起来先
: 转换好麻烦的说, 还不如用 accessed 好过.
☆─────────────────────────────────────☆
kxn (小聪明不成大气候) 于 (Mon Dec 8 00:54:09 2003) 提到:
【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: 能具体说说这几个 id 是什么吗?
: 再加这几个太乱了, 然后又为了凑到 256 字节,又要 改 owner,
: 转换好麻烦的说, 还不如用 accessed 好过.
系统就是这样被弄得越来越难以维护了....
☆─────────────────────────────────────☆
hace.bbs@bbs.ccie.net.cn (半边海) 于 (Mon Dec 8 00:57:16 2003) 提到:
文章 id 是什么? 呵呵, 不懂的说, 能说说一下算法吗?
用得着这么个 id 多嘛? 晕~~
【 在 stiger@smth.org (stiger) 的大作中提到: 】
: 【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: : 能具体说说这几个 id 是什么吗?
: id,文章id
: groupip, 同主题id
: reid, re的原文章的id
: : 再加这几个太乱了, 然后又为了凑到 256 字节,又要 改 owner,
: 改呗,这么长干嘛用
: 其他用unused[]农起来先
: : 转换好麻烦的说, 还不如用 accessed 好过.
☆─────────────────────────────────────☆
stiger (stiger) 于 (Mon Dec 8 00:59:23 2003) 提到:
id严格递增,区分文章唯一标志
boardheader里有nowid表明最大的id
这样说够了嘛?
【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: 文章 id 是什么? 呵呵, 不懂的说, 能说说一下算法吗?
: 用得着这么个 id 多嘛? 晕~~
☆─────────────────────────────────────☆
jemy.bbs@bbs.sjtu.edu.cn (kaka释然:)) 于 (Mon Dec 8 00:58:24 2003) 提到:
re问要id干什么?太复杂了吧,呵呵
【 在 stiger@smth.org (stiger) 的大作中提到: 】
: 【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: : 能具体说说这几个 id 是什么吗?
: id,文章id
: groupip, 同主题id
: reid, re的原文章的id
: : 再加这几个太乱了, 然后又为了凑到 256 字节,又要 改 owner,
: 改呗,这么长干嘛用
: 其他用unused[]农起来先
: : 转换好麻烦的说, 还不如用 accessed 好过.
☆─────────────────────────────────────☆
stiger (stiger) 于 (Mon Dec 8 01:01:37 2003) 提到:
多一个不复杂呀
比如一个主题
第一篇id是100
re了一篇,id是105,groupid=100,reid=100
re上篇105id的文章,id=106, groupid=100, reid=105
【 在 jemy.bbs@bbs.sjtu.edu.cn (kaka释然:)) 的大作中提到: 】
: re问要id干什么?太复杂了吧,呵呵
☆─────────────────────────────────────☆
AM@feeling-NOsmthSPAM-org (荔园AM) 于 (Mon Dec 8 09:49:03 2003) 提到:
修改回文标题的bug你看了吗?
那里面的同主题算法也有问题哦
bug主要这样表现
1●你好
2●re: 你好
3●re: 你好
当你b主题的时候,选1为b的标记,这样就可以把所有文章算进主题
当2和3均为手动修改后的主题时,b2的话,它只会算回2的文章,
同理,b3的时候,就只算回复3的文章
就是说2和3已经被判断为不同主题了
那1就更加不是了..so ft
【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: firebird 系统判断是否为同一主题采用的是比较标题的方法,
: 这样如果标题一样就认为是同一主题了,很明显, 这种算法存在误判断.
: 原来使用的是全局变量 ReadPost 和 ReplyPost, 在 bbs.c 的 setqtitle() 中,
: 现在定义另外一全局变量: unsigned char ext_acc[12];
: 而把 setqtitle() 改为:
: void setqtitle(char *accessed)
: {
: FFLL = 1;
: memcpy(ext_acc, accessed, 12);
: }
: 也就是利用 struct fileheader {} 中的 accessed[] 来判断同主题,
: ...................
☆─────────────────────────────────────☆
hace.bbs@bbs.ccie.net.cn (半边海) 于 (Mon Dec 8 09:58:48 2003) 提到:
这里判断同主题是以 accessed 为准的,
修改标题并没有修改 accessed
【 在 AM@feeling-NOsmthSPAM-org (荔园AM) 的大作中提到: 】
: 修改回文标题的bug你看了吗?
: 那里面的同主题算法也有问题哦
: bug主要这样表现
: 1●你好
: 2●re: 你好
: 3●re: 你好
: 当你b主题的时候,选1为b的标记,这样就可以把所有文章算进主题
: 当2和3均为手动修改后的主题时,b2的话,它只会算回2的文章,
: 同理,b3的时候,就只算回复3的文章
: 就是说2和3已经被判断为不同主题了
: .................(以下省略)
☆─────────────────────────────────────☆
TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于 (Mon Dec 8 10:42:30 2003) 提到:
修改文章标题,把Re: => re: 这个是系统做的,
我也不知道为什么要这么做?(anyone knows this?)
【 在 AM@feeling-NOsmthSPAM-org (荔园AM) 的大作中提到: 】
: 修改回文标题的bug你看了吗?
: 那里面的同主题算法也有问题哦
: bug主要这样表现
: 1●你好
: 2●re: 你好
: 3●re: 你好
: 当你b主题的时候,选1为b的标记,这样就可以把所有文章算进主题
: 当2和3均为手动修改后的主题时,b2的话,它只会算回2的文章,
: 同理,b3的时候,就只算回复3的文章
: 就是说2和3已经被判断为不同主题了
: .................(以下省略)
☆─────────────────────────────────────☆
jjk@feeling-NOsmthSPAM-org (喔!) 于 (Mon Dec 8 10:39:59 2003) 提到:
防止伪造主题re
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: 修改文章标题,把Re: => re: 这个是系统做的,
: 我也不知道为什么要这么做?(anyone knows this?)
☆─────────────────────────────────────☆
AM.bbs@TaoLiBBS.3322.ORG (世界的黑暗) 于 (Mon Dec 8 10:42:10 2003) 提到:
晕,这样防止也太bt了吧
那应该做一个判断吧,对标题内容没有任何更改的话,就不要作出变动
【 在 jjk@feeling-NOsmthSPAM-org (喔!) 的大作中提到: 】
: 防止伪造主题re
: 【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: : 修改文章标题,把Re: => re: 这个是系统做的,
: : 我也不知道为什么要这么做?(anyone knows this?)
☆─────────────────────────────────────☆
hace.bbs@bbs.ccie.net.cn (半边海) 于 (Mon Dec 8 10:42:28 2003) 提到:
呵呵, 我已经把 Re: 那些去掉了, 标题随便改~~
有个递归的 check_title() 郁闷了我很久, 现在干脆去掉它了
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: 修改文章标题,把Re: => re: 这个是系统做的,
: 我也不知道为什么要这么做?(anyone knows this?)
: 【 在 AM@feeling-NOsmthSPAM-org (荔园AM) 的大作中提到: 】
: : 修改回文标题的bug你看了吗?
: : 那里面的同主题算法也有问题哦
: : bug主要这样表现
: : 1●你好
: : 2●re: 你好
: : 3●re: 你好
: : 当你b主题的时候,选1为b的标记,这样就可以把所有文章算进主题
: .................(以下省略)
☆─────────────────────────────────────☆
AM.bbs@TaoLiBBS.3322.ORG (世界的黑暗) 于 (Mon Dec 8 10:45:50 2003) 提到:
直接把check_title()去掉就行了?
嘿嘿,试试先
【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: 呵呵, 我已经把 Re: 那些去掉了, 标题随便改~~
: 有个递归的 check_title() 郁闷了我很久, 现在干脆去掉它了
: 【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: : 修改文章标题,把Re: => re: 这个是系统做的,
: : 我也不知道为什么要这么做?(anyone knows this?)
: : .................(以下省略)
☆─────────────────────────────────────☆
AM.bbs@TaoLiBBS.3322.ORG (世界的黑暗) 于 (Mon Dec 8 10:49:29 2003) 提到:
可以了,多谢hace:)
【 在 AM (世界的黑暗) 的大作中提到: 】
: 直接把check_title()去掉就行了?
: 嘿嘿,试试先
: 【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: : 呵呵, 我已经把 Re: 那些去掉了, 标题随便改~~
: : 有个递归的 check_title() 郁闷了我很久, 现在干脆去掉它了
☆─────────────────────────────────────☆
TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于 (Mon Dec 8 10:55:47 2003) 提到:
check_title是递归的?
我这里怎么不是呢?
void check_title(char *title)
{
if (killwordsp(title) == 0)
return;
if (strncmp(title, "Re: ", 4) != 0)
return;
title[0] = 'r';
}
【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: 呵呵, 我已经把 Re: 那些去掉了, 标题随便改~~
: 有个递归的 check_title() 郁闷了我很久, 现在干脆去掉它了
: 【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: : 修改文章标题,把Re: => re: 这个是系统做的,
: : 我也不知道为什么要这么做?(anyone knows this?)
: : .................(以下省略)
☆─────────────────────────────────────☆
AM.bbs@TaoLiBBS.3322.ORG (世界的黑暗) 于 (Mon Dec 8 10:53:50 2003) 提到:
难道是1129已经改变了?我得是1126,hace的是1106
void check_title(char *title)
{
if(killwordsp(title)==0) return;
if(title[0]!='R'||(title[1]!='e'&&title[1]!='E')||title[2]!=':')
return ;
title[0] = 'r';
}
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: check_title是递归的?
: 我这里怎么不是呢?
: void check_title(char *title)
: {
: if (killwordsp(title) == 0)
: return;
: if (strncmp(title, "Re: ", 4) != 0)
: return;
: title[0] = 'r';
: }
: .................(以下省略)
☆─────────────────────────────────────☆
hace.bbs@bbs.ccie.net.cn (半边海) 于 (Mon Dec 8 10:52:49 2003) 提到:
版本不同吧, 我的是在 fb2000v1106 上修改的:
不过你的又多了个 killwordsp(), 呵呵
#if 0
void check_title(char *title)
{
char tempfilename[50];
if (title[0] != ' ' && strncasecmp(title, "Re:", 3))
return;
if (title[0] == ' ')
strcpy(title, &(title[1]));
else {
sprintf(tempfilename, "%2.2s: %s", title, &title[3]);
strcpy(title, tempfilename);
}
check_title(title);
}
#endif
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: check_title是递归的?
: 我这里怎么不是呢?
: void check_title(char *title)
: {
: if (killwordsp(title) == 0)
: return;
: if (strncmp(title, "Re: ", 4) != 0)
: return;
: title[0] = 'r';
: }
: .................(以下省略)
☆─────────────────────────────────────☆
TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于 (Mon Dec 8 11:09:56 2003) 提到:
把.DIR, .DIGEST, .MAIL 等等都跑一次吧
算出reid, id, 以后做判断就比较节省CPU了。
【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: firebird 系统判断是否为同一主题采用的是比较标题的方法,
: 这样如果标题一样就认为是同一主题了,很明显, 这种算法存在误判断.
: 原来使用的是全局变量 ReadPost 和 ReplyPost, 在 bbs.c 的 setqtitle() 中,
: 现在定义另外一全局变量: unsigned char ext_acc[12];
: 而把 setqtitle() 改为:
: void setqtitle(char *accessed)
: {
: FFLL = 1;
: memcpy(ext_acc, accessed, 12);
: }
: .................(以下省略)
☆─────────────────────────────────────☆
AM.bbs@TaoLiBBS.3322.ORG (世界的黑暗) 于 (Mon Dec 8 11:08:24 2003) 提到:
UestcDEV还能用否?
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: 把.DIR, .DIGEST, .MAIL 等等都跑一次吧
: 算出reid, id, 以后做判断就比较节省CPU了。
: 【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: : firebird 系统判断是否为同一主题采用的是比较标题的方法,
: : 这样如果标题一样就认为是同一主题了,很明显, 这种算法存在误判断.
: : 原来使用的是全局变量 ReadPost 和 ReplyPost, 在 bbs.c 的 setqtitle() 中,
: : 现在定义另外一全局变量: unsigned char ext_acc[12];
: : 而把 setqtitle() 改为:
: : void setqtitle(char *accessed)
: : {
: .................(以下省略)
☆─────────────────────────────────────☆
TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于 (Mon Dec 8 11:17:47 2003) 提到:
可以使用
UrIP: 61.144.244.24
【 在 AM.bbs@TaoLiBBS.3322.ORG (世界的黑暗) 的大作中提到: 】
: UestcDEV还能用否?
: 【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: : 把.DIR, .DIGEST, .MAIL 等等都跑一次吧
: : 算出reid, id, 以后做判断就比较节省CPU了。
: : .................(以下省略)
☆─────────────────────────────────────☆
rwayan (阿言) 于 (Mon Dec 8 13:59:35 2003) 提到:
你那边做好了?
我又抄你的就好
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: 把.DIR, .DIGEST, .MAIL 等等都跑一次吧
: 算出reid, id, 以后做判断就比较节省CPU了。
☆─────────────────────────────────────☆
hace.bbs@bbs.ccie.net.cn (半边海) 于 (Mon Dec 8 16:23:40 2003) 提到:
对于本站发表的文章, 这样还算比较完美, 至少这我这么认为, :)
只是对转信转过来的文章就不爽了,如果是新发表的还好,
但回复的文章就需要对.DIR向前搜索,以确认属于哪个主题,
因为转过来的文章根本就没带 accessed[] , 555
我现在是向前搜索100篇,如果没有的话就认为是新发表的了.
不知道 smth 是怎么算转来的文章的?
【 在 hace (半边海) 的大作中提到: 】
: firebird 系统判断是否为同一主题采用的是比较标题的方法,
: 这样如果标题一样就认为是同一主题了,很明显, 这种算法存在误判断.
: 原来使用的是全局变量 ReadPost 和 ReplyPost, 在 bbs.c 的 setqtitle() 中,
: 现在定义另外一全局变量: unsigned char ext_acc[12];
☆─────────────────────────────────────☆
yuhuan.bbs@ytht.net (开始用盗版) 于 (Mon Dec 8 17:01:04 2003) 提到:
混乱的使用方法,作者对C语言和bbs数据结构认识不够清晰
【 在 hace.bbs@bbs.ccie.net.cn (半边海) 的大作中提到: 】
: firebird 系统判断是否为同一主题采用的是比较标题的方法,
: 这样如果标题一样就认为是同一主题了,很明显, 这种算法存在误判断.
: 原来使用的是全局变量 ReadPost 和 ReplyPost, 在 bbs.c 的 setqtitle() 中,
: 现在定义另外一全局变量: unsigned char ext_acc[12];
: 而把 setqtitle() 改为:
: void setqtitle(char *accessed)
: {
: FFLL = 1;
: ...................
☆─────────────────────────────────────☆
kxn (小聪明不成大气候) 于 (Mon Dec 8 17:31:30 2003) 提到:
板砖王你好, admire yuhuan the Lord of bricks
【 在 yuhuan.bbs@ytht.net (开始用盗版) 的大作中提到: 】
: 混乱的使用方法,作者对C语言和bbs数据结构认识不够清晰