[mod.computers.masscomp] Fractals on the Masscomp

sob@soma.UUCP (Stan Barber) (09/03/86)

This is a 2-d fractal program that has passed around on the net.
I have attempted to make it work on the Masscomp.
Modify it if you wish, but pass the changes along.
Stan

#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
#	Makefile
#	README
#	general.c
#	gosper.c
#	init.c
#	koch.c
#	main.c
#	monkey.c
#	plot.c
#	defs.h
#	g.h
#	gen.h
#	pix.h
# This archive created: Tue Sep  2 15:52:49 1986
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'Makefile'" '(563 characters)'
if test -f 'Makefile'
then
	echo shar: "will not over-write existing file 'Makefile'"
else
sed 's/^	X//' << \SHAR_EOF > 'Makefile'
	XGENOBJ = init.o plot.o
	XFRACTOBJ = general.o koch.o monkey.o gosper.o
	X# LIB = -lm -lpixrect
	XLIB = -lm -lgp
	XCFLAGS = -O
	X
	Xfractals: main.o $(FRACTOBJ) $(GENOBJ)
	X	cc -o fractals $(CFLAGS) main.o $(FRACTOBJ) $(GENOBJ) $(LIB)
	X
	Xkoch.o: koch.c gen.h g.h
	X	cc $(CFLAGS) -c koch.c
	X
	Xmonkey.o: monkey.o gen.h g.h
	X	cc $(CFLAGS) -c monkey.c
	X
	Xgosper.o: gosper.c gen.h g.h
	X	cc $(CFLAGS) -c gosper.c
	X
	Xgeneral.o: general.c gen.h g.h
	X	cc $(CFLAGS) -c general.c
	X
	Xplot.o: plot.c g.h pix.h
	X	cc $(CFLAGS) -c plot.c
	X
	Xinit.o: init.c defs.h
	X	cc $(CFLAGS) -c init.c
	X
	Xclean:
	X	rm *.o fractals
SHAR_EOF
if test 563 -ne "`wc -c < 'Makefile'`"
then
	echo shar: "error transmitting 'Makefile'" '(should have been 563 characters)'
fi
fi
echo shar: "extracting 'README'" '(1270 characters)'
if test -f 'README'
then
	echo shar: "will not over-write existing file 'README'"
else
sed 's/^	X//' << \SHAR_EOF > 'README'
	X
	X
	X     These files:
	X	      
	X	      defs.h		random definitions
	X	      pix.h		pixrect definitions
	X              g.h		few constants
	X              gen.h		generator structure
	X
	X              general.c		a general curve generator
	X              gosper.c		gosper curve generator
	X              koch.c		koch curve generator
	X              monkey.c		monkey curve generator (My favorite)
	X
	X              plot.c		plot a line relatively
	X	      main.c		trivial driver for all the routines
	X	      init.c		routines to setup screen under pixrect
	X
	X    Comprise  a collection of simple  fractal curve  generators.
	X    They  do not  generate nifty 3D dragons  or towers or archs,
	X    but  they  are  entertaining  and probably  good for tiling.
	X
	X	 All I ask is that you not (how incredibly unlikely) try
	X    to  sell these for profit.  I can ofcourse assume no respon-
	X    sibility for how these work out for you.  They work fine for
	X    me  on a SUN (TM) workstation under 4.2 Unix (TM) using SUN-
	X    core. [Now under pixrect ... -David Kovar]
	X
	X			 Jim Hutchison
	X
	X			 hutch@sdcsvax
	X
	X			 {ihnp4,ucbvax}!sdcsvax!hutch
	XADDITIONAL NOTE:
	XI have added modification to work on Masscomp displays. To use under Sun's again,
	Xadjust the Makefile as marked.
	XStan Barber (sob@rice.edu or siesmo!soma!sob)
	X
SHAR_EOF
if test 1270 -ne "`wc -c < 'README'`"
then
	echo shar: "error transmitting 'README'" '(should have been 1270 characters)'
