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...">