2012-11-30 39 views
1

问题我升级到一个新的服务器,因此也有新的软件,如库,标题等,使用curses一些代码的问题。 问题是使用l​​dat结构字段“firstchar”,“lastchar”和“text”,它们在curses.h的较新版本中隐藏在curses.priv.h中,因此它们未被解析。与旧的C代码与新的ncurses版本(ldat结构)

我真的可以使用一些指针来说明我可以如何解决这些问题。

下面的代码表示使用该结构域,但它只是一个完整的代码,因为它几千行的一部分......

如果有需要额外的代码,我可以添加此。

我还要补充一点,我还没有做出这个节目我自己,我只是为了使它与我们的新的服务器工作负责......

int 
update_window(changed, dw, sw, win_shared) 
bool *changed; 
WINDOW *dw;   /* Destination window */ 
window_t *sw;  /* Source window */ 
bool win_shared; 
{ 
    int y, x; 
    int yind, nx, first, last; 
    chtype *pd, *ps; /* pd = pointer destination, ps = pointer source */ 
    int nscrolls;  /* Number of scrolls to make */ 


    if(! sw->changed) { 
     *changed = FALSE; 
     return(0); 
    } 
    /**************************************** 
    * Determine number of times window is 
    * scrolled since last update 
    ****************************************/ 
    nscrolls = sw->scrollcount; if(nscrolls >= sw->ny) 
    nscrolls = 0; 

    sw->scrollcount = 0L; 

    dw->_flags = _HASMOVED; 
    dw->_cury = sw->cury; 
    dw->_curx = sw->curx; 

    if(nscrolls > 0) { 
     /* Don't copy lines that is scolled away */ 
     for(y = nscrolls; y < sw->ny; y++) { 
      yind = GETYIND(y - nscrolls, sw->toprow, sw->ny); 
      if(sw->lastch[yind] != _NOCHANGE) { 
       first = dw->_line[y].firstchar = sw->firstch[yind]; 
       last = dw->_line[y].lastchar = sw->lastch[yind]; 

       ps = &sw->screen[yind][first]; 
       pd = (chtype *)&dw->_line[y].text[first]; 
       nx = last - first + 1; 

       LOOPDN(x, nx) 
        d++ = *ps++; 

       if(! win_shared) { 
        sw->firstch[yind] = sw->nx; 
        sw->lastch[yind] = _NOCHANGE; 
       } 
      } 
     } 
    } else { 
     LOOPUP(y, sw->ny) { 
      yind = GETYIND(y, sw->toprow, sw->ny); 
      if(sw->lastch[yind] != _NOCHANGE) { 
       first = dw->_line[y].firstchar = sw->firstch[yind]; 
       last = dw->_line[y].lastchar = sw->lastch[yind]; 

       ps = &sw->screen[yind][first]; 
       pd = (chtype *)&dw->_line[y].text[first]; 
       nx = last - first + 1; 

       LOOPDN(x, nx) 
        *pd++ = *ps++; 

       if(! win_shared) { 
        sw->firstch[yind] = sw->nx; 
        sw->lastch[yind] = _NOCHANGE; 
       } 
      } 
     } 

     if(! win_shared) 
      sw->changed = FALSE; 
    } 

    *changed = TRUE; 
    return(nscrolls); 
} 

我感谢所有帮助我能!

回答

0

struct ldat的成员在June 2001中被设为私人。读取函数及其提及滚动提示它正在编写用于模仿滚动的某个窗口的一部分(通过将一组行写入实际窗口),并尝试绕过检查已更改行的ncurses逻辑。

对于这样的函数,唯一的解决方案是确定开发人员试图做什么,然后编写一个新函数,它使用所提供的库函数执行此操作。