fi
fi
echo shar: "extracting 'general.c'" '(676 characters)'
if test -f 'general.c'
then
	echo shar: "will not over-write existing file 'general.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'general.c'
	X/*
	X * general()
	X *
	X * Draw a Generic Fractal curve.
	X *
	X * Author: Jim Hutchison (hutch@sdcsvax)
	X * (this is free, but credit me)
	X */
	X
	X#ifdef sun
	X#include <usercore.h>
	X#endif
	X#include <math.h>
	X#include "g.h"
	X#include "gen.h"
	X
	Xgeneral(len,angle,min_len,scale,flip,shape,size)
	Xdouble len,angle,min_len,scale;
	Xint flip;
	XGEN *shape;
	Xint size;
	X{
	Xregister int i;
	XGEN *gp;
	X
	X    if (len > min_len) {				/* draw generator */
	X	gp = shape + ((flip == 1)? 0 : size );
	X	for(i = 0 ; i < GEN_SIDES ; i++, gp += flip)
	X	    general(len/gp->div,
	X		   angle + gp->angle,
	X		   min_len,
	X		   scale * gp->scale,
	X		   gp->flip * flip);
	X
	X    } else			/* draw side */
	X	plot_line(len * scale, angle);
	X}
SHAR_EOF
if test 676 -ne "`wc -c < 'general.c'`"
then
	echo shar: "error transmitting 'general.c'" '(should have been 676 characters)'
fi
fi
echo shar: "extracting 'gosper.c'" '(1000 characters)'
if test -f 'gosper.c'
then
	echo shar: "will not over-write existing file 'gosper.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'gosper.c'
	X/*
	X * Gosper()
	X *
	X * Draw a Gosper curve according to Dr. Mandelbrot.
	X * start with flip at 1 usually, but -1 is fine also.
	X *
	X * Author: Jim Hutchison (hutch@sdcsvax)
	X * (this is free, but credit me)
	X */
	X
	X#ifdef sun
	X#include <usercore.h>
	X#endif
	X#include <math.h>
	X#include "g.h"
	X#include "gen.h"
	X
	X#ifdef GEN_SIDES
	X#undef GEN_SIDES
	X#endif
	X#define GEN_SIDES	7
	X#define GEN_MAX		GEN_SIDES - 1L
	Xstatic GEN generator[GEN_SIDES] = {
	X    /* angle		flip */
	X
	X    { 0.0,		 1 },
	X    { PIO3,		-1 },
	X    { PI,		-1 },
	X    { (2.0 * PIO3),	 1 },
	X    { 0.0,		 1 },
	X    { 0.0,		 1 },
	X    { (TWOPI - PIO3),	-1 }
	X};
	X
	Xgosper(len,angle,min_len,flip)
	Xdouble len,angle,min_len;
	Xint flip;
	X{
	Xregister int i;
	Xregister GEN *gp;
	X
	X    if (len > min_len) {	/* draw generator */
	X	angle += (TWOPI - PIO6);/* tilt */
	X	gp = &generator[ (flip == 1)? 0 : GEN_MAX ];
	X	for(i = 0 ; i < GEN_SIDES ; i++, gp += flip)
	X	    gosper(len/2.0, angle + gp->angle, min_len, gp->flip * flip);
	X    }
	X    else			/* draw side */
	X	plot_line(len, angle);
	X}
SHAR_EOF
if test 1000 -ne "`wc -c < 'gosper.c'`"
then
	echo shar: "error transmitting 'gosper.c'" '(should have been 1000 characters)'
