mrr@amanpt1.zone1.com (Mark Rinfret) (05/31/88)
What follows is a shar of a program that appeared in comp.sources.amiga
recently. I made a few changes, emailed it back to the author (Svante
Gellerstam) and he, in turn, added some improvements. We both agreed that
the modified program should be re-released. It's small, so you're getting
it here.
Mark
--------------------------------------------------------------------------
# This is a shell archive.
# Remove everything above and including the cut line.
# Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: Shell Archiver
# Run the following text with /bin/sh to create:
# ReadMe
# fnams.man
# Makefile
# make.lat
# fnams.pragmas
# fnams.c
# fnams.uu
# This archive created: Wed Oct 21 15:18:19 1987
cat << \SHAR_EOF > ReadMe
This archive should contain:
fnams - executable.
fnams.c - C-source for the Amiga.
fnams.man - Documentation pages for fnams.
fnams.pragmas - #pragma def's for Lattice (4.0).
make.lat - Compile script for Lattice.
Makefile - Aztec Makefile.
ReadMe - This file.
/svante
WayBack - Svante Gellerstam (d87sg@efd.lth.se)
Idea & initial program conceived.
05/21/88 - Mark Rinfret (mrr@amanpt1)
This program was, shall we say, a little "incomplete" in its
original form. I have added some error checking and other changes.
This program will now compile under Aztec C (V3.6a was used). I
liked the author's idea for a raw pathname generator (vs. "List
QUICK", which outputs trailing blanks) so I spent a little time
fixing this up to suit my tastes. Actually, the code leading into
the search loop could be rewritten, but I didn't want to spend too
much time on this. It works.
05/22/88 - Svante Gellerstam (d87sg@efd.lth.se)
I received Mark's fixes to fnams. He really fixed a lot of
things up making the program much safer to use. I thought it was a
shame though that there was a LIMIT of how deep the nesting of
directories could be. So I added doubly linked lists to hold
directory info. Now the only thing limiting depth is available
memory. The casual user should however note that the program migth
cause some fragmentation if multitasked with other heavily
allocating programs.
Changed the man pages to reflect changes made.
05/30/88 - Mark Rinfret (mrr@amanpt1)
Tested the source under Aztec for compatibility. As a result, the
#pragma definitions were placed in a separate file.
SHAR_EOF
cat << \SHAR_EOF > fnams.man
NAME
FNAMS - a filter program for the ZOO archiver. Amiga
version.
SYNOPSIS
FNAMS <volume>
FNAMS <unit>
FNAMS ""
FNAMS
DESCRIPTION
FNAMS will produce a listing on stdout of all files under
the given directory/unit with their full pathnames. Thus
FNAMS is a complement to the ZOO archiver. The first
objective is to provide a easy way to archive entire
directory structures.
The intended use is as follows:
First produce a listing of the desired directory using
FNAMS:
FNAMS > <tempfile> <dirpath>
Then use <tempfile> together with the ZOO option I:
ZOO < <tempfile> aI <archivename>
ZOO will then put into <archivename> all files described in
<tempfile>.
EXAMPLES
FNAMS may generate tree listings from a directory, a volume
or the current directory.
To generate a listing of a directory you call FNAMS with
the appropriate directory name. For example if you want to
make a listing of all files in the directory 'texts' one
might type as follows:
FNAMS texts
FNAMS texts/
To generate a listing of an entire volume is about the
same:
FNAMS df0:
The current directory is perhaps not as intuitive:
FNAMS ""
For a brief reminder of syntax:
FNAMS
FILES
In the event of I/O redirection the file <tempfile> will be
created. See description.
SEE ALSO
ZOO documentation.
BUGS
None known... If you should happen to find these unknown
bugs, drop me a letter at below adress.
Oh, yes, one thing: all output goes through stdout
including error messages. This could create a problem if
redirection is used.
DIAGNOSTICS
The original version of this program produced no
diagnostics and also quietly skipped over error conditions
which should have been fatal. Several error messages are
now output for failures to allocate memory, obtain locks on
files or to examine file info. All error messages have a
triple exclamation point prefix (!!!).
THANKS TO
Lattice for including those hints on how to squeeze
filesize to a minimum.
Rahul Dhesi for writing ZOO in the first place.
One very large and heartfelt thanks must also go to Mark
Rinfret for his effort in adding error messages and making
the code work with Aztec C.
AUTHOR
Svante Gellerstam - Idea & Prototype.
Mark Rinfret - See Thanks to above.
Please send hints, flames, bugs and/or suggestions to me
at:
USENET - d87sg@efd.lth.se
SHAR_EOF
cat << \SHAR_EOF > Makefile
# Aztec C makefile for fnams, the file name list preparation utility to
# be used with the Zoo archiver.
fnams: fnams.o
ln -o fnams fnams.o -lc32
fnams.o: fnams.c
cc +L -B fnams.c
SHARFILES = fnams.c Makefile ReadMe fnams.man
shar: $(SHARFILES)
makekit -n FNAMS $(SHARFILES)
SHAR_EOF
cat << \SHAR_EOF > make.lat
lc -w -Lcd fnams.c
SHAR_EOF
cat << \SHAR_EOF > fnams.pragmas
/* fnams.pragmas */
/* Aztec C won't ignore these, even if surrounded by #ifndef AZTEC_C. */
#pragma libcall DOSBase Lock 54 2102
#pragma libcall DOSBase UnLock 5a 101
#pragma libcall DOSBase Examine 66 2102
#pragma libcall DOSBase ExNext 6c 2102
#pragma libcall DOSBase Write 30 32103
#pragma libcall DOSBase Output 3c 0
#pragma libcall DOSBase IoErr 84 0
#pragma syscall AllocMem c6 1002
#pragma syscall FreeMem d2 902
SHAR_EOF
cat << \SHAR_EOF > fnams.c
/* fnams.c */
/* :ts=4 */
/* includes */
#ifdef AZTEC_C
#include <libraries/dos.h>
#include <exec/memory.h>
#include <stdio.h>
#include <functions.h>
#else /* For Lattice */
#include "libraries/dos.h"
#include "exec/memory.h"
#include "stdio.h"
#include "string.h"
#endif
/* structure declarations */
/*
This is the root fib. We do this to avoid any hairy depth problems
with HD:s or other large disc devices with deeply nested directory
trees.
*/
struct ext_fib
{
struct FileInfoBlock fib;
struct ext_fib *prev_fib, *next_fib;
BPTR flock;
};
/* defines */
#define MAX_DEPTH 20 /* Maximum depth of pathnames. */
/* prototypes or casts */
#ifndef AZTEC_C
extern struct DosLibrary *DOSBase;
BPTR Lock(char *, ULONG);
void UnLock(BPTR);
int Examine(BPTR, struct ext_fib *);
int ExNext(BPTR, struct ext_fib *);
ULONG AllocMem(ULONG, ULONG);
void FreeMem(ULONG, ULONG);
void Write(ULONG, char *, ULONG);
ULONG Output(void);
ULONG IoErr(void);
void exit(ULONG);
void myputs(char *);
#include "fnams.pragmas"
#else
void myputs();
#endif
/* external declarations */
extern int errno;
/* global structures */
char dirstr[108];
void
main(argc,argv)
int argc;
char *argv[];
{
struct ext_fib *currfib, *tempfib;
char errString[81];
char *killptr,temp;
int kris;
/*
For all you non swedish people out there: the
word 'kris' translates to 'crisis' and is
used as a flag telling whether we're in
running shape or not. It is set to nonzero
value to indicate an error. Thus the 'while
(!kris)' below.
*/
*errString = '\0';
kris = 0;
if(argc < 2)
{
myputs("Fnams 2.0 - 880530\n\n");
myputs("Fnams - display this message.\n");
myputs("Fnams \"\" - list current directory.\n");
myputs("Fnams <volume> - list the contents of <volume>.\n");
myputs("Fnams <dir> - list the contents of <dir>.\n");
exit(20L);
}
if (!(currfib = (struct ext_fib *)
AllocMem((ULONG) sizeof(struct ext_fib), MEMF_PUBLIC|MEMF_CLEAR)))
{
strcpy(errString, "No memory for root FileInfoBlock!");
kris = 1;
}
strcpy(dirstr,argv[1]);
if(!kris && ((currfib->flock = (BPTR) Lock(dirstr, ACCESS_READ)) == 0))
{
sprintf(errString,"!!! Unable to lock %s, error %ld\n",
dirstr,IoErr());
kris = 1;
}
if (!kris && (Examine(currfib->flock, currfib) == 0))
{
sprintf(errString,"!!! Initial Examine call failed: %ld\n",IoErr());
kris = 1;
}
if(!kris)
{
if (currfib->fib.fib_EntryType < 0)
{
myputs("Pathname argument must be volume or directory!\n");
kris = 1;
}
else
{
/* This program requires that the initial directory specification
* be terminated with a colon or slash. We already know that this
* is either a directory or a device. If the pathname isn't
* terminated with a colon, it must be a directory. If it's not
* already terminated with a slash, just add one. Oh - one other
* thing. If dirstr is null (user specified "" = current dir),
* leave it alone.
*/
if (*dirstr && (temp = dirstr[strlen(dirstr)-1]) != ':' &&
temp != '/')
strcat(dirstr, "/");
}
}
if(!kris && (ExNext(currfib->flock, currfib)== 0))
{
sprintf(errString,"!!! Initial ExNext failed: %ld\n",IoErr());
kris = 1;
}
while (!kris)
{ /* Who's kris? :-) */
/* Is this entry a directory? */
if(currfib->fib.fib_EntryType > 0)
{
strcat(dirstr, currfib->fib.fib_FileName);
strcat(dirstr,"/");
if(currfib->next_fib == 0L) /* Have to allocate a new fib */
{
if (!(currfib->next_fib = (struct ext_fib *)
AllocMem((ULONG) sizeof(struct ext_fib),
MEMF_PUBLIC|MEMF_CLEAR)))
{
sprintf(errString, "!!! No memory for file info!\n");
kris = 1;
}
currfib->next_fib->prev_fib = currfib;
}
if(!kris) /* Step down into the new fib */
currfib = currfib->next_fib;
if (currfib->flock)
UnLock(currfib->flock);
if((currfib->flock = (BPTR) Lock(dirstr,ACCESS_READ))== 0)
{
sprintf(errString, "!!! Unable to lock %s, error %ld\n",
dirstr, IoErr());
kris = 1; /* This is fatal. */
}
else
{
if (!kris && !Examine(currfib->flock, currfib))
{
sprintf(errString, "!!! Examine error on %s - %ld\n",
dirstr, IoErr());
kris = 1;
}
}
}
else /* No directory - process filename */
{
myputs(dirstr);
myputs(currfib->fib.fib_FileName);
myputs("\n");
}
while((ExNext(currfib->flock, currfib) == 0L) && !kris )
{
UnLock(currfib->flock);
currfib->flock = 0L;
if( currfib->prev_fib == 0 ) /* We're at root level. */
{
kris = 1; /* Always true since this is the last entry! */
break;
}
else /* We're at some lower than root level */
currfib = currfib->prev_fib;
killptr = dirstr + strlen(dirstr)- 3;
while((*killptr != '/')&& (*killptr != ':'))
killptr--;
*(killptr+1)= '\0';
}
}
/* Free up resources before leaving. */
while(currfib->next_fib) /* Move to last fib in chain */
currfib = currfib->next_fib;
while(currfib) /* Free up allocated fib:s */
{
tempfib = currfib->prev_fib;
FreeMem((ULONG)currfib, (ULONG)sizeof(struct ext_fib));
currfib = tempfib;
}
if (*errString)
{ /* There was an error. */
myputs(errString); /* Tell the user about it. */
}
}
void
myputs(string)
char *string;
{
if (*string)
Write(Output(), string, (long) strlen(string));
}
SHAR_EOF
cat << \SHAR_EOF > fnams.uu
begin 644 fnams
M```#\P`````````#``````````(```5#```!%0```8H```/I```%0TCG?OY+.
M[P`T)$@D`$GY`````"QX``0I3@!`*4\`3$*L`$B3R4ZN_MHF0"EK`)@`.$JK]
M`*QG``!P(`V0K0`$!H````"`*4``!&$``7H@:P"LT<C1R")H`!#3R=/)(`)R/
M`!(9*4D`5-"!4H!"9U*``D#__I_`58!"=P@`(`)3@-2!'[(``"``4X)1R/_VA
M'[P`("``4X(?L2``(`!1RO_X(D\O"6```&PI:P`Z``0&K````(``!&$``0YA@
M``#X*4``2"\`)$`@*@`D9Q(L;`+H($`B*```*4$`.$ZN_X(B*@`@9QHD/```[
M`^U.KO_B*4``4&<*Y8@@0"=H``@`I"!L`$@O"$AL```@:``D*6@`!`!41_D`3
M``/X<@`@/````(Q@`B;!4<C__$ZZ"&!P`&`$("\`!"\`("P`+&<$($!.D$ZZA
M`P@L>``$(FP"Z$ZN_F)*K`+P9P@B;`+P3J[^8DJL`O1G"")L`O1.KOYB2JP`K
M6&<((FP`6$ZN_F)*K`!(9R0B+``\9P1.KO_<(BP`4&<$3J[_W"QX``1.KO]\=
M(FP`2$ZN_H8@'RYL`$Q,WW]^3G5P9&"`0>L`7$ZN_H!!ZP!<3J[^C$YU0^P`<
M7'``3J[]V"E``NAGVDYU``!(YS`R+'D```+L(&\`&")O`!PD;P`@)F\`)"`OG
M`"@B+P`L)"\`,"8O`#1.KOZD3-],#$YU3E7__DCG(`!P`#E``!A*;0`(:R8R'
M+0`(LFP"Y&P<(`%T!L'"0>P%.")(TL!*46<*(`'!PM#`(`A@"#E\``D"4'``5
M3-\`!$Y=3G4```````#__________P#_8XP`_V1X`/]D'$Y5__A(YP`@1>P"Y
M;+3\``!G-`@J``(`$V8H""H``0`39R`@*@`$D*H`##M`__Q*0&<0/P`O*@`,(
M/RH`%$ZZ!FY03R128,8_+0`(3KH/:%1/3-\$`$Y=3G4`_V.,`/]P84Y5```RZ
M+0`(#$$`,&T*#$$`.6X$<`%@`G``3EU.=0``3E7_]C\M``A.NO\25$\K0/_VZ
M2H!F!'#_8"H_+0`.+RT`"B!M__8O*``"3KH0!$_O``HK0/_Z2FP`&&<$</]@X
M!"`M__I.74YU3E7_^"`M``@&@`````HO0```("\``'(`+'@`!$ZN_SHK0/_\J
M2JW__&8$<`!@-"`M``@&@`````H@;?_\,4``""\(2&P$9&$``1!03TJL`M!F8
M!BEM__P"T"!M__S0_``*(`A.74YU3E7__'``,"T`""\`88Q83RM`__Q*@&8$M
M</](P$Y=3G5.5?_X2.<!(&$``(!P`"E``!`I0``(*4``#"E``MHI0`+>*4`"X
MU"E``M!";`+82JP"R&=,("P"^"(L`LC2@%.!(`$B+`+X3KH,WB(L`OA.N@VRX
M4(`N`"`'(`=6@.2`Y8`N`"\'80#_%%A/)$"T_```9@1P_V`,+P<O"DZZ`,)0,
M3W``3-\$@$Y=3G5.5?_T*VP$9/_\2JW__&<J(&W__"M0__AP`#`H``@O0```H
M(FW__"`O```L>``$3J[_+BMM__C__�D<@I2`1H*4@$9$Y=3G5.50``2.<`S
M(")M``@@:0`$(FT`#"-(``21R"*()&T`"$J29@(DB4JJ``1G!B!J``0@B25)E
M``1,WP0`3EU.=0``$G".S0`%:*,``R=```,W&````````U=(````8`<`````3
M```#)\@`((``<&%.5?_\<``P+0`,+P`O+0`(*T#__&$&4$].74YU3E7_Z$CG`
M(3`N+0`,2H=N!G#_8```\`R'````"&P"?@@@!R`'5H#D@.6`+@`@;0`(*TC_M
M]-''WZP"WD/L`MHD42M(__`K2?_XM/P``&<``*(@2B`J``0@2M'`*TC_["0M?
M__"UPF,6(FW_]"**(T<`!"9M__@FB7``8```BK7"9AXB4B9M__0FB2`J``0BB
M`-*')T$`!")M__@BBW``8&8B;?_TL\AD")^L`MYP_V!6L\AF+DJ29PXB$K2!P
M8PB?K`+></]@0-^J``1*DF<0M))F#"!"("@`!-&J``0DD'``8"0K2O_X*VW_5
M[/_H)%)@`/]:(&W_^""M__0@;?_T0I`A1P`$<`!,WPR$3EU.=4Y5``!2;`1TV
M,"T`""!L!'`0@%*L!'!.74YU3E4``$)L!'0I;0`(!'!(;0`0+RT`#$AZ_\Y.Z
MN@GF3^\`#"!L!'!"$#`L!'1.74YU``!.5?_X2.<@`'``.T#__CM`__P[0/_X`
M(&T`"!(0#`$`+68,<`$[0/_\.T#_^&`,#`$`*V8&.WP``?_\(&T`"#(M__P0^
M,!```D``_S\`3KK\$E1/2D!G*#`M__[!_``*,BW__%)M__P@;0`(%#`0``)"T
M`/_00@1``#`[0/_^8+Q*;?_X9P1$;?_^(&T`##"M__XP+?_\3-\`!$Y=3G5.6
M5?_T2.<`($(M__T[?``(__Y3;?_^("T`#"(``H$````/0>P"5-#!,BW__AN0C
M$/7H@"M```P"@`____\K0``,2JT`#&;,0>W_]=#M__XB2"1M``@4V6;\<`B04
M;?_^3-\$`$Y=3G5.50``,"T`#$C`+P`O+0`(88A03TY=3G4``$Y5__)(YR`@G
M.WP`"__R0BW__U-M__(@+0`,(@`"@0````<&@0```#`T+?_R&X$@].:`*T``@
M#`*`'____RM```Q*K0`,9LQ![?_TT.W_\B)()&T`"!399OQP"Y!M__),WP0$3
M3EU.=4Y5```P+0`,2,`O`"\M``AAB%!/3EU.=0``3E7_\DCG`"`[?``+__)"C
M+?__4VW_\B`M``QR"DZZ".P&@0```#`P+?_R&X$`]"`M``QR"DZZ"-0K0``,R
M2JT`#&;00>W_]-#M__(B2"1M``@4V6;\<`N0;?_R3-\$`$Y=3G4``$Y5__I($
MYP$`(&T`#$H89OQ3B)'M``PN""!M``A*&&;\4XB1[0`((`@B;0`(TL`K2?_Z8
M,BT`$+Y!8P(N`2`'(&T`#&`"$MA1R/_\(&W_^D(P<``@+0`(3-\`@$Y=3G4`X
M`$Y5__PK;0`(__P@;?_\2A!G&A`0`D``_S\`3KH`&%1/(&W__!"`4JW__&#>/
M("T`"$Y=3G4P+P`$#```86T*#```>FX$!```($YU``!.5?_Z/RT`"$ZZ^.94S
M3RM`__I*@&8$</]@1B!M__H(*``#``%G$'`"/P!"IS\M``A.NOFB4$\_+0`.W
M+RT`"B!M__HO*``"3KH)8$_O``H[0/_^2FP`&&<$</]@!#`M__Y.74YU``+MY
M8```<&%.5?_R2.<!,"1M``@,;``@!'AL``"0$A(,`0`@9PP,`0`)9P8,`0`*L
M9@12BF#H2A)G<C`L!'CE0%)L!'A![`1^T,`K2/_\#!(`(F8H4HH@BDH29PH,4
M$@`B9P12BF#R2A)F#'`!/P!.N@@T5$]@GD(24HI@F"!M__P@BDH29Q@2$@P!6
M`"!G$`P!``EG"@P!``IG!%**8.1*$F8"8`A"$E**8`#_:DIL!'AF!B!L`$A@W
M!$'L!'XI2`1Z2FP$>&8``(9![`*T(DA'[`3^)MDFV2;9)MDVD29L`$@B:P`D0
M<"@_`"\I``1(;`3^3KK]_D_O``I![`3^(@@D/````^XL;`+H3J[_XBE`!3H@%
M+`4Z*4`%0'($.4$%/BE`!48Y005$Y8`K0/_RD\DL>``$3J[^VBM`__8@;?_RZ
M(FW_]B-H``@`I'X`8#(L;`+H3J[_RBE`!3HL;`+H3J[_Q"E`!4!![`+&(@@DL
M/````^TL;`+H3J[_XBE`!49^!"`'(`<`0(`!@6P%."`'(`<`0(`"@6P%/@!LF
M@`,%1$IL`FAG!'``8`0P/(``+@!";`*`(`<@!P!```$Y0`)^.7P``0*8(`<@4
M!P!```(Y0`*6.7P``@*P(`<@!P!``(`Y0`*N0?H(;BE(`#`O+`1Z/RP$>$ZZ4
M`")<3T)G3KKV]E1/3-\,@$Y=3G4``&EB`'1E;7!F:6(`94[Y`````&YG`&MIY
M;&QP='(`='!A3E7_T$CG("!P`!M\`"#_^W(`.T'_^#M\____]D'M_]@;0/_U8
M&T#__!M`__T;0/_^&T#__SM!_^P[0?_N*TC_U"!M``A*$&=4$!`"0`#_<AA=F
M06M(L'L0"&;V3OL0!``C8```+``@8```'@`K8```$``M8````AM\``'__V`8U
M&WP``?_^8!`;?``!__U@"!M\``'__$YQ4JT`"&"D(&T`"!(0#`$`,&8*&WP`9
M,/_[4JT`""!M``@,$``J9A(B;0`,(%%4D3M0__A2K0`(8!9(;?_X+PA.NOGR*
M4$\@;0`(T,`K2``((&T`"!(0#`$`+F8V4JT`""!M``@,$``J9A(B;0`,(%%4'
MD3M0__92K0`(8!9(;?_V+PA.NOFP4$\@;0`(T,`K2``((&T`"!(0#`$`;&8,!
M&WP``?_U4JT`"&`*#`$`:&8$4JT`""!M``@0$%*M``@;0/_T`D``_W(P74%K9
M``)\L'L0"&;T3OL0!`!C8``"4@!S8``""@!88``!E@!X8``!D`!P8``!>`!O>
M8``!)`!U8```^`!D8````DHM__5G#")M``P@45B1(!!@#")M``P@4521,!!(`
MP"M`__!*@&H*<@%$K?_P.T'_[DIM_^YG!'`M8`Q*+?_^9P1P*V`"<"`;0/_8*
M$"W__@)``/\R+?_N@D`0+?_]`D``_X)`2D%G"%*M_]12;?_L+RW_\"\M_]1.#
MNOI04$\[0/_22FW_]FH&<`$[0/_V,"W_TC(M__:20#M!_]!*06\T(&W_U")(#
MTL$B`"1(8`(2VE')__P0+?_[`D``_S(M_]`@;?_48`(0P%')__PP+?_V.T#_=
MTM%M_^Q![?_8*TC_U$HM__]G``%B&WP`(/_[8``!6$HM__5G#")M``P@45B1"
M(!!@#")M``P@4521<``P$"M`__!@`/]:2BW_]6<,(FT`#"!16)$@$&`,(FT`.
M#"!15)%P`#`0*T#_\$HM__QG$B!M_]00O``P4JW_U#M\``'_["\`+RW_U$ZZ.
M^/!03SM`_])@`/\>&WP`,/_[2FW_]FH&.WP`"/_V2BW_]6<,(FT`#"!16)$@4
M$&`,(FT`#"!15)%P`#`0*T#_\$HM__QG'B!M_]00O``P4JW_U"!M_]00O`!X`
M4JW_U#M\``+_["\`+RW_U$ZZ^`103SM`_](,+0!8__1F`/ZL2&W_V$ZZ^;!8L
M3V``_IXB;0`,(%%8D2)0*TG_U++\``!F"$'L`LPK2/_4(&W_U$H89OQ3B)'M3
M_]0[2/_L2FW_]FLN,BW_]K#!;R8[0?_L8"`[?``!_^PB;0`,(%%4D3`0&T#_U
MV$(M_]E@!G``8```L#(M_^PT+?_XM$%L"'``.T#_^&`$DVW_^$HM__]G1E-MO
M_^PP+?_L2D!K&B!M_]00$`)``/]2K?_4/P`@;0`03I!43V#:4VW_^#`M__A*!
M0&M:$"W_^P)``/\_`"!M`!!.D%1/8.!3;?_X,"W_^$I`:Q00+?_[`D``_S\`E
M(&T`$$Z05$]@X%-M_^PP+?_L2D!K&B!M_]00$`)``/]2K?_4/P`@;0`03I!4!
M3V#:("T`"$S?!`1.74YU3E7_]BMM`!#_]B!M``P0$%*M``P;0/__2@!G>@P`(
M`"5F,"!M``P,$``E9@92K0`,8"`O+0`(2&W_]B\(80#[*D_O``PK0/_Z2H!GV
M!BM```Q@N$IL`#1G*`@M``?__V<@$"W__P)``/\_`"!M``A.D%1/(&T`#!`09
M4JT`#!M`__\0+?__`D``_S\`(&T`"$Z05$]@`/]V3EU.=0```>P`!AR&<&%*H
M@&H``!Y$@$J!:@``#$2!80``($2!3G5A```81(!$@4YU2H%J```,1(%A```&-
M1(!.=2\"2$$T`68``")(0$A!2$(T`&<```:$P3`"2$`T`(3!,`)(0C(")!].S
M=2\#=A`,00"`9```!N&944,,00@`9```!NF964,,02``9```!N6954-*06L`R
M``;CF5-#-`#FJ$A"0D+FJDA#@,$V`#`"-`-(0<3!D()D```(4T/0@63^<@`R<
M`TA#Y[A(0,-`)A\D'TYU+GD```!,3KD``!1P+SP````43KD```)P($(B0R0`D
M)@%(0DA#Q,'&P,#!U$-(0D)"T((F"20(3G4@;P`((F\`!#`O``QO&+/(91#0[
MP-+`4T`3(%'(__Q@!A+84<C_]"`O``1.=2!O``@B;P`$2AEF_%.)$MAF_"`O&
M``1.=4Y5__I(YP$@?@!%[`4XOFP"Y&P>2E)G%`@J``(``6<"8`HO*@`"3KH!\
M9%A/4D=<BF#<,"T`"$C`+RT`"B\`3KKNRE!/3-\$@$Y=3G5.5?_\<``B/```P
M,``L>``$3J[^S@*````P`"M`__Q*@&8$<`!@)$JL`#!G&B!L`#!.D$I`9@1P%
M`&`00F=P%#\`3KK_<EA/("W__$Y=3G5AL$YU``!.5?_X2.<!`$JL`#!G!$ZZI
M_YQ";``8,"T`$$C`+T``!"(M``@D+0`,)B\`!"QL`NA.KO_0+@`,A_____]F&
M$BQL`NA.KO]\.4``&#E\``4"4"`'3-\`@$Y=3G4``$Y5__A(YS$"2JP`,&<$U
M3KK_0$)L`!AP`#`M`!!3@"]``!`B+0`()"T`#"8O`!`L;`+H3J[_OBX`#(?_0
M____9A(L;`+H3J[_?#E``!@Y?``6`E`P+0`0#$```F<:#$```6<*2D!F(B`MU
M``Q@'"`'(`?0K0`,8!(B+0`(=`!V`"QL`NA.KO^^3G%,WT",3EU.=4Y5``!*>
MK``P9P1.NOZT(BT`""QL`NA.KO_<<`!.74YU3E7_L$CG``)*N0```NQF%D/Y[
M```#>'``+'@`!$ZN_=@CP````NP@>0```%12B'``(GD```!4$!$O`"\(2&W_6
ML$ZZ_<Y/[P`,('D```!4$!`"0`#_0C4`L$'M_[`CR````SA(>``\2'@`^G``K
M+P`O`$AY```#9$AY```#2DAY```#+"\`3KKM@D_O`"!3@&<$</]@`G``3-]`R
M`$Y=3G4``$Y5_[!(YP`"2KD```+L9A9#^0```^1P`"QX``1.KOW8(\````+L[
M('D```!44HAP`")Y````5!`1+P`O"$AM_[!.NOTN3^\`#"!Y````5!`0`D``=
M_T(U`+!![?^P(\@```.82'@`*$AX`/IP`"\`+P!(>0```]`O`$AY```#MB\`E
M3KKLYD_O`"!P%#\`3KK])E1/3-]``$Y=3G4``````^P````"````````$;P`@
M`!&P`````0````$```N6````%P````(``!2Z```4H@``%)@``!22```4>@``A
M%.H``!3B```4S@``%((``!0:```4`@``$_@``!/R```3V@``%$X``!1(```4_
M0@``%"X``!/B```1J@```=X```$2````#@````````/R```#Z0```15.5?^>K
M2.<@(K_L``1E``0N0BW_IT)M_YX,;0`"``AL/$AL`&AA``/&6$](;`!^80`#&
MO%A/2&P`IF$``[)83TAL`-!A``.H6$](;`$"80`#GEA/2'@`%$ZZ`_!83R`\C
M```!$"(\``$``2QX``1.KO\Z*T#__$J`9A1![`$P(DA%[?^G%-EF_#M\``'_>
MGB)M``H@:0`$(DA%[`/X%-EF_$IM_YYF1D'L`_@B"'3^+&P"Z$ZN_ZP@;?_\>
M(4`!#"!M__Q*J`$,9B0L;`+H3J[_?"\`2&P#^$AL`5)(;?^G3KH#<$_O`!!PQ
M`3M`_YY*;?^>9C8@;?_\(B@!#"0(+&P"Z$ZN_YI*0&8@+&P"Z$ZN_WPO`$AL7
M`71(;?^G3KH#-$_O``QP`3M`_YY*;?^>9EH@;?_\(B@`>$J!:A)(;`&:80`"Y
MKEA/.WP``?^>8#Q*+`/X9S9![`/X(DA*&6;\4XF3R"`)0>P#]]#`$!`;0/^A=
M#```.F<4#```+V<.2&P!RDAL`_A.N@+`4$]*;?^>9C8@;?_\(B@!#"0(+&P"=
MZ$ZN_Y1*0&8@+&P"Z$ZN_WPO`$AL`<Q(;?^G3KH"F$_O``P[?``!_YY*;?^>@
M9@`!U"!M__PB*`!X2H%O``$6(DA0B2\)2&P#^$ZZ`EY03TAL`>Q(;`/X3KH"A
M4%!/(&W__$JH`0AF0"`\```!$"(\``$``2QX``1.KO\Z(&W__"%``0A*@&84X
M2&P![DAM_Z=.N@(D4$]P`3M`_YXB;?_\(&D!""%)`01*;?^>9@H@;?_\*V@!_
M"/_\(&W__$JH`0QG#"(H`0PL;`+H3J[_ID'L`_@B"'3^+&P"Z$ZN_ZP@;?_\L
M(4`!#"!M__Q*J`$,9B8L;`+H3J[_?"\`2&P#^$AL`@Q(;?^G3KH!KD_O`!!PJ
M`3M`_YY@8$IM_YYF6B(H`0PD""QL`NA.KO^:2D!F2"QL`NA.KO]\+P!(;`/X6
M2&P"+DAM_Z=.N@%P3^\`$#M\``'_GF`B2&P#^&$``/I83R!M__Q0B"\(80``&
M[%A/2&P"3F$``.)83R!M__PB*`$,)`@L;`+H3J[_E$C`2H!F`/Z<2FW_GF8`I
M_I0@;?_\(B@!#"QL`NA.KO^F<``@;?_\(4`!#$JH`01F"CM\``'_GF``_FHKI
M:`$$__Q![`/X(DA*&6;\4XF3R"`)T,!7B"M(_Z(@;?^B$A`,`0`O9PP,`0`ZH
M9P93K?^B8.@@;?^B0B@``6``_W0@;?_\2J@!"&<(*V@!"/_\8.Y*K?_\9R(@T
M;?_\*V@!!/_X(D@@/````1`L>``$3J[_+BMM__C__RBW_IV<(2&W_IV$*S
M6$],WT0$3EU.=4Y5__A(YS`"O^P`!&4``$(@;0`(2A!G,"QL`NA.KO_$(&T`M
M"$H89OQ3B)'M``@B"$C!+T$`$"(`)"T`""8O`!`L;`+H3J[_T$S?0`Q.74YUR
M3OD``!&H3OD``!(,3OD```)P3OD```8^```#[`````0````````$1```!%``X
M``1*```$/@````````/R```#Z@```/X`````````````````````````````P
M`````````````````````````````````````````````````````````````
M`````````````````````````````````&1O<RYL:6)R87)Y`$9N86US(#(N>
M,"`M(#@X,#4S,`H*``!&;F%M<R`@("`@("`@("`M(&1I<W!L87D@=&AI<R!M&
M97-S86=E+@H`1FYA;7,@(B(@("`@("`@+2!L:7-T(&-U<G)E;G0@9&ER96-TP
M;W)Y+@H`1FYA;7,@/'9O;'5M93X@+2!L:7-T('1H92!C;VYT96YT<R!O9B`\B
M=F]L=6UE/BX*``!&;F%M<R`\9&ER/B`@("`M(&QI<W0@=&AE(&-O;G1E;G1S4
M(&]F(#QD:7(^+@H`3F\@;65M;W)Y(&9O<B!R;V]T($9I;&5);F9O0FQO8VLA_
M`"$A(2!5;F%B;&4@=&\@;&]C:R`E<RP@97)R;W(@)6QD"@`A(2$@26YI=&EA4
M;"!%>&%M:6YE(&-A;&P@9F%I;&5D.B`E;&0*`%!A=&AN86UE(&%R9W5M96YT>
M(&UU<W0@8F4@=F]L=6UE(&]R(&1I<F5C=&]R>2$*`"\`(2$A($EN:71I86P@%
M17A.97AT(&9A:6QE9#H@)6QD"@`O`"$A(2!.;R!M96UO<GD@9F]R(&9I;&4@I
M:6YF;R$*`"$A(2!5;F%B;&4@=&\@;&]C:R`E<RP@97)R;W(@)6QD"@`A(2$@-
M17AA;6EN92!E<G)O<B!O;B`E<R`M("5L9`H```H``````#`Q,C,T-38W.#EAJ
M8F-D968`````@````````H0``````````````````````````````IP`````8
M`````````````````````````````````````````````````````&-O;CHQK
M,"\Q,"\S,C`O.#`O`"H````````````````````````````````````````H<
M````````````````````````!````"HJ(%5S97(@06)O<G0@4F5Q=65S=&5D!
M("HJ``#__P````X`#@````````+\`````/__````!``$``````````````,8M
M0T].5$E.544``/__````!``$`````````T``````04)/4E0`__\````$``0`L
M```````#7@````!I;G1U:71I;VXN;&EB<F%R>0```/__````#@`.````````!
M````````*BH@4W1A8VL@3W9E<F9L;W<@*BH``/__````!``$`````````Z``[
M``.,15A)5```__\````$``0````````#R@````!I;G1U:71I;VXN;&EB<F%RI
M>0```````^P````)`````@```]P```/&```#P@```W````-6```#/````R0`2
/``*$```";`````````/RI
``
end
size 7800
SHAR_EOF
# End of shell archive
exit 0
--
< Mark R. Rinfret, mrr@amanpt1.ZONE1.COM | ...rayssd!galaxia!amanpt1!mrr >
< AMA / HyperView Systems Home: 401-846-7639 >
< 28 Jacome Way Work: 401-849-9930 x301 >
< Middletown, RI 02840 "If I just had a little more time...">