|
|
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 s
Length: 3912 (0xf48)
Types: TextFile
Names: »shutil.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z«
└─⟦2109abc41⟧
└─⟦this⟧ »./X.V10R4/showimg/shutil.c«
/* split off some utility functions */
#include <stdio.h>
#include <X/Xlib.h>
#include "quad_arrow.cursor"
#include "quad_arrow_mask.cursor"
#include "pan.cursor"
#include "pan_mask.cursor"
#include "print.cursor"
#include "print_mask.cursor"
#include "zoom2.cursor"
#include "zoom2_mask.cursor"
#include "zoom4.cursor"
#include "zoom4_mask.cursor"
#include "pal.cursor"
#include "pal_mask.cursor"
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
#define SYNCINT 20
ipow( x, n)
register int x, n;
{
register int p;
for (p = 1; n > 0; --n)
p *= x;
return(p);
}
make_cursors(imcursor,pancursor,printcursor,zoom2cursor,zoom4cursor,
palcursor)
Cursor *imcursor, *pancursor, *printcursor;
Cursor *zoom2cursor, *zoom4cursor, *palcursor;
{
Cursor XCreateCursor();
*imcursor = XCreateCursor(quad_arrow_width, quad_arrow_height,
quad_arrow_bits,
quad_arrow_mask_bits,
quad_arrow_x_hot, quad_arrow_y_hot,
BlackPixel, WhitePixel, GXcopy);
*pancursor = XCreateCursor(pan_width, pan_height,
pan_bits,
pan_mask_bits,
pan_x_hot, pan_y_hot,
BlackPixel, WhitePixel, GXcopy);
*printcursor = XCreateCursor(print_width, print_height,
print_bits,
print_mask_bits,
print_x_hot, print_y_hot,
BlackPixel, WhitePixel, GXcopy);
*zoom2cursor = XCreateCursor(zoom2_width, zoom2_height,
zoom2_bits,
zoom2_mask_bits,
zoom2_x_hot, zoom2_y_hot,
BlackPixel, WhitePixel, GXcopy);
*zoom4cursor = XCreateCursor(zoom4_width, zoom4_height,
zoom4_bits,
zoom4_mask_bits,
zoom4_x_hot, zoom4_y_hot,
BlackPixel, WhitePixel, GXcopy);
*palcursor = XCreateCursor(pal_width, pal_height,
pal_bits,
pal_mask_bits,
pal_x_hot, pal_y_hot,
BlackPixel, WhitePixel, GXcopy);
return;
}
/* write image pixels to the screen according to location,
* zoom factor
*/
writepix(wind, image, ncols, nrows, zoomfactor, x, y, width, height,
xzero, yzero, mask,func,planes)
Window wind;
unsigned char *image;
short ncols, nrows, zoomfactor, x, y, width, height, xzero, yzero;
int mask, func, planes;
{
unsigned char linebuf[8192];
int j, k, l, minw, ldebug = 0;
register unsigned char *byteimage, *line = linebuf;
register int ncols_reg = ncols;
register minwidth, maxy;
register int i;
minwidth = MIN((ncols_reg-x)<<zoomfactor, width);
maxy = MIN(nrows<<zoomfactor, y+height);
byteimage = image + ((yzero + y) * ncols_reg) + xzero + x;
XSync(0);
if(zoomfactor == 0) {
for(i=y; i<maxy; i++) {
XPixmapBitsPutZ(wind, x, i,
minwidth, 1, byteimage, mask, func, planes);
if((i % SYNCINT) == 0) XSync(0);
byteimage += ncols_reg;
}
return;
} else {
l = 1<<zoomfactor;
/* adjust for odd pixels */
width += x & (l-1);
x -= x & (l-1);
height += y & (l-1);
y -= y & (l-1);
if(width & (l-1))
width = (width & ~(l-1)) + l;
if(height & (l-1))
height = (height & ~(l-1))+ l;
minwidth = MIN((ncols_reg-(x>>zoomfactor))<<zoomfactor, width);
maxy = MIN(nrows<<zoomfactor, y+height);
minw = minwidth>>zoomfactor;
byteimage = image + ((yzero + (y>>zoomfactor)) * ncols_reg)
+ xzero + (x>>zoomfactor);
for( j=y; j<maxy; j+=l) {
for(k=0; k<minw; k++ )
for(i=0; i<l; i++)
*line++ = byteimage[k];
line = linebuf;
for(i=0; i<l; i++) {
if(j+i >= maxy) return;
XPixmapBitsPutZ(wind, x, j+i, minwidth, 1, line,
mask, func, planes);
if(((i+j) % SYNCINT) == 0) XSync(0);
}
byteimage += ncols_reg;
}
}
return;
}