[net.micro.amiga] MY.LIB w/ Asyncronous IO addition

dillon@CORY.BERKELEY.EDU (Matt Dillon) (09/15/86)

	Is fully compatible with the previous version if you don't go
nitpicking into my file pointer structure.  And in anycase, I also put
together full documentation for it.

	If ya' want source, mail me.


			-Matt


#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
#	doc.txt
#	xalloc.h
#	xmisc.h
#	xstdio.h
#	my.lib.uue
# This archive created: Mon Sep 15 02:01:19 1986
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'doc.txt'" '(10866 characters)'
if test -f 'doc.txt'
then
	echo shar: "will not over-write existing file 'doc.txt'"
else
cat << \!Funky!Stuff! > 'doc.txt'


   V1.10 MY.LIB 32-bit-int Library CALL documentation

   The library can be broken up into four parts:

   (1) XSTDIO (stdio-like routines)
   (2) MISC   (misc. support functions)
   (3) MEMORY (memory allocation and support)
   (4) STRING (string handling)


XSTDIO

   The XSTDIO routines provide the programmer with buffered file I/O much
   like STDIO routines.  XSTDIO routines offer better control over your
   enviroment, but lack in error reporting for some functions.  The
   XSTDIO routines also have the ability to double-buffer writes.

   XSTDIO routines use a File Pointer (fi), but are NOT compatible
   with STDIO routines.

   fi = xopen(name, access, bufsize)

      FILE *fi;         returned file pointer
      char *name;       file name to open
      char *access;     access modes "r", "r+", "w", "w+"
      int  bufsize;     requested buffer size, in bytes

      "r"   -read           (fail if non-existant)
      "r+"  -read and write (fail if non-existant)
      "w"   -write          (create if non-existant, truncate if exists)
      "w+"  -append         (create if non-existant, seek to end if exists)

      The minimum buffer size is 1 (calling w/ 0 is actually 1).  It is
      suggested that you use buffer sizes of at least 512 bytes.  For
      example, if you xopen() with a bufsize of 1 and write out a 20K
      block, it will be written 1 byte at a time.

      NULL is returned on error.


   result = xasync(fi, operation)

      int result;       -result of operation (depends)
      FILE *fi;         -file pointer
      int operation;    -operation

      operation = -1    -returns boolean whether async. is on or off.
                  0     -turns async OFF
                  1     -turns async-writes ON
                  2     -reserved
                  3     -(internal) waits for async. operation to complete
                  4     -(internal) don't call with this operation.

      usually one calls xasync() with operation 0 or 1 to turn off or
      on asyncronous write mode.  When ON, another buffer of the same
      size is allocated to provide the double buffering asyncronous-writes
      need.  When on, any write operation which causes the buffer to
      flush to the disk will be done asyncronously (e.g. will return before
      disk operation is complete).  This is only useful if you are not
      writing to the disk at full speed.  Since the writes are only double-
      buffered, writing at full speed WILL cause momentary block conditions
      just like normal writing.  A good use for asyncronous writes is the
      capture function of a modem program.

      Future revisions of the library will also have an asyncronous READ
      capability.



fi = xattach(fh, bufsize)

      FILE *fi;         -return file pointer
      FileHandle fh;    -source AmigaDOS file handle
      int bufsize;      -buffering size (like xopen()).

      This routine will attempt to attach a file pointer to a file handle.
      If it succedes, any further I/O should be through XSTDIO functions
      and the file pointer rather than AmigaDOS functions through the
      File Handle.

      fi returns NULL if the buffer could not be allocated.


fh = xdetach(fi)

      FileHandle fh;    -file handle
      FILE *fi;         -file pointer

      This call deallocates the XSTDIO file pointer and returns a properly
      Seek'd file handle.  It ALWAYS works.


bool  = xsetbuf(fi, newbufsize)

      int bool;            -did the operatio work?
      FILE *fi;            -file pointer
      int newbufsize;      -new buffer size.

      This operation resizes a file pointer's buffer(s).  If it fails, the
      original buffer(s) are still in place.  Remember that if xasync() is
      on for that file pointer, the actual allocated memory is twice the
      requested buffer size.


chars =  xgets(fi, buf, n)

      int chars;     -# bytes in buffer INCLUDING the termination \0.
      FILE *fi;      -file handle to get data from.
      char *buf;     -buffer to place data in
      int n;         -maximum buffer size allowed.

      This routine will retrieve a string from the file pointer until it
      reaches the end of file or a newline '\n'.  The newline is REPLACED
      by a \0 before the function returns.

      The End Of File occurs when 'chars' is 0.


bool  = xputs(fi, buf);

      int bool;      -did the operation work?
      FILE *fi;      -file pointer
      char *buf;     -\0 terminated string

      xputs() writes the specified string to the specified file pointer.
      The \0 in the string is replaced with a newline '\n' in the output.


c  = xgets(fi);

      int c;         -returned char or -1
      FILE *fi;      -file pointer

      xgets() gets a single character from a file pointer.  -1 is returned
      on EOF or error.


bool  = xputc(fi, c);

      int bool;      -did it work?
      FILE *fi;      -file pointer
      char c;        -character to write

      output a single character to a file.  NOTE: Since files are buffered,
      you may not get an error until the buffer is flushed.


actual = xread(fi, buf, n);

      int actual;    -actual bytes read or 0
      FILE *fi;      -file pointer
      char *buf;     -buffer to read into
      int n;         -max # bytes to read

      0 is returned on EOF or error.  Attempt to read n bytes into a buffer.
      The actual number read is returned.