fi
fi
echo shar: "extracting 'init.c'" '(2600 characters)'
if test -f 'init.c'
then
	echo shar: "will not over-write existing file 'init.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'init.c'
	X#ifdef mc300
	X#define MASSCOMP
	X#endif
	X#ifdef mc500
	X#define MASSCOMP
	X#endif
	X#ifdef mc700
	X#define MASSCOMP
	X#endif
	X#include <stdio.h>
	X#ifndef MASSCOMP
	X#include <pixrect/pixrect_hs.h>
	X#endif
	X#include <sys/ioctl.h>
	X#ifdef sun
	X#include <sun/fbio.h>
	X#endif
	X#include <sys/file.h>
	X
	X#include "defs.h"
	X
	X#ifndef MASSCOMP
	Xchar            *PR_DEVICE = "/dev/fb";         /* for console frame buffer */
	X
	Xstruct pixrect  *px_screen;             /* console screen pixrect */
	X#else
	Xint		gp_assigned;
	X#endif
	Xint             SCREEN_WIDTH, SCREEN_HEIGHT;
	X
	X/*
	X *  Set up the screen for the subsequent screen graphics mmanipulations.
	X *  All operations are done with the pixrect facilities of the SUN
	X *  workstation 1.1 release.
	X */
	X
	Xinitpix()
	X{
	X        char    *getenv();
	X
	X        if (init_screen())
	X                return(-1);
	X
	X#ifdef notdef
	X        pr_rop(px_screen, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, PIX_SET, 
	X                (struct pixrect *)NULL, 0, 0);
	X#endif        
	X        return(0);
	X}
	X
	X
	X/*
	X *  Initialize the pixrect from the whole screen.
	X */
	X
	Xinit_screen()
	X{
	X
	X#ifdef MASSCOMP
	X	int 	hwconfig[18];
	X	if (gp_assigned == 0){
	X		mgiasngp(0,0);	/* assign default graphics processor */
	X		mgigethc(18, hwconfig);
	X		SCREEN_WIDTH = hwconfig[0];
	X		SCREEN_HEIGHT = hwconfig[1];
	X		gp_assigned++;
	X		if ( SCREEN_WIDTH <= 0  || SCREEN_HEIGHT <= 0 ) {
	X        	        fprintf(stderr, "Can't get the window size.\n");
	X                	return(-1);
	X	        }
	X	}
	X        mgiclearpln(0, -1, 0);
	X	mgihue(2);
	X#else
	X        int     fd;
	X        if ( (fd = open(PR_DEVICE, O_RDWR)) < 0 ) {
	X                fprintf(stderr, "Cannot open \"%s\": %s\n", PR_DEVICE, ERRSTR);
	X                return(-1);
	X        }
	X        if ( getsize(fd) )
	X                return(-1);
	X        close(fd);
	X
	X        if ((px_screen = pr_open(PR_DEVICE)) == NULL) {
	X                fputs("Cannot open ", stderr);
	X                perror(PR_DEVICE);
	X                return(-1);
	X        }
	X
	X        return(0);
	X#endif
	X}
	X
	X
	X#ifndef MASSCOMP
	X/*
	X *  Get the number of pixels of the screen size.  If the size
	X *  is zero, we assume an error.
	X */
	X
	Xgetsize(fd)
	X{
	X        struct fbtype fbt;
	X
	X        if (ioctl(fd, FBIOGTYPE, (char *)&fbt) < 0) {
	X                perror("FBIOGTYPE ioctl");
	X                return(-1);
	X        }
	X
	X        SCREEN_WIDTH = fbt.fb_width;
	X        SCREEN_HEIGHT = fbt.fb_height;
	X
	X        if ( SCREEN_WIDTH <= 0  || SCREEN_HEIGHT <= 0 ) {
	X                fprintf(stderr, "Can't get the window size.\n");
	X                return(-1);
	X        }
	X
	X        return(0);
	X}
	X#endif
	X
	Xclosepix()
	X{
	X#ifdef MASSCOMP
	X	if (gp_assigned) mgideagp();
	X#endif
	X	return(0);
	X}
echo shar: "a missing newline was added to 'init.c'"
SHAR_EOF
if test 2600 -ne "`wc -c < 'init.c'`"
then
	echo shar: "error transmitting 'init.c'" '(should have been 2600 characters)'
fi
fi
echo shar: "extracting 'koch.c'" '(940 characters)'
if test -f 'koch.c'
then
	echo shar: "will not over-write existing file 'koch.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'koch.c'
	X/*
	X * koch()
	X *
	X * Draw a Koch lake according to Dr. Mandelbrot.
	X *
	X * Author: Jim Hutchison (hutch@sdcsvax)
	X * (this is free, but credit me)
	X */
	X
	X#ifdef sun
	X#include <usercore.h>
	X#endif
	X#include <math.h>
	X#include "g.h"
	X#include "gen.h"
	X
	Xkoch(len,angle,min_len)
	Xdouble len,angle,min_len;
	X{
	Xint i;
	X
	X    for (i = 0 ; i < 4 ; i++, angle += PIO2)	/* square seed */
	X	koch_side(len, angle, min_len);
	X}
	X
	X#ifdef GEN_SIDES
	X#undef GEN_SIDES
	X#endif
	X#define GEN_SIDES	8
	X
	XGEN genkoch[GEN_SIDES] = {
	X   /* Angle */
	X    { 0.0	},
	X    { PIO2	},
	X    { 0.0	},
	X    { - PIO2	},
	X    { - PIO2	},
	X    { 0.0	},
	X    { PIO2	},
	X    { 0.0	}
	X};
	X
	X/*
	X *	Draw a side recursively.
	X */
	X
	Xkoch_side(len,angle,min_len)
	Xdouble len,angle,min_len;
	X{
	Xregister int i;
	XGEN *gp;
	X
	X    if (len > min_len)		/* draw generator */
	X	for(i = 0, gp = genkoch ; i < GEN_SIDES ; i++, gp++)
	X	    koch_side(len/2.0, angle + gp->angle, min_len);
	X    else			/* draw side */
	X	plot_line(len, angle);
	X}
