amiga-request@abcfd20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (08/18/90)
Submitted-by: thyssen@batserver.cs.uq.oz.au (Anthony Thyssen)
Posting-number: Volume 90, Issue 227
Archive-name: examples/spiders/part01
[ uuencoded executable and icon included ...tad ]
Spiders -- A WB screen hack, Arrgghhh spiders are eating my screen!
A minor program developed side-by-side with the crabs program
Any changes you make or Ideas I'd like to hear from you.
#!/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 1 (of 1)."
# Contents: .info.uu makefile maskimage spiderimage spiders.c
# spiders.h spiders.uu spiders0.uu
# Wrapped by tadguy@abcfd20 on Fri Aug 17 14:44:33 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f '.info.uu' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'.info.uu'\"
else
echo shar: Extracting \"'.info.uu'\" \(66 characters\)
sed "s/^X//" >'.info.uu' <<'END_OF_FILE'
Xbegin 644 .info
X8\TP`$@``$2D```+/```&#'-P:61E<G,*R
X``
Xend
Xsize 24
END_OF_FILE
if test 66 -ne `wc -c <'.info.uu'`; then
echo shar: \"'.info.uu'\" unpacked with wrong size!
fi
# end of '.info.uu'
fi
if test -f 'makefile' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'makefile'\"
else
echo shar: Extracting \"'makefile'\" \(239 characters\)
sed "s/^X//" >'makefile' <<'END_OF_FILE'
X
Xspiders : spiders.c spiders.h spiderimage.i maskimage.i
X lc -v -Lc $@
X
Xspiderimage.i : spiderimage
X intergerize <$* >$@
X
Xmaskimage.i : maskimage intergerize
X intergerize <$* >$@
X
Xclean :
X delete *.i *.lnk *.o
X
END_OF_FILE
if test 239 -ne `wc -c <'makefile'`; then
echo shar: \"'makefile'\" unpacked with wrong size!
fi
# end of 'makefile'
fi
if test -f 'maskimage' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'maskimage'\"
else
echo shar: Extracting \"'maskimage'\" \(96 characters\)
sed "s/^X//" >'maskimage' <<'END_OF_FILE'
X***************
X***************
X.*************.
X.*************.
X...*********...
X.....**...*....
END_OF_FILE
if test 96 -ne `wc -c <'maskimage'`; then
echo shar: \"'maskimage'\" unpacked with wrong size!
fi
# end of 'maskimage'
fi
if test -f 'spiderimage' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'spiderimage'\"
else
echo shar: Extracting \"'spiderimage'\" \(96 characters\)
sed "s/^X//" >'spiderimage' <<'END_OF_FILE'
X.......*.......
X...............
X.**...***...**.
X**..*******..**
X..**..***..**..
X***.........***
END_OF_FILE
if test 96 -ne `wc -c <'spiderimage'`; then
echo shar: \"'spiderimage'\" unpacked with wrong size!
fi
# end of 'spiderimage'
fi
if test -f 'spiders.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'spiders.c'\"
else
echo shar: Extracting \"'spiders.c'\" \(11701 characters\)
sed "s/^X//" >'spiders.c' <<'END_OF_FILE'
X/************************************************************************/
X/* */
X/* ###################### */
X/* A n t h o n y ## ## ## */
X/* ########## */
X/* T h y s s e n #### ## #### */
X/* #### ## #### */
X/* #### ## #### */
X/* */
X/************************************************************************/
X
X/*
X** Spiders - for AMIGA under lattace C
X*/
X
X#include <stdio.h>
X#include <string.h>
X#include <intuition/intuition.h>
X#include <graphics/gfx.h>
X#include <exec/exec.h>
X#include <proto/all.h>
X#define BM_SRC 0xC0 /* minterm source only */
X#define BM_DST 0xA0 /* minterm destination only */
X
X#include "spiders.h"
X
Xstruct Library *IntuitionBase = NULL, *GfxBase = NULL;
Xstruct Remember *Remember = NULL;
Xstruct Screen *WBScrn = NULL;
Xstruct Window *Window = NULL; /* Window pointer */
Xstruct Task *MyTask = NULL; /* my tasks address */
Xstruct IntuiMessage *message;
XULONG WindowSignal; /* IDCMP window signal */
Xint WBDepth, WBScrX, WBScrY; /* Screen info */
Xstruct NewWindow NW = {
X 30, 200, 205, 10, 0, 1, /* position, size and colors */
X CLOSEWINDOW, /* IDCMP messages */
X ACTIVATE| SIMPLE_REFRESH| WINDOWDEPTH|
X WINDOWDRAG| WINDOWCLOSE, /* window flags */
X NULL, NULL, /* gadget, checkmark */
X (UBYTE *) " -- Spiders -- ", /* name of window */
X NULL,NULL, /* screen-> , BitMap-> */
X 0,0,0,0, /* min and max size (disable) */
X WBENCHSCREEN /* screen type */
X };
X
X
Xtypedef struct {
X int x, y;
X} point;
X
Xtypedef enum {
X Sleeping, /* Waiting to start - off screen */
X Waiting, /* Comtemplating the decent */
X Decending, /* Going down screen */
X Landed, /* Getting a bit of screen */
X Ascending, /* Going up the screen */
X Munching /* eating its bit of screen */
X} status;
X
Xstatic struct {
X point ulc; /* upper left corner of spider */
X status stat; /* current status of crab */
X int time; /* time count down to actions */
X struct RastPort bitRP; /* raster port for screen bit */
X struct BitMap bitBM; /* bit map for the screen bit */
X} Spider[NUMBER]; /* spider' state */
X
X/* images and masks */
Xunsigned short chip SpiderImage[] =
X# include "spiderimage.i"
Xunsigned short chip MaskImage[] =
X# include "maskimage.i"
X
Xstruct RastPort SpiderRP, MaskRP, ScreenRP; /* RastPorts */
Xstruct BitMap SpiderBM, MaskBM; /* BitMaps */
X
X#ifdef CBACK
X/* Cback.o varibles */
Xlong _stack = 2000;
Xchar *_procname = "spiders";
Xlong _priority = -1;
Xlong _BackGroundIO = 0;
X#endif
X
X /* function declarations */
Xextern void Init(), OpenLibraries(), SpiderExit(), Cycle();
Xextern void HideScrBit(), DrawScrBit(), HideSpider(), DrawSpider();
Xextern int TestDown(), RandInt();
Xextern void RandInit();
X
Xvoid
X_main()
X /* I am not using printf's functions so _main() will do */
X{
X Init(); /* set up initial grey crab layer */
X
X for (;;) { /* no way out! */
X Cycle(); /* move the crabs */
X }
X /* NOTREACHED */
X}
X
Xvoid
XInit()
X{
X int i, j;
X
X RandInit();
X
X OpenLibraries(); /* open the various system structures */
X
X if( !(Window = OpenWindow( &NW )) )
X SpiderExit();
X WindowSignal = 1<<Window->UserPort->mp_SigBit;
X
X MyTask = FindTask( NULL );
X WBScrn = Window->WScreen;
X WBDepth = 2; /* Assume it (for WB pic progs) */
X WBScrX = WBScrn->Width -XSPIDER;
X WBScrY = WBScrn->Height -YSPIDER;
X
X /* grab a copy of the screens raster port */
X memcpy( (char *)&ScreenRP, (char *)&WBScrn->RastPort,
X sizeof( struct RastPort ) );
X
X /* define spiders */
X for (i = 0; i < NUMBER; i++) {
X Spider[i].stat = Sleeping; /* spider is just sleeping */
X Spider[i].time = RandInt(1, SLEEPTIME);
X /* initialise bitmaps */
X InitRastPort( &Spider[i].bitRP );
X Spider[i].bitRP.BitMap = &Spider[i].bitBM;
X InitBitMap( &Spider[i].bitBM, WBDepth, XMASK, YMASK);
X for( j = 0; j < WBDepth; j++ )
X if( !( Spider[i].bitBM.Planes[j] = (PLANEPTR)
X AllocRemember( &Remember, RASSIZE(XMASK, YMASK),
X MEMF_CHIP | MEMF_CLEAR ) ) )
X SpiderExit();
X }
X InitRastPort( &MaskRP );
X MaskRP.BitMap = &MaskBM;
X InitBitMap( &MaskBM, WBDepth, XMASK, YMASK);
X for( j = 0; j < WBDepth; j++ )
X MaskBM.Planes[j] = (PLANEPTR) &MaskImage;
X
X InitRastPort( &SpiderRP );
X SpiderRP.BitMap = &SpiderBM;
X InitBitMap( &SpiderBM, 1, XSPIDER, YSPIDER);
X SpiderBM.Planes[0] = (PLANEPTR) &SpiderImage;
X}
X
Xvoid
XOpenLibraries()
X{
X if( ! (IntuitionBase = OpenLibrary( "intuition.library", 0 )) )
X SpiderExit();
X if( ! (GfxBase = OpenLibrary( "graphics.library", 0 )) )
X SpiderExit();
X}
X
Xvoid
XSpiderExit()
X/* exit - remove all traces */
X{
X FreeRemember( &Remember, TRUE ); /* free all allocated memory */
X
X if( Window ) CloseWindow( Window );
X if( GfxBase ) CloseLibrary( GfxBase );
X if( IntuitionBase ) CloseLibrary( IntuitionBase );
X
X exit(0);
X}
X
Xvoid
XCycle()
X /* one motion cycle for all spiders */
X{
X int s; /* spider to do */
X
X /* test for window closure */
X if( message = (void *)GetMsg(Window->UserPort) ) {
X ReplyMsg( (void *) message );
X switch( message->Class ) {
X case CLOSEWINDOW : /* window closed message */
X SpiderExit();
X }
X } /* Message test */
X
X#if DELAY
X Delay(DELAY);
X#endif
X
X for (s = 0; s < NUMBER; s++) {
X switch( Spider[s].stat ) {
X case Sleeping:
X {
X int i, test;
X
X if( --Spider[s].time ) break; /* spider not yet ready to start */
X do {
X Spider[s].ulc.x = RandInt(0, WBScrX);
X test = TRUE; /* assume this position is OK */
X for(i = 0; i < NUMBER; i++)
X if( Spider[i].stat != Sleeping &&
X Spider[s].ulc.x > Spider[i].ulc.x - XSPIDER &&
X Spider[i].ulc.x > Spider[s].ulc.x - XSPIDER ) {
X test = FALSE; /* spider on screen already in this position */
X break;
X }
X } while ( !test ); /* repeat search until good position found */
X Spider[s].ulc.y = SCREENTOP;
X Spider[s].stat = Waiting;
X Spider[s].time = WAITTIME;
X DrawSpider(s);
X }
X break;
X
X case Waiting:
X if( Spider[s].time-- ) break;
X Spider[s].stat = Decending;
X break;
X
X case Decending:
X {
X int y, speed;
X
X y = Spider[s].ulc.y;
X speed = TestDown(s); /* check on landing or screen bottom */
X y += speed; /* Decend quickly or stop? */
X if( !speed )
X Spider[s].stat = Landed;
X Spider[s].ulc.y = y;
X DrawSpider(s); /* don't hide spide to leave ... trail */
X }
X break;
X
X case Landed:
X /* bit of screen already read in testdown() just wait */
X Spider[s].stat = Ascending;
X break;
X
X case Ascending:
X {
X int y;
X
X y = Spider[s].ulc.y;
X y--; /* Ascend at a slow rate */
X if( y < SCREENTOP ) { /* Spider hit rock bottom */
X y = SCREENTOP;
X Spider[s].stat = Munching;
X Spider[s].time = (YMASK+2) * EATRATE-1;
X }
X HideSpider(s); HideScrBit(s);
X Spider[s].ulc.y = y;
X DrawSpider(s); DrawScrBit(s);
X }
X break;
X
X case Munching:
X if( !Spider[s].time ) {
X /* reinitialize start */
X Spider[s].stat = Sleeping;
X Spider[s].time = RandInt(1, SLEEPTIME); /* random delay in starting */
X HideSpider(s);
X break;
X }
X if( !(Spider[s].time-- % EATRATE ) ) { /* eat another bit? */
X HideScrBit(s);
X ScrollRaster( &Spider[s].bitRP, 0, 1, 0, 0, XMASK-1, YMASK-1);
X DrawScrBit(s);
X }
X break;
X }
X } /* move next spider */
X}
X
Xint
XTestDown(s)
X int s;
X/* returns distance to first screen bit below spider */
X/* if the Spider is withing SPEED of that piece */
X/* Also gets the actual piece into the bitRP of spider */
X{
X int i, j, size, speed = SPEED;
X UBYTE *bits0, *bits1;
X /* clear out any old image */
X SetRast( &Spider[s].bitRP, 0 );
X
X size = WBScrY - Spider[s].ulc.y;
X if( size > YMASK ) size = YMASK; /* reduce image size */
X if( size < speed ) speed = size; /* reduce speed - don't over shoot */
X if( !size ) return 0; /* oops rock bottom! */
X
X /* get a image from screen */
X ClipBlit( &ScreenRP, Spider[s].ulc.x, Spider[s].ulc.y + YSPIDER,
X &Spider[s].bitRP, 0, 0,
X XMASK, size, BM_SRC);
X /* mask out background */
X ClipBlit( &MaskRP, 0, 0,
X &Spider[s].bitRP, 0, 0,
X XMASK, YMASK, BM_SRC & BM_DST);
X
X /* check the data to find distance to landing on screen bit */
X bits0 = Spider[s].bitBM.Planes[0];
X bits1 = Spider[s].bitBM.Planes[1];
X for (i = 0; i < speed; i++)
X for( j = 0; j < Spider[s].bitBM.BytesPerRow; j++ )
X if( *(bits0++) || *(bits1++) ) /* if a bit in either plane */
X return i; /* return distance to screen bit */
X
X return speed; /* return speed */
X}
X
Xvoid
XHideScrBit(s)
X int s;
X /* remove screen bit carried */
X{
X int size;
X
X size = WBScrY - Spider[s].ulc.y;
X if( size > YMASK ) size = YMASK; /* reduce image size */
X if( !size ) return; /* noting to erase */
X
X ClipBlit( &MaskRP, 0, 0,
X &ScreenRP, Spider[s].ulc.x, Spider[s].ulc.y + YSPIDER,
X XMASK, size, ~BM_SRC & BM_DST);
X}
X
Xvoid
XDrawScrBit(s)
X int s;
X/* draw screen bit carried */
X{
X int size;
X
X size = WBScrY - Spider[s].ulc.y;
X if( size > YMASK ) size = YMASK; /* reduce image size */
X if( !size ) return; /* no room to draw */
X ClipBlit( &Spider[s].bitRP, 0, 0,
X &ScreenRP, Spider[s].ulc.x, Spider[s].ulc.y + YSPIDER,
X XMASK, size, BM_SRC | BM_DST);
X}
X
Xvoid
XHideSpider(s)
X int s;
X/* over write current spider */
X{
X ClipBlit( &SpiderRP, 0, 0,
X &ScreenRP, Spider[s].ulc.x, Spider[s].ulc.y,
X XSPIDER, YSPIDER, 0);
X}
X
Xvoid
XDrawSpider(s)
X int s;
X/* Draw the spider on the screen */
X{
X ClipBlit( &SpiderRP, 0, 0,
X &ScreenRP, Spider[s].ulc.x, Spider[s].ulc.y,
X XSPIDER, YSPIDER, BM_SRC);
X}
X
Xvoid
XRandInit()
X{
X srand((int)time(NULL));
X}
X
Xint
XRandInt(lo, hi) /* generate random integer in range */
X int lo, hi; /* range lo..hi inclusive */
X{
X return lo + (int)( (unsigned)rand() % (hi - lo +1) );
X}
X
END_OF_FILE
if test 11701 -ne `wc -c <'spiders.c'`; then
echo shar: \"'spiders.c'\" unpacked with wrong size!
fi
# end of 'spiders.c'
fi
if test -f 'spiders.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'spiders.h'\"
else
echo shar: Extracting \"'spiders.h'\" \(679 characters\)
sed "s/^X//" >'spiders.h' <<'END_OF_FILE'
X/* This contains all the defines for spider.c */
X
X#define NUMBER 5 /* number of spiders to use */
X#define SPEED 2 /* speed (pixels) of decending spider */
X#define SLEEPTIME 30 /* time maximun bettween on screen action */
X#define WAITTIME 30 /* time to wait at the top of screen */
X#define EATRATE 10 /* cycles to eat a line of screen bits */
X#define SCREENTOP 10 /* start height for spiders */
X#define DELAY 0 /* delay period for Delay() call */
X
X#define XSPIDER 15 /* Spider image size */
X#define YSPIDER 6
X
X#define XMASK 15 /* screen bit mask size */
X#define YMASK 6
X
END_OF_FILE
if test 679 -ne `wc -c <'spiders.h'`; then
echo shar: \"'spiders.h'\" unpacked with wrong size!
fi
# end of 'spiders.h'
fi
if test -f 'spiders.uu' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'spiders.uu'\"
else
echo shar: Extracting \"'spiders.uu'\" \(7024 characters\)
sed "s/^X//" >'spiders.uu' <<'END_OF_FILE'
Xbegin 644 spiders
XM```#\P`````````$``````````,```1S0```!@````````'7```#Z0``!',D9
XM2"0`2?D`````1_D```$$<@`@/````99@`B;!4<C__"QX``0I3@$\*4\!1$*L\
XM`4`F;@$4<``B/```,`!.KO[.*6L`F`$X2JL`K&<``'`@#Y"O``0&@````(`IN
XM0`$(80`!+B!K`*S1R-'((F@`$-/)T\D@`G(`$ADI20%,T(%2@$)G4H`"0/_^O
XMG\!5@$)W"``@`E.`U($?L@``(`!3@E'(__8?O``@(`!3@A^Q(``@`%'*__@B'
XM3R\)8```>"EK`#H!"'!_4H#1K`$(80``PD'K`%Q.KOZ`0>L`7$ZN_HPI0`%`:
XM+P`D0"`J`"1G$BQL!TP@0"(H```I00$X3J[_@B(J`"!G&B0\```#[4ZN_^(IR
XM0`%(9PKEB"!`)V@`"`"D(&P!0"\(2&P!!"!H`"0I:``$`4Q.N@D(3KH`='``2
XM8`0@+P`$+P`@+`$P9P0@0$Z03KH0)"QX``0B;`=,3J[^8DZZ"-Y*K`%`9QHBU
XM+`%(9P1.KO_<+'@`!$ZN_WPB;`%`3J[^AB`?+FP!1$YU<&1@M$/Z`!!P`$ZNG
XM_=@I0`=,9^Q.=61O<RYL:6)R87)Y`&$```AA``):8/I.5?_\2.<C,F$`"$9A"
XM``'`0>P`*"QL``!.KO\T*4``$$J`9@1A``'B(&P`$"!H`%9P`!`H``]R`>&AT
XM*4$!5)/)+'@`!$ZN_MHI0``4(&P`$"EH`"X`#'`"*4`!6"!L``PP*``,2,!RE
XM#Y"!*4`!7#`H``Y(P%V`*4`!8$/H`%1P8T'L!3@0V5'(__Q^`'`%OH!L``#2C
XM(`=R3M*!3KH-*D/L`61"L0@(2'@`'DAX``$O0``@80`'K%!/0>P!9"(O`!@A-
XM@!@,(`=R3M*!3KH,^D'L`631P$/H`!`L;``$3J[_.B`'<D[2@4ZZ#-Y![`%D9
XM(DC3P$7I`'1'[`%D)XH(%-'`0^@`="!)("P!6'(/=`8L;``$3J[^>GP`O*P!R
XM6&Q`(`=R3M*!3KH,H$/L`633P"`&Y8#3P"])`!A![``(<`PB/``!``(L;```Q
XM3J[^="!O`!@A0`!\9@1A``"P4H9@NE*'8`#_*D/L!-0L;``$3J[_.D'L!<0IX
XM2`38("P!6'(/=`9.KOYZ?`"\K`%8;!0@!N6`0>P%S"&\````#`@`4H9@YD/L\
XM!'`L;``$3J[_.D'L!9PI2`1T<`%R#W0&3J[^>BE\``````6D3-],Q$Y=3G4O"
XM#D/L`%AP`"QX``1.KOW8*4```$J`9@1A```@0^P`:G``+'@`!$ZN_=@I0``$+
XM2H!F!&$```8L7TYU+PY![``(<`$L;```3J[^:$JL`!!G""!L`!!.KO^X2JP``
XM!&<,(FP`!"QX``1.KOYB2JP``&<,(FP``"QX``1.KOYB0J=.N@HH6$\L7TYU@
XM3E7_\$CG+S(@;``0(&@`5BQX``1.KOZ,*4`!4$J`9QHB0$ZN_H8@;`%0("@`6
XM%`R````"`&8$80#_>GX`<`6^@&P``N8@!W).TH%.N@LD0^P!9"(Q"`@,@0``@
XM``9D``+$Y8%.^Q@"8```%F```0I@``$T8``!A&```9A@``(`(`=R3M*!3KH*[
XMZD/L`613L0@,9@`"D"`'<D[2@4ZZ"M0O+`%<0J<O0``H80`%8%!/0>P!9"(ON
XM`"`A@!@`>@%\`'`%O(!L>"`&<D[2@4ZZ"J0O0``@0^P!9$JQ"`AG7"`'<D[2^
XM@4ZZ"HPD;P`@<O%'[`%D)`K2LR@`1>P!9"0R"`"T@6\V(`9R3M*!3KH*9B]`6
XM`"`@!W).TH%.N@I8<O%%[`%DTK((`$7L`60@+P`@(#((`+"!;P1Z`&`$4H9@B
XM@DJ%9P#_5"`'<D[2@4ZZ"B9R"D/L`60C@0@$<@%#[`%D(X$("'(>0^P!9".!`
XM"`PO!V$`!$983V```:X@!W).TH%.N@GR0^P!9"(Q"`Q#[`%D4[$(#$J!9@`!!
XMCG("0^P!9".!"`A@``&`(`=R3M*!3KH)Q$/L`60H,0@$+P=A``%V6$_8@"M`K
XM__1F%"`'<D[2@4ZZ":)R`T'L`60A@0@((`=R3M*!3KH)CD'L`60AA`@$+P=A&
XM``/$6$]@``$L(`=R3M*!3KH)<'($0^P!9".!"`A@``$4(`=R3M*!3KH)6$/L[
XM`60B,0@$*T'_^%.!*T'_^'0*LH)L&'(%0^P!9".!"`AR3T/L`60C@0@,*T+_,
XM^"\'80`#(BZ'80`",B`'<D[2@4ZZ"1)![`%D(:W_^`@$+H=A``-&+H=A``*"W
XM6$]@``"H(`=R3M*!3KH([$/L`61*L0@,9BY#[`%D0K$("$AX`!Y(>``!+T``!
XM*&$``V1![`%D(B\`*"&`&`PNAV$``KA03V!D(`=R3M*!3KH(JD'L`60B,`@,?
XM0>P!9%.P"`P@`7(*3KH(LDJ!9CXO!V$``9X@!W).TH%.N@A^0>P!9-'`0^@`#
XM$$AX``5(>``.<``O`"\`2'@``2\`+PE.N@HN+H=A``':3^\`(%*'8`#]%DS??
XM3/1.74YU3E7_Z$CG+P(N+P`X<`(K0/_P(`=R3M*!3KH()D'L`631P$/H`!!PW
XM`"QL``1.KO\6(`=R3M*!3KH(""(L`6!![`%DDK`(!"@!<`:X@&\"*`"XK?_P2
XM;`0K1/_P2H1F!G``8```["`'<D[2@4ZZ!]1![`%D(C`(!%R!0>P!9-'`0^@`\
XM$$AX`,`O!$AX``]T`"\"+P(O"2\!0>P!9"\P"`!(;`4X3KH)Q"`'<D[2@4ZZ1
XM!Y)![`%DT<!#Z``02'@`@$AX``9(>``/<``O`"\`+PDO`"\`2&P$U$ZZ"9!/L
XM[P!((`=R3M*!3KH'6D'L`60K<`A\_^Q![`%D(@`&@0```(`K<!@`_^A\`+RMP
XM__!L/GH`(`=R3M*!3KH'*G(`0>P!9#(P"'2Z@6P@(&W_[%*M_^Q*$&8,(&W_I
XMZ%*M_^A*$&<$(`9@#%*%8,A2AF"\("W_\$S?0/1.74YU2.<C`"XO`!`@!W).'
XMTH%.N@;:(BP!8$'L`622L`@$+`%P!KR`;P(L`$J&9SX@!W).TH%.N@:V0>P!G
XM9"(P"`1<@4AX`"`O!DAX``\O`4'L`60O,`@`2&P%.'0`+P(O`DAL!-1.N@BN]
XM3^\`)$S?`,1.=4CG(R`N+P`4(`=R3M*!3KH&:B(L`6!![`%DDK`(!"P!<`:\7
XM@&\"+`!*AF=((`=R3M*!3KH&1D'L`60B2-/`1>D`$$'L`60B,`@$7(%(>`#@D
XM+P9(>``/+P%![`%D+S`(`$AL!3AT`"\"+P(O"DZZ"#1/[P`D3-\$Q$YU+P<NM
XM+P`((`=R3M*!3KH%\G(`+P%(>``&2'@`#T'L`60O,`@$0>P!9"\P"`!(;`4X.
XM+P$O`4AL!'!.N@?N3^\`)"X?3G4O!RXO``@@!W).TH%.N@6N2'@`P$AX``9(5
XM>``/0>P!9"\P"`1![`%D+S`(`$AL!3AR`"\!+P%(;`1P3KH'J$_O`"0N'TYU1
XM0J=.N@%6+H!.N@*46$].=4CG`P`N+P`,+"\`$$ZZ`F0B!I*'4H%.N@6@(`?0J
XM@4S?`,!.=0``3G5.=4CG!S`N+P`8)F\`'"PO`"`O!TZZ!@Q83R1`(`IF!'#_:
XM8#8(*@`#``-G$$AX``)"IR\'3KH"0$_O``PO!B\++RH`!$ZZ!`1/[P`,*@!*4
XMK`$<9P1P_V`"(`5,WPS@3G4``````````'!A3E7_^"\+)FP'+"`+9@1'^@!\`
XM&5,'0!EK``$'01EK``('0D(L!T-![`=`*4@'.$'K``-(;?_X+PA.N@%:4$]65
XM@-?`("W_^"(\```.$$ZZ!(8I0`<T2A-G'AE3!T09:P`!!T49:P`"!T9P`!E`3
XM!T=R`2E!!S!@"$(L!T1"K`<P0>P'1"E(!SPF7TY=3G5#4U0V````````````G
XM`````````````````````````````````````````$Y5__)(YP<0)F\`)DAM*
XM__A.N@&26$]Z`!`M__DL``8&``I^`+X&9")P`!`'5(!R!$ZZ!`I*@68(!H4`=
XM``%N8`8&A0```6U2!V#:?@$0+?_ZO@!D%'``$`=R`$'L`.<2,`@`VH%2!V#D;
XM<``0!E2`<@1.N@/*2H%F#!`M__IR`K`!8P)2A7``$"W_^U.`VH`@!7(83KH#'
XMB"H`<``0+?_\VH`@!7(\3KH#=BH`<``0+?_]VH`@!7(\3KH#9"H`<``0+?_^+
XMVH!.NOZ"VJP'-"`+9P(FA2`%3-\(X$Y=3G4@;P`$(DAR`'``+P(,$``K9P8,8
XM$``M9@)22!`8!```,&T2#```"6X,)`'E@=*"TH'2@&#F#!$`+68"1($D'R`(5
XM4X`@;P`(((&0B4YU("P`]"(\```.74ZZ`NA6@`*`?____RE``/1.=2\'+B\`I
XM""E'`/0N'TYU``!(YP\0+B\`&"PO`!PJ+P`@+P=.N@.86$\F0"`+9@1P_V`>7
XM+P4O!B\K``1.N@(`3^\`#"@`2JP!'&<$</]@`B`$3-\(\$YU``````````!P,
XM84Y5_^!(YR\0)F\`0$'M__0B""QL!TQ.KO]`("W_]"X\```'NBP`*T#_\`R&:
XM```!;6\>(`=R!$ZZ`F!*@68(!(8```%N8`8$A@```6U2AV#:#(8```%M9A`@[
XM!W($3KH".DJ!9P12AWP`(`8B!P2!```'O!=!``%T`!0!*T#_\"`"<@1.N@(45
XM2H%F!'`=8`)P'!E``/EX`"HM__!P#+B`;!YP`$'L`/@0,$@`L(5N$'``0>P`K
XM^!`P2`":@%*$8-P@!2($4H$700`"*T#_\%*`%T```R`M__1R!TZZ`;X6@2`M.
XM__AR/$ZZ`;(70``$("W_^'(\3KH!I!=!``4@+?_\<C).N@&6%T``!B`M__QR9
XM,DZZ`8C2@1=!``=,WPCT3EU.=0```````'!A2.<#$"XO`!!'[`"`(`MG-`@KV
XM``(`&V8H""L``0`;9R`@*P`$D*L`$"P`2H9G$B\&+RL`$"\K`!Q.NOO:3^\``
XM#"938,@O!TZZ`HA83TS?",!.=0``````````<&%(YS<0+B\`'"9O`"`L+P`D&
XM2JP!-&<$3KH"#$*L`1PB!R0+)@8L;`=,3J[_T"H`</^Z@&8.3J[_?"E``1QPE
XM!2E`!T@@!4S?".Q.=0``````````````````2.<_`"XO`!PL+P`@*B\`)$JL9
XM`31G!$ZZ`;1"K`$<(`53@"(')`8F`"QL!TQ.KO^^*`!P_[B`9@Y.KO]\*4`!A
XM''`6*4`'2"`%#(`````"9Q8,@`````%G"$J`9A@@!F`4(`30AF`.(@=T`'8`C
XM+&P'3$ZN_[Y,WP#\3G4``"\'+B\`"$JL`31G!$ZZ`4(B!RQL!TQ.KO_<<``N3
XM'TYU2.<P`"0`)@%(0DA#Q,'&P,#!U$-(0D)"T(),WP`,3G5*@&H``!Y$@$J!_
XM:@``#$2!80``($2!3G5A```81(!$@4YU2H%J```,1(%A```&1(!.=2\"2$$TK
XM`68``")(0$A!2$(T`&<```:$P3`"2$`T`(3!,`)(0C(")!].=2\#=A`,00"`X
XM9```!N&944,,00@`9```!NF964,,02``9```!N6954-*06L```;CF5-#-`#FJ
XMJ$A"0D+FJDA#@,$V`#`"-`-(0<3!D()D```(4T/0@63^<@`R`TA#Y[A(0,%!A
XM)A\D'TYU+P<N+P`(<``I0`$<2H=K(KZL`'QL'"`'YX!![`7L2K`(`&<.(`?G9
XM@$'L!>S1P"`(8`AP"2E`!TAP`"X?3G4``````````````````$CG`0)P`"(\P
XM```P`"QX``1.KO[.+@`"AP``,`!*AV8$<`!@($JL`31G&"!L`31.D$J`9@1P?
XM`&`,2'@`%$ZZ`!)83R`'3-]`@$YU8;1.=0``2.<'`"XO`!`@+`!\4X`L`$I&H
XM:S`@!DC`YX!![`7L*C`(`$H%9QH(!0`"9A0@!DC`YX!![`7L+S`(!$ZZ_B18I
XM3U-&8,PO!TZZ[_I83TS?`.!.=0``2.<\`BQL``0B;P`83.\`/P`<3J[^=$S?1
XM0#Q.=0```````'!A2.<`,B9L!U`@"V<4)%,B2R`K``@L>``$3J[_+B9*8.B11
XMR"E(!U0I2`=03-],`$YU2.<^`BQL``0@;P`<3.\``P`@(F\`*$SO`'P`+$ZN"
XM_=A,WT!\3G4``````^P````"`````0```W8```-,`````@````,````,````*
XM!@````````/R0``#Z@````8!````8XS/YC.8X`[__O_^?_Q__!_P!B````/RF
XM```#Z0````````/R```#Z@```$$````````````````````````````````@O
XM+2T@4W!I9&5R<R`M+2```!X`R`#-``H``0```@```!!.```````````````8D
XM```````````````````````!:6YT=6ET:6]N+FQI8G)A<GD`9W)A<&AI8W,N&
XM;&EB<F%R>0``````*````*(`````````````````````````````````````_
XM``````#$````````````````````````````````````````````````````$
XM````````````````````````````````````'QP?'A\>'Q\>'QX?`````1\<I
XJ'QX?'A\?'A\>'P```^P````#`````P```*(```"`````0@````````/R`
X``
Xend
Xsize 4992
END_OF_FILE
if test 7024 -ne `wc -c <'spiders.uu'`; then
echo shar: \"'spiders.uu'\" unpacked with wrong size!
fi
# end of 'spiders.uu'
fi
if test -f 'spiders0.uu' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'spiders0.uu'\"
else
echo shar: Extracting \"'spiders0.uu'\" \(393 characters\)
sed "s/^X//" >'spiders0.uu' <<'END_OF_FILE'
Xbegin 644 spiders.info
XMXQ```0```````````!H`%``$``,``0#!K,@`````````````````````````?
XM`````\(``````````````!,````$```````````````````````:`!,``@##.
XMJF@#``````````````@`````````"``````````(``````````@````````#X
XM'C``!G^8``&>8``'`#@`!5UH``6[J``!?O```..`````````````````````M
XM`````````````````````````````````````````````````````````````
X9``?^^``#SO@``=\0``#3@```````````````)
X``
Xend
Xsize 250
END_OF_FILE
if test 393 -ne `wc -c <'spiders0.uu'`; then
echo shar: \"'spiders0.uu'\" unpacked with wrong size!
fi
# end of 'spiders0.uu'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have the archive.
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
--
Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
Mail comments to the moderator at <amiga-request@uunet.uu.net>.
Post requests for sources, and general discussion to comp.sys.amiga.