v08i040: Xlife 2.0, Part04/10

Daniel Edward Lovinger dl2n+ at andrew.cmu.edu
Sat Jul 7 10:01:25 AEST 1990


Submitted-by: Daniel Edward Lovinger <dl2n+ at andrew.cmu.edu>
Posting-number: Volume 8, Issue 40
Archive-name: xlife/part04

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 4 (of 8)."
# Contents:  xlife-2.0/Imakefile xlife-2.0/cell.c
#   xlife-2.0/doc/on_blockpushers xlife-2.0/generate.c
#   xlife-2.0/main.c xlife-2.0/patterns/blockpusher3.life
#   xlife-2.0/patterns/oscillator7.life
#   xlife-2.0/patterns/rakecollision.life xlife-2.0/tab.h
# Wrapped by dl2n at niobe.weh.andrew.cmu.edu on Mon Jul  2 22:48:08 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f xlife-2.0/Imakefile -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"xlife-2.0/Imakefile\"
else
echo shar: Extracting \"xlife-2.0/Imakefile\" \(3709 characters\)
sed "s/^X//" >xlife-2.0/Imakefile <<'END_OF_xlife-2.0/Imakefile'
X#Imakefile for xlife 2.0
X
X#define ManSuffix n /* For sites where administrators have messed with this */
X
XPROGRAMS	= xlife lifeconv
X
XXLIFEPATSDIR	= /afs/andrew.cmu.edu/usr0/games/lib/xlife
X
X
XPATTERNS = \
X	12gliders.life \
X	2_ak47.life \
X	acorn.life \
X	ak47.life \
X	alu.life \
X	background1.life \
X	baker.life \
X	barberpole.life \
X	beaconmaker.life \
X	benchmark.life \
X	bheptomino.life \
X	bigglider.life \
X	billiards.life \
X	blinkership.life \
X	blinkership2.life \
X	blinkership3.life \
X	blockpusher.life \
X	blockpusher2.life \
X	blockpusher3.life \
X	blockpusher4.life \
X	boatcap.life \
X	boatmaker.life \
X	breeder.life \
X	bunnies.life \
X	centinal.life \
X	cheshirecat.life \
X	citiesindust.life \
X	clappinghands.life \
X	clock.life \
X	cmu.life \
X	cmu2.life \
X	cmu3.life \
X	collapsecap.life \
X	counter.life \
X	cow.life \
X	cross.life \
X	diagfuse.life \
X	eaters3.life \
X	f.life \
X	f2.life \
X	f3.life \
X	fencepost.life \
X	figure8.life \
X	fisheater.life \
X	flasher.life \
X	flywheel.life \
X	fusebranch.life \
X	fusecorner.life \
X	fusehinge.life \
X	futility.life \
X	gardenofeden.life \
X	gear.life \
X	glider.life \
X	gliderarmyof256.life \
X	gliderbackcap.life \
X	gliderforecap.life \
X	glidergen1.life \
X	glidergen2.life \
X	glidergen3.life \
X	glidergen4.life \
X	glidergen5.life \
X	glidergen6.life \
X	glidergen7.life \
X	gliderglidergun.life \
X	glidergun.life \
X	glidergun2.life \
X	glidermesscap.life \
X	gliders1_2.life \
X	gliders2_2.life \
X	gliders4_4.life \
X	glidersidecap.life \
X	glidersparcap.life \
X	glidertofish.life \
X	gourmet.life \
X	greymatter1.life \
X	gunandeater.life \
X	harvester.life \
X	horizfuse.life \
X	j.life \
X	kickback.life \
X	lambdabomb.life \
X	largefish.life \
X	line.life \
X	longfuse.life \
X	longfuse2.life \
X	longsnake.life \
X	mediumfish.life \
X	mediumfishgun.life \
X	mediumfishgun2.life \
X	morejunk.life \
X	oscilators.life \
X	oscillator1.life \
X	oscillator2.life \
X	oscillator3.life \
X	oscillator6.life \
X	oscillator7.life \
X	p120glider.life \
X	p24.life \
X	p26.life \
X	p28.life \
X	p47.life \
X	p54shuttle.life \
X	p55.life \
X	p66.life \
X	p94.life \
X	pentadecathlon.life \
X	piecollection.life \
X	pifuse.life \
X	piston.life \
X	piston2.life \
X	puffertrain.life \
X	pulsar18-22-20.life \
X	pulsar48-56-72.life \
X	pulse.life \
X	pulse1.life \
X	pulse2.life \
X	pump.life \
X	r.life \
X	rabbit.life \
X	rake.life \
X	rake2.life \
X	rake3.life \
X	rake4.life \
X	rake5.life \
X	rake6.life \
X	rake7.life \
X	rakecollision.life \
X	rakeshipgun.life \
X	randomgun.life \
X	relay.life \
X	round.life \
X	rpentomino.life \
X	schooloffish.life \
X	sglider.life \
X	shiningflower.life \
X	sixgliders.life \
X	skyline.life \
X	slowship.life \
X	slowship2.life \
X	slowship3.life \
X	smallfish.life \
X	smallfishgun.life \
X	somejunk.life \
X	spark.life \
X	spark2.life \
X	sparkfuse.life \
X	sparktopifuse.life \
X	squareblinker.life \
X	squarecap.life \
X	squaredance.life \
X	stargaterepeater.life \
X	switchengine.life \
X	test.life \
X	testtube.life \
X	testtubebaby.life \
X	thunderbird.life \
X	thunderbirdfuse.life \
X	turbine8.life \
X	washerwoman.life \
X	wave1.life
X
XSRCS1 =  \
X	button.c\
X	cell.c\
X	cellbox.c\
X	data.c\
X	expose.c\
X	file.c\
X	file_misc.c \
X	generate.c\
X	gentab.c\
X	help.c\
X	key.c\
X	keyin.c\
X	main.c\
X	motion.c\
X	resize.c\
X	utils.c
X
XOBJS1 =  \
X	button.o\
X	cell.o\
X	cellbox.o\
X	data.o\
X	expose.o\
X	file.o\
X	file_misc.o \
X	generate.o\
X	gentab.o\
X	help.o\
X	key.o\
X	keyin.o\
X	main.o\
X	motion.o\
X	resize.o\
X	utils.o
X
XSRCS2 = \
X	lifeconv.c
X
XOBJS2 = \
X	lifeconv.o
X
XAllTarget($(PROGRAMS))
X
XComplexProgramTarget_1(xlife, -L/usr/local/lib $(XLIB),)
XComplexProgramTarget_2(lifeconv,,)
X
Xinstall.patterns:
X	@case '${MFLAGS}' in *[i]*) set +e;; esac; \
X	for i in $(PATTERNS) ; do \
X		(set -x; $(INSTALL) -c $(INSTDATFLAGS) patterns/$$i $(XLIFEPATSDIR)); \
X	done
END_OF_xlife-2.0/Imakefile
if test 3709 -ne `wc -c <xlife-2.0/Imakefile`; then
    echo shar: \"xlife-2.0/Imakefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f xlife-2.0/cell.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"xlife-2.0/cell.c\"