SHAR_EOF
if test 940 -ne "`wc -c < 'koch.c'`"
then
	echo shar: "error transmitting 'koch.c'" '(should have been 940 characters)'
fi
fi
echo shar: "extracting 'main.c'" '(1292 characters)'
if test -f 'main.c'
then
	echo shar: "will not over-write existing file 'main.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'main.c'
	X#include <stdio.h>
	Xmain()
	X{
	X    int choice = 0;
	X    double len, angle, min_len, scale;
	X    int flip;
	X    
	X    while(choice < 1 || choice > 4) {
	X        printf("Choose a fractal: \n");
	X	printf("\t1) Monkey \n");
	X	printf("\t2) Koch lakes \n");
	X	printf("\t3) General (not handled yet)\n");
	X	printf("\t4) Gosper\n");
	X
	X	printf("\nChoice? ");
	X	scanf("%d", &choice);
	X    }    
	X    
	X    printf("All values should be doubles (xxx.x) save for 'flip', an int.\n");
	X    printf("Reasonable values for monkey are: 10.0 0.0 1.0 1.0 1 \n");
	X    
	Xswitch (choice) {
	X    case 1: 			/* Monkey */
	X	printf ("Length, angle, min. length, scale, flip: ");
	X	scanf ("%lf %lf %lf %lf %d",
	X		&len, &angle, &min_len, &scale, &flip);
	X	initpix(); /* initialize the graphics device */
	X	monkey (len, angle, min_len, scale, flip);
	X	break;
	X    case 2: 			/* Koch lakes */
	X	printf ("Length, angle, minimum length: ");
	X	scanf ("%lf %lf %lf", &len, &angle, &min_len);
	X	initpix();
	X	koch (len, angle, min_len);
	X	break;
	X    case 3: 			/* General. Not handled yet */
	X	printf ("Not handled.\n");
	X	break;
	X    case 4: 
	X	printf ("Length, angle, minimum length, flip: ");
	X	scanf ("%lf %lf %lf %", &len, &angle, &min_len, &flip);
	X	initpix(); 
	X	gosper (len, angle, min_len, flip);
	X	break;
	X}
	X	closepix();	/* close the graphics device */    
	X}
SHAR_EOF
if test 1292 -ne "`wc -c < 'main.c'`"
then
	echo shar: "error transmitting 'main.c'" '(should have been 1292 characters)'
fi
fi
echo shar: "extracting 'monkey.c'" '(1281 characters)'
if test -f 'monkey.c'
then
	echo shar: "will not over-write existing file 'monkey.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'monkey.c'
	X/*
	X * Monkey()
	X *
	X * Draw a Monkey curve according to Dr. Mandelbrot.
	X *
	X * Author: Jim Hutchison (hutch@sdcsvax)
	X * (this is free, but credit me)
	X */
	X
	X#ifdef sun
	X#include <usercore.h>
	X#endif
	X#include <math.h>
	X#include "g.h"
	X#include "gen.h"
	X
	X#ifdef GEN_SIDES
	X#undef GEN_SIDES
	X#endif
	X#define GEN_SIDES	11
	X#define GEN_MAX		GEN_SIDES - 1
	X
	XGEN genmonkey[GEN_SIDES] = {
	X   /* Angle			Flip	Scale */
	X
	X    { PIO3,			-1,	1.0 },	/* R */
	X    { PIO3,			 1,	1.0 },  /* L */
	X    { 0.0, 			 1,	1.0 },  /* L */
	X    { (TWOPI - PIO3),		 1,	1.0 },  /* L */
	X
	X    { (2.0 * PIO3 + PIO6),	 1,	0.5 },  /* L */
	X    { (2.0 * PIO3 + PIO6),	-1,	0.5 },  /* R */
	X    { (PI + PIO6), 		-1,	0.5 },  /* R */
	X    { (TWOPI - PIO2),		-1,	0.5 },  /* R */
	X    { (TWOPI - PIO2),		 1,	0.5 },  /* L */
	X
	X    { 0.0,			-1,	1.0 },  /* R */
	X    { 0.0,			 1,	1.0 }   /* L */
	X};
	X
	X/*
	X *	Draw a monkey curve
	X */
	X
	Xmonkey(len,angle,min_len,scale,flip)
	Xdouble len,angle,min_len,scale;
	Xint flip;
	X{
	Xregister int i;
	XGEN *gp;
	X
	X    if (len > min_len) {				/* draw generator */
	X	gp = &genmonkey[ (flip == 1)? 0 : GEN_MAX ];
	X	for(i = 0 ; i < GEN_SIDES ; i++, gp += flip)
	X	    monkey(len/2.0,
	X		   angle + gp->angle,
	X		   min_len,
	X		   scale * gp->scale,
	X		   gp->flip * flip);
	X
	X    } else			/* draw side */
	X	plot_line(len * scale, angle);
	X}
