Annotation of 43BSDTahoe/usr.lib/libcurses/addbytes.c, revision 1.1

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

unix.superglobalmegacorp.com

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