Annotation of 43BSD/usr.lib/libcurses/addch.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.