SHAR_EOF
if test 1281 -ne "`wc -c < 'monkey.c'`"
then
	echo shar: "error transmitting 'monkey.c'" '(should have been 1281 characters)'
fi
fi
echo shar: "extracting 'plot.c'" '(987 characters)'
if test -f 'plot.c'
then
	echo shar: "will not over-write existing file 'plot.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'plot.c'
	X/*
	X * Plot_line()
	X *
	X * Draw a line by length and angle relative to current x,y
	X *
	X * Author: Jim Hutchison (hutch@sdcsvax)
	X * (this is free, but dis/credit me)
	X */
	X#ifdef mc300
	X#define MASSCOMP
	X#endif
	X#ifdef mc500
	X#define MASSCOMP
	X#endif
	X#ifdef mc700
	X#define MASSCOMP
	X#endif
	X#include <math.h>
	X#include "g.h"
	X#ifdef sun
	X#include "pix.h"
	X#endif
	X
	Xstatic double crntx = D_X, crnty = D_Y;	/* or global for presetting */
	X
	Xset_coord(x,y)
	Xdouble x,y;
	X{
	X    crntx = x;
	X    crnty = y;
	X}
	X
	X/*
	X *	Plot a line by length and angle from current position
	X */
	X
	Xplot_line(length,angle)
	Xdouble length,angle;
	X{
	Xdouble dx,dy;
	X
	X    MOD(angle,TWOPI);
	X
	X    dx = length * cos(angle);
	X    dy = length * sin(angle);
	X
	X#ifdef MASSCOMP
	X    mgil((int)(crntx * 10.0), (int)(crnty * 10.0),
	X	 (int)((crntx + dx) * 10.0), (int)((crnty + dy) * 10.0));
	X#else
	X    line((int)(crntx * 10.0), (int)(crnty * 10.0),
	X	 (int)((crntx + dx) * 10.0), (int)((crnty + dy) * 10.0), OP_WRITE);
	X#endif
	X    crntx += dx;
	X    crnty += dy;
	X}
	X
	X
SHAR_EOF
if test 987 -ne "`wc -c < 'plot.c'`"
then
	echo shar: "error transmitting 'plot.c'" '(should have been 987 characters)'
fi
fi
echo shar: "extracting 'defs.h'" '(530 characters)'
if test -f 'defs.h'
then
	echo shar: "will not over-write existing file 'defs.h'"
else
sed 's/^	X//' << \SHAR_EOF > 'defs.h'
	X#define LEFT    01
	X#define RIGHT   02
	X
	X#define MINXPOS         50
	X#define MAXXPOS         (SCREEN_WIDTH-50)
	X#define MINYPOS         100
	X#define MAXYPOS         (SCREEN_HEIGHT-100)
	X
	X#ifndef CTRL
	X# define CTRL(c)        ('c' & 037)
	X#endif
	X
	X#define MAX(a,b)        ((a) > (b) ? (a) : (b))
	X#define ABS(d)          ((d) < 0 ? -(d) : (d))
	X
	Xextern int      errno, sys_nerr;
	Xextern char     *sys_errlist[];
	X
	X#define ERRSTR  (errno < sys_nerr ? sys_errlist[errno] : "Unknown Error")
	X
	X#define MEM_WIDTH       32
	X#define MEM_HEIGHT      32
	X
