|
|
BSD 4.3tahoe
/* Copyright 1985, Massachusetts Institute of Technology */
/* put.c Perform a raster operation with a source bitmap
*
* PixmapPut Puts a pixmap up on the screen
* PixmapBitsPut Puts a pixmap up on the screen
* BitmapBitsPut Puts a pixmap up on the screen
*
* Modification History:
*
* Carver 8601.13 Added extern statement for SSmap
*
* Carver 8601.06 Added line to PixmapPut to adjust the func to compensate
* for the reverse flag being set in the pixmap descriptor.
*
* Carver 8510.10 Put in support for source bitmap/sub-bitmap mask
* copy areas.
*
* Carver 8510.09 In PixmapBitsPut fixed the table lookup on foreground
* and background.
*/
#include "ddxqvss.h"
#include "vstagbl.h"
extern BITMAP pbm;
PixmapPut (src, srcx, srcy, width, height, dstx, dsty, clips, clipcount,
func, zmask)
register PIXMAP *src;
int srcx, srcy, width, height, dstx, dsty, clipcount, zmask;
register int func;
CLIP *clips;
{
BITMAP *bm = (BITMAP *) src->data;
extern char SSMap[];
if (!(zmask & 1)) return;
/* ADJUST MAP FOR REVERSE PIXMAP */
func = SSMap[ func | (src->kind & InvertFlag)];
copyrmsk( VSTA$K_SRC_BITMAP, (short *)bm->data, bm->width, bm->height,
srcx, srcy, width, height,
(short *)pbm.data, pbm.width, pbm.height,
dstx, dsty, func, clipcount, clips);
return;
}
/*ARGSUSED*/
PixmapBitsPut (width, height, format, data, xymask, dstx, dsty,
clips, clipcount, func, zmask)
char *data;
int width, height, format, dstx, dsty, clipcount, zmask;
BITMAP *xymask;
CLIP *clips;
int func;
{
BitmapBitsPut (width, height, data, 1, 0, xymask, dstx, dsty,
clips, clipcount, func, zmask);
}
BitmapBitsPut (width, height, data, fore, back, xymask, dstx, dsty,
clips, clipcount, func, zmask)
char *data;
int width, height, fore, back, dstx, dsty, clipcount, zmask;
register BITMAP *xymask;
CLIP *clips;
register int func;
{
int mask_x = pbm.width, mask_y = pbm.height;
extern char FBMap[];
if (!(zmask & 1)) return;
/* USE FBMap TABLE TO CONVERT FORE/BACK INTO A SINGLE SOURCE
MAPPING FUNCTION */
if (fore & 1) func += 0x20;
if (back & 1) func += 0x10;
func = FBMap[func];
if (xymask == NULL)
{
copyrmsk (VSTA$K_SRC_BITMAP, (short *) data, width, height,
0, 0, mask_x, mask_y, (short *) pbm.data, pbm.width,
pbm.height, dstx, dsty, func, clipcount, clips);
}
else
{
copybmsk (
VSTA$K_SRC_BITMAP, (short *)data, width, height,
0, 0,
(short *) xymask->data, xymask->width, xymask->height,
0, 0, width, height,
(short *)pbm.data, pbm.width, pbm.height,
dstx, dsty, func, clipcount, clips);
};
return;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.