bool = xwrite(fi, buf, n);

      int bool;      -did the operation work?
      FILE *fi;      -file pointer
      char *buf;     -buffer
      int n;         -bytes to write

      Note that xwrite() returns a bool, not the actual number bytes
      written.


bool = xflush(fi);

      int bool;      -sucess?
      FILE *fi;      -file ptr;

      FILE is returned only if the buffer was modified AND the Write()
      failed.


newpos = xseek(fi, offset, which);

      int newpos;    -NEW position AFTER xseek.
      FILE *fi;      -file pointer
      int offset;    -offset relative to 'which'
      int which;     -AMIGA conventions  -1(start)  0(current)  1(end)


pos    = xteel(fi);

      int pos;
      FILE *fi;

      Self evident: returns the current seek position.  Note that this
      may not reflect the actual Seek() position of the underlying file
      handle.


xclose(fi);

      FILE *fi;

      close the file pointer AND the underlying file handle.  You may pass
      this routine a NULL without ill-effects.



ptr   = gets(buf)

      char *ptr;
      char *buf;

      gets() uses Input() to get the next line from the programs STDIN.
      NULL is returned on EOF or error.

      This is rather a slow function, since data is read one-byte-at-a-time.
      It works fine for user-input, but if your program expects STDIN to
      be a file, you may want to xattach() Input() to a file-pointer and
      use xgets().


bool = puts(str)

      int bool;
      char *str;

      Output the \0 terminated string to STDOUT, replacing the \0 with
      a newline (\n).  Unlike AMIGA.LIB's puts(), this one allows
      strings of any size.


---------------------------------------------------------------------------

result   = atoi(str)

      int result;    -resulting integer
      char *str;     -source string

      atoi() converts ascii-decimal integers into integers, stopping at
      the first illegal character.


