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