荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Rog (我要开始努力学习), 信区: InstallBBS
标  题: [转载] FireBird BBS 2.66M 一个小bug的修改(转寄)
发信站: BBS 荔园晨风站 (Fri Dec 18 23:21:51 1998), 站内信件

【 以下文字转载自 Linux 讨论区 】
【 原文由 Lg 所发表 】
【 以下文字转载自 Lg 的信箱 】
发信人: yinj (鹰), 信区: BBSMan_Dev
标  题: FireBird BBS 2.66M 一个小bug的修改
发信站: BBS 水木清华站 (Thu Dec 10 17:25:52 1998) WWW-POST

    FireBird 2.66M 增加了一个新功能,就是用^Z可以把以前的信息调回来回,
这样一些暂时不想回的信息就可以放心的忽略过去,等有空了再^Z回来,功能很好
但是有一个小bug,就是你用^Z回以前的信息时(不是接到信息立即回时)如果再接
到一个新的信息,回完这个信息,再把刚才的信息写完发出后,屏幕顶端两行的内容
不会消失,毛病虽小,但总是不爽.
    我估计肯定是保存屏幕内容和恢复屏幕内容的程序做的有些问题,导致只有
一次保存的缓冲,两次则后面的覆盖前面的,恢复时自然就错了,看了看源码,果然
如此.一下给出解决方法:

screen.c:中 saveline函数 修改为:

saveline(line, mode)  /* 0,2 : save, 1,3 : restore, 4,6:save, 5,7:restore */
int line, mode;
{
    register struct screenline *bp = big_picture ;
    static char tmp[4][256];  /* modified by douglas 981210 ^Z problem */
    int x,y;

    switch (mode) {
        case 0: case 2: case 4: case 6:
                strncpy(tmp[mode/2], bp[line].data, LINELEN);
                tmp[mode/2][bp[line].len]='\0';
                break;
        case 1: case 3: case 5: case 7:
                getyx(&x,&y);
                move(line,0);
                clrtoeol();
                refresh();
                prints("%s",tmp[(mode-1)/2]);
                move(x,y);
                refresh();
    }
}
---------------

sendmsg.c 中r_msg2() 函数中:
  .
  .
  .
    if (RMSG == NA)
    {
       saveline(line,  0);  ->  saveline(line,  4);
       saveline(line+1,2);  ->  saveline(line+1,6);

    }
  .
  .
  .
          break;
        }
    saveline(line,  1);  -> saveline(line,  5);
    saveline(line+1,3);  -> saveline(line+1,7);




--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 210.45.208.245]
--
※ 转载:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.1]
--
※ 转载:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.159]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店