|
|
1.1 root 1: /* fill.c Perform a simple raster operation a section of the screen
2: *
3: * PixFill Do a function on the screen
4: * StippleFill Fill rectangle with a stipple pattern
5: *
6: * Modification History
7: *
8: * Carver 8510.25 Removed error checking in calls to copyrmsk
9: * and copybmsk. No errors are ever return.
10: *
11: */
12:
13: #include "ddxqvss.h"
14: #include "qvss.h"
15: #include "vstagbl.h"
16:
17: extern BITMAP pbm;
18:
19: /*ARGSUSED*/
20: PixFill (srcpix, xymask, dstx, dsty, width, height, clips, clipcount,
21: func, zmask)
22: int srcpix, dstx, dsty, width, height, clipcount, zmask;
23: register BITMAP *xymask;
24: register int func;
25: CLIP *clips;
26: {
27: int constant = srcpix & 1;
28:
29: if (!(zmask & 1)) {
30: return;
31: }
32: if (xymask == 0)
33: {
34: copyrmsk (VSTA$K_SRC_CONST, constant, 0, 0, 0, 0,
35: width, height, (short *) pbm.data,
36: pbm.width, pbm.height, dstx, dsty, func,
37: clipcount, clips);
38: return;
39: }
40:
41: copybmsk (VSTA$K_SRC_CONST, constant, 0, 0, 0, 0,
42: (short *) xymask->data, xymask->width,
43: xymask->height, 0, 0, width, height,
44: (short *) pbm.data,
45: pbm.width, pbm.height, dstx, dsty, func,
46: clipcount, clips);
47: return;
48: }
49:
50: extern int errno;
51: #include <errno.h>
52:
53: int StippleFill (srcpix, xoff, yoff, stipmask, dstx, dsty, width, height,
54: clips, clipcount, func, zmask)
55: int srcpix; /* source pixel */
56: int xoff, yoff; /* stipple origin */
57: BITMAP *stipmask; /* stipple mask */
58: int dstx, dsty; /* destination */
59: int width, height;
60: CLIP *clips; /* clipping rectangles */
61: int clipcount;
62: int func; /* GX display function */
63: int zmask; /* plane mask */
64: {
65: static char funcmap[16][2] = {
66: {GXandInverted, GXandInverted}, /* GXclear */
67: {GXandInverted, GXnoop}, /* GXand */
68: {GXandInverted, GXxor}, /* GXandReverse */
69: {GXandInverted, GXor}, /* GXcopy */
70: {GXnoop, GXandInverted}, /* GXandInverted */
71: {GXnoop, GXnoop}, /* GXnoop */
72: {GXnoop, GXxor}, /* GXxor */
73: {GXnoop, GXor}, /* GXor */
74: {GXxor, GXandInverted}, /* GXnor */
75: {GXxor, GXnoop}, /* GXequiv */
76: {GXxor, GXxor}, /* GXinvert */
77: {GXxor, GXor}, /* GXorReverse */
78: {GXor, GXandInverted}, /* GXcopyInverted */
79: {GXor, GXnoop}, /* GXorInverted */
80: {GXor, GXxor}, /* GXnand */
81: {GXor, GXor} /* GXset */
82: };
83: int newfunc = funcmap [func][srcpix & 1];
84:
85: if (!(zmask & 1)) {
86: return (1);
87: }
88: if ((stipmask->width != 16) || (stipmask->height != 16)) {
89: errno = EINVAL;
90: return (0);
91: }
92: copyrmsk (VSTA$K_SRC_HT_BITMAP, (short *)stipmask->data,
93: stipmask->width, stipmask->height, xoff, yoff,
94: width, height,
95: (short *)pbm.data, pbm.width, pbm.height,
96: dstx, dsty, newfunc, clipcount, clips);
97: return (1);
98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.