|
|
1.1 root 1: # include "curses.ext"
2:
3: /*
4: * This routine adds the character to the current position
5: *
6: * 3/5/81 (Berkeley) @(#)addch.c 1.3
7: */
8: waddch(win, c)
9: reg WINDOW *win;
10: char c;
11: {
12: reg int x, y;
13:
14: x = win->_curx;
15: y = win->_cury;
16: # ifdef FULLDEBUG
17: fprintf(outf, "ADDCH('%c') at (%d, %d)\n", c, y, x);
18: # endif
19: if (y >= win->_maxy || x >= win->_maxx || y < 0 || x < 0)
20: return ERR;
21: switch (c) {
22: case '\t':
23: {
24: reg int newx;
25:
26: for (newx = x + (8 - (x & 07)); x < newx; x++)
27: if (waddch(win, ' ') == ERR)
28: return ERR;
29: return OK;
30: }
31: default:
32: # ifdef FULLDEBUG
33: fprintf(outf, "ADDCH: 1: y = %d, x = %d, firstch = %d, lastch = %d\n", y, x, win->_firstch[y], win->_lastch[y]);
34: # endif
35: if (win->_flags & _STANDOUT)
36: c |= _STANDOUT;
37: if (win->_y[y][x] != c) {
38: if (win->_firstch[y] == _NOCHANGE)
39: win->_firstch[y] = win->_lastch[y] = x;
40: else if (x < win->_firstch[y])
41: win->_firstch[y] = x;
42: else if (x > win->_lastch[y])
43: win->_lastch[y] = x;
44: }
45: win->_y[y][x++] = c;
46: if (x >= win->_maxx) {
47: x = 0;
48: newline:
49: if (++y >= win->_maxy)
50: if (win->_scroll) {
51: wrefresh(win);
52: scroll(win);
53: --y;
54: }
55: else
56: return ERR;
57: }
58: # ifdef FULLDEBUG
59: fprintf(outf, "ADDCH: 2: y = %d, x = %d, firstch = %d, lastch = %d\n", y, x, win->_firstch[y], win->_lastch[y]);
60: # endif
61: break;
62: case '\n':
63: wclrtoeol(win);
64: if (!NONL)
65: x = 0;
66: goto newline;
67: case '\r':
68: x = 0;
69: break;
70: case '\b':
71: if (--x < 0)
72: x = 0;
73: break;
74: }
75: win->_curx = x;
76: win->_cury = y;
77: return OK;
78: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.