1

新しいサーバーにアップグレードした後、cursesを使用しているコードに問題があります。したがって、libs、headersなどの新しいソフトウェアにも問題があります。問題は、新しいバージョンのcurses.hではcurses.priv.hに隠されているため、解決されないldat構造体フィールド「firstchar」、「lastchar」、および「text」の使用です。

これらの問題をどのように解決できるかについて、いくつかの指針を実際に使用することができました。

以下のコードは、構造体フィールドの使用を示していますが、数千行であるため、完全なコードの一部にすぎません...

追加のコードが必要な場合は、これを追加できます。

また、私はこのプログラムを自分で作成したのではなく、新しいサーバーで動作させる責任があるだけだと付け加えるかもしれません...

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);
}

私が得ることができるすべての助けに感謝します!

4

1 に答える 1