else
echo shar: Extracting \"xlife-2.0/cell.c\" \(7759 characters\)
sed "s/^X//" >xlife-2.0/cell.c <<'END_OF_xlife-2.0/cell.c'
X/*
X * XLife Copyright 1989 Jon Bennett jb7m+ at andrew.cmu.edu, jcrb at cs.cmu.edu
X *
X * Permission to use, copy, modify, distribute, and sell this software and its
X * documentation for any purpose is hereby granted without fee, provided that
X * the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of the copyright holders not be used in
X * advertising or publicity pertaining to distribution of the software without
X * specific, written prior permission.  The copyright holders make no
X * representations about the suitability of this software for any purpose.  It
X * is provided "as is" without express or implied warranty.
X *
X * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
X * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
X * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
X * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
X * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
X * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
X * PERFORMANCE OF THIS SOFTWARE.
X */
X
X#include "defs.h"
X#include "data.h"
X#include "cellbox.h"
X#include "stdio.h"
X
Xint getcell(ptr, xdx, ydx)
X/* get state of cell xdx, ydx within box *ptr */
Xcellbox	*ptr;
Xint xdx, ydx;
X{
X    if (ydx > 3)
X	return(ptr->live2 & 1 << ( (ydx - 4)*8  + xdx));
X    else
X	return(ptr->live1 & 1 << ( ydx*8  + xdx));
X}
X
Xvoid setcell(ptr, xdx, ydx, val)
X/* set state of cell xdx, ydx within box *ptr */
Xcellbox	*ptr;
Xint xdx, ydx, val;
X{
X    if (val)
X    {
X	if (ydx > 3)
X	    ptr->live2 |= 1 << ( (ydx - 4)*8  + xdx);
X	else
X	    ptr->live1 |= 1 << ( ydx*8  + xdx);
X    }
X    else
X    {
X	if (ydx > 3)
X	    ptr->live2 &= 0xffffffff^(1 << ( (ydx - 4)*8  + xdx));
X	else
X	    ptr->live1 &= 0xffffffff^(1 << ( ydx*8  + xdx));
X    }
X}
X
Xvoid forget(ptr)
X/* remove a box's info about last generation's state */
Xcellbox *ptr;
X{
X    ptr->olive1 ^= ptr->olive1;
X    ptr->olive2 ^= ptr->olive2;
X}
X
Xstatic void displayline(line,x,y,oline)
X/* post changes in a half-cell to the X structure arrays */
Xunsigned long line,x,y,oline;
X{
X    int sc,yy;
X    unsigned long diff;
X    sc = (1 << (scale -1)) - (scale > 2);
X    diff=line ^ oline;
X    if (scale == 1){
X	if(diff & 0x1){
X	    if(line & 0x1){
X		onpoints[onpt].x= x - xpos;
X		onpoints[onpt].y= y - ypos;
X		onpt++;
X	    }
X	    else{
X		offpoints[offpt].x= x - xpos;
X		offpoints[offpt].y= y - ypos;
X		offpt++;
X	    }
X	}
X	++x;
X	if(diff & 0x2){
X	    if(line & 0x2){
X		onpoints[onpt].x= x - xpos;
X		onpoints[onpt].y= y - ypos;
X		onpt++;
X	    }
X	    else{
X		offpoints[offpt].x= x - xpos;
X		offpoints[offpt].y= y - ypos;
X		offpt++;
X	    }
X	}
X	++x;
X	if(diff & 0x4){
X	    if(line & 0x4){
X		onpoints[onpt].x= x - xpos;
X		onpoints[onpt].y= y - ypos;
X		onpt++;
X	    }
X	    else{
X		offpoints[offpt].x= x - xpos;
X		offpoints[offpt].y= y - ypos;
X		offpt++;
X	    }
X	}
X	++x;
X	if(diff & 0x8){
X	   if(line & 0x8){
X		onpoints[onpt].x= x - xpos;
X		onpoints[onpt].y= y - ypos;
X		onpt++;
X	    }
X	    else{
X		offpoints[offpt].x= x - xpos;
X		offpoints[offpt].y= y - ypos;
X		offpt++;
X	    }
X	}
X	++x;
X	if(diff & 0x10){
X	    if(line & 0x10){
X		onpoints[onpt].x= x - xpos;
X		onpoints[onpt].y= y - ypos;
X		onpt++;
X	    }
X	    else{
X		offpoints[offpt].x= x - xpos;
X		offpoints[offpt].y= y - ypos;
X		offpt++;
X	    }
X	}
X	++x;
X	if(diff & 0x20){
X	    if(line & 0x20){
X		onpoints[onpt].x= x - xpos;
X		onpoints[onpt].y= y - ypos;
X		onpt++;
X	    }
X	    else{
X		offpoints[offpt].x= x - xpos;
X		offpoints[offpt].y= y - ypos;
X		offpt++;
X	    }
X	}
X	++x;
X	if(diff & 0x40){
X	    if(line & 0x40){
X		onpoints[onpt].x= x - xpos;
X		onpoints[onpt].y= y - ypos;
X		onpt++;
X	    }
X	    else{
X		offpoints[offpt].x= x - xpos;
X		offpoints[offpt].y= y - ypos;
X		offpt++;
X	    }
X	}
X	++x;	
X	if(diff & 0x80){
X	    if(line & 0x80){
X		onpoints[onpt].x= x - xpos;
X		onpoints[onpt].y= y - ypos;
X		onpt++;
X	    }
X	    else{
X		offpoints[offpt].x= x - xpos;
X		offpoints[offpt].y= y - ypos;
X		offpt++;
X	    }
X	}
X    }
X    else{
X	yy=((y - ypos) << (scale -1));
X	if(diff & 0x1){
X	    if(line & 0x1){
X		onrects[onrect].x= ((x - xpos) << (scale -1));
X		onrects[onrect].y= yy;
X		onrects[onrect].width = sc;
X		onrects[onrect].height = sc;
X		onrect++;
X	    }
X	    else{
X		offrects[offrect].x= ((x - xpos) << (scale -1));
X		offrects[offrect].y= yy;
X		offrects[offrect].width = sc;
X		offrects[offrect].height = sc;
X		offrect++;
X	    }
X	}
X	++x;
X	if(diff & 0x2){
X	    if(line & 0x2){
X		onrects[onrect].x= ((x - xpos) << (scale -1));
X		onrects[onrect].y= yy;
X		onrects[onrect].width = sc;
X		onrects[onrect].height = sc;
X		onrect++;
X	    }
X	    else{
X		offrects[offrect].x= ((x - xpos) << (scale -1));
X		offrects[offrect].y= yy;
X		offrects[offrect].width = sc;
X		offrects[offrect].height = sc;
X		offrect++;
X	    }
X	}
X	++x;
X	if(diff & 0x4){
X	    if(line & 0x4){
X		onrects[onrect].x= ((x - xpos) << (scale -1));
X		onrects[onrect].y= yy;
X		onrects[onrect].width = sc;
X		onrects[onrect].height = sc;
X		onrect++;
X	    }
X	    else{
X		offrects[offrect].x= ((x - xpos) << (scale -1));
X		offrects[offrect].y= yy;
X		offrects[offrect].width = sc;
X		offrects[offrect].height = sc;
X		offrect++;
X	    }
X	}
X	++x;
X	if(diff & 0x8){
X	    if(line & 0x8){
X		onrects[onrect].x= ((x - xpos) << (scale -1));
X		onrects[onrect].y= yy;
X		onrects[onrect].width = sc;
X		onrects[onrect].height = sc;
X		onrect++;
X	    }
X	    else{
X		offrects[offrect].x= ((x - xpos) << (scale -1));
X		offrects[offrect].y= yy;
X		offrects[offrect].width = sc;
X		offrects[offrect].height = sc;
X		offrect++;
X	    }
X	}
X	++x;
X	if(diff & 0x10){
X	    if(line & 0x10){
X		onrects[onrect].x= ((x - xpos) << (scale -1));
X		onrects[onrect].y= yy;
X		onrects[onrect].width = sc;
X		onrects[onrect].height = sc;
X		onrect++;
X	    }
X	    else{
X		offrects[offrect].x= ((x - xpos) << (scale -1));
X		offrects[offrect].y= yy;
X		offrects[offrect].width = sc;
X		offrects[offrect].height = sc;
X		offrect++;
X	    }
X	}
X	++x;
X	if(diff & 0x20){
X	    if(line & 0x20){
X		onrects[onrect].x= ((x - xpos) << (scale -1));
X		onrects[onrect].y= yy;
X		onrects[onrect].width = sc;
X		onrects[onrect].height = sc;
X		onrect++;
X	    }
X	    else{
X		offrects[offrect].x= ((x - xpos) << (scale -1));
X		offrects[offrect].y= yy;
X		offrects[offrect].width = sc;
X		offrects[offrect].height = sc;
X		offrect++;
X	    }
X	}
X	++x;
X	if(diff & 0x40){
X	    if(line & 0x40){
X		onrects[onrect].x= ((x - xpos) << (scale -1));
X		onrects[onrect].y= yy;
X		onrects[onrect].width = sc;
X		onrects[onrect].height = sc;
X		onrect++;
X	    }
X	    else{
X		offrects[offrect].x= ((x - xpos) << (scale -1));
X		offrects[offrect].y= yy;
X		offrects[offrect].width = sc;
X		offrects[offrect].height = sc;
X		offrect++;
X	    }
X	}
X	++x;
X	if(diff & 0x80){
X	    if(line & 0x80){
X		onrects[onrect].x= ((x - xpos) << (scale -1));
X		onrects[onrect].y= yy;
X		onrects[onrect].width = sc;
X		onrects[onrect].height = sc;
X		onrect++;
X	    }
X	    else{
X		offrects[offrect].x= ((x  - xpos) << (scale -1));
X		offrects[offrect].y= yy;
X		offrects[offrect].width = sc;
X		offrects[offrect].height = sc;
X		offrect++;
X	    }
X	}
X    }
X	
X}
X
Xvoid displaybox(x, y, ptr)
Xunsigned long x, y;
Xcellbox	*ptr;
X{
X    register unsigned long live1 = ptr->live1;
X    register unsigned long live2 = ptr->live2;
X    register unsigned long olive1 = ptr->olive1;
X    register unsigned long olive2 = ptr->olive2;
X
X    displayline(live1,x,y,olive1);
X    displayline(live1>>8,x,++y,olive1>>8);
X    displayline(live1>>16,x,++y,olive1>>16);
X    displayline(live1>>24,x,++y,olive1>>24);
X    displayline(live2,x,++y,olive2);
X    displayline(live2>>8,x,++y,olive2>>8);
X    displayline(live2>>16,x,++y,olive2>>16);
X    displayline(live2>>24,x,++y,olive2>>24);
X    
X}
X
END_OF_xlife-2.0/cell.c
if test 7759 -ne `wc -c <xlife-2.0/cell.c`; then
    echo shar: \"xlife-2.0/cell.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f xlife-2.0/doc/on_blockpushers -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"xlife-2.0/doc/on_blockpushers\"
