[comp.sources.amiga] v90i227: spiders - arachnids amble about your amiga, Part01/01

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.