|
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 p
Length: 5268 (0x1494) Types: TextFile Names: »put.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/put.c«
#ifndef lint static char *rcsid_put_c = "$Header: put.c,v 10.1 86/11/19 10:43:52 jg Exp $"; #endif lint /* 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 masked region of pixmap up on screen * BitmapBitsPut Puts masked region of bitmap up on 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" /* * Copy pixmap to screen */ PixmapPut (src, srcx, srcy, width, height, dstx, dsty, clips, clipcount, func, zmask) PIXMAP *src; register width, height; int srcx, srcy; register dstx, dsty; int clipcount, zmask; register func; CLIP *clips; { register Blt_Rectangle *dest = &DstRect; #ifdef TRACE_X fprintf(stderr, "In PixmapPut\n"); fflush(stderr); #endif TRACE_X /* * There better be at least one plane */ if ((zmask & 1) == 0) return; /* * If pixmap needs to be inverted before being displayed * remap funtion to reflect this change. */ func = SSMap[func | (src->kind & InvertFlag)]; /* * Fill in destination rectangle */ FillInRect(dstx, dsty, width, height, dest); /* * If pixmap has no associated bitmap determine which constant * tile to use and tile the destination. Otherwise, copy bitmap * to screen destination. */ if (PTYPE(src) == ConstantPixmap) { /* * Tile screen destination */ CopyBits ((u_short *) src->data, NIL, NIL, NILRECT, (u_short *) pbm.data, pbm.width, pbm.height, dest, NILMASK, NIL, NIL, MAKE_TILE_RULE(func), clipcount, clips); } else { register Blt_Rectangle *source = &SrcRect; register BITMAP *bm = (BITMAP *) src->data; /* * Fill in source rectangle */ FillInRect(srcx, srcy, width, height, source); /* * Copy bitmap to screen */ CopyBits ((u_short *)bm->data, bm->width, bm->height, source, (u_short *)pbm.data, pbm.width, pbm.height, dest, NILMASK, NIL, NIL, func, clipcount, clips); } } /* * Copy pixmap to screen using a mask */ /*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; { #ifdef TRACE_X fprintf(stderr, "In PixmapBitsPut\n"); fflush(stderr); #endif TRACE_X /* * Since this hardware has only one bit plane PixmapBitsPut * and BitmapBitsPut are the same. */ BitmapBitsPut (width, height, data, 1, 0, xymask, dstx, dsty, clips, clipcount, func, zmask); } /* * Copy bitmap to screen using a mask */ BitmapBitsPut (width, height, data, fore, back, xymask, dstx, dsty, clips, clipcount, func, zmask) char *data; register width, height, dstx, dsty; int fore, back, clipcount, zmask; BITMAP *xymask; CLIP *clips; register func; { register Blt_Rectangle *source = &SrcRect; register Blt_Rectangle *dest = &DstRect; int new_width, new_height; u_short *clipmask; #ifdef TRACE_X fprintf(stderr, "In BitmapBitsPut\n"); fflush(stderr); #endif TRACE_X /* * There better be at least one plane */ if ((zmask & 1) == 0) return; /* * Change function to reflect desired foreground and * background colors */ if (fore & 1) func += 0x20; if (back & 1) func += 0x10; func = FBMap[func]; /* * Reverse bits in each short of the image data. Image data * recieved from the client is in VAX bit order and needs to * be reversed for this hardware. */ ReverseShortBits((u_short *) data, BitmapSize(width, height) >> 1); /* * Clip xymask and destnation rectangle to minimum size */ if(xymask) { new_width = MIN (xymask->width, width); new_height = MIN (xymask->height, height); clipmask = (u_short *) xymask->data; } else { new_width = width; new_height = height; clipmask = NILMASK; } /* * Fill in source and destination rectangles */ FillInRect(0, 0, width, height, source); FillInRect(dstx, dsty, new_width, new_height, dest); /* * Copy bitmap to screen using a mask */ CopyBits ((u_short *) data, width, height, source, (u_short *) pbm.data, pbm.width, pbm.height, dest, clipmask, new_width, new_height, func, clipcount, clips); }