|
|
1.1 ! root 1: # include "curses.ext" ! 2: /* @(#) addch.c: 1.1 10/15/83 (1.5 11/18/82) */ ! 3: ! 4: /* ! 5: * This routine prints the character in the current position. ! 6: * Think of it as putc. ! 7: * ! 8: * 3/5/81 (Berkeley) @(#)addch.c 1.3 ! 9: */ ! 10: waddch(win, c) ! 11: register WINDOW *win; ! 12: register chtype c; ! 13: { ! 14: register int x, y; ! 15: char *uctr; ! 16: register char rawc = c & A_CHARTEXT; ! 17: ! 18: x = win->_curx; ! 19: y = win->_cury; ! 20: # ifdef DEBUG ! 21: if (outf) ! 22: if (c == rawc) ! 23: fprintf(outf, "'%c'", rawc); ! 24: else ! 25: fprintf(outf, "'%c' %o, raw %o", c, c, rawc); ! 26: # endif ! 27: if (y >= win->_maxy || x >= win->_maxx || y < 0 || x < 0) ! 28: { ! 29: # ifdef DEBUG ! 30: if(outf) ! 31: { ! 32: fprintf(outf,"off edge, (%d,%d) not in (%d,%d)\n",y,x,win->_maxy,win->_maxx); ! 33: } ! 34: # endif ! 35: return ERR; ! 36: } ! 37: switch( rawc ) ! 38: { ! 39: case '\t': ! 40: { ! 41: register int newx; ! 42: ! 43: for( newx = x + (8 - (x & 07)); x < newx; x++ ) ! 44: { ! 45: if( waddch(win, ' ') == ERR ) ! 46: { ! 47: return ERR; ! 48: } ! 49: } ! 50: return OK; ! 51: } ! 52: default: ! 53: if( rawc < ' ' || rawc > '~' ) ! 54: { ! 55: uctr = unctrl(rawc); ! 56: waddch(win, (chtype)uctr[0]|(c&A_ATTRIBUTES)); ! 57: waddch(win, (chtype)uctr[1]|(c&A_ATTRIBUTES)); ! 58: return OK; ! 59: } ! 60: if( win->_attrs ) ! 61: { ! 62: #ifdef DEBUG ! 63: if(outf) fprintf(outf, "(attrs %o, %o=>%o)", win->_attrs, c, c | win->_attrs); ! 64: #endif DEBUG ! 65: c |= win->_attrs;; ! 66: } ! 67: if( win->_y[y][x] != c ) ! 68: { ! 69: if( win->_firstch[y] == _NOCHANGE ) ! 70: { ! 71: win->_firstch[y] = win->_lastch[y] = x; ! 72: } ! 73: else ! 74: { ! 75: if( x < win->_firstch[y] ) ! 76: { ! 77: win->_firstch[y] = x; ! 78: } ! 79: else ! 80: { ! 81: if( x > win->_lastch[y] ) ! 82: { ! 83: win->_lastch[y] = x; ! 84: } ! 85: } ! 86: } ! 87: } ! 88: win->_y[y][x++] = c; ! 89: if (x >= win->_maxx) ! 90: { ! 91: x = 0; ! 92: new_line: ! 93: if (++y > win->_bmarg) ! 94: { ! 95: if (win->_scroll && !(win->_flags&_ISPAD)) ! 96: { ! 97: #ifdef DEBUG ! 98: if(outf) ! 99: { ! 100: fprintf( outf, "Calling wrefresh( 0%o ) & _tscroll( 0%o )\n", ! 101: win, win ); ! 102: } ! 103: #endif DEBUG ! 104: wrefresh(win); ! 105: _tscroll( win ); ! 106: --y; ! 107: } ! 108: else ! 109: { ! 110: # ifdef DEBUG ! 111: int i; ! 112: if(outf) ! 113: { ! 114: fprintf(outf, ! 115: "ERR because (%d,%d) > (%d,%d)\n", ! 116: x, y, win->_maxx, win->_maxy); ! 117: fprintf(outf, "line: '"); ! 118: for (i=0; i<win->_maxy; i++) ! 119: fprintf(outf, "%c", ! 120: win->_y[y-1][i]); ! 121: fprintf(outf, "'\n"); ! 122: } ! 123: # endif DEBUG ! 124: return ERR; ! 125: } ! 126: } ! 127: } ! 128: # ifdef DEBUG ! 129: if(outf) fprintf(outf, "ADDCH: 2: y = %d, x = %d, firstch = %d, lastch = %d\n", y, x, win->_firstch[y], win->_lastch[y]); ! 130: # endif DEBUG ! 131: break; ! 132: case '\n': ! 133: wclrtoeol(win); ! 134: x = 0; ! 135: goto new_line; ! 136: case '\r': ! 137: x = 0; ! 138: break; ! 139: case '\b': ! 140: if (--x < 0) ! 141: x = 0; ! 142: break; ! 143: } ! 144: win->_curx = x; ! 145: win->_cury = y; ! 146: return OK; ! 147: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.