SHAR_EOF
if test 530 -ne "`wc -c < 'defs.h'`"
then
	echo shar: "error transmitting 'defs.h'" '(should have been 530 characters)'
fi
fi
echo shar: "extracting 'g.h'" '(471 characters)'
if test -f 'g.h'
then
	echo shar: "will not over-write existing file 'g.h'"
else
sed 's/^	X//' << \SHAR_EOF > 'g.h'
	X/*
	X * G.h
	X * 
	X * Constants for convenience when doing radial fractal work under SUNCORE
	X *
	X * Author: Jim Hutchison (hutch@sdcsvax)
	X */
	X
	X#define SQRT2		1.41421
	X#define PI		3.1415926536
	X#define PIO2		(PI / 2.0)
	X#define PIO3		(PI / 3.0)
	X#define PIO4		(PI / 4.0)
	X#define PIO6		(PI / 6.0)
	X#define TWOPIO3		(2.0 * PI / 3.0)
	X#define TWOPI		(2.0 * PI)
	X#define D_X	        0.0
	X#define D_Y	        0.0
	X#define GEN_SIDES	10
	X
	X#define MOD(a,b)	while(a > b) a -= b	/* sad but true */
SHAR_EOF
if test 471 -ne "`wc -c < 'g.h'`"
then
	echo shar: "error transmitting 'g.h'" '(should have been 471 characters)'
fi
fi
echo shar: "extracting 'gen.h'" '(425 characters)'
if test -f 'gen.h'
then
	echo shar: "will not over-write existing file 'gen.h'"
else
sed 's/^	X//' << \SHAR_EOF > 'gen.h'
	X/*
	X * Author: Jim Hutchison (hutch@sdcsvax)
	X * Curve generators and initiators ( can be same structure )
	X * Various and sundry generators and a very general one.
	X */
	X
	Xtypedef struct gen {		/* an initiator or generator */
	X    double	angle;	/* next turtle turn	      */
	X    int		flip;	/* Flip flop multiplier       */
	X    double	scale; 	/* scale factor for sides     */
	X    double	div; 	/* division factor for length */
	X} GEN;
SHAR_EOF
if test 425 -ne "`wc -c < 'gen.h'`"
then
	echo shar: "error transmitting 'gen.h'" '(should have been 425 characters)'
fi
fi
echo shar: "extracting 'pix.h'" '(857 characters)'
if test -f 'pix.h'
then
	echo shar: "will not over-write existing file 'pix.h'"
else
sed 's/^	X//' << \SHAR_EOF > 'pix.h'
	X/*
	X *  Basic operations on the screen as a whole pixrect.
	X */
	X
	X#include <pixrect/pixrect_hs.h>
	X
	Xextern struct pixrect   *px_screen;
	X
	X#define OP_CLEAR        PIX_CLR
	X#define OP_SET          PIX_SET
	X#define OP_PAINT        (PIX_SRC|PIX_DST)
	X#define OP_WRITE        PIX_SRC
	X#define OP_MASK         (PIX_SRC&PIX_DST)
	X#define OP_ERASE        (PIX_NOT(PIX_SRC)&PIX_DST)
	X#define OP_INVERT       (PIX_NOT(PIX_SRC^PIX_DST))
	X#define OP_NOT(op)      PIX_NOT(op)
	X
	X#define WHITE           CLEAR
	X#define BLACK           SET
	X
	Xextern int              SCREEN_WIDTH, SCREEN_HEIGHT;
	X
	X#define point(x,y,op)           pr_put(px_screen, x, y, (op == PIX_CLR) ? 0 : 1)
	X#define line(x1,y1,x2,y2,op)    pr_vector(px_screen, x1, y1, x2, y2, op, 0)
	X#define block(x,y,w,h,op)       pr_rop(px_screen, x, y, w, h, op, \
	X                                        (struct pixrect *)0, 0, 0)
SHAR_EOF
if test 857 -ne "`wc -c < 'pix.h'`"
then
	echo shar: "error transmitting 'pix.h'" '(should have been 857 characters)'
fi
fi
exit 0
#	End of shell archive