Annotation of 43BSDTahoe/new/X/libibm/libsrc/put.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char *rcsid_put_c = "$Header: put.c,v 10.1 86/11/19 10:43:52 jg Exp $";
                      3: #endif lint
                      4: /* Copyright 1985 Massachusetts Institute of Technology */
                      5: 
                      6: /* put.c - Perform a raster operation with a source bitmap
                      7:  *
                      8:  *      PixmapPut       Puts a pixmap up on the screen
                      9:  *      PixmapBitsPut   Puts masked region of pixmap up on screen
                     10:  *      BitmapBitsPut   Puts masked region of bitmap up on screen
                     11:  *
                     12:  *     Author:
                     13:  *             Scott Bates
                     14:  *             Brown University
                     15:  *             IRIS, Box 1946
                     16:  *             Providence, RI 02912
                     17:  *
                     18:  *
                     19:  *             Copyright (c) 1986 Brown University
                     20:  *
                     21:  * Permission to use, copy, modify and distribute this software and its
                     22:  * documentation for any purpose and without fee is hereby granted, provided
                     23:  * that the above copyright notice appear in all copies, and that both
                     24:  * that copyright notice and this permission notice appear in supporting
                     25:  * documentation, and that the name of Brown University not be used in
                     26:  * advertising or publicity pertaining to distribution of the software
                     27:  * without specific, written prior permission. Brown University makes no
                     28:  * representations about the suitability of this software for any purpose.
                     29:  * It is provided "as-is" without express or implied warranty.
                     30:  */
                     31: 
                     32: #include "private.h"
                     33: #include "bitblt.h"
                     34: 
                     35: /*
                     36:  * Copy pixmap to screen
                     37:  */
                     38: 
                     39: PixmapPut (src, srcx, srcy, width, height, dstx, dsty, clips, clipcount,
                     40:            func, zmask)
                     41:         PIXMAP *src;
                     42:        register width, height; 
                     43:         int srcx, srcy;
                     44:        register dstx, dsty;
                     45:        int clipcount, zmask;
                     46:        register func;
                     47:         CLIP *clips;
                     48: {
                     49:        register Blt_Rectangle *dest = &DstRect;
                     50: 
                     51: #ifdef TRACE_X
                     52:        fprintf(stderr, "In PixmapPut\n");
                     53:        fflush(stderr);
                     54: #endif TRACE_X
                     55: 
                     56:        /*
                     57:         * There better be at least one plane
                     58:         */
                     59: 
                     60:         if ((zmask & 1) == 0)
                     61:                return;
                     62: 
                     63:        /*
                     64:         * If pixmap needs to be inverted before being displayed
                     65:         * remap funtion to reflect this change.
                     66:         */
                     67: 
                     68:         func = SSMap[func | (src->kind & InvertFlag)];
                     69: 
                     70:        /*
                     71:         * Fill in destination rectangle
                     72:         */
                     73: 
                     74:        FillInRect(dstx, dsty, width, height, dest);
                     75: 
                     76:        /*
                     77:         * If pixmap has no associated bitmap determine which constant
                     78:         * tile to use and tile the destination. Otherwise, copy bitmap 
                     79:         * to screen destination.
                     80:         */
                     81: 
                     82:         if (PTYPE(src) == ConstantPixmap) {
                     83: 
                     84:                /*
                     85:                 * Tile screen destination
                     86:                 */
                     87: 
                     88:                CopyBits ((u_short *) src->data, NIL, NIL, NILRECT, 
                     89:                          (u_short *) pbm.data, pbm.width, pbm.height, dest,
                     90:                          NILMASK, NIL, NIL, MAKE_TILE_RULE(func),
                     91:                          clipcount, clips);
                     92:         } else {
                     93:                register Blt_Rectangle *source = &SrcRect;
                     94:                register BITMAP *bm = (BITMAP *) src->data;
                     95: 
                     96:                /*
                     97:                 * Fill in source rectangle
                     98:                 */
                     99: 
                    100:                FillInRect(srcx, srcy, width, height, source);
                    101: 
                    102:                /*
                    103:                 * Copy bitmap to screen
                    104:                 */
                    105: 
                    106:                CopyBits ((u_short *)bm->data, bm->width, bm->height, source, 
                    107:                          (u_short *)pbm.data, pbm.width, pbm.height, dest,
                    108:                          NILMASK, NIL, NIL, func, clipcount, clips);
                    109:        }
                    110: }
                    111: 
                    112: /*
                    113:  * Copy pixmap to screen using a mask
                    114:  */
                    115: 
                    116: /*ARGSUSED*/
                    117: PixmapBitsPut (width, height, format, data, xymask, dstx, dsty,
                    118:                clips, clipcount, func, zmask)
                    119:         char *data;
                    120:         int width, height, format, dstx, dsty, clipcount, zmask;
                    121:         BITMAP *xymask;
                    122:         CLIP *clips;
                    123:         int func;
                    124: {
                    125: #ifdef TRACE_X
                    126:        fprintf(stderr, "In PixmapBitsPut\n");
                    127:        fflush(stderr);
                    128: #endif TRACE_X
                    129: 
                    130:        /*
                    131:         * Since this hardware has only one bit plane PixmapBitsPut
                    132:         * and BitmapBitsPut are the same.
                    133:         */
                    134: 
                    135:         BitmapBitsPut (width, height, data, 1, 0, xymask, dstx, dsty,
                    136:                        clips, clipcount, func, zmask);
                    137: }
                    138: 
                    139: /*
                    140:  * Copy bitmap to screen using a mask
                    141:  */
                    142: 
                    143: BitmapBitsPut (width, height, data, fore, back, xymask, dstx, dsty,
                    144:                clips, clipcount, func, zmask)
                    145:         char *data;
                    146:         register width, height, dstx, dsty;
                    147:        int fore, back, clipcount, zmask;
                    148:         BITMAP *xymask;
                    149:         CLIP *clips;
                    150:         register func;
                    151: {
                    152:        register Blt_Rectangle *source = &SrcRect;
                    153:        register Blt_Rectangle *dest = &DstRect;
                    154:        int new_width, new_height;
                    155:        u_short *clipmask;
                    156: 
                    157: #ifdef TRACE_X
                    158:        fprintf(stderr, "In BitmapBitsPut\n");
                    159:        fflush(stderr);
                    160: #endif TRACE_X
                    161: 
                    162:        /*
                    163:         * There better be at least one plane
                    164:         */
                    165: 
                    166:         if ((zmask & 1) == 0)
                    167:                return;
                    168: 
                    169:        /*
                    170:         * Change function to reflect desired foreground and
                    171:         * background colors
                    172:         */
                    173: 
                    174:         if (fore & 1)
                    175:                func += 0x20;
                    176:         if (back & 1)
                    177:                func += 0x10;
                    178:         func = FBMap[func];
                    179: 
                    180:        /*
                    181:         * Reverse bits in each short of the image data. Image data 
                    182:         * recieved from the client is in VAX bit order and needs to
                    183:         * be reversed for this hardware.
                    184:         */
                    185: 
                    186:        ReverseShortBits((u_short *) data, BitmapSize(width, height) >> 1); 
                    187: 
                    188:        /*
                    189:         * Clip xymask and destnation rectangle to minimum size
                    190:         */
                    191: 
                    192:        if(xymask) {
                    193:                new_width = MIN (xymask->width, width);
                    194:                new_height = MIN (xymask->height, height);
                    195:                clipmask = (u_short *) xymask->data;
                    196:        } else  {
                    197:                new_width = width;
                    198:                new_height = height;
                    199:                clipmask = NILMASK;
                    200:        }
                    201: 
                    202:        /*
                    203:         * Fill in source and destination rectangles
                    204:         */
                    205: 
                    206:        FillInRect(0, 0, width, height, source);
                    207:        FillInRect(dstx, dsty, new_width, new_height, dest);
                    208: 
                    209:        /*
                    210:         * Copy bitmap to screen using a mask
                    211:         */
                    212: 
                    213:         CopyBits ((u_short *) data, width, height, source,
                    214:                   (u_short *) pbm.data, pbm.width, pbm.height, dest,
                    215:                  clipmask, new_width, new_height, func, clipcount, clips);
                    216: }

unix.superglobalmegacorp.com

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