Annotation of coherent/g/usr/lib/ncurses/lib_overlay.c, revision 1.1.1.1

1.1       root        1: /*********************************************************************
                      2: *                         COPYRIGHT NOTICE                           *
                      3: **********************************************************************
                      4: *        This software is copyright (C) 1982 by Pavel Curtis         *
                      5: *                                                                    *
                      6: *        Permission is granted to reproduce and distribute           *
                      7: *        this file by any means so long as no fee is charged         *
                      8: *        above a nominal handling fee and so long as this            *
                      9: *        notice is always included in the copies.                    *
                     10: *                                                                    *
                     11: *        Other rights are reserved except as explicitly granted      *
                     12: *        by written permission of the author.                        *
                     13: *                Pavel Curtis                                        *
                     14: *                Computer Science Dept.                              *
                     15: *                405 Upson Hall                                      *
                     16: *                Cornell University                                  *
                     17: *                Ithaca, NY 14853                                    *
                     18: *                                                                    *
                     19: *                Ph- (607) 256-4934                                  *
                     20: *                                                                    *
                     21: *                Pavel.Cornell@Udel-Relay   (ARPAnet)                *
                     22: *                decvax!cornell!pavel       (UUCPnet)                *
                     23: *********************************************************************/
                     24: 
                     25: /*
                     26: **     lib_overlay.c
                     27: **
                     28: **     The routines overlay() and overwrite().
                     29: **
                     30: ** $Log:       RCS/lib_overlay.v $
                     31:  * Revision 2.3  91/04/20  21:33:39  munk
                     32:  * Usage of register variables
                     33:  *
                     34:  * Revision 2.2  82/10/28  18:10:11  pavel
                     35:  * Fixed confusion about which direction the copy was supposed to go and
                     36:  * also added updates to win2->_{first,last}char.
                     37:  * 
                     38:  * Revision 2.1  82/10/25  14:48:35  pavel
                     39:  * Added Copyright Notice
                     40:  * 
                     41:  * Revision 2.0  82/10/25  13:48:09  pavel
                     42:  * Beta-one Test Release
                     43:  * 
                     44: **
                     45: */
                     46: 
                     47: #ifdef RCSHDR
                     48: static char RCSid[] =
                     49:        "$Header:   RCS/lib_overlay.v  Revision 2.3  91/04/20  21:33:39  munk   Exp$";
                     50: #endif
                     51: 
                     52: #include "curses.h"
                     53: #include "curses.priv.h"
                     54: 
                     55: 
                     56: /*
                     57: **
                     58: **     overlay(win1, win2)
                     59: **
                     60: **
                     61: **     overlay() writes win1 on win2 non-destructively.
                     62: **
                     63: **/
                     64: 
                     65: overlay(win1, win2)
                     66: WINDOW *win1, *win2;
                     67: {
                     68:        int             col, line, last_line, last_col;
                     69:        short           *firstchar, *lastchar;
                     70:        register chtype *w1ptr, *w2ptr;
                     71:        chtype          attrs;
                     72: 
                     73: #ifdef TRACE
                     74:        if (_tracing)
                     75:            _tracef("overlay(%o, %o) called", win1, win2);
                     76: #endif
                     77:        
                     78:        last_col = min(win1->_maxx, win2->_maxx);
                     79:        last_line = min(win1->_maxy, win2->_maxy);
                     80:        attrs = win2->_attrs;
                     81:        firstchar = win2->_firstchar;
                     82:        lastchar = win2->_lastchar;
                     83: 
                     84:        for(line = 0;  line <= last_line;  line++)
                     85:        {
                     86:            short   fc, lc;
                     87:            
                     88:            w1ptr = win1->_line[line];
                     89:            w2ptr = win2->_line[line];
                     90:            fc = _NOCHANGE;
                     91: 
                     92:            for(col = 0;  col <= last_col;  col++)
                     93:            {
                     94:                if ((*w1ptr & A_CHARTEXT) != ' ')
                     95:                {
                     96:                    *w2ptr = (*w1ptr & A_CHARTEXT) | attrs;
                     97:                    if (fc == _NOCHANGE)
                     98:                        fc = col;
                     99:                    lc = col;
                    100:                }
                    101: 
                    102:                w1ptr++;
                    103:                w2ptr++;
                    104:            }
                    105:            
                    106:            if (*firstchar == _NOCHANGE)
                    107:            {
                    108:                *firstchar = fc;
                    109:                *lastchar = lc;
                    110:            }
                    111:            else if (fc != _NOCHANGE)
                    112:            {
                    113:                if (fc < *firstchar)
                    114:                    *firstchar = fc;
                    115: 
                    116:                if (lc > *lastchar)
                    117:                    *lastchar = lc;
                    118:             }
                    119: 
                    120:            firstchar++;
                    121:            lastchar++;
                    122:        }
                    123: }
                    124: 
                    125: 
                    126: /*
                    127: **
                    128: **     overwrite(win1, win2)
                    129: **
                    130: **
                    131: **     overwrite() writes win1 on win2 destructively.
                    132: **
                    133: **/
                    134: 
                    135: overwrite(win1, win2)
                    136: WINDOW *win1, *win2;
                    137: {
                    138:        int             col, line, last_line, last_col;
                    139:        short           *firstchar, *lastchar;
                    140:        register chtype *w1ptr, *w2ptr;
                    141:        chtype          attrs;
                    142: 
                    143: #ifdef TRACE
                    144:        if (_tracing)
                    145:            _tracef("overwrite(%o, %o) called", win1, win2);
                    146: #endif
                    147:        
                    148:        last_col = min(win1->_maxx, win2->_maxx);
                    149:        last_line = min(win1->_maxy, win2->_maxy);
                    150:        attrs = win2->_attrs;
                    151:        firstchar = win2->_firstchar;
                    152:        lastchar = win2->_lastchar;
                    153: 
                    154:        for(line = 0;  line <= last_line;  line++)
                    155:        {
                    156:            short   fc, lc;
                    157:            
                    158:            w1ptr = win1->_line[line];
                    159:            w2ptr = win2->_line[line];
                    160:            fc = _NOCHANGE;
                    161: 
                    162:            for(col = 0;  col <= last_col;  col++)
                    163:            {
                    164:                if ((*w1ptr & A_CHARTEXT) != (*w2ptr & A_CHARTEXT))
                    165:                {
                    166:                    *w2ptr = (*w1ptr & A_CHARTEXT) | attrs;
                    167:                    if (fc == _NOCHANGE)
                    168:                        fc = col;
                    169:                    lc = col;
                    170:                }
                    171: 
                    172:                w1ptr++;
                    173:                w2ptr++;
                    174:            }
                    175: 
                    176:            if (*firstchar == _NOCHANGE)
                    177:            {
                    178:                *firstchar = fc;
                    179:                *lastchar = lc;
                    180:            }
                    181:            else if (fc != _NOCHANGE)
                    182:            {
                    183:                if (fc < *firstchar)
                    184:                    *firstchar = fc;
                    185: 
                    186:                if (lc > *lastchar)
                    187:                    *lastchar = lc;
                    188:             }
                    189:            
                    190:            firstchar++;
                    191:            lastchar++;
                    192:        }
                    193: }

unix.superglobalmegacorp.com

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