|
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: 4402 (0x1132) 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/libvs100/fill.c«
/* $Header: fill.c,v 10.5 86/04/04 14:36:44 newman Rel $ */ /* fill.c Perform a simple raster operation a section of the screen * * PixFill Do a function on the screen * */ /**************************************************************************** * * * Copyright (c) 1983, 1984 by * * DIGITAL EQUIPMENT CORPORATION, Maynard, Massachusetts. * * All rights reserved. * * * * This software is furnished on an as-is basis and may be used and copied * * only with inclusion of the above copyright notice. This software or any * * other copies thereof may be provided or otherwise made available to * * others only for non-commercial purposes. No title to or ownership of * * the software is hereby transferred. * * * * The information in this software is subject to change without notice * * and should not be construed as a commitment by DIGITAL EQUIPMENT * * CORPORATION. * * * * DIGITAL assumes no responsibility for the use or reliability of its * * software on equipment which is not supplied by DIGITAL. * * * * * ****************************************************************************/ #include "vs100.h" extern BitMap screen; extern int VSReloc; extern char SSMap[]; char *AllocateSpace(); PixFill (srcpix, xymask, dstx, dsty, width, height, clips, clipcount, func, zmask) int srcpix, dstx, dsty, width, height, clipcount, zmask; register BITMAP *xymask; register int func; CLIP *clips; { register CopyAreaPacket *cap; #define h ((PacketHeader *) cap->cap_head) #define mask ((SubBitmap *) cap->cap_sourceMask) #define size ((Extent *) cap->cap_maskSize) #define destOff ((Point *) cap->cap_destOffset) #define clip ((RectangleList *) cap->cap_clipping.rectList) if (!(zmask & 1)) { DeallocateSpace (); return; } cap = (CopyAreaPacket *) AllocateSpace (sizeof (CopyAreaPacket)); if (cap == NULL) return; func = SSMap[func]; h->ph_copyMod.m_source = 0; h->ph_copyMod.m_mask = xymask ? 1 : 0; h->ph_copyMod.m_map = MAPTYPE(func); h->ph_opcode = COPY_AREA; *(long *) h->ph_next = NULL; cap->cap_source.const = srcpix & 1; if (xymask) { *(caddr_t *) mask->sb_address = BDATA(xymask)->vsPtr; mask->sb_height = xymask->height; mask->sb_width = xymask->width; mask->sb_bitsPerPixel = 1; mask->sb_x = mask->sb_y = 0; } size->e_height = height; size->e_width = width; *(BitMap *) cap->cap_destImage = screen; destOff->p_x = dstx; destOff->p_y = dsty; *(short *) cap->cap_map.literal = MAPLIT(func); if (clipcount == 1) { h->ph_copyMod.m_clipping = 1; *(CLIP *) cap->cap_clipping.litRect = *clips; } else { h->ph_copyMod.m_clipping = 2; *(caddr_t *) clip->r_first = (caddr_t) clips + VSReloc; clip->r_count = clipcount; } WritePacket ((caddr_t) cap); #undef h #undef mask #undef size #undef destOff #undef clip } 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); }