|
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 c
Length: 4197 (0x1065) Types: TextFile Names: »copybits.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/copybits.c«
#ifndef lint static char *rcsid_copybits_c = "$Header: copybits.c,v 10.1 86/11/19 10:40:50 jg Exp $"; #endif lint /* copybits.c - Interface routine to bitblt() * * CopyBits Places "X" supplied data into blt structure before * calling bitblt() ounce for each clipping rectangle * in the cliplist. * * 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" /* * General interface routine to bitblt() */ CopyBits (srcbits, srcwidth, srcheight, srcrect, dstbits, dstwidth, dstheight, dstrect, maskbits, maskwidth, maskheight, rule, clipcount, cliplist) u_short *srcbits, *dstbits, *maskbits; register Blt_Rectangle *srcrect, *dstrect; int srcwidth, srcheight, dstwidth; int maskwidth, maskheight; int dstheight, rule; register clipcount; register CLIP *cliplist; { register Blt *blt = &bltdata; register Blt_Bitmap *dstbitmap = &blt->dst_bitmap; register Blt_Rectangle *cliprect = &blt->clp_rect; #ifdef FULL_TRACE_X fprintf(stderr, "In CopyBits\n"); fflush(stderr); #endif FULL_TRACE_X /* * Clear blt structure */ bzero((char *) blt, sizeof(Blt)); #ifdef AED /* * If this is the AED make sure this blt * gets echoed */ blt->blt_flags |= BLT_ECHO; #endif AED /* * Set up source bitmap or tile */ if(IS_RULE_TILE(rule)) { /* * Srcbits is a tile */ blt->tile_ptr = (Blt_Tile *)srcbits; } else { register Blt_Bitmap *srcbitmap = &blt->src_bitmap; /* * Srcbits is a bitimage. Convert bitimage to bitmap */ BitimageToBitmap(srcbits, 0, 0, srcwidth, srcheight, srcbitmap); /* * Copy source rectangle to blt structure */ blt->src_rect = *srcrect; } /* * Convert destination bitimage to a bitmap */ BitimageToBitmap(dstbits, 0, 0, dstwidth, dstheight, dstbitmap); /* * Copy destination rectangle to blt structure */ blt->dst_rect = *dstrect; /* * Set combination rule in blt structure */ blt->comb_rule = rule; /* * Is there a clipping mask ? */ if(maskbits) { register Blt_Bitmap *mskbitmap = &blt->msk_bitmap; /* * Indicate that there is a mask */ blt->blt_flags |= BLT_MASKON; /* * Convert mask bitimage to bitmap * * NOTE: The clipping mask has the same origin * as the destination rectangle but can * be larger in width and height. */ BitimageToBitmap(maskbits, dstrect->origin_x, dstrect->origin_y, maskwidth, maskheight, mskbitmap); } /* * No X clips specified ? */ if(clipcount == 0) { /* * Turn clipping off during this blt */ blt->blt_flags &= ~BLT_CLIPON; /* * No X clips so blt and run */ bitblt(blt); return; } /* * Perform same blt for each X clip */ for (;;) { /* * Convert X clip to clipping rectangle */ ClipToRect(cliplist, cliprect); /* * If destination lies inside of clipping rectangle * turn off clipping flag during this blt otherwise * turn it on. */ if(InsideBounds(dstrect, cliprect)) { blt->blt_flags &= ~BLT_CLIPON; } else { blt->blt_flags |= BLT_CLIPON; } /* * Lets go do the blt */ bitblt(blt); /* * Need to blt again ? */ if (--clipcount <= 0) { /* * No more clips so lets leave */ break; } /* * point to next X clip */ cliplist++; } }