【 在 Leeward (5% completed★Y2K:PP) 的大作中提到: 】
: : 例如,我发了一篇文章:
: : $userid
: : 那么我看这文章时就会看成:
: : ahliang
: : 而你看则成为:
: : Leeward
: 哦, 水木好像的确没有这个现象, 我用 telnet 看你的原文, $userid 就是 $userid
: 不会变成阅读者的 ID.
:
: 这个可能是什么设置搞出来的? 不清楚了, 而且水木是 2.5 版本.
: 我找了个 2.6 版本的 BBS 测试, 的确象你说的那样, 呵呵, 很有趣啊.
: 或者 2.6 就是支持这样的功能呢? 提供了灵活性.
: 研究研究吧.
刚研究了一下 2.5 和 2.6 的代码, 两个版本在这个问题上是基本一样的.
考虑到现在用 2.6 系列的比较多, 我下面用 2.6 来具体说明:
$userid 等的定义在 goodbye.c 中的 showstuff 函数内.
static logout loglst[] 那里定义了许多类似的替换呢.
替换操作在随后的代码块:
do
{
if(ptr = strchr(ptr2, '$'))
{
之内.
这个替换提供了一定的灵活性呢.
grep 一下 showstuff,
在 more.c 和 read.c 以及 fileshm.c 和 goodbye.c 里都有.
more.c 内的 showstuff 调用一共有 6 处,
阅读文章时用到的是 rawmore 函数内的相同的下列两处:
if(check_stuffmode())
showstuff(buf);
else
printf("%s",buf);
注意, 在 more.c 里查找 rawmore 函数可以找到两个, 前面那个函数整个被注释掉的.
里面包含 3 处 showstuff 调用, 不用去管它们.
more.c 里, netty_more 函数中也有一个 showstuff 调用.
那是和活动看版相关的.
此外, fileshm.c 和 read.c 中也各有一次 showstuff 调用,
分别是显示进站画面等文档和版面标题的.
而 goodbye.c 里的 showstuff 调用, 是显示离站画面的.
以上, 2.5 和 2.6 是一样的. 那么为什么清华的代码阅读文章时不具有这种替换功能呢?
是因为 check_stuffmode 这个函数, 清华的和 2.6 版本的不一样:
>清华的:
int
check_stuffmode()
{
if(uinfo.mode==RMAIL)
return YEA;
else
return NA;
}
>2.6 的:
int
check_stuffmode()
{
if(uinfo.mode==RMAIL || (uinfo.mode==READING&&junkboard()))
return YEA;
else
return NA;
}
考虑到 junkboard 函数:
int
junkboard()
{
return seek_in_file("etc/junkboards",currboard);
}
注意到没有, 在 2.6 中, 替换只发生在读信或者读 ~bbs/etc/junkboards 规定的
版面的文章之时. 这个文件一般只定义了 test 这个版,
就是说, 替换只发生在 读信或者 test 版. 所以禁止也没有什么大的意义.
如果你一定要禁止这种 2.6 新增的灵活性, 可以照清华的改.
--
修改:Leeward FROM powerpc1.lib.ts
FROM 202.100.94.1