else
echo shar: Extracting \"xlife-2.0/doc/on_blockpushers\" \(8597 characters\)
sed "s/^X//" >xlife-2.0/doc/on_blockpushers <<'END_OF_xlife-2.0/doc/on_blockpushers'
XHere are some excerpts from my latest letter to Bob Wainwright, including
Xa description of block pusher 3, another example of glider self-repair,
Xand some p3s:
X
X     Last month I spent quite a bit of time trying to build a smaller block
Xpusher.  After building a smaller catcher as described in my 12/14/89
Xletter, I went to work on the shotgun.  By adding 90 degree turns to
Xreposition the glider sources, I was able to squeeze everything into a
X271x289 rectangle.  I ran "block pusher 2" for 10000 generations, during
Xwhich the block moved 10 times.  That's enough to determine the min and max
Xpopulations: 2389 and 2584.  But I was annoyed because it was still too big
Xfor my fast screen-oriented program.  So I decided to look for a smaller
Xsalvo which could push a block.  I started searching through the 2 glider +
Xblock collisions, hoping to find one which would move the block and send
Xback a glider.  It seemed unlikely that the block would actually be pushed
Xalong the diagonal, but I figured that I could use one of the many 2 glider
X+ block collisions which just move the block to put the block back on the
Xright diagonal, a convenient distance downstream.  But after watching a few
Xhundred collisions, I found something even better: one which produced a
Xblock 10 units downstream, sent back a glider, and produced some other junk
X(a traffic light and 2 blocks) upstream from the new block.  It seemed
Xlikely that I could find a way to add a third glider to suppress the junk.
XI didn't quite manage that, despite a fairly thorough search.  But I did
Xfind a way to add a glider so the junk was suppressed and a second return
Xglider was produced.  Here's the salvo about to push a block; the reaction
Xtakes 135 generations:
X
X        .o.......,.........,.........
X        ..o......,.........,.........
X        ooo......,.........,.........
X        .........,.........,.........
X        .........,.........,.........
X        .........,.........,.........
X        .........,.........,.........     Figure 0
X        .........,.........,.........
X        .........,.........,......o.o
X        .........,.........,.......oo
X        .........,.........,.......o.
X        .........,.........,o........
X        .........,.........,.oo...oo.
X        .........,.........,oo....oo.
X
X     Because the 3 gliders's flightpaths are fairly far apart, I was able
Xto build a shotgun without needing the G+LW -> G reaction.  Instead, I used
Xa salvoing method which I'd thought of earlier but couldn't use for the 5
Xglider salvo:
X
X          G1    G0
X            \  /
X             \/  E
X             /\ /
X            /  X
X            \   R                Figure 1
X             \ X    G3
X              X \  /
X             / \ \/
X            /   \/\
X          G2    /\ \
X                \ \ \
X                 \ \
X                  \
X
XHere G denotes a gun, E an eater, and R a rephaser.  The G0 and G1 streams
Xcross without interacting, as do the G0 and G2 streams.  The G0 stream
Xmakes a 90 degree turn after crossing the G1 stream.  The G1 and G2 streams
Xthen meet at a rephaser, which pulls the G1 stream 6 units to the left,
Xbringing it closer to the G0 stream than a 90 degree turn by itself can.
XThis produces the two lead gliders of the salvo.  The third is added by a
Xfourth gun whose output makes a 90 degree turn.
X
X     The wideness of the salvo (and its fixed geometry) made building a
Xsuppressor harder.  There's no way to destroy the salvo with just one
Xperpendicular glider.  So I used two, one from the catcher and another
Xwhich I call the assistant. The one from the catcher strikes the two lead
Xgliders and creates a half honey farm.  The assistant destroys one beehive
Xand the third salvo glider destroys the other.  But if the glider from the
Xcatcher is missing (as it will be when the catcher detects a return
Xglider), then the assistant passes through the salvo without harming it and
Xthen gets eaten.  So I didn't need extra circuitry to delete the assistant
Xwhen a return is detected.  Here's how the annihilation works; also shown
Xis the eater which eats the assistant when the glider from the catcher is
Xabsent:
X
X        .........,.........,.........,....a.a
X        .........,.........,.........,....aa.
X        .........,.........,.........,.....a.
X        .........,.........,.........,.......
X        .o.......,.........,.........,.......
X        ..o......,.........,.........,.......
X        ooo......,.........,.........,.......
X        .........,.........,.........,.......
X        .........,.........,.........,.......
X        .........,.........,.........,.......
X        .........,.........,.........,.......    Figure 2
X        .........,.........,.........,.......
X        .........,.........,......o.o,.......
X        .........,.........,.......oo,.......
X        .........,.........,.......o.,.......
X        .........,.........,o........,.......
X        .........,.........,.oo......,.......
X        .........,.........,oo.......,.......
X        .........,.........,.........,.......
X        .........,.........,.........,.......
X        .........,.........,.........,.......
X        .........,.........,.ccc.....,.......
X        .........,.........,...c.....,.......
X        .........,..ee.....,..c......,.......
X        .........,...e.....,.........,.......
X        .........,eee......,.........,.......
X        .........,e........,.........,.......
X
X     Building a catcher was much harder, because of the extra return
Xglider.  Instead of using vanish reactions to detect the return, I had to
Xuse ternaries.  (Not the usual ternaries, since the 2 return gliders are on
Xslightly different flightpaths.)  Not surprisingly, such reactions turned
Xout to be rare.  As a result, I wasn't able to use just queen bee shuttles
Xfor 90 degree turns to make the detectors cross the diagonal; I also had to
Xuse a pair of inverting 90 degree turns (p30 guns).  And there's another
Xproblem:  Each time the block gets pushed, the round trip time for the
Xsalvo and return increases by 80.  So there are 3 possible phases mod 120
Xfor the first return glider. (That's why the detectors have to cross the
Xdiagonal in 3 places.)  But the second return glider arrives about 80
Xgenerations behind the first; it's almost in the same position and phase as
Xthe next return glider will be.  So the detector that's farthest downstream
Xmust be able to hit a first return glider in a certain place, but miss a
Xsecond return glider in almost the same place.  And of course the detectors
Xmust not interfere with escaping salvos.  Getting the geometry right was a
Xreal pain!
X
X     Anyway, I finally got "block pusher 3" working.  The initial bounding
Xbox is only 168x194.  It runs in my screen-oriented program at 5.3 hertz
Xfor 4107 generations, pushing the block 4 times; on the 5th push it hits
Xthe edge. I also ran it in my Forth program (at 0.5 hertz) for 16852
Xgenerations, during which the block moved 13 times.  The population
Xfluctuates between 1185 and 1424.  That could presumably be smoothed out
Xsomewhat by pulling a couple of guns farther out to change their phases; 3
Xof the 6 p120 guns are synchronized.  Also, I now know how to build a
Xslightly smaller p120 gun, so the size could be decreased a bit.  (Maybe
Xlater.  And maybe someday I'll build a squirt gun based on this.)
X
X. . .
X
XThe top glider in Figure 13 also repairs itself, changing 3/4'th of the
Xforming honey farm into 2 boats.
X
X        ....o..
X        .....oo
X        ....oo.
X        .......
X        o.o....
X        .oo....
X        .o.....
X        .......
X        oo.....
X        oo.....
X
X       Figure 13
X
X     Here are a few results from my search program.  Figure 15 shows a
Xsmaller p3 with an active corner.  It fits in an 11x11 box; there are none
Xin 10x11.  (I don't know about 10xN for N between 12 and 22.)  Figure 16 is
Xa smaller version of Figure 1 of my 12/4/89 letter.  Figures 17 and 18 show
Xp3 billiard tables which act like 2 and 4 overlapping copies of Figure 16
Xand its kin.
X
X        ......o....
X        ......ooo..
X        oo..oo...o.    oo.oo....    ..oo.o..o    ...oo.o..
X        .o.o.o.oo..    o.oo...oo    .o.o.oooo    ...o.oo..
X        ....oo.o...    .....o..o    .o.o.....    oo.o.....
X        ..o.o..o...    .ooo.ooo.    oo.o.oo..    .o.o.oooo
X        ..o..ooo.oo    o........    o......o.    o.......o
X        oo.oo...o.o    oo..oo...    ..oo.o.o.    oooo.o.o.
X        ...o..o.o..    .....o...    ...o.oo..    .....o.oo
X        ..o.o...o..    ....o....    ...o.....    ..oo.o...
X        oo....oo...    ....oo...    ..oo.....    ..o.oo...
X
X         Figure 15     Figure 16    Figure 17    Figure 18
END_OF_xlife-2.0/doc/on_blockpushers
if test 8597 -ne `wc -c <xlife-2.0/doc/on_blockpushers`; then
    echo shar: \"xlife-2.0/doc/on_blockpushers\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f xlife-2.0/generate.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"xlife-2.0/generate.c\"
else
echo shar: Extracting \"xlife-2.0/generate.c\" \(8368 characters\)
sed "s/^X//" >xlife-2.0/generate.c <<'END_OF_xlife-2.0/generate.c'
X/*
X * XLife Copyright 1989 Jon Bennett jb7m+ at andrew.cmu.edu, jcrb at cs.cmu.edu
X *
X * Permission to use, copy, modify, distribute, and sell this software and its
X * documentation for any purpose is hereby granted without fee, provided that
X * the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of the copyright holders not be used in
X * advertising or publicity pertaining to distribution of the software without
X * specific, written prior permission.  The copyright holders make no
X * representations about the suitability of this software for any purpose.  It
X * is provided "as is" without express or implied warranty.
X *
X * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
X * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
X * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
X * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
X * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
X * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
X * PERFORMANCE OF THIS SOFTWARE.
X *
X * CMU SUCKS
X */
X
X#include "defs.h"
X#include "cellbox.h"
X#include "tab.h"
X
Xvoid generate(){
X    
X    
X    register u_long t1,t2,t3,*tmpptr,y;
X    cellbox *cptr,*tptr,*cptrup,*cptrdn,*cptrlf,*cptrrt;
X
X#ifdef PROF    
X    link_called = link_search = 0;
X    create_called = create_null = 0;
X#endif PROF
X
X    cptr = head;
X    numcells=0;
X    generations++;
X    while(cptr ){
X
X	if(!(cptr->live1 || cptr->live2)){
X	    cptr = cptr->next;
X	    continue;
X	}
X
X	cptrup=cptr->up;
X	cptrdn=cptr->dn;
X	cptrlf=cptr->lf;
X	cptrrt=cptr->rt;
X	
X	t1=cptr->live1&0xff;
X	if(t1){
X	    if(cptrup==NULL){
X		cptrup=link(cptr->x,cptr->y - 8);
X		cptrup->dn=cptr;
X	    }
X	    t2=tab1[t1];
X	    cptrup->on[7]+=t2;
X	    cptr->on[1]+=t2;
X	    cptr->on[0]+=tab2[t1];
X	}
X	
X	t1=(cptr->live2 & 0xff000000)>>24;	    
X	if(t1){
X	    if(cptrdn==NULL){
X		cptrdn=link(cptr->x,cptr->y + 8);
X		cptrdn->up=cptr;
X	    }
X	    t2=tab1[t1];
X	    cptrdn->on[0]+=t2;
X	    cptr->on[6]+=t2;
X	    cptr->on[7]+=tab2[t1];
X	}
X
X	t1=cptr->live1;
X	t2=cptr->live2;
X
X	if(t1 & 0x1010101){
X	    if(cptrlf==NULL){
X		cptrlf=link(cptr->x - 8,cptr->y);
X		cptrlf->rt=cptr;
X	    }
X	    if(t1 & 0x1){
X		cptrlf->on[0]+=0x10000000;
X		cptrlf->on[1]+=0x10000000;
X		if(cptrlf->up==NULL){
X		    cptrlf->up=link(cptr->x - 8,cptr->y - 8);
X		}
X		cptrlf->up->on[7]+= 0x10000000;
X		cptrlf->up->dn=cptrlf;
X	    }
X	    if(t1 & 0x100){
X		cptrlf->on[0]+=0x10000000;
X		cptrlf->on[1]+=0x10000000;
X		cptrlf->on[2]+=0x10000000;
X	    }
X	    if(t1 & 0x10000){
X		cptrlf->on[1]+=0x10000000;
X		cptrlf->on[2]+=0x10000000;
X		cptrlf->on[3]+=0x10000000;
X	    }
X	    if(t1 & 0x1000000){
X		cptrlf->on[2]+=0x10000000;
X		cptrlf->on[3]+=0x10000000;
X		cptrlf->on[4]+=0x10000000;
X	    }
X	}
X	
X	if(t2 & 0x1010101){
X	    if(cptrlf==NULL){
X		cptrlf=link(cptr->x - 8,cptr->y);
X		cptrlf->rt=cptr;
X	    }
X	    if(t2 & 0x1){
X		cptrlf->on[3]+=0x10000000;
X		cptrlf->on[4]+=0x10000000;
X		cptrlf->on[5]+=0x10000000;
X	    }
X	    if(t2 & 0x100){
X		cptrlf->on[4]+=0x10000000;
X		cptrlf->on[5]+=0x10000000;
X		cptrlf->on[6]+=0x10000000;
X	    }
X	    if(t2 & 0x10000){
X		cptrlf->on[5]+=0x10000000;
X		cptrlf->on[6]+=0x10000000;
X		cptrlf->on[7]+=0x10000000;
X	    }	    
X	    if(t2 & 0x1000000){
X		cptrlf->on[6]+=0x10000000;
X		cptrlf->on[7]+=0x10000000;
X		if(cptrlf->dn==NULL){
X		    cptrlf->dn=link(cptr->x - 8,cptr->y + 8);
X		}
X		cptrlf->dn->on[0]+= 0x10000000;
X		cptrlf->dn->up=cptrlf;
X	    }
X	}
X	
X	if(t1 & 0x80808080){
X	    if(cptrrt == NULL){
X		cptrrt=link(cptr->x + 8,cptr->y);
X		cptrrt->lf=cptr;
X	    }
X	    if(t1 & 0x80){
X		cptrrt->on[0]+=0x1;
X		cptrrt->on[1]+=0x1;
X		if(cptrrt->up==NULL){
X		    cptrrt->up=link(cptr->x + 8,cptr->y - 8);
X		}
X		cptrrt->up->on[7]+= 0x1;
X		cptrrt->up->dn=cptrrt;
X	    }
X	    if(t1 & 0x8000){
X		    cptrrt->on[0]+=0x1;
X		    cptrrt->on[1]+=0x1;
X		    cptrrt->on[2]+=0x1;
X	    }
X	    if(t1 & 0x800000){
X		    cptrrt->on[1]+=0x1;
X		    cptrrt->on[2]+=0x1;
X		    cptrrt->on[3]+=0x1;
X	    }
X	    if(t1 & 0x80000000){
X		    cptrrt->on[2]+=0x1;
X		    cptrrt->on[3]+=0x1;
X		    cptrrt->on[4]+=0x1;
X	    }
X	}
X	
X	if(t2 & 0x80808080){
X	    if(cptrrt == NULL){
X		cptrrt=link(cptr->x + 8,cptr->y);
X		cptrrt->lf=cptr;
X	    }
X	    if(t2 & 0x80){
X		    cptrrt->on[3]+=0x1;
X		    cptrrt->on[4]+=0x1;
X		    cptrrt->on[5]+=0x1;
X	    }
X	    if(t2 & 0x8000){
X		    cptrrt->on[4]+=0x1;
X		    cptrrt->on[5]+=0x1;
X		    cptrrt->on[6]+=0x1;
X	    }
X	    if(t2 & 0x800000){
X		    cptrrt->on[5]+=0x1;
X		    cptrrt->on[6]+=0x1;
X		    cptrrt->on[7]+=0x1;
X	    }
X	    if(t2 & 0x80000000){
X		cptrrt->on[6]+=0x1;
X		cptrrt->on[7]+=0x1;
X		if(cptrrt->dn==NULL){
X		    cptrrt->dn=link(cptr->x + 8,cptr->y + 8);
X		}
X		cptrrt->dn->on[0]+= 0x1;
X		cptrrt->dn->up=cptrrt;
X	    }
X	}
X	
X	t1=(cptr->live1 & 0xff00) >> 8;
X	t2=(cptr->live1 & 0xff0000) >> 16;
X	
X	if(t1){
X	    t3 = tab1[t1];
X	    cptr->on[1]+=tab2[t1];
X	    cptr->on[0]+=t3;
X	    cptr->on[2]+=t3;
X	}
X	
X	t1=(cptr->live1 & 0xff000000) >> 24;
X	
X	if(t2){
X	    t3 = tab1[t2];
X	    cptr->on[2]+=tab2[t2];
X	    cptr->on[1]+=t3;
X	    cptr->on[3]+=t3;
X	}
X	
X	t2=(cptr->live2 & 0xff);
X	
X	if(t1){
X	    t3 = tab1[t1];
X	    cptr->on[3]+=tab2[t1];
X	    cptr->on[2]+=t3;
X	    cptr->on[4]+=t3;
X	}
X	
X	t1=(cptr->live2 & 0xff00) >> 8;
X	
X	if(t2){
X	    t3 = tab1[t2];
X	    cptr->on[4]+=tab2[t2];
X	    cptr->on[3]+=t3;
X	    cptr->on[5]+=t3;
X	}
X	
X	t2=(cptr->live2 & 0xff0000) >> 16;	    
X	
X	if(t1){
X	    t3 = tab1[t1];
X	    cptr->on[5]+=tab2[t1];
X	    cptr->on[4]+=t3;
X	    cptr->on[6]+=t3;
X	}
X	
X	if(t2){
X	    t3 = tab1[t2];
X	    cptr->on[6]+=tab2[t2];
X	    cptr->on[5]+=t3;
X	    cptr->on[7]+=t3;
X	}
X	
X	cptr->up=cptrup;
X	cptr->dn=cptrdn;
X	cptr->lf=cptrlf;
X	cptr->rt=cptrrt;
X	cptr=cptr->next;
X    }
X    
X    cptr=head;
X    while(cptr){
X	t1=cptr->live1;
X	cptr->olive1=t1;
X	tmpptr=cptr->on;
X	t2=0;
X	t3= *tmpptr;
X	if(t3 &0xffff){
X	    t2=lookup[((t3 & 0xffff)<<4) + (t1&0xf)];
X	}
X	if(t3 &0xffff0000){
X	    t2|=lookup[((t3 & 0xffff0000)>>12) + ((t1>>4)&0xf)] << 4;
X	}
X	*tmpptr=0;
X	tmpptr++;
X	t3= *tmpptr;
X	if(t3 &0xffff){
X	    t2|=lookup[((t3 & 0xffff)<<4) + ((t1>>8)&0xf)] << 8;
X	}
X	if(t3 &0xffff0000){
X	    t2|=lookup[((t3 & 0xffff0000)>>12) + ((t1>>12)&0xf)] << 12;
X	}
X	*tmpptr=0;
X	tmpptr++;
X	t3= *tmpptr;
X	if(t3 &0xffff){
X	    t2|=lookup[((t3 & 0xffff)<<4) + ((t1>>16)&0xf)] << 16;
X	}
X	if(t3 &0xffff0000){
X	    t2|=lookup[((t3 & 0xffff0000)>>12) + ((t1>>20)&0xf)] << 20;
X	}
X	*tmpptr=0;
X	tmpptr++;
X	t3= *tmpptr;
X	if(t3 &0xffff){
X	    t2|=lookup[((t3 & 0xffff)<<4) + ((t1>>24)&0xf)] << 24;
X	}
X	if(t3 &0xffff0000){
X	    t2|=lookup[((t3 & 0xffff0000)>>12) + ((t1>>28)&0xf)] << 28;
X	}
X	*tmpptr=0;
X	tmpptr++;
X	t3= *tmpptr;
X	cptr->live1=t2;
X	t1=cptr->olive2=cptr->live2;	
X	t2=0;
X
X	if(t3 &0xffff){
X	    t2=lookup[((t3 & 0xffff)<<4) + (t1&0xf)];
X	}
X	if(t3 &0xffff0000){
X	    t2|=lookup[((t3 & 0xffff0000)>>12) + ((t1>>4)&0xf)] << 4;
X	}
X	*tmpptr=0;
X	tmpptr++;
X	t3= *tmpptr;
X	if(t3 &0xffff){
X	    t2|=lookup[((t3 & 0xffff)<<4) + ((t1>>8)&0xf)] << 8;
X	}
X	if(t3 &0xffff0000){
X	    t2|=lookup[((t3 & 0xffff0000)>>12) + ((t1>>12)&0xf)] << 12;
X	}
X	*tmpptr=0;
X	tmpptr++;
X	t3= *tmpptr;
X	if(t3 &0xffff){
X	    t2|=lookup[((t3 & 0xffff)<<4) + ((t1>>16)&0xf)] << 16;
X	}
X	if(t3 &0xffff0000){
X	    t2|=lookup[((t3 & 0xffff0000)>>12) + ((t1>>20)&0xf)] << 20;
X	}
X	*tmpptr=0;
X	tmpptr++;
X	t3= *tmpptr;
X	if(t3 &0xffff){
X	    t2|=lookup[((t3 & 0xffff)<<4) + ((t1>>24)&0xf)] << 24;
X	}
X	if(t3 &0xffff0000){
X	    t2|=lookup[((t3 & 0xffff0000)>>12) + ((t1>>28)&0xf)] << 28;
X	}
X	*tmpptr=0;
X	cptr->live2=t2;
X	
X	if(dispcells){
X	    t1=cptr->live1;
X	    for(y=0;y<32;y++)
X		if(t1 & (1<<y)) numcells++;
X	    t1=cptr->live2;
X	    for(y=0;y<32;y++)
X		if(t1 & (1<<y)) numcells++;
X	}	
X	
X 	if(cptr->live1 || cptr->live2){
X	    cptr->dead=0;
X	    cptr=cptr->next;
X	}
X	else{
X	    cptr->dead++;
X	    if(cptr->dead > maxdead){
X		tptr=cptr->next;
X		kill(cptr);
X		cptr=tptr;
X	    }
X	    else{
X		cptr=cptr->next;
X	    }
X	}
X    }
X#ifdef PROF
X    printf("num=%d ",numboxes);
X    if(link_called){
X	printf("l_c=%d ",link_called);
X	if(link_search){
X	    printf(" l_ave=%f ",link_search/(float)link_called);
X	}
X    }
X    if(create_called){
X	printf("c_c=%d ",create_called);
X	if(create_null){
X	    printf(" c_ave=%f ",create_null/(float)create_called);
X	}
X    }
X
X    printf("\n");
X#endif PROF
X}
X
X
END_OF_xlife-2.0/generate.c
if test 8368 -ne `wc -c <xlife-2.0/generate.c`; then
    echo shar: \"xlife-2.0/generate.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f xlife-2.0/main.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"xlife-2.0/main.c\"
else
echo shar: Extracting \"xlife-2.0/main.c\" \(6984 characters\)
sed "s/^X//" >xlife-2.0/main.c <<'END_OF_xlife-2.0/main.c'
X/*
X * XLife Copyright 1989 Jon Bennett jb7m+ at andrew.cmu.edu, jcrb at cs.cmu.edu
X *
X * Permission to use, copy, modify, distribute, and sell this software and its
X * documentation for any purpose is hereby granted without fee, provided that
X * the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of the copyright holders not be used in
X * advertising or publicity pertaining to distribution of the software without
X * specific, written prior permission.  The copyright holders make no
X * representations about the suitability of this software for any purpose.  It
X * is provided "as is" without express or implied warranty.
X *
X * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
X * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
X * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
X * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
X * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
X * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
X * PERFORMANCE OF THIS SOFTWARE.
X *
X * CMU SUCKS
X */
X
X#include <X11/Xos.h>
X
X#include "defs.h"
X#include "icon.h"
X#include "cursor_data.h"
X#include "cursor_mask.h"
X#include "patchlevel.h"
X
X#define BORDERWIDTH 2 		/* width of window manager borders to assume */
X
Xmain(argc, argv)
Xint argc;
Xchar **argv;
X{
X    int i;
X    Pixmap icon,cursor_data,cursor_mask;
X    XSizeHints hints;
X    XSetWindowAttributes winat;
X    XColor white,black,dummy;
X    XComposeStatus stat;
X    char *geomstring = NULL;
X    char *initpat = NULL;
X    int bwidth = BORDERWIDTH;
X    struct timeval inputdelay, timeouttemp;
X    
X    if (!(disp = XOpenDisplay(getenv("DISPLAY"))))
X	fatal("Can't open Display\n");
X
X    for (i = 1; i < argc; i++)
X    {
X	if (strcmp(argv[i], "-geometry") == 0)
X	    geomstring = argv[++i];
X	else if (*argv[i] == '=')
X	    geomstring = argv[i];
X	else if (strcmp(argv[i], "-bw") == 0)
X	    bwidth = atoi(argv[++i]);
X	else if (*argv[i] != '-')
X	{
X	    initpat = argv[i];
X	    break;
X	}
X    }
X
X    screen = DefaultScreen(disp);
X    rootw = RootWindow(disp, screen);
X    fcolor = WhitePixel(disp, screen);
X    bcolor = BlackPixel(disp, screen);
X
X    hints.x = 0;
X    hints.y = 0;    
X    width = DisplayWidth(disp,screen);
X    height = DisplayHeight(disp,screen);
X
X    hints.width = width - bwidth*2;
X    hints.height = height - bwidth*2;
X    
X    hints.flags = PPosition | PSize;
X    if (geomstring != NULL)
X    {
X	int result;
X
X	result = XParseGeometry(geomstring,&hints.x,&hints.y,
X				&hints.width,&hints.height);
X	if (result & XNegative)
X	    hints.x += DisplayWidth(disp,screen) - hints.width - bwidth * 2;
X	if (result & YNegative)
X	    hints.y += DisplayHeight(disp,screen) - hints.height - bwidth*2;
X	if (result & XValue || result & YValue)
X	{
X	    hints.flags |= USPosition;
X	    hints.flags &= ~PPosition;
X	}
X	if (result & WidthValue || result & HeightValue)
X	{
X	    hints.flags |= USSize;
X	    hints.flags &= ~PSize;
X	}
X    }
X    
X    mainw = XCreateSimpleWindow(disp, rootw,
X		0, 0, hints.width, hints.height, BORDERWIDTH, fcolor, bcolor);
X
X    if(!mainw)
X	fatal("Can't open main window");
X
X    icon = XCreateBitmapFromData(disp, mainw, icon_bits, icon_width, icon_height);
X    XSetStandardProperties(disp, mainw, "Xlife: the game of bit manipulation , version 2.0", "Xlife", icon, argv, argc, &hints);
X
X    xgcv.background = bcolor;
X    xgcv.foreground = bcolor;
X    blackgc = XCreateGC(disp, mainw, GCForeground | GCBackground, &xgcv);
X    xgcv.foreground = fcolor;
X    ntextgc = XCreateGC(disp, mainw, GCForeground | GCBackground, &xgcv);
X    btextgc = XCreateGC(disp, mainw, GCForeground | GCBackground, &xgcv);
X    whitegc = XCreateGC(disp, mainw, GCForeground | GCBackground, &xgcv);
X    
X    if(!((nfont = XLoadQueryFont(disp, NORMALFONT)) && (bfont = XLoadQueryFont(disp, BOLDFONT))))
X	fatal("Can't load font\n");
X    XSetFont(disp, ntextgc, nfont->fid);
X    XSetFont(disp, btextgc, bfont->fid);
X    xgcv.function = GXcopy;
X    xgcv.plane_mask = 1;
X
X    XAllocNamedColor(disp, DefaultColormap(disp, screen), "white", &white, &dummy);
X    XAllocNamedColor(disp, DefaultColormap(disp, screen), "black", &black, &dummy);
X    cursor_data = XCreateBitmapFromData(disp, mainw, cursor_data_bits, cursor_data_width, cursor_data_height);
X    cursor_mask = XCreateBitmapFromData(disp, mainw, cursor_mask_bits, cursor_mask_width, cursor_mask_height);
X    cursor = XCreatePixmapCursor(disp, cursor_data, cursor_mask, &white, &black, cursor_data_x_hot, cursor_data_y_hot);
X    XDefineCursor(disp, mainw, cursor);
X    
X    inputgc = XCreateGC(disp, mainw, GCFunction | GCPlaneMask, &xgcv);
X
X    lifew = XCreateSimpleWindow(disp, mainw,
X		0, 0,width , (height - INPUTH), BORDERWIDTH,
X		fcolor, bcolor);
X    inputw = XCreateSimpleWindow(disp, mainw,
X		0, (height - INPUTH), width, INPUTH, BORDERWIDTH,
X		fcolor, bcolor);
X
X    winat.win_gravity = SouthGravity;
X    XChangeWindowAttributes(disp,inputw,CWWinGravity,&winat);
X    
X    XSelectInput(disp,mainw, ExposureMask | StructureNotifyMask);
X    XSelectInput(disp, inputw, KeyPressMask | ExposureMask);
X    XSelectInput(disp, lifew, KeyPressMask | ButtonPressMask | Button1MotionMask | Button3MotionMask | ExposureMask);
X
X    initcells();
X    numcomments=0;
X    settimeout(0);
X    xpos = ypos = STARTPOS;
X    dispcells=0;
X    scale = 1;
X    born = 8;
X    live = 12;
X    maxdead = 10;
X    generations = 0;
X    numboxes = 0;
X    numcells = 0;
X    width = hints.width;
X    height = hints.height;
X    inputlength = width/FONTWIDTH;
X    state = STOP;
X    fname[0]=NULL;
X    strcpy(loadirbuf,DIR);
X
X    /* the one actual comment :-). only accept one pattern since it is highly
X     *  unlikely that overlaying n patterns is what you want to do
X     */
X    gentab();
X    if (initpat != NULL)
X	do_loadfile(initpat);
X    
X    XMapWindow(disp, inputw);
X    XMapWindow(disp, lifew);
X    XMapWindow(disp, mainw);
X
X    XFlush(disp);
X    
X    for(;;) {
X	while(XCheckMaskEvent(disp, KeyPressMask | ButtonPressMask | Button1MotionMask | Button3MotionMask | ExposureMask | StructureNotifyMask,&event)){
X	    switch(event.type) {
X	      case KeyPress:
X		XLookupString(&event.xkey, keybuf, 16, &ks, &stat);
X		if (!DoKeySymIn(ks))
X		    DoKeyIn(keybuf);
X		break;
X	      case MotionNotify:
X		Motion();
X		break;
X	      case ButtonPress:
X		Button();
X		break;
X	      case ConfigureNotify:
X		DoResize();
X		break;
X	      case Expose:
X		DoExpose(ClassifyWin(event.xexpose.window));
X	      default:
X		break;
X	    }
X	}
X	
X	if ((state == RUN) | (state == HIDE)) {
X	    generate();
X	    redisplay();
X	} else {
X	    inputdelay.tv_sec = 0;
X	    inputdelay.tv_usec = 100000;
X	    (void) select(32,0,0,0,&inputdelay);
X	}
X
X	if (state== RUN){
X	    timeouttemp.tv_sec = timeout.tv_sec;
X	    timeouttemp.tv_usec = timeout.tv_usec;
X	    (void) select(32,0,0,0,&timeouttemp);
X	}
X    }
X}
X
END_OF_xlife-2.0/main.c
if test 6984 -ne `wc -c <xlife-2.0/main.c`; then
    echo shar: \"xlife-2.0/main.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f xlife-2.0/patterns/blockpusher3.life -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"xlife-2.0/patterns/blockpusher3.life\"
else
echo shar: Extracting \"xlife-2.0/patterns/blockpusher3.life\" \(9579 characters\)
sed "s/^X//" >xlife-2.0/patterns/blockpusher3.life <<'END_OF_xlife-2.0/patterns/blockpusher3.life'
X#R
X-67 -96
X-66 -96
X  3 -96
X  4 -96
X-67 -95
X-66 -95
X  3 -95
X  4 -95
X-53 -92
X-52 -92
X-11 -92
X-10 -92
X-67 -91
X-53 -91
X-10 -91
X  4 -91
X-68 -90
X-67 -90
X-66 -90
X-55 -90
X-53 -90
X-10 -90
X -8 -90
X  3 -90
X  4 -90
X  5 -90
X-69 -89
X-65 -89
X-55 -89
X-54 -89
X-40 -89
X-39 -89
X-24 -89
X-23 -89
X -9 -89
X -8 -89
X  2 -89
X  6 -89
X-70 -88
X-68 -88
X-67 -88
X-66 -88
X-64 -88
X-40 -88
X-39 -88
X-24 -88
X-23 -88
X  1 -88
X  3 -88
X  4 -88
X  5 -88
X  7 -88
X-69 -87
X-68 -87
X-67 -87
X-66 -87
X-65 -87
X  2 -87
X  3 -87
X  4 -87
X  5 -87
X  6 -87
X-39 -83
X-24 -83
X-64 -82
X-63 -82
X-62 -82
X-41 -82
X-40 -82
X-38 -82
X-37 -82
X-26 -82
X-25 -82
X-23 -82
X-22 -82
X -1 -82
X  0 -82
X  1 -82
X-62 -81
X -1 -81
X-63 -80
X-42 -80
X-36 -80
X-27 -80
X-21 -80
X  0 -80
X-42 -78
X-41 -78
X-39 -78
X-37 -78
X-36 -78
X-27 -78
X-26 -78
X-24 -78
X-22 -78
X-21 -78
X-37 -75
X-26 -75
X-40 -74
X-37 -74
X-26 -74
X-23 -74
X-66 -73
X-65 -73
X-64 -73
X-37 -73
X-26 -73
X  1 -73
X  2 -73
X  3 -73
X-67 -72
X-63 -72
X-41 -72
X-40 -72
X-23 -72
X-22 -72
X  0 -72
X  4 -72
X-68 -71
X-62 -71
X-45 -71
X-41 -71
X-22 -71
X-18 -71
X -1 -71
X  5 -71
X-68 -70
X-67 -70
X-65 -70
X-63 -70
X-62 -70
X-46 -70
X-45 -70
X-41 -70
X-39 -70
X-24 -70
X-22 -70
X-18 -70
X-17 -70
X -1 -70
X  0 -70
X  2 -70
X  4 -70
X  5 -70
X-46 -69
X-44 -69
X-40 -69
X-39 -69
X-24 -69
X-23 -69
X-19 -69
X-17 -69
X-65 -67
X  2 -67
X-66 -66
X-64 -66
X-40 -66
X-39 -66
X-35 -66
X-34 -66
X-29 -66
X-28 -66
X-24 -66
X-23 -66
X  1 -66
X  3 -66
X-66 -65
X-64 -65
X-40 -65
X-34 -65
X-29 -65
X-23 -65
X  1 -65
X  3 -65
X-66 -64
X-65 -64
X  2 -64
X  3 -64
X-67 -63
X-39 -63
X-35 -63
X-28 -63
X-24 -63
X  4 -63
X-68 -62
X-67 -62
X-66 -62
X-38 -62
X-37 -62
X-36 -62
X-27 -62
X-26 -62
X-25 -62
X  3 -62
X  4 -62
X  5 -62
X-69 -61
X-65 -61
X  2 -61
X  6 -61
X-70 -60
X-68 -60
X-67 -60
X-66 -60
X-64 -60
X  1 -60
X  3 -60
X  4 -60
X  5 -60
X  7 -60
X-69 -59
X-68 -59
X-67 -59
X-66 -59
X-65 -59
X-60 -59
X -3 -59
X  2 -59
X  3 -59
X  4 -59
X  5 -59
X  6 -59
X-59 -58
X-58 -58
X -5 -58
X -4 -58
X-60 -57
X-59 -57
X-54 -57
X-40 -57
X-39 -57
X-24 -57
X-23 -57
X -9 -57
X -4 -57
X -3 -57
X-55 -56
X-39 -56
X-24 -56
X -8 -56
X-55 -55
X-54 -55
X-53 -55
X-42 -55
X-41 -55
X-40 -55
X-23 -55
X-22 -55
X-21 -55
X-10 -55
X -9 -55
X -8 -55
X-42 -54
X-37 -54
X-36 -54
X-21 -54
X-16 -54
X-15 -54
X-36 -53
X-16 -53
X-36 -52
X-34 -52
X-23 -52
X-18 -52
X-16 -52
X-53 -51
X-51 -51
X-35 -51
X-34 -51
X-24 -51
X-23 -51
X-22 -51
X-21 -51
X-19 -51
X-18 -51
X-17 -51
X-12 -51
X-10 -51
X-52 -50
X-51 -50
X-25 -50
X-24 -50
X-22 -50
X-20 -50
X-19 -50
X-12 -50
X-11 -50
X-52 -49
X-26 -49
X-25 -49
X-24 -49
X-22 -49
X-19 -49
X-11 -49
X-67 -48
X-66 -48
X-25 -48
X-24 -48
X-22 -48
X-20 -48
X  3 -48
X  4 -48
X-67 -47
X-66 -47
X-24 -47
X-23 -47
X-22 -47
X-21 -47
X  3 -47
X  4 -47
X-23 -46
X-15 -41
X-14 -41
X-14 -40
X-14 -39
X-12 -39
X-11 -39
X -5 -39
X -4 -39
X-13 -38
X -5 -38
X -3 -38
X -9 -37
X -4 -37
X -3 -37
X -2 -37
X  6 -37
X  7 -37
X-11 -36
X -8 -36
X -3 -36
X -2 -36
X -1 -36
X  6 -36
X  7 -36
X-10 -35
X -9 -35
X -4 -35
X -3 -35
X -2 -35
X-48 -34
X-47 -34
X-46 -34
X -5 -34
X -3 -34
X-46 -33
X -5 -33
X -4 -33
X-47 -32
X-17 -31
X-15 -31
X 50 -31
X 51 -31
X-16 -30
X-15 -30
X 50 -30
X 51 -30
X-39 -29
X-38 -29
X-16 -29
X 42 -29
X 43 -29
X-38 -28
X-32 -28
X-31 -28
X 42 -28
X-41 -27
X-40 -27
X-39 -27
X-32 -27
X-31 -27
X 30 -27
X 32 -27
X 40 -27
X 42 -27
X-41 -26
X 28 -26
X 32 -26
X 40 -26
X 41 -26
X 50 -26
X-20 -25
X 21 -25
X 22 -25
X 28 -25
X 49 -25
X 50 -25
X 51 -25
X-19 -24
X-18 -24
X 21 -24
X 22 -24
X 27 -24
X 32 -24
X 48 -24
X 52 -24
X-20 -23
X-19 -23
X 28 -23
X 47 -23
X 49 -23
X 50 -23
X 51 -23
X 53 -23
X 28 -22
X 32 -22
X 48 -22
X 49 -22
X 50 -22
X 51 -22
X 52 -22
X-38 -21
X  4 -21
X 30 -21
X 32 -21
X-40 -20
X-39 -20
X-38 -20
X  2 -20
X  4 -20
X-79 -19
X-41 -19
X-28 -19
X  3 -19
X  4 -19
X-80 -18
X-79 -18
X-41 -18
X-40 -18
X-28 -18
X-27 -18
X-29 -17
X-27 -17
X 47 -16
X 46 -15
X 47 -15
X-18 -14
X 46 -14
X 48 -14
X-31 -13
X-30 -13
X-29 -13
X-18 -13
X-17 -13
X-16 -13
X 21 -13
X 22 -13
X-81 -12
X-80 -12
X-79 -12
X-50 -12
X-49 -12
X-31 -12
X-15 -12
X 21 -12
X 52 -12
X 53 -12
X-82 -11
X-81 -11
X-79 -11
X-78 -11
X-50 -11
X-49 -11
X-36 -11
X-35 -11
X-30 -11
X-16 -11
X-15 -11
X 19 -11
X 21 -11
X 52 -11
X-82 -10
X-81 -10
X-79 -10
X-78 -10
X-35 -10
X-34 -10
X 19 -10
X 20 -10
X 53 -10
X 54 -10
X 55 -10
X-82  -9
X-81  -9
X-80  -9
X-79  -9
X-78  -9
X-45  -9
X-44  -9
X-43  -9
X-42  -9
X-41  -9
X-36  -9
X 55  -9
X-83  -8
X-82  -8
X-78  -8
X-77  -8
X-46  -8
X-44  -8
X-43  -8
X-42  -8
X-40  -8
X 67  -8
X 68  -8
X-45  -7
X-41  -7
X 67  -7
X-44  -6
X-43  -6
X-42  -6
X-14  -6
X-13  -6
X-12  -6
X 54  -6
X 65  -6
X 67  -6
X 79  -6
X 80  -6
X-43  -5
X-15  -5
X-11  -5
X 53  -5
X 55  -5
X 65  -5
X 66  -5
X 79  -5
X 80  -5
X-78  -4
X-77  -4
X-76  -4
X-53  -4
X-47  -4
X-42  -4
X-41  -4
X 46  -4
X 47  -4
X 51  -4
X 52  -4
X 56  -4
X-76  -3
X-53  -3
X-47  -3
X-42  -3
X-40  -3
X-16  -3
X-10  -3
X 46  -3
X 47  -3
X 51  -3
X 52  -3
X 56  -3
X-77  -2
X-52  -2
X-48  -2
X-42  -2
X-40  -2
X-16  -2
X-15  -2
X-11  -2
X-10  -2
X 51  -2
X 52  -2
X 56  -2
X-51  -1
X-50  -1
X-49  -1
X-41  -1
X 13  -1
X 15  -1
X 53  -1
X 55  -1
X 14   0
X 15   0
X 54   0
X-55   1
X-54   1
X-22   1
X-20   1
X-16   1
X-15   1
X 14   1
X-56   2
X-55   2
X-44   2
X-43   2
X-41   2
X-39   2
X-38   2
X-22   2
X-21   2
X-17   2
X-15   2
X-54   3
X-44   3
X-38   3
X-21   3
X-17   3
X 78   3
X 79   3
X 80   3
X-43   4
X-39   4
X-17   4
X-16   4
X 71   4
X 77   4
X 81   4
X-42   5
X-41   5
X-40   5
X-13   5
X 10   5
X 70   5
X 71   5
X 76   5
X 82   5
X-79   6
X-78   6
X-77   6
X-16   6
X-13   6
X 11   6
X 12   6
X 70   6
X 72   6
X 76   6
X 77   6
X 79   6
X 81   6
X 82   6
X-80   7
X-76   7
X-13   7
X 10   7
X 11   7
X-81   8
X-75   8
X-80   9
X-76   9
X-52   9
X -2   9
X -1   9
X 79   9
X-79  10
X-78  10
X-77  10
X-53  10
X-52  10
X-51  10
X-18  10
X-17  10
X-15  10
X-13  10
X-12  10
X -1  10
X  0  10
X 78  10
X 80  10
X-79  11
X-78  11
X-77  11
X-53  11
X-52  11
X-51  11
X -2  11
X 78  11
X 80  11
X-39  12
X-18  12
X-12  12
X 79  12
X 80  12
X 81  12
X-68  13
X-67  13
X-66  13
X-55  13
X-54  13
X-50  13
X-49  13
X-38  13
X 81  13
X 82  13
X-66  14
X-55  14
X-54  14
X-50  14
X-49  14
X-40  14
X-39  14
X-38  14
X-17  14
X-16  14
X-14  14
X-13  14
X 81  14
X-67  15
X-15  15
X 82  15
X 83  15
X 84  15
X-81  16
X-80  16
X-79  16
X 18  16
X 19  16
X 20  16
X 84  16
X-82  17
X-81  17
X-79  17
X-78  17
X 20  17
X-82  18
X-81  18
X-79  18
X-78  18
X-18  18
X-17  18
X 19  18
X-82  19
X-81  19
X-80  19
X-79  19
X-78  19
X-45  19
X-44  19
X-43  19
X-42  19
X-41  19
X-17  19
X-83  20
X-82  20
X-78  20
X-77  20
X-46  20
X-44  20
X-43  20
X-42  20
X-40  20
X-20  20
X-19  20
X-18  20
X-45  21
X-41  21
X-31  21
X-30  21
X-20  21
X-53  22
X-52  22
X-44  22
X-43  22
X-42  22
X-31  22
X-29  22
X 39  22
X-68  23
X-67  23
X-53  23
X-43  23
X-29  23
X 39  23
X 41  23
X-68  24
X-66  24
X-29  24
X-28  24
X -7  24
X -6  24
X 39  24
X 40  24
X-66  25
X-41  25
X-40  25
X -7  25
X -6  25
X-66  26
X-65  26
X-41  26
X-52  27
X-50  27
X-40  27
X-39  27
X-38  27
X-54  28
X-50  28
X-38  28
X-80  29
X-79  29
X-62  29
X-54  29
X-79  30
X-63  30
X-62  30
X-61  30
X-60  30
X-55  30
X-50  30
X -8  30
X -7  30
X -6  30
X-64  31
X-63  31
X-61  31
X-59  31
X-54  31
X -8  31
X -7  31
X -6  31
X-75  32
X-74  32
X-65  32
X-64  32
X-63  32
X-61  32
X-58  32
X-54  32
X-50  32
X-43  32
X-42  32
X -9  32
X -5  32
X-75  33
X-74  33
X-64  33
X-63  33
X-61  33
X-59  33
X-52  33
X-50  33
X-43  33
X-41  33
X-63  34
X-62  34
X-61  34
X-60  34
X-41  34
X-10  34
X -9  34
X -5  34
X -4  34
X-62  35
X-41  35
X-40  35
X-51  36
X 52  36
X 53  36
X 54  36
X-53  37
X-51  37
X 54  37
X-52  38
X-51  38
X -4  38
X -3  38
X 53  38
X-32  39
X-31  39
X -5  39
X -3  39
X  1  39
X-31  40
X-30  40
X -3  40
X  0  40
X  1  40
X-32  41
X  0  41
X  2  41
X-60  42
X-62  43
X-61  43
X -3  43
X-61  44
X-60  44
X-78  45
X-78  46
X-77  46
X-76  46
X-75  47
X-38  47
X-76  48
X-75  48
X-40  48
X-39  48
X-38  48
X -6  48
X -5  48
X -4  48
X 57  48
X 58  48
X-41  49
X -7  49
X -3  49
X 32  49
X 33  49
X 57  49
X 58  49
X-73  50
X-72  50
X-41  50
X-40  50
X -8  50
X -2  50
X 32  50
X-73  51
X-71  51
X -8  51
X -2  51
X 21  51
X 22  51
X 30  51
X 32  51
X-73  52
X -5  52
X 21  52
X 24  52
X 30  52
X 31  52
X -7  53
X -3  53
X 11  53
X 15  53
X 16  53
X 17  53
X 25  53
X-47  54
X-46  54
X -4  54
X 10  54
X 11  54
X 12  54
X 13  54
X 14  54
X 18  54
X 25  54
X-59  55
X-57  55
X-46  55
X-45  55
X -8  55
X -5  55
X  9  55
X 10  55
X 12  55
X 13  55
X 17  55
X 25  55
X-64  56
X-63  56
X-59  56
X-56  56
X-47  56
X -8  56
X -2  56
X -1  56
X  8  56
X  9  56
X 10  56
X 12  56
X 13  56
X 17  56
X 21  56
X 24  56
X-71  57
X-70  57
X-67  57
X-66  57
X-64  57
X-63  57
X-62  57
X-56  57
X-55  57
X-43  57
X-42  57
X -7  57
X -2  57
X -1  57
X  9  57
X 10  57
X 12  57
X 13  57
X 14  57
X 15  57
X 21  57
X 22  57
X-72  58
X-70  58
X-66  58
X-62  58
X-58  58
X-54  58
X-53  58
X-44  58
X-42  58
X-10  58
X -9  58
X -8  58
X 10  58
X 11  58
X 12  58
X 13  58
X-82  59
X-81  59
X-73  59
X-64  59
X-62  59
X-56  59
X-55  59
X-45  59
X-38  59
X-37  59
X-34  59
X-33  59
X-10  59
X 11  59
X-82  60
X-81  60
X-73  60
X-70  60
X-63  60
X-62  60
X-59  60
X-56  60
X-45  60
X-42  60
X-39  60
X-36  60
X-34  60
X-33  60
X-73  61
X-59  61
X-57  61
X-45  61
X-38  61
X-37  61
X -3  61
X-72  62
X-70  62
X-44  62
X-42  62
X -6  62
X -5  62
X -4  62
X -3  62
X  2  62
X-71  63
X-70  63
X-43  63
X-42  63
X-15  63
X -7  63
X -6  63
X -5  63
X -4  63
X  2  63
X-16  64
X-14  64
X -7  64
X -4  64
X  6  64
X  7  64
X-17  65
X-13  65
X-12  65
X -7  65
X -6  65
X -5  65
X -4  65
X  6  65
X  7  65
X-28  66
X-27  66
X-17  66
X-13  66
X-12  66
X -6  66
X -5  66
X -4  66
X -3  66
X 22  66
X 23  66
X 24  66
X-28  67
X-27  67
X-17  67
X-13  67
X-12  67
X -3  67
X 24  67
X-16  68
X-14  68
X 23  68
X-15  69
X -6  70
X -4  70
X -5  71
X -4  71
X -5  72
X  2  77
X  3  78
X  4  78
X-31  79
X  2  79
X  3  79
X-31  80
X-30  80
X-29  80
X-28  81
X-29  82
X-28  82
X-21  83
X-25  84
X-22  84
X-26  85
X-25  85
X-22  85
X-21  85
X-20  85
X-26  86
X-24  86
X  0  88
X  1  88
X-12  89
X-11  89
X -1  89
X  1  89
X-19  90
X-17  90
X-16  90
X-12  90
X-11  90
X-10  90
X  1  90
X-23  91
X-20  91
X-16  91
X-10  91
X -9  91
X -7  91
X  5  91
X-24  92
X-23  92
X-20  92
X-15  92
X-10  92
X -7  92
X  4  92
X  5  92
X-35  93
X-34  93
X-25  93
X-24  93
X-18  93
X-17  93
X-16  93
X-15  93
X-10  93
X -9  93
X -7  93
X  3  93
X  4  93
X  9  93
X 10  93
X 13  93
X 14  93
X-35  94
X-34  94
X-26  94
X-25  94
X-24  94
X-16  94
X-12  94
X-11  94
X-10  94
X  2  94
X  3  94
X  4  94
X  9  94
X 10  94
X 13  94
X 14  94
X-25  95
X-24  95
X-12  95
X-11  95
X  3  95
X  4  95
X  9  95
X 10  95
X-24  96
X-23  96
X  4  96
X  5  96
X-23  97
X  5  97
END_OF_xlife-2.0/patterns/blockpusher3.life
if test 9579 -ne `wc -c <xlife-2.0/patterns/blockpusher3.life`; then
    echo shar: \"xlife-2.0/patterns/blockpusher3.life\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f xlife-2.0/patterns/oscillator7.life -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"xlife-2.0/patterns/oscillator7.life\"
else
echo shar: Extracting \"xlife-2.0/patterns/oscillator7.life\" \(76 characters\)
sed "s/^X//" >xlife-2.0/patterns/oscillator7.life <<'END_OF_xlife-2.0/patterns/oscillator7.life'
X.....****....****.
X**.......*.......*
X**..**...*..**...*
X....**..*...**..*.
END_OF_xlife-2.0/patterns/oscillator7.life
if test 76 -ne `wc -c <xlife-2.0/patterns/oscillator7.life`; then
    echo shar: \"xlife-2.0/patterns/oscillator7.life\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f xlife-2.0/patterns/rakecollision.life -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"xlife-2.0/patterns/rakecollision.life\"
else
echo shar: Extracting \"xlife-2.0/patterns/rakecollision.life\" \(8875 characters\)
sed "s/^X//" >xlife-2.0/patterns/rakecollision.life <<'END_OF_xlife-2.0/patterns/rakecollision.life'
X#A
X538 186
X539 186
X456 211
X456 209
X456 210
X456 195
X456 193
X456 194
X552 204
X552 205
X553 205
X552 206
X552 198
X552 199
X553 199
X552 200
X360 418
X361 418
X552 211
X553 212
X553 213
X552 214
X553 214
X552 190
X553 190
X553 191
X553 192
X552 193
X375 401
X374 402
X375 402
X192 312
X192 313
X193 313
X193 314
X184 304
X184 305
X185 305
X185 306
X176 296
X176 297
X177 297
X177 298
X168 288
X168 289
X169 289
X169 290
X160 280
X160 281
X161 281
X161 282
X152 272
X152 273
X153 273
X153 274
X144 264
X144 265
X145 265
X145 266
X136 256
X136 257
X137 257
X137 258
X128 248
X128 249
X129 249
X129 250
X120 240
X120 241
X121 241
X121 242
X112 232
X112 233
X113 233
X113 234
X104 224
X104 225
X105 225
X105 226
X96 216
X96 217
X97 217
X97 218
X88 208
X88 209
X89 209
X89 210
X80 200
X80 201
X81 201
X81 202
X72 192
X72 193
X73 193
X73 194
X64 184
X64 185
X65 185
X65 186
X56 176
X56 177
X57 177
X57 178
X48 168
X48 169
X49 169
X49 170
X40 160
X40 161
X41 161
X41 162
X32 152
X32 153
X33 153
X33 154
X24 144
X24 145
X25 145
X25 146
X16 136
X16 137
X17 137
X17 138
X8 128
X8 129
X9 129
X9 130
X0 120
X0 121
X1 121
X1 122
X-8 112
X-8 113
X-7 113
X-7 114
X-16 104
X-16 105
X-15 105
X-15 106
X-24 96
X-24 97
X-23 97
X-23 98
X-32 88
X-32 89
X-31 89
X-31 90
X-40 80
X-40 81
X-39 81
X-39 82
X-48 72
X-48 73
X-47 73
X-47 74
X-56 64
X-56 65
X-55 65
X-55 66
X-64 56
X-64 57
X-63 57
X-63 58
X-72 48
X-72 49
X-71 49
X-71 50
X-80 40
X-80 41
X-79 41
X-79 42
X-88 32
X-88 33
X-87 33
X-87 34
X-96 24
X-96 25
X-95 25
X-95 26
X-104 16
X-104 17
X-103 17
X-103 18
X-112 8
X-112 9
X-111 9
X-111 10
X-120 0
X-120 1
X-119 1
X-119 2
X-128 -8
X-128 -7
X-127 -7
X-127 -6
X-136 -16
X-136 -15
X-135 -15
X-135 -14
X-152 -32
X-152 -31
X-151 -31
X-151 -30
X510 219
X510 220
X511 220
X511 221
X462 235
X462 236
X463 236
X463 237
X414 251
X414 252
X415 252
X415 253
X366 267
X366 268
X367 268
X367 269
X318 283
X318 284
X319 284
X319 285
X270 299
X270 300
X271 300
X271 301
X222 315
X222 316
X223 316
X223 317
X246 307
X246 308
X247 308
X247 309
X294 291
X294 292
X295 292
X295 293
X342 275
X342 276
X343 276
X343 277
X390 259
X390 260
X391 260
X391 261
X438 243
X438 244
X439 244
X439 245
X486 227
X486 228
X487 228
X487 229
X385 445
X386 446
X386 447
X384 448
X385 448
X386 448
X-137 -33
X-138 -32
X-137 -32
X-138 -31
X-113 -25
X-114 -24
X-113 -24
X-114 -23
X-89 -17
X-90 -16
X-89 -16
X-90 -15
X-65 -9
X-66 -8
X-65 -8
X-66 -7
X-41 -1
X-42 0
X-41 0
X-42 1
X-17 7
X-18 8
X-17 8
X-18 9
X7 15
X6 16
X7 16
X6 17
X31 23
X30 24
X31 24
X30 25
X55 31
X54 32
X55 32
X54 33
X79 39
X78 40
X79 40
X78 41
X103 47
X102 48
X103 48
X102 49
X127 55
X126 56
X127 56
X126 57
X151 63
X150 64
X151 64
X150 65
X175 71
X174 72
X175 72
X174 73
X199 79
X198 80
X199 80
X198 81
X223 87
X222 88
X223 88
X222 89
X247 95
X246 96
X247 96
X246 97
X271 103
X270 104
X271 104
X270 105
X295 111
X294 112
X295 112
X294 113
X319 119
X318 120
X319 120
X318 121
X343 127
X342 128
X343 128
X342 129
X367 135
X366 136
X367 136
X366 137
X391 143
X390 144
X391 144
X390 145
X415 151
X414 152
X415 152
X414 153
X439 159
X438 160
X439 160
X438 161
X463 167
X462 168
X463 168
X462 169
X487 175
X486 176
X487 176
X486 177
X511 183
X510 184
X511 184
X510 185
X-144 -24
X-144 -23
X-143 -23
X-143 -22
X361 403
X362 403
X360 404
X362 404
X363 404
X360 405
X361 405
X362 405
X360 406
X361 406
X360 419
X361 419
X362 419
X360 420
X362 420
X363 420
X361 421
X362 421
X512 219
X464 235
X416 251
X368 267
X320 283
X272 299
X224 315
X248 307
X296 291
X344 275
X392 259
X440 243
X488 227
X-145 -22
X-137 -14
X-129 -6
X-121 2
X-113 10
X-105 18
X-97 26
X-89 34
X-81 42
X-73 50
X-65 58
X-57 66
X-49 74
X-41 82
X-33 90
X-25 98
X-17 106
X-9 114
X-1 122
X7 130
X15 138
X23 146
X31 154
X39 162
X47 170
X55 178
X63 186
X71 194
X79 202
X87 210
X95 218
X103 226
X111 234
X119 242
X127 250
X135 258
X143 266
X151 274
X159 282
X167 290
X175 298
X191 314
X183 306
X457 411
X458 411
X457 413
X458 413
X457 414
X459 414
X459 415
X457 416
X458 416
X459 416
X457 408
X458 408
X459 408
X459 409
X457 410
X459 410
X376 400
X376 401
X377 401
X378 401
X376 402
X377 402
X378 402
X458 422
X459 422
X456 423
X457 423
X459 423
X460 423
X456 424
X457 424
X458 424
X459 424
X456 425
X457 425
X458 425
X456 399
X457 399
X458 399
X456 400
X457 400
X458 400
X459 400
X456 401
X457 401
X459 401
X460 401
X458 402
X459 402
X498 194
X499 194
X512 185
X488 177
X464 169
X440 161
X416 153
X392 145
X368 137
X344 129
X320 121
X296 113
X272 105
X248 97
X224 89
X200 81
X176 73
X152 65
X128 57
X104 49
X80 41
X56 33
X32 25
X8 17
X-16 9
X-40 1
X-64 -7
X-88 -15
X-112 -23
X-136 -31
X372 419
X373 419
X374 419
X373 421
X374 421
X374 422
X375 422
X375 423
X399 415
X399 409
X410 391
X411 391
X410 392
X412 392
X410 393
X386 383
X387 383
X386 384
X388 384
X386 385
X362 375
X363 375
X362 376
X364 376
X362 377
X338 367
X339 367
X338 368
X340 368
X338 369
X314 359
X315 359
X314 360
X316 360
X314 361
X290 351
X291 351
X290 352
X292 352
X290 353
X266 343
X267 343
X266 344
X268 344
X266 345
X242 335
X243 335
X242 336
X244 336
X242 337
X218 327
X219 327
X218 328
X220 328
X218 329
X199 322
X419 420
X420 420
X421 420
X418 421
X419 421
X420 421
X421 421
X422 421
X418 422
X419 422
X420 422
X422 422
X423 422
X421 423
X422 423
X452 195
X453 195
X454 195
X455 195
X546 195
X548 195
X549 196
X549 197
X550 197
X551 197
X550 198
X550 199
X544 200
X551 200
X551 201
X551 203
X544 204
X551 204
X550 205
X550 206
X549 207
X550 207
X551 207
X549 208
X546 209
X548 209
X547 210
X550 210
X548 190
X549 190
X550 190
X551 190
X547 191
X547 194
X550 194
X547 213
X548 214
X549 214
X550 214
X551 214
X383 444
X381 445
X381 447
X382 448
X383 448
X410 431
X410 432
X412 432
X410 433
X411 433
X386 439
X386 440
X388 440
X386 441
X387 441
X358 419
X359 419
X358 420
X359 420
X455 405
X452 407
X453 407
X454 407
X452 408
X454 408
X452 409
X454 409
X453 410
X453 414
X452 415
X454 415
X452 416
X454 416
X452 417
X453 417
X454 417
X451 212
X455 212
X453 213
X448 398
X448 399
X449 399
X455 399
X448 400
X454 400
X455 400
X454 401
X455 401
X455 419
X454 423
X455 423
X448 424
X454 424
X455 424
X448 425
X449 425
X455 425
X448 426
X453 191
X451 192
X455 192
X451 194
X511 212
X511 214
X511 190
X511 192
X452 209
X453 209
X454 209
X455 209
X451 210
X537 203
X539 203
X541 203
X537 204
X542 204
X543 204
X540 205
X538 206
X539 206
X540 206
X538 207
X536 208
X536 196
X538 197
X538 198
X539 198
X540 198
X540 199
X537 200
X542 200
X543 200
X537 201
X539 201
X541 201
X537 214
X538 214
X539 214
X540 214
X541 214
X542 214
X536 215
X542 215
X542 216
X536 217
X541 217
X538 218
X539 218
X536 187
X541 187
X542 188
X536 189
X542 189
X537 190
X538 190
X539 190
X540 190
X541 190
X542 190
X200 320
X200 321
X201 321
X201 322
X-153 -30
X444 414
X443 415
X444 415
X440 405
X441 405
X443 409
X444 409
X444 410
X440 419
X441 419
X444 423
X445 423
X446 423
X447 423
X443 424
X444 424
X445 424
X446 424
X447 424
X443 425
X444 425
X445 425
X446 425
X447 426
X447 398
X443 399
X444 399
X445 399
X446 399
X443 400
X444 400
X445 400
X446 400
X447 400
X444 401
X445 401
X446 401
X447 401
X533 198
X535 198
X533 199
X534 199
X534 200
X535 200
X534 204
X535 204
X533 205
X534 205
X533 206
X535 206
X533 210
X535 210
X377 420
X379 420
X376 422
X377 422
X378 422
X376 423
X377 423
X378 423
X376 424
X533 192
X534 192
X532 193
X534 193
X535 193
X533 194
X535 194
X532 211
X534 211
X535 211
X533 212
X534 212
X436 407
X434 408
X436 408
X433 409
X434 410
X437 410
X438 410
X439 410
X435 411
X436 411
X437 411
X438 411
X439 411
X435 413
X436 413
X437 413
X438 413
X439 413
X434 414
X437 414
X438 414
X439 414
X433 415
X434 416
X436 416
X436 417
X434 399
X435 399
X434 400
X436 400
X434 401
X434 423
X434 424
X436 424
X434 425
X435 425
X525 204
X526 204
X525 205
X526 205
X525 199
X526 199
X525 200
X526 200
X427 414
X428 414
X427 415
X428 415
X427 409
X428 409
X427 410
X428 410
X516 197
X517 197
X515 198
X518 198
X515 199
X517 199
X516 200
X516 204
X515 205
X517 205
X515 206
X518 206
X516 207
X517 207
X513 189
X515 190
X516 191
X516 192
X512 193
X513 193
X514 193
X515 193
X516 193
X512 211
X513 211
X514 211
X515 211
X516 211
X516 212
X516 213
X515 214
X513 215
X418 403
X419 403
X420 403
X421 403
X422 403
X419 404
X420 404
X421 404
X418 406
X419 406
X417 407
X420 407
X416 408
X417 408
X419 408
X420 408
X417 409
X419 409
X418 410
X418 414
X417 415
X419 415
X416 416
X417 416
X419 416
X420 416
X417 417
X420 417
X418 418
X419 418
X421 401
X422 401
X418 402
X419 402
X420 402
X422 402
X423 402
X504 203
X505 203
X506 204
X509 204
X510 204
X509 205
X510 205
X504 206
X505 206
X506 206
X504 198
X505 198
X506 198
X509 199
X510 199
X506 200
X509 200
X510 200
X504 201
X505 201
X411 414
X412 414
X411 415
X412 415
X411 409
X412 409
X411 410
X412 410
X497 195
X498 195
X499 195
X500 195
X497 196
X498 196
X500 196
X501 196
X500 197
X496 198
X498 198
X499 198
X496 199
X497 199
X498 199
X499 199
X503 199
X497 200
X503 200
X497 204
X503 204
X496 205
X497 205
X498 205
X499 205
X503 205
X496 206
X498 206
X499 206
X500 207
X497 208
X498 208
X500 208
X501 208
X497 209
X498 209
X499 209
X500 209
X498 210
X499 210
X400 408
X401 408
X402 409
X400 410
X401 410
X400 414
X401 414
X402 415
X400 416
X401 416
X493 203
X494 203
X494 204
X489 205
X490 205
X493 205
X494 205
X488 206
X489 206
X491 206
X495 206
X489 207
X490 207
X491 207
X490 208
X490 196
X489 197
X490 197
X491 197
X488 198
X489 198
X491 198
X495 198
X489 199
X490 199
X493 199
X494 199
X494 200
X493 201
X494 201
X482 198
X483 198
X481 199
X484 199
X482 200
X483 200
X482 204
X483 204
X481 205
X484 205
X482 206
X483 206
X387 409
X388 409
X387 410
X388 410
X387 414
X388 414
X387 415
X388 415
X377 414
X378 414
X379 414
X380 414
X381 414
X376 415
X380 416
X380 417
X377 404
X379 404
X380 407
X380 408
X376 409
X377 410
X378 410
X379 410
X380 410
X381 410
X469 199
X470 199
X469 200
X470 200
X469 204
X470 204
X469 205
X470 205
X373 403
X374 403
X372 405
X373 405
X374 405
X372 406
X373 406
X375 406
X372 407
X373 407
X375 407
X372 417
X373 417
X375 417
X372 418
X373 418
X375 418
X358 404
X359 404
X358 405
X359 405
X359 406
X359 418
END_OF_xlife-2.0/patterns/rakecollision.life
if test 8875 -ne `wc -c <xlife-2.0/patterns/rakecollision.life`; then
    echo shar: \"xlife-2.0/patterns/rakecollision.life\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f xlife-2.0/tab.h -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"xlife-2.0/tab.h\"
else
echo shar: Extracting \"xlife-2.0/tab.h\" \(7406 characters\)
sed "s/^X//" >xlife-2.0/tab.h <<'END_OF_xlife-2.0/tab.h'
X/*
X * XLife Copyright 1989 Jon Bennett jb7m+ at andrew.cmu.edu, jcrb at cs.cmu.edu
X *
X * Permission to use, copy, modify, distribute, and sell this software and its
X * documentation for any purpose is hereby granted without fee, provided that
X * the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of the copyright holders not be used in
X * advertising or publicity pertaining to distribution of the software without
X * specific, written prior permission.  The copyright holders make no
X * representations about the suitability of this software for any purpose.  It
X * is provided "as is" without express or implied warranty.
X *
X * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
X * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
X * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
X * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
X * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
X * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
X * PERFORMANCE OF THIS SOFTWARE.
X */
X
Xint tab1[]={
X0x00000000,
X0x00000011,
X0x00000111,
X0x00000122,
X0x00001110,
X0x00001121,
X0x00001221,
X0x00001232,
X0x00011100,
X0x00011111,
X0x00011211,
X0x00011222,
X0x00012210,
X0x00012221,
X0x00012321,
X0x00012332,
X0x00111000,
X0x00111011,
X0x00111111,
X0x00111122,
X0x00112110,
X0x00112121,
X0x00112221,
X0x00112232,
X0x00122100,
X0x00122111,
X0x00122211,
X0x00122222,
X0x00123210,
X0x00123221,
X0x00123321,
X0x00123332,
X0x01110000,
X0x01110011,
X0x01110111,
X0x01110122,
X0x01111110,
X0x01111121,
X0x01111221,
X0x01111232,
X0x01121100,
X0x01121111,
X0x01121211,
X0x01121222,
X0x01122210,
X0x01122221,
X0x01122321,
X0x01122332,
X0x01221000,
X0x01221011,
X0x01221111,
X0x01221122,
X0x01222110,
X0x01222121,
X0x01222221,
X0x01222232,
X0x01232100,
X0x01232111,
X0x01232211,
X0x01232222,
X0x01233210,
X0x01233221,
X0x01233321,
X0x01233332,
X0x11100000,
X0x11100011,
X0x11100111,
X0x11100122,
X0x11101110,
X0x11101121,
X0x11101221,
X0x11101232,
X0x11111100,
X0x11111111,
X0x11111211,
X0x11111222,
X0x11112210,
X0x11112221,
X0x11112321,
X0x11112332,
X0x11211000,
X0x11211011,
X0x11211111,
X0x11211122,
X0x11212110,
X0x11212121,
X0x11212221,
X0x11212232,
X0x11222100,
X0x11222111,
X0x11222211,
X0x11222222,
X0x11223210,
X0x11223221,
X0x11223321,
X0x11223332,
X0x12210000,
X0x12210011,
X0x12210111,
X0x12210122,
X0x12211110,
X0x12211121,
X0x12211221,
X0x12211232,
X0x12221100,
X0x12221111,
X0x12221211,
X0x12221222,
X0x12222210,
X0x12222221,
X0x12222321,
X0x12222332,
X0x12321000,
X0x12321011,
X0x12321111,
X0x12321122,
X0x12322110,
X0x12322121,
X0x12322221,
X0x12322232,
X0x12332100,
X0x12332111,
X0x12332211,
X0x12332222,
X0x12333210,
X0x12333221,
X0x12333321,
X0x12333332,
X0x11000000,
X0x11000011,
X0x11000111,
X0x11000122,
X0x11001110,
X0x11001121,
X0x11001221,
X0x11001232,
X0x11011100,
X0x11011111,
X0x11011211,
X0x11011222,
X0x11012210,
X0x11012221,
X0x11012321,
X0x11012332,
X0x11111000,
X0x11111011,
X0x11111111,
X0x11111122,
X0x11112110,
X0x11112121,
X0x11112221,
X0x11112232,
X0x11122100,
X0x11122111,
X0x11122211,
X0x11122222,
X0x11123210,
X0x11123221,
X0x11123321,
X0x11123332,
X0x12110000,
X0x12110011,
X0x12110111,
X0x12110122,
X0x12111110,
X0x12111121,
X0x12111221,
X0x12111232,
X0x12121100,
X0x12121111,
X0x12121211,
X0x12121222,
X0x12122210,
X0x12122221,
X0x12122321,
X0x12122332,
X0x12221000,
X0x12221011,
X0x12221111,
X0x12221122,
X0x12222110,
X0x12222121,
X0x12222221,
X0x12222232,
X0x12232100,
X0x12232111,
X0x12232211,
X0x12232222,
X0x12233210,
X0x12233221,
X0x12233321,
X0x12233332,
X0x22100000,
X0x22100011,
X0x22100111,
X0x22100122,
X0x22101110,
X0x22101121,
X0x22101221,
X0x22101232,
X0x22111100,
X0x22111111,
X0x22111211,
X0x22111222,
X0x22112210,
X0x22112221,
X0x22112321,
X0x22112332,
X0x22211000,
X0x22211011,
X0x22211111,
X0x22211122,
X0x22212110,
X0x22212121,
X0x22212221,
X0x22212232,
X0x22222100,
X0x22222111,
X0x22222211,
X0x22222222,
X0x22223210,
X0x22223221,
X0x22223321,
X0x22223332,
X0x23210000,
X0x23210011,
X0x23210111,
X0x23210122,
X0x23211110,
X0x23211121,
X0x23211221,
X0x23211232,
X0x23221100,
X0x23221111,
X0x23221211,
X0x23221222,
X0x23222210,
X0x23222221,
X0x23222321,
X0x23222332,
X0x23321000,
X0x23321011,
X0x23321111,
X0x23321122,
X0x23322110,
X0x23322121,
X0x23322221,
X0x23322232,
X0x23332100,
X0x23332111,
X0x23332211,
X0x23332222,
X0x23333210,
X0x23333221,
X0x23333321,
X0x23333332
X};
X
Xint tab2[]={
X0x00000000,
X0x00000010,
X0x00000101,
X0x00000111,
X0x00001010,
X0x00001020,
X0x00001111,
X0x00001121,
X0x00010100,
X0x00010110,
X0x00010201,
X0x00010211,
X0x00011110,
X0x00011120,
X0x00011211,
X0x00011221,
X0x00101000,
X0x00101010,
X0x00101101,
X0x00101111,
X0x00102010,
X0x00102020,
X0x00102111,
X0x00102121,
X0x00111100,
X0x00111110,
X0x00111201,
X0x00111211,
X0x00112110,
X0x00112120,
X0x00112211,
X0x00112221,
X0x01010000,
X0x01010010,
X0x01010101,
X0x01010111,
X0x01011010,
X0x01011020,
X0x01011111,
X0x01011121,
X0x01020100,
X0x01020110,
X0x01020201,
X0x01020211,
X0x01021110,
X0x01021120,
X0x01021211,
X0x01021221,
X0x01111000,
X0x01111010,
X0x01111101,
X0x01111111,
X0x01112010,
X0x01112020,
X0x01112111,
X0x01112121,
X0x01121100,
X0x01121110,
X0x01121201,
X0x01121211,
X0x01122110,
X0x01122120,
X0x01122211,
X0x01122221,
X0x10100000,
X0x10100010,
X0x10100101,
X0x10100111,
X0x10101010,
X0x10101020,
X0x10101111,
X0x10101121,
X0x10110100,
X0x10110110,
X0x10110201,
X0x10110211,
X0x10111110,
X0x10111120,
X0x10111211,
X0x10111221,
X0x10201000,
X0x10201010,
X0x10201101,
X0x10201111,
X0x10202010,
X0x10202020,
X0x10202111,
X0x10202121,
X0x10211100,
X0x10211110,
X0x10211201,
X0x10211211,
X0x10212110,
X0x10212120,
X0x10212211,
X0x10212221,
X0x11110000,
X0x11110010,
X0x11110101,
X0x11110111,
X0x11111010,
X0x11111020,
X0x11111111,
X0x11111121,
X0x11120100,
X0x11120110,
X0x11120201,
X0x11120211,
X0x11121110,
X0x11121120,
X0x11121211,
X0x11121221,
X0x11211000,
X0x11211010,
X0x11211101,
X0x11211111,
X0x11212010,
X0x11212020,
X0x11212111,
X0x11212121,
X0x11221100,
X0x11221110,
X0x11221201,
X0x11221211,
X0x11222110,
X0x11222120,
X0x11222211,
X0x11222221,
X0x01000000,
X0x01000010,
X0x01000101,
X0x01000111,
X0x01001010,
X0x01001020,
X0x01001111,
X0x01001121,
X0x01010100,
X0x01010110,
X0x01010201,
X0x01010211,
X0x01011110,
X0x01011120,
X0x01011211,
X0x01011221,
X0x01101000,
X0x01101010,
X0x01101101,
X0x01101111,
X0x01102010,
X0x01102020,
X0x01102111,
X0x01102121,
X0x01111100,
X0x01111110,
X0x01111201,
X0x01111211,
X0x01112110,
X0x01112120,
X0x01112211,
X0x01112221,
X0x02010000,
X0x02010010,
X0x02010101,
X0x02010111,
X0x02011010,
X0x02011020,
X0x02011111,
X0x02011121,
X0x02020100,
X0x02020110,
X0x02020201,
X0x02020211,
X0x02021110,
X0x02021120,
X0x02021211,
X0x02021221,
X0x02111000,
X0x02111010,
X0x02111101,
X0x02111111,
X0x02112010,
X0x02112020,
X0x02112111,
X0x02112121,
X0x02121100,
X0x02121110,
X0x02121201,
X0x02121211,
X0x02122110,
X0x02122120,
X0x02122211,
X0x02122221,
X0x11100000,
X0x11100010,
X0x11100101,
X0x11100111,
X0x11101010,
X0x11101020,
X0x11101111,
X0x11101121,
X0x11110100,
X0x11110110,
X0x11110201,
X0x11110211,
X0x11111110,
X0x11111120,
X0x11111211,
X0x11111221,
X0x11201000,
X0x11201010,
X0x11201101,
X0x11201111,
X0x11202010,
X0x11202020,
X0x11202111,
X0x11202121,
X0x11211100,
X0x11211110,
X0x11211201,
X0x11211211,
X0x11212110,
X0x11212120,
X0x11212211,
X0x11212221,
X0x12110000,
X0x12110010,
X0x12110101,
X0x12110111,
X0x12111010,
X0x12111020,
X0x12111111,
X0x12111121,
X0x12120100,
X0x12120110,
X0x12120201,
X0x12120211,
X0x12121110,
X0x12121120,
X0x12121211,
X0x12121221,
X0x12211000,
X0x12211010,
X0x12211101,
X0x12211111,
X0x12212010,
X0x12212020,
X0x12212111,
X0x12212121,
X0x12221100,
X0x12221110,
X0x12221201,
X0x12221211,
X0x12222110,
X0x12222120,
X0x12222211,
X0x12222221
X};
X
END_OF_xlife-2.0/tab.h
if test 7406 -ne `wc -c <xlife-2.0/tab.h`; then
    echo shar: \"xlife-2.0/tab.h\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 4 \(of 8\).
cp /dev/null ark4isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 8 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0

dan
----------------------------------------------------
O'Reilly && Associates   argv at sun.com / argv at ora.com
Opinions expressed reflect those of the author only.



More information about the Comp.sources.x mailing list