|
|
1.1 root 1: # include "curses.ext"
2:
3: # ifndef DEBUG
4: static short ly, lx;
5: # else
6: short ly, lx;
7: # endif
8:
9: wrefresh(win)
10: reg WINDOW *win;
11: {
12: reg short wy;
13:
14: /*
15: * make sure were in visual state
16: */
17: if (_endwin) {
18: _puts(VS);
19: _puts(TI);
20: _endwin = FALSE;
21: }
22: if (win->_clear || curscr->_clear) {
23: if ((win->_flags & _FULLWIN) || curscr->_clear) {
24: _puts(CL);
25: curscr->_curx = curscr->_cury = 0;
26: curscr->_clear = FALSE;
27: werase(curscr);
28: }
29: win->_clear = FALSE;
30: }
31: if (!CA) {
32: if (win->_curx != 0)
33: putchar('\n');
34: werase(curscr);
35: }
36: # ifdef DEBUG
37: fprintf(outf, "REFRESH:\n\tfirstch\tlastch\n");
38: # endif
39: ly = curscr->_cury;
40: lx = curscr->_curx;
41: wy = 0;
42: for (wy = 0; wy < win->_maxy; wy++) {
43: # ifdef DEBUG
44: fprintf(outf, "%d\t%d\t%d\n", wy, win->_firstch[wy], win->_lastch[wy]);
45: # endif
46: if (win->_firstch[wy] != _NOCHANGE)
47: if (makech(win, wy) == ERR)
48: return ERR;
49: else
50: win->_firstch[wy] = win->_firstch[wy] = _NOCHANGE;
51: }
52: if (win->_leave) {
53: curscr->_cury = ly;
54: curscr->_curx = lx;
55: ly -= win->_begy;
56: lx -= win->_begx;
57: if (ly >= 0 && ly < win->_maxy && lx >= 0 && lx < win->_maxx) {
58: win->_cury = ly;
59: win->_curx = lx;
60: }
61: else
62: win->_cury = win->_curx = 0;
63: }
64: else {
65: mvcur(ly, lx, win->_cury + win->_begy, win->_curx + win->_begx);
66: curscr->_cury = win->_cury + win->_begy;
67: curscr->_curx = win->_curx + win->_begx;
68: }
69: fflush(stdout);
70: return OK;
71: }
72:
73: /*
74: * make a change on the screen
75: */
76: # ifndef DEBUG
77: static
78: # endif
79: makech(win, wy)
80: reg WINDOW *win;
81: short wy;
82: {
83: reg char *nsp, *csp, *sp;
84: reg short wx, lch, y;
85: reg int nlsp, clsp; /* last space in lines */
86:
87: wx = win->_firstch[wy];
88: y = wy + win->_begy;
89: lch = win->_lastch[wy];
90: csp = &curscr->_y[wy + win->_begy][wx + win->_begx];
91: nsp = &win->_y[wy][wx];
92: if (CE) {
93: for (sp = &win->_y[wy][win->_maxx - 1]; *sp == ' '; sp--)
94: if (sp <= win->_y[wy])
95: break;
96: nlsp = sp - win->_y[wy];
97: }
98: sp = CE;
99: while (wx <= lch) {
100: if (*nsp != *csp) {
101: mvcur(ly, lx, y, wx + win->_begx);
102: # ifdef DEBUG
103: fprintf(outf, "MAKECH: 1: wx = %d, lx = %d\n", wx, lx);
104: # endif
105: ly = y;
106: lx = wx + win->_begx;
107: while (*nsp != *csp && wx <= lch) {
108: if (sp && wx >= nlsp && *nsp == ' ') {
109: /*
110: * check for clear to end-of-line
111: */
112: sp = &curscr->_y[ly][COLS - 1];
113: while (*sp == ' ')
114: if (sp-- <= csp)
115: break;
116: clsp = sp - curscr->_y[ly] - win->_begx;
117: # ifdef DEBUG
118: fprintf(outf, "MAKECH: clsp = %d, nlsp = %d\n", clsp, nlsp);
119: # endif
120: if (clsp - nlsp >= strlen(CE)
121: && clsp < win->_maxx) {
122: # ifdef DEBUG
123: fprintf(outf, "MAKECH: using CE\n");
124: # endif
125: _puts(CE);
126: lx = wx + win->_begx;
127: while (wx++ <= clsp)
128: *csp++ = ' ';
129: goto ret;
130: }
131: sp = NULL;
132: }
133: /*
134: * enter/exit standout mode as appropriate
135: */
136: if ((*nsp&_STANDOUT) != (curscr->_flags&_STANDOUT)) {
137: if (*nsp & _STANDOUT) {
138: _puts(SO);
139: curscr->_flags |= _STANDOUT;
140: }
141: else {
142: _puts(SE);
143: curscr->_flags &= ~_STANDOUT;
144: }
145: }
146: wx++;
147: if (wx >= win->_maxx && wy == win->_maxy)
148: if (win->_scroll) {
149: putchar((*csp = *nsp) & 0177);
150: scroll(win);
151: if (win->_flags&_FULLWIN)
152: scroll(curscr);
153: ly = win->_begy+win->_cury;
154: lx = win->_begx+win->_curx;
155: return OK;
156: }
157: else if (win->_flags&_SCROLLWIN) {
158: lx = --wx;
159: return ERR;
160: }
161: putchar((*csp++ = *nsp++) & 0177);
162: }
163: # ifdef DEBUG
164: fprintf(outf, "MAKECH: 2: wx = %d, lx = %d\n", wx, lx);
165: # endif
166: if (lx == wx + win->_begx) /* if no change */
167: break;
168: lx = wx + win->_begx;
169: }
170: else if (wx < lch)
171: while (*nsp == *csp) {
172: nsp++, csp++;
173: ++wx;
174: }
175: else
176: break;
177: # ifdef DEBUG
178: fprintf(outf, "MAKECH: 3: wx = %d, lx = %d\n", wx, lx);
179: # endif
180: }
181: ret:
182: return OK;
183: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.