|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: static char sccsid[] = "@(#)addch.c 5.1 (Berkeley) 6/7/85";
9: #endif not lint
10:
11: # include "curses.ext"
12:
13: /*
14: * This routine adds the character to the current position
15: *
16: */
17: waddch(win, c)
18: reg WINDOW *win;
19: char c;
20: {
21: reg int x, y;
22: reg WINDOW *wp;
23: reg int newx;
24:
25: x = win->_curx;
26: y = win->_cury;
27: # ifdef FULLDEBUG
28: fprintf(outf, "ADDCH('%c') at (%d, %d)\n", c, y, x);
29: # endif
30: switch (c) {
31: case '\t':
32: for (newx = x + (8 - (x & 07)); x < newx; x++)
33: if (waddch(win, ' ') == ERR)
34: return ERR;
35: return OK;
36:
37: default:
38: # ifdef FULLDEBUG
39: fprintf(outf, "ADDCH: 1: y = %d, x = %d, firstch = %d, lastch = %d\n", y, x, win->_firstch[y], win->_lastch[y]);
40: # endif
41: if (win->_flags & _STANDOUT)
42: c |= _STANDOUT;
43: set_ch(win, y, x, c);
44: win->_y[y][x++] = c;
45: if (x >= win->_maxx) {
46: x = 0;
47: newline:
48: if (++y >= win->_maxy)
49: if (win->_scroll) {
50: scroll(win);
51: --y;
52: }
53: else
54: return ERR;
55: }
56: # ifdef FULLDEBUG
57: fprintf(outf, "ADDCH: 2: y = %d, x = %d, firstch = %d, lastch = %d\n", y, x, win->_firstch[y], win->_lastch[y]);
58: # endif
59: break;
60: case '\n':
61: wclrtoeol(win);
62: if (!NONL)
63: x = 0;
64: goto newline;
65: case '\r':
66: x = 0;
67: break;
68: case '\b':
69: if (--x < 0)
70: x = 0;
71: break;
72: }
73: win->_curx = x;
74: win->_cury = y;
75: return OK;
76: }
77:
78: /*
79: * set_ch:
80: * Set the first and last change flags for this window.
81: */
82: static
83: set_ch(win, y, x, ch)
84: reg WINDOW *win;
85: int y, x;
86: {
87: # ifdef FULLDEBUG
88: fprintf(outf, "SET_CH(%0.2o, %d, %d)\n", win, y, x);
89: # endif
90: if (win->_y[y][x] != ch) {
91: x += win->_ch_off;
92: if (win->_firstch[y] == _NOCHANGE)
93: win->_firstch[y] = win->_lastch[y] = x;
94: else if (x < win->_firstch[y])
95: win->_firstch[y] = x;
96: else if (x > win->_lastch[y])
97: win->_lastch[y] = x;
98: # ifdef FULLDEBUG
99: fprintf(outf, "SET_CH: change gives f/l: %d/%d [%d/%d]\n",
100: win->_firstch[y], win->_lastch[y],
101: win->_firstch[y] - win->_ch_off,
102: win->_lastch[y] - win->_ch_off);
103: # endif
104: }
105: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.