#include <xmisc.h>
bool     = openlibs(libs_mask)

      int bool;         -if all the libraries were openned
      int libs_mask;    -mask of all libraries to open.

      openlibs() is an easy way of openning several run-time libraries at
      once.  If you have this call in your code, global definitions for
      all of the amiga's standard libraries will be automatically
      included.  You specify a mask of libraries to open (see xmisc.h for
      mask #defines).  If all the libraries could be openned, TRUE is
      returned.  If one or more could not be openned, FALSE is returned on
      the ones that were able to be openned are closed.


closelibs(libs_mask)

      int libs_mask;

      close the specified libraries.  Only open libraries will be closed.
      Thus, you can say:  closelibs(-1); to close all the libraries.


bool = wildcmp(wild, name)

      int bool;
      char *wild;
      char *name;

      wildcmp() returns TRUE of the wildcard-name matches a normal
      string-name:

         TRUE = wildcmp("abcd?f", "abcdef");
         TRUE = wildcmp("abc*x",  "abcd.e.f.x");
         FALSE= wildcmp("ab??",   "ab");

      The wildcard name may consist of any number of '*'s and '?'s.


check32()
      Checks to see if the program was compiled using 32-bit ints.  If
      not, gives an error message and exit()'s.


io_open()

io_close()


----------------------------------------------------------------------------
memory routines.  These are not quite automatic.  You must call the
routine 'free_memory()' just before you exit if you use 'malloc'.
The binary-zero/set/mov routines are written in assembly for speed.


ptr = malloc(bytes);

   char *ptr;        -pointer to buffer
   int bytes;        -#bytes to allocate

   NULL is returned if the allocation failed.  The pointer returned is on
   32-bit boundries (e.g. longword).


free(ptr)

   char *ptr;

   Free a malloc'd space.  Call only with pointer's you have
   malloc'd.


free_memory()

   Must be called before you exit to free ALL mallocs that have occured .


bzero(s, n)

   char *s;
   int n;

   Zero n bytes starting at s.


bset(s, n, v)

   char *s;    -start address
   int n;      -# bytes
   int v;      -fill value

   Set a memory area to 'v'.


bmov(s, d, n)

   char *s;    -source
   char *d;    -dest
   int n;      -# bytes

   Move from source to destination. bmov() will properly do a forward or
   reverse move depending on where s and d are relative to each other.


--------------------------------------------------------------------------
String routines.  Exactly as normal STDIO routines.


len   = strlen(str)

   int len;
   char *str;

   return the length of the string.


dest = strcpy(dest, source)

   char *source, *dest;

   string copy.  source and destination must be disjunct.


dest = strncpy(dest, source, maxchars)

   char *dest, *source;
   int maxchars;

   Copy no more than maxchars bytes.  This does NOT include the \0.


dest = strcat(dest, source)

   Place the source after the destination.  Source and where source will
   be placed on destination must be disjuct.


dest = strncat(dest, source, n)

   Same as strcat, but no more than n chars will be copied, \0 NOT included.


result = strcmp(source, dest)

   Compare the source with the destination.  Result is:

   -1    source < dest
   0     source = dest
   1     source > dest


result = strncmp(source, dest, n)

   Same as strcmp, but a maximum of n chars are compared.



!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'xalloc.h'" '(206 characters)'
if test -f 'xalloc.h'
then
	echo shar: "will not over-write existing file 'xalloc.h'"
else
cat << \!Funky!Stuff! > 'xalloc.h'

typedef struct _ALLC {
   struct _ALLC *next;
   struct _ALLC **prev;
   long         bytes;
   char         buf[4];
} ALLC;

#define HSIZE  12

extern ALLC *Allc_base;
extern char *malloc(), *calloc();


!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'xmisc.h'" '(507 characters)'
if test -f 'xmisc.h'
then
	echo shar: "will not over-write existing file 'xmisc.h'"
else
cat << \!Funky!Stuff! > 'xmisc.h'

#define GRAPHICS_LIB        0x0001L
#define INTUITION_LIB       0x0002L
#define EXPANSION_LIB       0x0004L
#define DISKFONT_LIB        0x0008L
#define TRANSLATOR_LIB      0x0010L
#define ICON_LIB            0x0020L
#define MATH_LIB            0x0040L
#define MATHTRANS_LIB       0x0080L
#define MATHIEEEDOUBBAS_LIB 0x0100L
#define MATHIEEESINGBAS_LIB 0x0200L
#define LAYERS_LIB          0x0400L
#define CLIST_LIB           0x0800L
#define POTGO_LIB           0x1000L
#define TIMER_LIB           0x2000L


!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'xstdio.h'" '(1136 characters)'
if test -f 'xstdio.h'
then
	echo shar: "will not over-write existing file 'xstdio.h'"
else
cat << \!Funky!Stuff! > 'xstdio.h'

typedef struct {
   long replyport;         /* non-zero = asyncronous I/O active      */
   int (*func)();          /* asyncronous dispatch function          */
   long fh;                /* file handle                            */
   long i1, i2, max;       /* buffer indexes (current, end, bufsize) */
   long pos, vpos;         /* real current, virtual current          */
   char stat;              /* modified?                              */
   unsigned char *buf;     /* za buffer                              */
   unsigned char *bufexg;  /* exchange buffer for async. IO          */
} FILE;

#define FIS_MODIFIED 0x01
#define FIS_APEND    0x02

#define ASYNC_OFF    0
#define ASYNC_WRITE  1
#define ASYNC_WAIT   3

#ifndef MODE_READWRITE
#define MODE_READWRITE  1004
#endif
#ifndef MODE_READONLY
#define MODE_READONLY   1005
#endif
#ifndef MODE_OLDFILE
#define MODE_OLDFILE    1005
#endif
#ifndef MODE_NEWFILE
#define MODE_NEWFILE    1006
#endif
#ifndef MEMF_CLEAR
#define MEMF_CLEAR   (1 << 16)
#endif
#ifndef NULL
#define NULL 0
#endif

extern FILE *xopen(), *xattach();
extern long xread(), xseek(), xtell(), xdetach();


!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'my.lib.uue'" '(16201 characters)'
if test -f 'my.lib.uue'
then
	echo shar: "will not over-write existing file 'my.lib.uue'"
else
cat << \!Funky!Stuff! > 'my.lib.uue'
begin 644 my.lib
M```#YP````-R86TZ>'-E96L```````/H`````71E>'0```/I````+4Y6__A(
MYP\$*FX`""XN``PL+@`0#(8````!;%`J!TJ&9@3:K0`<("T`#-"%D*T`'"@`
M;1BXK0`0;A(K1``,*T4`'"`%3-\@\$Y>3G4O#4ZY`````%B/</\O`"\%+RT`
M"$ZY`````$_O``Q@'B\-3KD`````6(]P`B\`+P<O+0`(3KD`````3^\`#'``
M+P`O`"\M``A.N0````!/[P`,*T``'"M``!@@+0`<3-\@\$Y>3G4``````^^!
M```#7WAF;'5S:%]W86ET`````@```'````!0@0```E]3965K`````````P``
M`)8```""````8@$```)?>'-E96L````````````````#\@```_(```/H````
M`61A=&$```/J`````````_(```/R```#Z`````)U9&%T80```````^L`````
M```#\@```_(```/G`````W)A;3IX8VQO<V4``````^@````!=&5X=````^D`
M```:3E8``$CG``0J;@`(N_P`````9TPO#4ZY`````%B/2JT`!&<,(&T`!$*G
M+PU.D%"/2JT`"&<,+RT`"$ZY`````%B/+RT`%"\M`").N0````!0CW`J+P`O
M#4ZY`````%"/3-\@`$Y>3G4```/O@0```E]X9FQU<V@``````0```!B!```"
M7T-L;W-E```````!````/($```)?1G)E94UE;0````(```!:````3`$```)?
M>&-L;W-E```````````````#\@```_(```/H`````61A=&$```/J````````
M`_(```/R```#Z`````)U9&%T80```````^L````````#\@```_(```/G````
M`W)A;3IX87-Y;F,``````^@````!=&5X=````^D```!]3E;__$CG`00J;@`(
M("X`#`2`_____VT``/`,@`````9L``#FY8!.^P@"8```%F```"1@``!<8```
MT&```*I@``"V2I56P$0`2(!(P$S?((!.7DYU2I5G+B\-80``MEB/+Q5.N0``
M``!8CR\M`!0O+0`F3KD`````4(]P`"J`*T``)BM```1P`4S?((!.7DYU2I5F
M2'``+P`O`$ZY`````%"/+@!*AV<J0J<O+0`43KD`````4(\K0``F2H!F%"\'
M3KD`````6(]P`$S?((!.7DYU*H=!^O\J*T@`!'`!3-\@@$Y>3G4O#6$H6(]P
M`4S?((!.7DYU+PUA``!H6(]P`4S?((!.7DYU<`!,WR"`3EY.=4Y6``!(YP`$
M*FX`"$J59S@0+0`@"````6<N+Q5.N0````!8CR\53KD`````6(]R1"\!+P!.
MN0````!0CQ`M`"`"`/_]&T``($S?(`!.7DYU3E;_\$CG`#PJ;@`(("T`".6`
M)$`O/``!``!P1"\`3KD`````4(\F0"!+T/P`%"`()T``"B=+`!0G50`8<%<G
M0``<($O0_``H*$@HJ@`D*6T`(@`$*6T`#``(+PUA`/]26(\O"R\J``A.N0``
M``!0CQ`M`"`````"&T``("!M`"(K;0`F`"(K2``F3-\\`$Y>3G4```/O@0``
M`U]$96QE=&50;W)T``````(```#"````9($```)?1G)E94UE;0````(```%(
M````=($```-?0W)E871E4&]R=``````!````G($```-?06QL;V--96T`````
M```"```!@@```+"!```#7U=A:710;W)T`````````0```3"!```"7T=E=$US
M9P`````!```!.H$```)?4'5T37-G``````$```',`0```E]X87-Y;F,`````
M``````````/R```#\@```^@````!9&%T80```^H````````#\@```_(```/H
M`````G5D871A```````#ZP````````/R```#\@```^<````"<F%M.F9R964`
M``/H`````71E>'0```/I````$4Y6__Q(YP`$2JX`"&<N(&X`")#\``P@""I`
M(&T`!")5((E*E6<((%4A;0`$``0O+0`(+PU.N0````!0CTS?(`!.7DYU```#
M[X$```)?1G)E94UE;0````$````V`0```E]F<F5E``````````````````/R
M```#\@```^@````!9&%T80```^H````````#\@```_(```/H`````G5D871A
M```````#ZP````````/R```#\@```^<````"<F%M.F=E=',```/H`````71E
M>'0```/I````&DY6__A(YP,$*FX`"'X`3KD`````+``@3=''<`$O`"\(+P9.
MN0````!/[P`,2H!G&E*'(`=3@"!-T<`0$`P```UG"`P```IFSDYQ2H=G#B`'
M4X`@3='`0A`@36`"D<@@"$S?(,!.7DYU```#[X$```)?26YP=70```````$`
M```0@0```E]296%D`````````0```"0!```"7V=E=',`````````````````
M`_(```/R```#Z`````%D871A```#Z@````````/R```#\@```^@````"=61A
M=&$```````/K`````````_(```/R```#YP````-R86TZ>'-E=&)U9@````/H
M`````71E>'0```/I````.$Y6__1(YP$\*FX`""XN``P,AP````%L`GX!+PU.
MN0````!8CT*G+P=.N0````!0CRA`E\LD;0`$M?P`````9PY"IR\'3KD`````
M4(\F0+G\`````&=8M?P`````9PBW_`````!G2+7\`````&<:<`,O`"\-3I)0
MCR\M`!0O+0`F3KD`````4(\O+0`4+RT`(DZY`````%"/*TP`(BM+`"8K1P`4
M<`%,WSR`3EY.=;G\`````&<,+P<O#$ZY`````%"/M_P`````9PPO!R\+3KD`
M````4(]P`$S?/(!.7DYU```#[X$```)?>&9L=7-H``````$````>@0```U]!
M;&QO8TUE;0````````(```!&````*H$```)?1G)E94UE;0````0```#0````
MO````)(```""`0```E]X<V5T8G5F``````````````/R```#\@```^@````!
M9&%T80```^H````````#\@```_(```/H`````G5D871A```````#ZP``````
M``/R```#\@```^<````````#Z0````8@;P`$(B\`#"`O``AG```($,%3@&;Z
M3G4```/O`0```E]B<V5T``````````````````/R```#YP````-R86TZ8VAE
M8VLS,@````/H`````71E>'0```/I````#$Y6__QP`%.`+4#__%*`9QQ(>0``
M``!.N0````!8CR\\``##4$ZY`````%B/3EY.=0```^P````!`````0```!(`
M```````#[X$```)?<'5T<P````````$````8@0```E]E>&ET`````````0``
M`"8!```"7V-H96-K,S(``````````````_(```/R```#Z`````%D871A```#
MZ@````E-55-4($)%($-/35!)3$5$(%=)5$@@,S(M8FET($E.5"=S(0````/R
M```#\@```^@````"=61A=&$```````/K`````````_(```/R```#YP````)R
M86TZ<'5T<P```^@````!=&5X=````^D````93E;_^$CG`P!.N0`````N`"\N
M``A.N0````!8CRP`+P8O+@`(+P=.N0````!/[P`,L(9F)'`!+P!(>0`````O
M!TZY`````$_O``Q*@&<*<`%,WP#`3EY.=7``3-\`P$Y>3G4``````^P````!
M`````0```#H````````#[X$```)?3W5T<'5T``````$````*@0```E]S=')L
M96X``````0```!:!```"7U=R:71E```````"````0@```"@!```"7W!U=',`
M`````````````````_(```/R```#Z`````%D871A```#Z@````$*```````#
M\@```_(```/H`````G5D871A```````#ZP````````/R```#\@```^<`````
M```#Z0````8@;P`$2AAF_)'O``21_`````$@"$YU``````/O`0```E]S=')L
M96X```````````````/R```#YP````-R86TZ<W1R;F-P>0````/H`````71E
M>'0```/I````#DY6__Q(YP$<*FX`""AN``PN+@`0)DU*%&<0(`=3ATJ`9P@:
ME%*,4HU@[$(54HT@"TS?.(!.7DYU```#[P$```)?<W1R;F-P>0``````````
M```#\@```_(```/H`````61A=&$```/J`````````_(```/R```#Z`````)U
M9&%T80```````^L````````#\@```_(```/G`````W)A;3IX<F5A9```````
M`^@````!=&5X=````^D````<3E;_^$CG!PPJ;@`(*&X`#"XN`!!Z`"`M`!"0
MK0`,+`"\AV\"+`=*AF<F(&T`(M'M``PO!B\,+PA.N0````!/[P`,V<:>AMJ&
MW:T`'-VM``Q*AV<0+PU.N0````!8CTJ`9P)@LB`%3-\PX$Y>3G4``````^^!
M```"7V)M;W8````````!````.H$```)?>&9I;&)U9@````$```!8`0```E]X
M<F5A9`````````````````/R```#\@```^@````!9&%T80```^H````````#
M\@```_(```/H`````G5D871A```````#ZP````````/R```#\@```^<`````
M```#Z0````P@;P`$(F\`""`O``QG```>L\AG```8;P``#M'`T\`3(%.`9OI.
M=1+84X!F^DYU``````/O`0```E]B;6]V``````````````````/R```#YP``
M``-R86TZ<W1R;F-M<`````/H`````71E>'0```/I````&4Y6``!(YP$,*FX`
M""AN``PN+@`02H=G-$H59S!*%&<L4X<0%1(4L`%D"G#_3-\P@$Y>3G40%1(4
ML`%C"G`!3-\P@$Y>3G52C5*,8,A*AV<($!42%+`!9LIP`$S?,(!.7DYU````
M``/O`0```E]S=')N8VUP``````````````/R```#\@```^@````!9&%T80``
M`^H````````#\@```_(```/H`````G5D871A```````#ZP````````/R```#
M\@```^<````#<F%M.GAD971A8V@````#Z`````%T97AT```#Z0```!-.5O_\
M2.<!!"IN``@O#4ZY`````%B/+BT`""`M`!R0K0`80J<O`"\'3KD`````3^\`
M#$*M``@O#4ZY`````%B/(`=,WR"`3EY.=0`````#[X$```)?>&9L=7-H````
M``$````0@0```E]3965K`````````0```"J!```"7WAC;&]S90`````!````
M.@$```)?>&1E=&%C:``````````````#\@```_(```/H`````61A=&$```/J
M`````````_(```/R```#Z`````)U9&%T80```````^L````````#\@```_(`
M``/G````!')A;3IF<F5E7VUE;6]R>0````/H`````71E>'0```/I````#DY6
M__Q(YP`$2KD`````9QX@>0`````J4"\H``@O"$ZY`````%"/(\T`````8-I,
MWR``3EY.=0`````#[`````,````"````*````!(````*`````````^^!```"
M7T9R965-96T````!````(`$```-?9G)E95]M96UO<GD``````````````_(`
M``/R```#Z`````%D871A```#Z@````````/R```#\@```^@````"=61A=&$`
M``````/K`````0```^\!```#7T%L;&-?8F%S90````````````````/R```#
M\@```^<````$<F%M.GAA<WEN8U]W86ET`````^@````!=&5X=````^D````5
M3E;__$CG``0J;@`(2I5G/!`M`!P(```!9S(O%4ZY`````%B/+Q5.N0````!8
MCW)$+P$O`"U`__Q.N0````!0CQ`M`!P"`/_]&T``'$S?(`!.7DYU```#[X$`
M``-?5V%I=%!O<G0````````!````'H$```)?1V5T37-G``````$````H@0``
M`E]&<F5E365M`````0```#H!```#7WAA<WEN8U]W86ET``````````````/R
M```#\@```^@````!9&%T80```^H````````#\@```_(```/H`````G5D871A
M```````#ZP````````/R```#\@```^<````#<F%M.FUA;&QO8P`````#Z```
M``%T97AT```#Z0```!E.5O_\2.<`!"`N``@&@`````Q"IR\`3KD`````4(\J
M0$JY`````&<*('D`````(4T`!"JY`````"M\```````$("X`"`:`````#"M`
M``@CS0`````@3=#\``P@"$S?(`!.7DYU```#[X$```-?06QL;V--96T`````
M```!````&($```-?06QL8U]B87-E```````%````4````#H````T````*@``
M`"(!```"7VUA;&QO8P```````````````_(```/R```#Z`````%D871A```#
MZ@````````/R```#\@```^@````"=61A=&$```````/K`````````_(```/R
M```#YP````````/I````!B!O``0B;P`((`A*&&;\4X@0V6;\3G4``````^\!
M```"7W-T<F-A=````````````````_(```/G`````G)A;3IA=&]I```#Z```
M``%T97AT```#Z0```!M.5O_X2.<C!"IN``A^`'P`$!4,```@9@12C6#T$!4,
M```M9@12C7P!$!4,```P;28,```Y;B`@!R('XX$D!^>"TH(4%4B"2,)2C=*"
M!($````P+@%@TDJ&9P8@!T2`8`(@!TS?(,1.7DYU``````/O`0```E]A=&]I
M``````````````````/R```#\@```^@````!9&%T80```^H````````#\@``
M`_(```/H`````G5D871A```````#ZP````````/R```#\@```^<````$<F%M
M.F-L;W-E;&EB<P```````^@````!=&5X=````^D````13E;__$CG``1+^0``
M``!*;@`*9R8(+@````MG$$J59PPO%4ZY`````%B/0I4P+@`*XDA8C3U```I@
MU$S?(`!.7DYU``````/O@0```E]'9GA"87-E`````0````J!```$7T-L;W-E
M3&EB<F%R>0````````$````D`0```U]C;&]S96QI8G,````````````````#
M\@```_(```/H`````61A=&$```/J`````````_(```/R```#Z`````)U9&%T
M80```````^L````````#\@```_(```/G`````W)A;3IW:6QD8VUP`````^@`
M```!=&5X=````^D```!#3E;_M$CG``PJ;@`(*&X`#$*N_[1*%&8&2A5G``#D
M$!5(@$C`#(`````_9P``E@R`````*F8``*`,K@````C_M&882'D`````3KD`
M````6(]P`$S?,`!.7DYU("[_M.>`+8T(N"V,"+Q2KO^T4HU@I%.N_[1*KO^T
M:Q8@+O^TYX`@=@B\$!!*`&8&4Z[_M&#D2J[_M&H*<`!,WS``3EY.=2`N_[3G
M@"!V"+A2B"I(('8(O%*(+8@(O"A(4J[_M&``_U1*%&8H2J[_M&:D<`!,WS``
M3EY.=1`4$A6P`6<02J[_M&:,<`!,WS``3EY.=4H49P)2C$H59P#_'%*-8`#_
M%G`!3-\P`$Y>3G4``````^P````!`````0```$0````````#[X$```)?<'5T
M<P````````$```!*`0```E]W:6QD8VUP``````````````/R```#\@```^@`
M```!9&%T80```^H````&5&]O(&UA;GD@;&5V96QS(&]F("<J)P`````#\@``
M`_(```/H`````G5D871A```````#ZP````````/R```#\@```^<````#<F%M
M.GAF:6QB=68````#Z`````%T97AT```#Z0```"1.5O_X2.<#!"IN``@L+0`(
M+PU.N0````!8CR`M`!@B+0`<LH!G$I*`0J<O`2\&3KD`````3^\`#"\M`!0O
M+0`B+P9.N0````!/[P`,+@!*AVXD("T`'"M``!AR_R\!+P`O!DZY`````$_O
M``QP`$S?(,!.7DYU(`<K0``0(BT`'-*`*T$`&'`!3-\@P$Y>3G4```/O@0``
M`U]X9FQU<VA?=V%I=`````$````4@0```E]3965K`````````@```&0````P
M@0```E]296%D`````````0```$0!```"7WAF:6QB=68``````````````_(`
M``/R```#Z`````%D871A```#Z@````````/R```#\@```^@````"=61A=&$`
M``````/K`````````_(```/R```#YP````-R86TZ>&%T=&%C:`````/H````
M`71E>'0```/I````)DY6__Q(YP`$#*X````!``QL!G`!+4``#"\\``$``'`J
M+P!.N0````!0CRI`N_P`````9U@@+@`,*T``%$*G+P!.N0````!0CRM``")*
M@&<N("X`""M```AP`"\`+P`O+0`(3KD`````3^\`#"M``!PK0``8(`U,WR``
M3EY.=7`J+P`O#4ZY`````%"/<`!,WR``3EY.=0`````#[X$```-?06QL;V--
M96T````````"````0@```"2!```"7U-E96L````````!````9($```)?1G)E
M94UE;0````$```"&`0```E]X871T86-H``````````````/R```#\@```^@`
M```!9&%T80```^H````````#\@```_(```/H`````G5D871A```````#ZP``
M``````/R```#\@```^<````#<F%M.F]P96YL:6)S```#Z`````%T97AT```#
MZ0```").5O^X2.<`#$OY`````$GY````ADIN``IG3`@N````"V<T+Q1(;O^X
M3KD`````4(](>0```,9(;O^X3KD`````4(]"ITAN_[A.N0````!0CRJ`2H!G
M&C`N``KB2%B-6(P]0``*8*YP`4S?,`!.7DYU</\O`$ZY`````%B/<`!,WS``
M3EY.=0`````#[`````(````!````,@```!`````!`````@````H````````#
M[X$```)?<W1R8W!Y``````$````J@0```E]S=')C870``````0```#R!```#
M7T]P96Y,:6)R87)Y`````0```$J!```#7V-L;W-E;&EB<P```````0```'8!
M```#7V]P96YL:6)S``````````````````/R```#\@```^@````!9&%T80``
M`^H````T9W)A<&AI8W,`:6YT=6ET:6]N`&5X<&%N<VEO;@!D:7-K9F]N=`!T
M<F%N<VQA=&]R`&EC;VX`;6%T:`!M871H=')A;G,`;6%T:&EE965D;W5B8F%S
M`&UA=&AI965E<VEN9V)A<P!L87EE<G,`8VQI<W0`<&]T9V\`=&EM97(`>#$U
M`'@Q-@``````````"0```!,````=````)@```#$````V````.P```$4```!5
M````90```&P```!R````>````'X```""+FQI8G)A<GD``````^P````0````
M`0```,(```"^````N@```+8```"R````K@```*H```"F````H@```)X```":
M````E@```)(```".````B@```(8````````#\@```_(```/H`````G5D871A
M```````#ZP```!````/O`0```E]'9GA"87-E``````$```1?26YT=6ET:6]N
M0F%S90``````!`$```1?17AP86YS:6]N0F%S90``````"`$```1?1&ES:V9O
M;G1"87-E````````#`$```1?5')A;G-L871O<D)A<V4`````$`$```-?26-O
M;D)A<V4````````4`0```U]-871H0F%S90```````!@!```$7TUA=&A4<F%N
M<T)A<V4``````!P!```%7TUA=&A)965E1&]U8D)A<T)A<V4````@`0``!5]-
M871H265E95-I;F="87-"87-E````)`$```-?3&%Y97)S0F%S90`````H`0``
M`U]#;&ES=$)A<V4``````"P!```#7U!O=&=O0F%S90``````,`$```-?5&EM
M97)"87-E```````T`0```U]X9FEL;&5R,34``````#@!```#7WAF:6QL97(Q
M-@``````/`````````/R```#\@```^<````#<F%M.GAF;'5S:``````#Z```
M``%T97AT```#Z0```#Y.5O_T2.<'!"IN``AZ`1`M`"`(````9P``E"`M`!R0
MK0`,+@`@+0`8L(=G+$JM``1G#B!M``1P`R\`+PU.D%"/(`>0K0`80J<O`"\M
M``A.N0````!/[P`,2I5G%"!M``1P!"\`+PU.D%"/+"T`#&`8+RT`#"\M`"(O
M+0`(3KD`````3^\`#"P`("T`#+"&9PAZ`$J&:@)\`"`'T(8K0``8$"T`(`(`
M__X;0``@<``K0``0*T``#"`%3-\@X$Y>3G5.5O_\2.<!`"\N``AA`/\R6(\N
M`"!N``A*J``$9PXB:``$<`,O`"\(3I%0CR`'3-\`@$Y>3G4``````^^!```"
M7U-E96L````````!````4($```)?5W)I=&4```````$```!^`0```E]X9FQU
M<V@```````$```-?>&9L=7-H7W=A:70```#``````````_(```/R```#Z```
M``%D871A```#Z@````````/R```#\@```^@````"=61A=&$```````/K````
M`````_(```/R```#YP````-R86TZ>&=E=&,```````/H`````71E>'0```/I
M````#$Y6__YP`2\`2&[__R\N``A.N0````!/[P`,2H!G"G``$"[__TY>3G5P
M_TY>3G4``````^^!```"7WAR96%D```````!````$@$```)?>&=E=&,`````
M```````````#\@```_(```/H`````61A=&$```/J`````````_(```/R```#
MZ`````)U9&%T80```````^L````````#\@```_(```/G`````W)A;3IX=&5L
M;````````^@````!=&5X=````^D````$3E8``"!N``@@*``<3EY.=0```^\!
M```"7WAT96QL`````````````````_(```/R```#Z`````%D871A```#Z@``
M``````/R```#\@```^@````"=61A=&$```````/K`````````_(```/R```#
MYP````-R86TZ>'!U=&,```````/H`````71E>'0```/I````"$Y6__YP`2\`
M2&[__R\N``A.N0````!/[P`,3EY.=0`````#[X$```)?>'=R:71E``````$`
M```2`0```E]X<'5T8P````````````````/R```#\@```^@````!9&%T80``
M`^H````````#\@```_(```/H`````G5D871A```````#ZP````````/R```#
M\@```^<````"<F%M.FEO``````/H`````71E>'0```/I````F$Y6_^R1R"\(
M+P@M2/_\+4C_^"U(__0M2/_P3KD`````4(\M0/_\2H!G``$\+SP``0`!+RX`
M'$ZY`````%"/+4#_]$J`9P`!($JN`!AG-'``+P`O`$ZY`````%"/+4#_^$J`
M9P`!`B\\``$``2\N`!Q.N0````!0CRU`__!*@&<``.9*K@`@9V1(>0`````O
M+@`(80`!E%"/2H!G#"!N__0@+@`@$4``3TAY````#B\N``AA``%T4(]*@&<,
M(&[_]"`N`"`10``U2'D````>+RX`"&$``510CTJ`9Q`@;O_T(6X`(``H(6X`
M)``D(&[_]"%N__P`#B\N`!`O""\N``PO+@`(3KD`````3^\`$"U`_^Q*@&90
M2JX`&&<F(&[_]")N__!P'Q+84<C__"!N__`A;O_X``XQ?``#`!PB;@`8(H@@
M;O_T,7P``@`<(FX`%"*(<``@;O_\$"@`#W(!X:$@`4Y>3G5*KO_\9PPO+O_\
M3KD`````6(]*KO_X9PPO+O_X3KD`````6(]*KO_T9Q`O+@`<+R[_]$ZY````
M`%"/2J[_\&<0+RX`'"\N__!.N0````!0CW``3EY.=4Y6``!*K@`(9S(O+@`(
M3KD`````6(\@;@`(2J@`#F<,+R@`#DZY`````%B/+RX`$"\N``A.N0````!0
MCTJN``QG)B!N``Q*J``.9PPO*``.3KD`````6(\O+@`0+RX`#$ZY`````%"/
M3EY.=4Y6``!(YP`,*FX`""AN``P0%1(4L`%F%H`!2@!F"G`!3-\P`$Y>3G52
MC5*,8.)P`$S?,`!.7DYU```#[`````,````!````R@```*H```"*````````
M`^^!```#7T-R96%T95!O<G0``````@```%8````<@0```U]!;&QO8TUE;0``
M``````(```!R````.($```-?3W!E;D1E=FEC90`````!```!!H$```-?1&5L
M971E4&]R=``````$```"#@```>(```&$```!<H$```)?1G)E94UE;0````0`
M``(>```!\@```;````&:@0```U]#;&]S941E=FEC90````$```',`0```E]I
M;U]O<&5N``````$```-?:6]?8VQO<V4```````&\`0```E]S8VUP```````"
M*`````````/R```#\@```^@````!9&%T80```^H````,<V5R:6%L+F1E=FEC
M90!P87)A;&QE;"YD979I8V4`8V]N<V]L92YD979I8V4````````#\@```_(`
M``/H`````G5D871A```````#ZP````````/R```#\@```^<````````#Z0``
M``4@;P`$(F\`"!#99OP@+P`$3G4``````^\!```"7W-T<F-P>0``````````
M`````_(```/G`````W)A;3IX9V5T<P```````^@````!=&5X=````^D````>
M3E;__$CG`PPJ;@`(*&X`#"XN`!!3AWP`O(=L2B`M``RPK0`09AHO#4ZY````
M`%B/2H!F#$(4<`!,WS#`3EY.=2!,T<8@+0`,4JT`#")M`"+3P!`1$(!2K0`<
M$!`,```*9P12AF"R($S1QD(0(`92@$S?,,!.7DYU```#[X$```)?>&9I;&)U
M9@````$````J`0```E]X9V5T<P````````````````/R```#\@```^@````!
M9&%T80```^H````````#\@```_(```/H`````G5D871A```````#ZP``````
M``/R```#\@```^<````#<F%M.GAW<FET90`````#Z`````%T97AT```#Z0``
M`"1.5O_\2.<##"IN``@H;@`,+BX`$"`M`!20K0`,L(=M`B`'+``@;0`BT>T`
M#"\&+P@O#$ZY`````$_O``R>AMG&W:T`'"`&(BT`#-"!*T``#"(M`!"R@&P$
M*T``$!`M`"`````!&T``($J'9QHO#4ZY`````%B/+`!*AF:8<`!,WS#`3EY.
M=7`!3-\PP$Y>3G4```/O@0```E]B;6]V`````````0```#2!```"7WAF;'5S
M:``````!````<`$```)?>'=R:71E```````````````#\@```_(```/H````
M`61A=&$```/J`````````_(```/R```#Z`````)U9&%T80```````^L`````
M```#\@```_(```/G`````````^D````%(&\`!"`O``AG```(0AA3@&;Z3G4`
M``/O`0```E]B>F5R;P````````````````/R```#YP````-R86TZ>&]P96X`
M``````/H`````71E>'0```/I````2$Y6__1(YP,<*FX`""AN``Q\``RN````
M`0`0;`9P`2U``!`O/``!``!P*B\`3KD`````4(\F0+?\`````&<``-80%`P`
M`')F%BX\```#[1`L``$,```K9@8N/````^T0%`P``'=F."X\```#[A`L``$,
M```K9B@O/````^TO#4ZY`````%"/+`!*AF<2<`$O`$*G+P9.N0````!/[P`,
M2H9F#B\'+PU.N0````!0CRP`2H9G2"=&``@@+@`0)T``%$*G+P!.N0````!0
MCR=``")*@&<<<``O`"\`+P9.N0````!/[P`,)T``'"=``!A@)"\&3KD`````
M6(].<7`J+P`O"TZY`````%"/<`!,WSC`3EY.=2`+3-\XP$Y>3G4``````^^!
M```#7T%L;&]C365M`````````@```,8````N@0```E]/<&5N`````````@``
M`*@```"`@0```E]3965K`````````@```-X```"6@0```E]#;&]S90``````
M`0```/2!```"7T9R965-96T````!```!!`$```)?>&]P96X`````````````
M```#\@```_(```/H`````61A=&$```/J`````````_(```/R```#Z`````)U
M9&%T80```````^L````````#\@```_(```/G`````W)A;3IX<'5T<P``````
M`^@````!=&5X=````^D````43E8``"\N``Q.N0````!8CR\`+RX`#"\N``A.
MN0````!/[P`,2H!G(G`!+P!(>0`````O+@`(3KD`````3^\`#$J`9P9P`4Y>
M3G5P`$Y>3G4```/L`````0````$````N`````````^^!```"7W-T<FQE;@``
M```!````"H$```)?>'=R:71E``````(````X````'`$```)?>'!U=',`````
M```````````#\@```_(```/H`````61A=&$```/J`````0H```````/R```#
M\@```^@````"=61A=&$```````/K`````````_(```/R```#YP````-R86TZ
M<W1R;F-A=`````/H`````71E>'0```/I````$$Y6__Q(YP$<*FX`""AN``PN
M+@`0)DU*%6<$4HU@^$H49Q`@!U.'2H!G"!J44HQ2C6#L0A52C2`+3-\X@$Y>
M3G4```/O`0```E]S=')N8V%T``````````````/R```#\@```^@````!9&%T
M80```^H````````#\@```_(```/H`````G5D871A```````#ZP````````/R
M```#\@```^<````#<F%M.G-T<F-M<``````#Z`````%T97AT```#Z0```!5.
M5@``2.<`#"IN``@H;@`,2A5G+DH49RH0%1(4L`%D"G#_3-\P`$Y>3G40%1(4
ML`%C"G`!3-\P`$Y>3G52C5*,8,X0%1(4L`%FSG``3-\P`$Y>3G4```/O`0``
M`E]S=')C;7````````````````/R```#\@```^@````!9&%T80```^H`````
H```#\@```_(```/H`````G5D871A```````#ZP````````/R```#\NH`
`
end
!Funky!Stuff!
fi  # end of overwriting check
exit 0
#	End of shell archive