|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T f
Length: 3610 (0xe1a) Types: TextFile Names: »fill.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z« └─⟦2109abc41⟧ └─⟦this⟧ »./X.V10R4/libibm/libsrc/fill.c«
#ifndef lint static char *rcsid_fill_c = "$Header: fill.c,v 10.2 86/11/25 16:22:07 jg Exp $"; #endif lint /* fill.c - Perform a simple raster operation on a section of the screen * * PixFill Do a function on the screen * * Author: * Scott Bates * Brown University * IRIS, Box 1946 * Providence, RI 02912 * * * Copyright (c) 1986 Brown University * * Permission to use, copy, modify and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies, and that both * that copyright notice and this permission notice appear in supporting * documentation, and that the name of Brown University not be used in * advertising or publicity pertaining to distribution of the software * without specific, written prior permission. Brown University makes no * representations about the suitability of this software for any purpose. * It is provided "as-is" without express or implied warranty. */ #include "private.h" #include "bitblt.h" /* * Simple area fill using a mask */ /*ARGSUSED*/ PixFill (srcpix, xymask, dstx, dsty, width, height, clips, clipcount, func, zmask) register srcpix, dstx, dsty, width, height; int clipcount, zmask, func; BITMAP *xymask; CLIP *clips; { u_short *tile = ConstantTiles[srcpix & 1]; u_short *clipmask = NILMASK; register Blt_Rectangle *dest = &DstRect; #ifdef TRACE_X fprintf(stderr, "In PixFill\n"); fflush(stderr); #endif TRACE_X /* * Limit fill to one plane */ if ((zmask & 1) == 0) return; /* * Clip xymask and destnation rectangle to minimum size */ if(xymask) { width = MIN (xymask->width, width); height = MIN (xymask->height, height); clipmask = (u_short *) xymask->data; } /* * Fill in destination rectangle */ FillInRect(dstx, dsty, width, height, dest); /* * Fill destination with contstant tile using a mask */ CopyBits ((u_short *)tile, NIL, NIL, NILRECT, (u_short *) pbm.data, pbm.width, pbm.height, dest, clipmask, width, height, MAKE_TILE_RULE(func), clipcount, clips); } extern int errno; #include <errno.h> int StippleFill (srcpix, xoff, yoff, stipmask, dstx, dsty, width, height, clips, clipcount, func, zmask) int srcpix; /* source pixel */ int xoff, yoff; /* stipple origin */ BITMAP *stipmask; /* stipple mask */ int dstx, dsty; /* destination */ int width, height; CLIP *clips; /* clipping rectangles */ int clipcount; int func; /* GX display function */ int zmask; /* plane mask */ { static char funcmap[16][2] = { {GXandInverted, GXandInverted}, /* GXclear */ {GXandInverted, GXnoop}, /* GXand */ {GXandInverted, GXxor}, /* GXandReverse */ {GXandInverted, GXor}, /* GXcopy */ {GXnoop, GXandInverted}, /* GXandInverted */ {GXnoop, GXnoop}, /* GXnoop */ {GXnoop, GXxor}, /* GXxor */ {GXnoop, GXor}, /* GXor */ {GXxor, GXandInverted}, /* GXnor */ {GXxor, GXnoop}, /* GXequiv */ {GXxor, GXxor}, /* GXinvert */ {GXxor, GXor}, /* GXorReverse */ {GXor, GXandInverted}, /* GXcopyInverted */ {GXor, GXnoop}, /* GXorInverted */ {GXor, GXxor}, /* GXnand */ {GXor, GXor} /* GXset */ }; int newfunc = funcmap [func][srcpix & 1]; PIXMAP *tile, *MakePixmap(); if ((stipmask->width != 16) || (stipmask->height != 16)) { errno = EINVAL; return (0); } tile = MakePixmap (stipmask, 1, 0); TileFill (tile, xoff, yoff, 0, dstx, dsty, width, height, clips, clipcount, newfunc, zmask); FreePixmap (tile); return (1); }