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.