|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1987 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that the above copyright notice and this paragraph are ! 7: * duplicated in all such forms and that any documentation, ! 8: * advertising materials, and other materials related to such ! 9: * distribution and use acknowledge that the software was developed ! 10: * by the University of California, Berkeley. The name of the ! 11: * University may not be used to endorse or promote products derived ! 12: * from this software without specific prior written permission. ! 13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 16: */ ! 17: ! 18: #ifndef lint ! 19: static char sccsid[] = "@(#)addbytes.c 5.3 (Berkeley) 6/30/88"; ! 20: #endif /* not lint */ ! 21: ! 22: # include "curses.ext" ! 23: ! 24: /* ! 25: * This routine adds the character to the current position ! 26: * ! 27: */ ! 28: waddbytes(win, bytes, count) ! 29: reg WINDOW *win; ! 30: reg char *bytes; ! 31: reg int count; ! 32: { ! 33: #define SYNCH_OUT() {win->_cury = y; win->_curx = x;} ! 34: #define SYNCH_IN() {y = win->_cury; x = win->_curx;} ! 35: reg int x, y; ! 36: reg int newx; ! 37: ! 38: SYNCH_IN(); ! 39: # ifdef FULLDEBUG ! 40: fprintf(outf, "ADDBYTES('%c') at (%d, %d)\n", c, y, x); ! 41: # endif ! 42: while (count--) { ! 43: register int c; ! 44: static char blanks[] = " "; ! 45: ! 46: c = *bytes++; ! 47: switch (c) { ! 48: case '\t': ! 49: SYNCH_IN(); ! 50: if (waddbytes(win, blanks, 8-(x%8)) == ERR) { ! 51: return ERR; ! 52: } ! 53: SYNCH_OUT(); ! 54: break; ! 55: ! 56: default: ! 57: # ifdef FULLDEBUG ! 58: fprintf(outf, "ADDBYTES: 1: y = %d, x = %d, firstch = %d, lastch = %d\n", y, x, win->_firstch[y], win->_lastch[y]); ! 59: # endif ! 60: if (win->_flags & _STANDOUT) ! 61: c |= _STANDOUT; ! 62: { ! 63: # ifdef FULLDEBUG ! 64: fprintf(outf, "ADDBYTES(%0.2o, %d, %d)\n", win, y, x); ! 65: # endif ! 66: if (win->_y[y][x] != c) { ! 67: newx = x + win->_ch_off; ! 68: if (win->_firstch[y] == _NOCHANGE) { ! 69: win->_firstch[y] = ! 70: win->_lastch[y] = newx; ! 71: } else if (newx < win->_firstch[y]) ! 72: win->_firstch[y] = newx; ! 73: else if (newx > win->_lastch[y]) ! 74: win->_lastch[y] = newx; ! 75: # ifdef FULLDEBUG ! 76: fprintf(outf, "ADDBYTES: change gives f/l: %d/%d [%d/%d]\n", ! 77: win->_firstch[y], win->_lastch[y], ! 78: win->_firstch[y] - win->_ch_off, ! 79: win->_lastch[y] - win->_ch_off); ! 80: # endif ! 81: } ! 82: } ! 83: win->_y[y][x++] = c; ! 84: if (x >= win->_maxx) { ! 85: x = 0; ! 86: newline: ! 87: if (++y >= win->_maxy) ! 88: if (win->_scroll) { ! 89: SYNCH_OUT(); ! 90: scroll(win); ! 91: SYNCH_IN(); ! 92: --y; ! 93: } ! 94: else ! 95: return ERR; ! 96: } ! 97: # ifdef FULLDEBUG ! 98: fprintf(outf, "ADDBYTES: 2: y = %d, x = %d, firstch = %d, lastch = %d\n", y, x, win->_firstch[y], win->_lastch[y]); ! 99: # endif ! 100: break; ! 101: case '\n': ! 102: SYNCH_OUT(); ! 103: wclrtoeol(win); ! 104: SYNCH_IN(); ! 105: if (!NONL) ! 106: x = 0; ! 107: goto newline; ! 108: case '\r': ! 109: x = 0; ! 110: break; ! 111: case '\b': ! 112: if (--x < 0) ! 113: x = 0; ! 114: break; ! 115: } ! 116: } ! 117: SYNCH_OUT(); ! 118: return OK; ! 119: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.