精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>已关闭版区>>● BBS系统>>火鸟 BBS>>火鸟bug的探讨>>FBBS2.66消息覆盖小BUG修改

主题:FBBS2.66消息覆盖小BUG修改
发信人: karaoke()
整理人: microant(1999-11-30 11:50:00), 站内信件

    FireBird 2.66M 增加了一个新功能,就是用^Z可以把以前的信息调回来回, 
 
这样一些暂时不想回的信息就可以放心的忽略过去,等有空了再^Z回来,功能很好
  
但是有一个小bug,就是你用^Z回以前的信息时(不是接到信息立即回时)如果再接
  
到一个新的信息,回完这个信息,再把刚才的信息写完发出后,屏幕顶端两行的内容
  
不会消失,毛病虽小,但总是不爽.  
    我估计肯定是保存屏幕内容和恢复屏幕内容的程序做的有些问题,导致只有 
 
一次保存的缓冲,两次则后面的覆盖前面的,恢复时自然就错了,看了看源码,果然
  
如此.一下给出解决方法:  
 
screen.c:中 saveline函数 修改为:  
 
saveline(line, mode)  /* 0,2 : save, 1,3 : restore, 4,6:save, 5,7:rest
ore */  
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);    
 

--
       Oooo    风吹云起 
  oooO (  )    一切无踪 
  (  )  )/     记得的往往竟是该忘的 
   \(  (_)     一个眼神 
   (_)  ~      一句话语   
    ~                        ~~~~~~~~~乡巴佬

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.133.148]

[关闭][返回]