|
|
1.1 ! root 1: /* Copyright 1985, Massachusetts Institute of Technology */ ! 2: ! 3: /* put.c Perform a raster operation with a source bitmap ! 4: * ! 5: * PixmapPut Puts a pixmap up on the screen ! 6: * PixmapBitsPut Puts a pixmap up on the screen ! 7: * BitmapBitsPut Puts a pixmap up on the screen ! 8: * ! 9: * Modification History: ! 10: * ! 11: * Carver 8601.13 Added extern statement for SSmap ! 12: * ! 13: * Carver 8601.06 Added line to PixmapPut to adjust the func to compensate ! 14: * for the reverse flag being set in the pixmap descriptor. ! 15: * ! 16: * Carver 8510.10 Put in support for source bitmap/sub-bitmap mask ! 17: * copy areas. ! 18: * ! 19: * Carver 8510.09 In PixmapBitsPut fixed the table lookup on foreground ! 20: * and background. ! 21: */ ! 22: ! 23: #include "ddxqvss.h" ! 24: #include "vstagbl.h" ! 25: ! 26: extern BITMAP pbm; ! 27: ! 28: PixmapPut (src, srcx, srcy, width, height, dstx, dsty, clips, clipcount, ! 29: func, zmask) ! 30: register PIXMAP *src; ! 31: int srcx, srcy, width, height, dstx, dsty, clipcount, zmask; ! 32: register int func; ! 33: CLIP *clips; ! 34: { ! 35: BITMAP *bm = (BITMAP *) src->data; ! 36: extern char SSMap[]; ! 37: ! 38: if (!(zmask & 1)) return; ! 39: ! 40: /* ADJUST MAP FOR REVERSE PIXMAP */ ! 41: ! 42: func = SSMap[ func | (src->kind & InvertFlag)]; ! 43: ! 44: copyrmsk( VSTA$K_SRC_BITMAP, (short *)bm->data, bm->width, bm->height, ! 45: srcx, srcy, width, height, ! 46: (short *)pbm.data, pbm.width, pbm.height, ! 47: dstx, dsty, func, clipcount, clips); ! 48: return; ! 49: } ! 50: ! 51: ! 52: /*ARGSUSED*/ ! 53: PixmapBitsPut (width, height, format, data, xymask, dstx, dsty, ! 54: clips, clipcount, func, zmask) ! 55: char *data; ! 56: int width, height, format, dstx, dsty, clipcount, zmask; ! 57: BITMAP *xymask; ! 58: CLIP *clips; ! 59: int func; ! 60: { ! 61: BitmapBitsPut (width, height, data, 1, 0, xymask, dstx, dsty, ! 62: clips, clipcount, func, zmask); ! 63: } ! 64: ! 65: ! 66: BitmapBitsPut (width, height, data, fore, back, xymask, dstx, dsty, ! 67: clips, clipcount, func, zmask) ! 68: char *data; ! 69: int width, height, fore, back, dstx, dsty, clipcount, zmask; ! 70: register BITMAP *xymask; ! 71: CLIP *clips; ! 72: register int func; ! 73: { ! 74: int mask_x = pbm.width, mask_y = pbm.height; ! 75: extern char FBMap[]; ! 76: ! 77: if (!(zmask & 1)) return; ! 78: ! 79: /* USE FBMap TABLE TO CONVERT FORE/BACK INTO A SINGLE SOURCE ! 80: MAPPING FUNCTION */ ! 81: ! 82: if (fore & 1) func += 0x20; ! 83: if (back & 1) func += 0x10; ! 84: ! 85: func = FBMap[func]; ! 86: ! 87: if (xymask == NULL) ! 88: { ! 89: copyrmsk (VSTA$K_SRC_BITMAP, (short *) data, width, height, ! 90: 0, 0, mask_x, mask_y, (short *) pbm.data, pbm.width, ! 91: pbm.height, dstx, dsty, func, clipcount, clips); ! 92: } ! 93: else ! 94: { ! 95: ! 96: copybmsk ( ! 97: VSTA$K_SRC_BITMAP, (short *)data, width, height, ! 98: 0, 0, ! 99: (short *) xymask->data, xymask->width, xymask->height, ! 100: 0, 0, width, height, ! 101: (short *)pbm.data, pbm.width, pbm.height, ! 102: dstx, dsty, func, clipcount, clips); ! 103: }; ! 104: ! 105: ! 106: ! 107: return; ! 108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.