amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (03/14/91)
Submitted-by: hoover@math4.uni-bielefeld.de (Uwe Sch"urkamp)
Posting-number: Volume 91, Issue 056
Archive-name: utilities/nodelete-1.4/part01
[ includes uuencoded executable ...tad ]
I wrote this program mainly to make the fantastic public domain game
"Omega" more enjoyable to play. The author of this program thought it
reasonable to have the system unlink the save-file after having reloaded it
to somehow "simulate the continuity of character". Too bad that NoDelete
does not work correctly with this program...
Footnote: It works now!
WHAT IT DOES
NoDelete enables you erraneous humans to once again reflect on the
righteousness of your decisions concerning the deleting of files on
AmigaDos devices. If you try to delete a file or a program tries to remove
it, this is mostly done via DeleteFile() of the dos.library. When
executed, NoDelete bends this vector to its own routine which brings up
this cute little requester on the active window. This requester contains
the name of the file that the system is trying to delete. If you really
want to delete this file, click to the "Yes, Delete!" gadget. If not,
click to the "Oops, no way!"-Gadget of the requester. NoDelete works just
fine with aliases, wildcards etc. For problems see the "known
bugs"-section of this text.
#!/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: nodelete.c nodelete.doc nodelete.uu
# Wrapped by tadguy@ab20 on Wed Mar 13 19:39:55 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'nodelete.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'nodelete.c'\"
else
echo shar: Extracting \"'nodelete.c'\" \(6661 characters\)
sed "s/^X//" >'nodelete.c' <<'END_OF_FILE'
X/* NoDelete V1.4E (C) HooverSoft 1990
X
X cc NoDelete +L
X ln NoDelete -lc32
X
X
X*/
X
X
X#ifdef AZTEC_C /* Works under Manx, convert it to Lattice */
X /* if you don't mind the hassle... */
X
X#include<intuition/intuition.h>
X#include<intuition/intuitionbase.h>
X#include<libraries/dos.h>
X#include<libraries/dosextens.h>
X#include<stdio.h>
X/* #define DEBUG 1 */
X
Xchar bodystring[80],extensions[10][10], titlebak[80], title[80];
XULONG answer, EXT_SET = 0L, howmany = 0L;
XUBYTE *position, *rindex();
XULONG OVERRIDE = 0L, SILENT = 0L;
X
Xstruct FileHandle *output, *Output();
X
Xstruct NewWindow mywindow = {
X 100,0, /* window XY origin relative to TopLeft of screen */
X 350,10, /* window width and height */
X 0,1, /* detail and block pens */
X CLOSEWINDOW+VANILLAKEY, /* IDCMP flags */
X WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE+SIMPLE_REFRESH, /* other window flags */
X NULL, /* first gadget in gadget list */
X NULL, /* custom CHECKMARK imagery */
X (UBYTE *)title, /* window title */
X NULL, /* custom screen pointer */
X NULL, /* custom bitmap */
X 5,5, /* minimum width and height */
X 640,110, /* maximum width and height */
X WBENCHSCREEN /* destination screen type */
X };
X
X
Xstruct IntuiText body = {
X 1,0,
X JAM1|COMPLEMENT,
X 30,16,
X NULL,
X NULL,
X NULL
X };
X
Xstruct IntuiText fbody = {
X 1,0,
X JAM1|COMPLEMENT,
X 30,5,
X NULL,
X (UBYTE *) "System tries to fool around...",
X &body
X };
X
Xstruct IntuiText ok = {
X 1,0,
X JAM1|COMPLEMENT,
X 6,3,
X NULL,
X (UBYTE *) "Yes, Delete!",
X NULL
X };
X
Xstruct IntuiText no = {
X 1,0,
X JAM1|COMPLEMENT,
X 6,3,
X NULL,
X (UBYTE *) "Oops, No Way!",
X NULL
X };
X
X
Xstruct IntuiMessage *msg, *GetMsg();
X
Xstruct IntuitionBase *IntuitionBase;
Xstruct Window *mw, *aw, *OpenWindow();
Xstruct Library *DosBase;
XUBYTE *filename;
Xvoid *OpenLibrary();
Xstruct Task *FindTask();
X
Xvoid NoDelete()
X{
X#asm
X public _LVOSetProtection
X
X movem.l d0-d7/a0-a6,-(sp)
X#endasm
X geta4();
X#asm
X move.l d1,_filename
X#endasm
X
X if(EXT_SET)
X {
X
X position = rindex(filename, '.');
X if(!position)
X goto delete_anyway;
X else
X {
X for(answer=0L; answer < howmany; answer++)
X {
X if( (strcmp( (UBYTE *) position, (UBYTE *) extensions[answer])) != 0L)
X continue;
X else
X goto request;
X }
X }
X goto delete_anyway;
X }
Xrequest:
X strcpy(bodystring, "Delete File `");
X strcat(bodystring, (char *)filename);
X strcat(bodystring, "'?");
X body.IText = (UBYTE *) bodystring;
X aw = (struct Window *) IntuitionBase->ActiveWindow;
X answer = (long)AutoRequest(aw, &fbody, &ok, &no, NULL, NULL, 360L, 61L);
X if(!answer)
X {
X ;
X#asm
X movem.l (sp)+,d0-d7/a0-a6
X move.l #1,d0
X#endasm
X return;
X }
X
X if(answer)
X {
X
Xdelete_anyway:
X ;
X#asm
X
X move.l _DosBase,a6
X move.l #$70f7,d0 ;restore old vector
X move.w d0,-72(a6)
X move.l #$60000092,d0
X move.l d0,-70(a6)
X
X tst.l _OVERRIDE
X beq.s _dont_unprotect
X
X move.l _filename,d1
X
X
X move.l #0,d2
X jsr _LVOSetProtection(a6)
X
X_dont_unprotect:
X
X move.l _filename,d1
X jsr -72(a6) ;DeleteFile() call
X#endasm
X
X ;
X
X SetFunction(DosBase, -72L, &NoDelete);
X
X/* install our function */
X
X
X#asm
X movem.l (sp)+,d0-d7/a0-a6
X move.l #1,d0
X#endasm
X return;
X }
X }
X
X
Xvoid quit(why)
XUBYTE *why;
X{
X if(!SILENT)
X Write(output, why, (ULONG) strlen(why) );
X SetTaskPri((struct Task *)FindTask(0L), 0L);
X if(DosBase)
X {
X ;
X#asm
X move.l _DosBase,a6
X move.l #$70f7,d0 ;restore old vector
X move.w d0,-72(a6)
X move.l #$60000092,d0
X move.l d0,-70(a6)
X#endasm
X ;
X }
X
X if (mw)
X CloseWindow(mw);
X
X if (DosBase)
X CloseLibrary(DosBase);
X
X if (IntuitionBase)
X CloseLibrary(IntuitionBase);
X
X exit(0L);
X}
X
X/* test_nd() tests the DeleteFile vector to see if NoDelete is already
X installed. Returns zero if NoDelete is installed, one if it is not.
X*/
X#asm
X public _test_nd
X_test_nd:
X
X move.l _DosBase,a6
X cmpi.l #$60000092,-70(a6)
X bne.s _is_there
X moveq #1,d0
X bra.s _fuckoff
X_is_there:
X moveq #0,d0
X_fuckoff:
X rts
X#endasm
Xvoid main(argc,argv)
Xlong argc;
Xchar *argv[];
X {
X
X static UBYTE *msg1 = (UBYTE *)"Installing NoDelete...";
X static UBYTE *msg2 = (UBYTE *)"done. NoDelete V1.4E (c) HooverSoft 1990\n\n";
X long i;
X
X DosBase = (struct Library *) OpenLibrary("dos.library",0L);
X output = Output();
X strcpy(title, (UBYTE *) "NoDelete V1.4E (c) HooverSoft");
X
X if(argc > 11)
X quit("Sorry, only 10 extensions allowed!\n");
X
X if(argc >= 2)
X {
X for(i=1; i<argc; i++)
X {
X
X if(argv[i][0] == '.')
X {
X EXT_SET = 1L;
X strcpy(extensions[howmany], argv[i]);
X howmany++;
X }
X else
X continue;
X
X#ifdef DEBUG
X printf("Copied %s, Result: %s\n", argv[i], extensions[i-1L]);
X#endif
X }
X
X#ifdef DEBUG
X printf("I found %ld extensions.\n", howmany);
X#endif
X
X
X if(howmany)
X strcat(title, (UBYTE *) " EXT SET");
X
X for(i=1; i<argc; i++)
X {
X#ifdef DEBUG
X printf("Scanning argv[%ld]: %s\n", i, (UBYTE *) argv[i] );
X#endif
X if( (char) argv[i][0] == '-')
X switch( (char) argv[i][1] )
X {
X case 'y': if( atoi(argv[i+1]) <= 245L)
X mywindow.TopEdge = atoi(argv[i+1]);
X break;
X
X case 'p': if(atoi(argv[i+1]) < 10L && atoi(argv[i+1]) > -20L)
X SetTaskPri((struct Task *)FindTask(0L),\
X (long)atoi(argv[i+1]));
X else
X SetTaskPri((struct Task *)FindTask(0L), -5L);
X break;
X
X case 'O': OVERRIDE = 1L;
X break;
X
X case 'S': SILENT = 1L;
X break;
X
X case default: break;
X }
X /* end switch */
X /*end if */
X /*end for */
X }
X
X }
X
X if(!howmany)
X {
X EXT_SET = 0L;
X strcat(title, (UBYTE *) " NO EXT");
X }
X
X/* calculate dimension of TitleBar */
X
X mywindow.Width = ( strlen(title) * 8L) + 85L;
X mywindow.LeftEdge = (640L-mywindow.Width) / 2L;
X
X IntuitionBase = OpenLibrary("intuition.library",0L);
X if(!SILENT)
X Write(output, msg1, (ULONG)strlen(msg1));
X
X if( !test_nd() && !SILENT )
X {
X Write(output, "NoDelete already installed.\n",28L);
X CloseLibrary(DosBase);
X CloseLibrary(IntuitionBase);
X exit(0L);
X }
X
X mw = OpenWindow(&mywindow);
X if(!mw)
X quit("Could not open Window.\n\n");
X if(!SILENT)
X Write(output, msg2, (ULONG)strlen(msg2));
X
X SetFunction(DosBase, -72L, &NoDelete);
X
X for(;;)
X {
X Wait(1L << mw->UserPort->mp_SigBit);
Xgetmsg:
X msg = GetMsg(mw->UserPort);
X ReplyMsg(msg);
X if (msg->Class == CLOSEWINDOW)
X quit("NoDelete V1.4E exiting.\n\n");
X if(msg->Class == VANILLAKEY)
X {
X strcpy(titlebak, (UBYTE *) "Extensions: ");
X for(i=0L; i < howmany ; i++)
X {
X strcat(titlebak, extensions[i]);
X strcat(titlebak, " ");
X }
X SetWindowTitles(mw, titlebak);
X Wait(1L << mw->UserPort->mp_SigBit);
X SetWindowTitles(mw, title);
X ReplyMsg( GetMsg(mw->UserPort) );
X }
X
X else
X continue;
X }
X }
X#endif
X
END_OF_FILE
if test 6661 -ne `wc -c <'nodelete.c'`; then
echo shar: \"'nodelete.c'\" unpacked with wrong size!
fi
# end of 'nodelete.c'
fi
if test -f 'nodelete.doc' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'nodelete.doc'\"
else
echo shar: Extracting \"'nodelete.doc'\" \(8113 characters\)
sed "s/^X//" >'nodelete.doc' <<'END_OF_FILE'
X *************************************************************************
X * NoDelete V1.4 (C) HooverSoft Oct 30th, 1990 *
X *************************************************************************
X
XUSAGE: 1> run NoDelete [extensions] [-p priority] [-y ypos] <ENTER>
X from CLI only.
X
X
X
X
X HISTORY
X
X CHANGES TO VERSION 1.35: OCT 1990
XProgrammed two new options -O and -S (Cheers, John!). These options sort
Xof "fix" a bug whith NoDelete which used to override the file protection
Xbit.
X
X CHANGES TO VERSION 1.3: SEP 1990
XLots of changes. Thinking of writing a new documentation. Anyway,
Xintroduced command line options -p and -y for run-time setting of priority
Xof NoDelete and of vertical position of titlebar.
X
X CHANGES TO VERSION 1.2: AUG 1990
XIntroduced the possibilty to give multiple extensions on startup. Lists
Xextensions when pressing a key while Nodelete's titlebar is active.
X
X CHANGES TO VERSION 1.1: Aug 1990
XNoDelete now automatically centers the Dragbar on Screen and calculates the
Xcorrect width for the window if a extension is specified.
X
XNow works fine with AmiOmega. System won't crash if "Yes, Delete!" is
Xselected.
X
XNow supports the use of extensions to ask confirmations only for special
Xfiles ending in defined extension. Will show the selected extension in
Xwindow's titlebar.
X
XNoDelete now checks if another NoDelete is already active and exits if
Xtrue.
X
X CHANGES TO VERSION 1.01: Jul 1990
XNow handles protected Files correctly. Previous version didn't complain if
Xfile was delete protected.
X
XNoDelete sets its priority to a value of -5 directly after startup.
X
X CHANGES TO VERSION 1.00: June 1990
XVersion 1.01 now restores the Dos Vector relative to _DosBase, so this
Xprogram should work under Kickstart 1.3 as well. If someone already uses
XKick 2.0, he or she should let me know if NoDelete works with that. I have
Xheard that the funny instructions in DosBase have been replaced with a
Xregular jump table.
X
X
X WHY USE NODELETE?
XI wrote this program mainly to make the fantastic public domain game
X"Omega" more enjoyable to play. The author of this program thought it
Xreasonable to have the system unlink the save-file after having reloaded it
Xto somehow "simulate the continuity of character". Too bad that NoDelete
Xdoes not work correctly with this program...
XFootnote: It works now!
X
X WHAT IT DOES
XNoDelete enables you erraneous humans to once again reflect on the
Xrighteousness of your decisions concerning the deleting of files on
XAmigaDos devices. If you try to delete a file or a program tries to remove
Xit, this is mostly done via DeleteFile() of the dos.library. When
Xexecuted, NoDelete bends this vector to its own routine which brings up
Xthis cute little requester on the active window. This requester contains
Xthe name of the file that the system is trying to delete. If you really
Xwant to delete this file, click to the "Yes, Delete!" gadget. If not,
Xclick to the "Oops, no way!"-Gadget of the requester. NoDelete works just
Xfine with aliases, wildcards etc. For problems see the "known
Xbugs"-section of this text.
X
X EXTENSIONS
XLots of programs, programmers and normal people use extensions in their
Xfile system to be able to immediately make out the contents of a file. For
Xexample, ".c" specifies the file to be a C source code and ".bas" should
Xcontain a basic program's source. There are tons of frequently used
Xextensions, from ".asm" up to ".cfg". If you use NoDelete and you don't
Xwant the system to get on your nerves by confirming EVERY rm command, you
Xshould use a certain extension on NoDelete's command line to tell NoDelete
Xthat it should only ask confirmation for those precious ".c" or ".iff"
Xfiles and let all others alone.
X
XThe command line
X
X 1> run nodelete .c
X
Xwould tell NoDelete to only intercept the removing of files ending in ".c"
Xand not to worry about any other files that are removed from the device.
X
XYou can specifiy up to ten extensions when running NoDelete. The command
X
X 1> run NoDelete .c .iff .tex .asm
X
Xwill make NoDelete complain about any file which ends in one of the
Xspecified extensions and leave all others alone. If you have forgotten
Xwhich extensions you specified at startup, just activate NoDelete's
Xtitlebar and press any key. NoDelete will then give a list of extensions
Xin the titlebar until another key is pressed.
X
X
X
X COMMAND LINE OPTIONS
XFinally, HooverSoft is proud to have introduced command line options in
XNoDelete. So far, four options are supported:
X
X-p number where number is an integer between -20 and 9. If given on
X the command line, NoDelete will set its priority to this
X value. If you type rubbish or use values not allowed, the
X default priority of -5 is set.
X
X-y ypos where ypos is an integer ranging from zero to 245 (sorry,
X all you NTSC users...). This number will determine the ver-
X tical position of NoDelete's titlebar. if you try to fool
X NoDelete or do not give this option, the default value zero
X (top of screen) is used.
X
X-O Override file protection bit. If this option is given,
X NoDelete will NOT care about the file's protection status.
X This option is sort of dangerous, but I think I you are
X explicitly asked wether you want to delete a file this
X should be presto! wiped off the disk without return or
X any other chance of survival..., Anyway, the default now
X is to consider and respect the file protection.
X
X-S if given, this option tells NoDelete to shut up. No screams,
X no comments!
X
X KNOWN BUGS
XNoDelete cannot take care of the AmigaDos command Delete. God knows how
Xthis command erases a disk file...
X
XThe Shell won't complain if you try to delete any non-existent file while
XNoDelete has its grip on the system. This is not really a bug because
XNoDelete works on this basis of cheating the calling function and
Xpretending that everything is just fine and deleted. This also is the cause
Xthat the calling program will not be informed if the file in question
Xis delete protected.
X
XSometimes it is possible to get two copies of NoDelete running at the same
Xtime. I can't explain how this is to be done, but somehow it works...
XAnyway this happens very seldomly.
X
X THE LEGAL STUFF
XNoDelete is Public Domain and may be copied freely by everyone except for
Xpurposes listed below as long as this notice is left intact. This program
Xis copyright (C) by HooverSoft. It may NOT be copied or sold for
Xcommercial purposes without written permssion by the author (Get lost,
XCarsten Wolf and all you other suckers!). It may be distributed and copied
Xfreely for non-commercial purposes only.
X
XWhen distributed, this program should always be accompanied by this file,
Xthe documentation.
X
X FURTHER PLANS & HOPELESS DREAMS
XI would like to use CreateTask() to launch a separate Task for Nodelete.
XThis would unlink NoDelete's memory requirements from the current stacksize
Xof the system. It would be nice if "delete" could also be disabled but I
Xam not sure how to do this.
X
X PUBLIC FEEDBACK
XBug reports (cheers, Jensi & John!), criticism, comments and approvements
Xshould be sent to
X
X SNAIL:
X HooverSoft Inc.
X Joellenbecker Weg 4
X 4900 Herford
X
X BITNET:
X hoover@math4.uni-bielefeld.de
X
X DISCLAIMER
XDo whatever you like with this program, but listen: you can't blaim it on
Xme if anything goes down the drain!
X
XHave fun & God bless you, Hoover
END_OF_FILE
if test 8113 -ne `wc -c <'nodelete.doc'`; then
echo shar: \"'nodelete.doc'\" unpacked with wrong size!
fi
# end of 'nodelete.doc'
fi
if test -f 'nodelete.uu' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'nodelete.uu'\"
else
echo shar: Extracting \"'nodelete.uu'\" \(6607 characters\)
sed "s/^X//" >'nodelete.uu' <<'END_OF_FILE'
Xbegin 644 nodelete
XM```#\P`````````#``````````(```0I````O`````$```/I```$*4[Z""13%
XM>7-T96T@=')I97,@=&\@9F]O;"!A<F]U;F0N+BX``%EE<RP@1&5L971E(0``P
XM3V]P<RP@3F\@5V%Y(0!.50``2.?__DZZ"$XI08*:2JR``F=22'@`+B\L@II.S
XMN@;84$\I0()^2JR"?F<``+1"K()Z8"9R"B`L@GI.N@YF0>R!=M"(+P`O+()^G
XM3KH':%!/2H!F`F`04JR">B`L@GJPK(`&9=!@>DAZ`,9(;($F3KH&IE!/+RR"^
XMFDAL@29.N@KR4$](>@"X2&R!)DZZ"N103T'L@28I2(!.(&R"BBEH`#2"DDAX&
XM`#U(>`%H0J="ITAL@'Y(;(!J2&R`5B\L@I).N@]63^\`("E`@GI*K()Z9@I,?
XMWW__<`%.74YU2JR">F=,+&R"EB`\``!P]SU`_[@@/&```)(M0/^Z2JR`"F<*M
XM(BR"FG0`3J[_1B(L@II.KO^X2'K^[$AX_[@O+(*63KH.ED_O``Q,WW__<`%@"
XMJF"H1&5L971E($9I;&4@8``G/P``3E4``$JL@`YF'"\M``A.N@766$\O`"\MM
XM``@O+(*"3KH-L$_O``Q"IT*G3KH-[%A/+P!.N@Y44$]*K(*69Q@L;(*6(#P`!
XM`'#W/4#_N"`\8```DBU`_[I*K(*.9PHO+(*.3KH.DEA/2JR"EF<*+RR"EDZZZ
XM#8A83TJL@HIG"B\L@HI.N@UX6$]"ITZZ"TY83TY=3G4L;(*6#*Y@``"2_[IFD
XM!'`!8`)P`$YU3E7__$*G2'H$.$ZZ#9Q03RE`@I9.N@SV*4""@DAZ!"Y(;((JK
XM3KH%"%!/#*T````+``AO"DAZ!#).NO\>6$\,K0````(`"&T``;`K?`````'_%
XM_&!*("W__.6`(&T`#")P"``,$0`N9C(I?`````&``B`M__SE@"!M``PO,`@`^
XM<@H@+(`&3KH,-$'L@7;0B"\`3KH$G%!/4JR`!E*M__P@+?_\L*T`"&VL2JR`"
XM!F<.2'H#W$AL@BI.N@C04$\K?`````'__&```28@+?_\Y8`@;0`,(G`(``P1B
XM`"UF``$,("W__.6`(&T`#")P"``0*0`!2(!(P&```-`@+?_\4H#E@"!M``PO!
XM,`@`3KH$1EA/L+P```#U;AH@+?_\4H#E@"!M``PO,`@`3KH$*%A/.4"`%&``A
XM`+8@+?_\4H#E@"!M``PO,`@`3KH$"EA/L+P````*;$@@+?_\4H#E@"!M``POC
XM,`@`3KH#[%A/L+S____L;RH@+?_\4H#E@"!M``PO,`@`3KH#SEA/+P!"ITZZC
XM"^183R\`3KH,3%!/8!1(>/_[0J=.N@O.6$\O`$ZZ##903V`X*7P````!@`I@C
XM+BE\`````8`.8"1@(I"\````3V?B68!GZ)"\````'6<`_UJ0O`````EG`/\4L
XM8-Q2K?_\("W__+"M``AM`/[22JR`!F820JR``DAZ`I%(;((J3KH'?%!/2&R"9
XM*DZZ`RA83^>`T+P```!5.4"`%B`\```"@#(L@!9(P9"!<@).N@A0.4"`$D*G/
XM2'H"6TZZ"V)03RE`@HI*K(`.9APO+("23KH"Y%A/+P`O+("2+RR"@DZZ"KY/*
XM[P`,3KK]>$J`9C9*K(`.9C!(>``<2'H"*R\L@H).N@J<3^\`#"\L@I9.N@JZ9
XM6$\O+(**3KH*L%A/0J=.N@B&6$](;(`23KH+I%A/*4""CDJL@HYF"DAZ`@A.*
XMNOR06$]*K(`.9APO+("63KH"9EA/+P`O+("6+RR"@DZZ"D!/[P`,2'K[)DAXY
XM_[@O+(*63KH*T$_O``P@;(*.(F@`5G``$"D`#W(!X:$O`4ZZ"MA83R!L@HXO+
XM*`!63KH*<EA/*4""AB\L@H9.N@J(6$\@;(*&#*@```(``!1F"DAZ`9U.NOP,\
XM6$\@;(*&#*@`(````!1F``":2'H!G4AL@=I.N@'$4$]"K?_\8"YR"B`M__Q.(
XMN@D^0>R!=M"(+P!(;(':3KH%_%!/2'H!>DAL@=I.N@7N4$]2K?_\("W__+"LG
XM@`9ER$AL@=HO+(*.3KH*KE!/(&R"CB)H`%9P`!`I``]R`>&A+P%.N@H@6$](&
XM;((J+RR"CDZZ"H903R!L@HXO*`!63KH)K%A/+P!.N@G(6$]@`/\(3EU.=4ENB
XM<W1A;&QI;F<@3F]$96QE=&4N+BX`9&]N92X@3F]$96QE=&4@5C$N-$4@J2!(;
XM;V]V97)3;V9T(#$Y.3`*"@!D;W,N;&EB<F%R>0!.;T1E;&5T92!6,2XT12"I>
XM($AO;W9E<E-O9G0`4V]R<GDL(&]N;'D@,3`@97AT96YS:6]N<R!A;&QO=V5D5
XM(0H`($585"!3150`($Y/($585`!I;G1U:71I;VXN;&EB<F%R>0!.;T1E;&5T'
XM92!A;')E861Y(&EN<W1A;&QE9"X*`$-O=6QD(&YO="!O<&5N(%=I;F1O=RX*)
XM"@!.;T1E;&5T92!6,2XT12!E>&ET:6YG+@H*`$5X=&5N<VEO;G,Z(``@`"!O[
XM``0B2$H89OQ3B!`O``NSR&<(L"!F^"`(3G5P`$YU(&\`!"`((F\`"!#99OQ.Z
XM=2!O``0@"$H89OR1P"`(4X!.=4Y5``!(YPP@)&T`"`P2`"!G!@P2``EF!%**R
XM8/!Z``P2`"UF!GH!4HI@"`P2`"MF`E**>`!@("!*4HH0$$B`2,!R"B\`(`1.8
XMN@<B(A_2@"@!F+P````P$!)(@$C`0>R`FP@P``((`&;.2H5G!B`$1(!@`B`$]
XM3-\$,$Y=3G4P/'__8`0P+P`.4T!K%"!O``0B;P`(L0EF#%-(2AA7R/_V<`!.!
XM=6,$<`%.=7#_3G5A<$/L@29%[($FM<EF#C(\`')K"'0`(L)1R?_\*4^"GBQXO
XM``0I3H*B2.>`@`@N``0!*6<02_H`"$ZN_^)@!D*G\U].<T/Z`"!.KOYH*4""?
XMIF8,+CP``X`'3J[_E&`$3KH`&E!/3G5D;W,N;&EB<F%R>0!)^0``?_Y.=4Y51
XM```O"DAY``$``#`L@1S!_``&+P!.N@;4*4""JE!/9A1"ITAY``$``$ZZ!IA07
XM3RYL@IY.=2!L@JI":``$(&R"JC%\``$`$"!L@JHQ?``!``H@;(*>("R"GI"HH
XM``10@"E`@JX@;(*N(+Q-04Y80J=.N@:,)$!*J@"L6$]G,"\M``PO+0`(+PI.1
XMN@"R*7P````!@K(@;(*J`&B````$(&R"J@!H@```"D_O``Q@0DAJ`%Q.N@;2N
XM2&H`7$ZZ!FHI0(*V(&R"MDJH`"103V<0(&R"MB)H`"0O$4ZZ!9I83R\L@K8O9
XM"DZZ`G@I;(*V@KI03TZZ!8X@;(*J((!.N@6>(&R"JB%```9G%DAX`^U(>@`L,
XM3KH%=B!L@JHA0``,4$\O+(*Z+RR"ODZZ^&)"ITZZ`XQ/[P`,)%].74YU*@!..
XM50``2.<,,"1M`!`@;0`(2J@`K&<8(&T`""`H`*SE@"@`($0@*``0Y8`F0&`$4
XM)FR!'A`32(!(P-"M``Q4@"E`@L)"IR\L@L).N@5F*4""QE!/9@A,WPPP3EU.'
XM=1`32(!(P"H`+P4@2U*(+P@O+(+&3KH!CB!L@L;1Q4/Z`5@0V6;\+RT`#"\*H
XM+RR"QDZZ`4X@;(+&0C!8`"E\`````8*^(&R"QM'%)DA2BR1+3^\`&!`32(!(K
XMP"H`L+P````@9R"ZO`````EG&+J\````#&<0NKP````-9PBZO`````IF!%*+M
XM8,P,$P`@;0``C`P3`")F,E*+($M2BQ`02(!(P"H`9R`@2E**$(6ZO````")F<
XM$`P3`")F!%*+8`9"*O__8`)@TF!$($M2BQ`02(!(P"H`9S"ZO````"!G*+J\T
XM````"6<@NKP````,9QBZO`````UG$+J\````"F<(($I2BA"%8,(@2E**0A!*9
XMA68"4XM2K(*^8`#_/$(20J<@+(*^4H#E@"\`3KH$*BE`@KI03V8(0JR"OF``)
XM_KYZ`"9L@L9@'B`%Y8`@;(*Z(8L(`"!+(`A*&&;\D<!3B%*(U\A2A;JL@KYMZ
XMW"`%Y8`@;(*Z0K`(`&``_H(@`#`\?_]@!#`O``X@;P`$2AAF_%-((F\`"%-`!
XM$-E7R/_\9P)"$"`O``1.=4SO`P``!"`((B\`#&`"$-E7R?_\9P9206`"0AA1.
XMR?_\3G5.50``2.<.,"1M``A"ITAZ`(Y.N@/$*4""RE!/9@A,WPQP3EU.=2!M<
XM``PB:``D+RD`!$ZZ!!HH`%A/9U)(>@!M($0O*``V3KH#["9`2H!03V<T2'@#(
XM[2\+3KH"T"P`4$]G)"`&Y8`J`"!%)6@`"`"D)48`G$AX`^U(>@`X3KH"K"5`V
XM`*!03R\$3KH#N%A/+RR"RDZZ`NI"K(+*6$]@@&EC;VXN;&EB<F%R>0!724Y$V
XM3U<`*@!(YT@`0H1*@&H$1(!21$J!:@9$@0I$``%A/DI$9P)$@$S?`!)*@$YU2
XM2.=(`$*$2H!J!$2`4D1*@6H"1(%A&B`!8-@O`6$2(`$B'TJ`3G4O`6$&(A]*3
XM@$YU2.<P`$A!2D%F($A!-@$T`$)`2$"`PR(`2$`R`H+#,`%"04A!3-\`#$YU7
XM2$$F`2(`0D%(04A`0D!T#]"`TX&V@6($DH-20%'*__),WP`,3G5.50``2JR"T
XMSF<&(&R"SDZ0+RT`"$ZZ``A83TY=3G5.5?_\+P0K;0`(__Q*K(*J9RQX`&`*!
XM+P1.N@#\6$]2A#`L@1Q(P+B`;>PP+($<P?P`!B\`+RR"JDZZ`@!03TJL@M)G2
XM!B!L@M).D$JL@2)G"B\L@2).N@%T6$]*K(+69P@@;(+6(*R"VDJL@MYG"B\L;
XM@MY.N@&46$]*K(+B9PHO+(+B3KH!A%A/2JR"YF<*+RR"YDZZ`7183TJL@NIGA
XM"B\L@NI.N@%D6$\L>``$""X`!`$I9Q0O#4OZ``I.KO_B*E]@!D*G\U].<TJLU
XM@K9F*DJL@L9G(B\L@L(O+(+&3KH!7"`L@KY2@.6`+P`O+(*Z3KH!2D_O`!!@`
XM#DZZ`3@O+(*V3KH!<%A/("W__"YL@IY.=2@?3EU.=4Y5``!(YPX@*"T`"'(&1
XM(`1.N@!$)$#5[(*J2H1M#C`L@1Q(P+B`;`1*DF82*7P````"@NYP_TS?!'!.Z
XM74YU,"H`!,!\@`!F""\23KH`+EA/0I)P`&#@2.=P`#0!Q,`F`4A#QL!(0T)#J
XMU(-(0,#!2$!"0-""3-\`#DYU(B\`!"QL@J9.[O_<(B\`!"QL@J9.[O^"+&R"0
XMID[N_\I,[P`&``0L;(*F3N[_XD[Z``(L;(*F3N[_Q$[Z``(B+P`$+&R"ID[NQ
XM_Z9.^@`"3.\`#@`$+&R"ID[N_]!(YP$$3.\@@``,+&R"HDZN_Y1,WR"`3G5.)
XM^@`"(F\`!"QL@J).[OYB3.\``P`$+&R"HD[N_SI.^@`"(F\`!"QL@J).[O[:+
XM+&R"HD[N_WPB;P`$("\`""QL@J).[O\N3OH``B!O``0L;(*B3N[^C$[Z``(L9
XM;(*B(F\`!"`O``A.[OW83OH``B)O``0L;(*B3N[^AB)O``0@;P`(("\`#"QL'
XM@J).[OY<(F\`!"`O``@L;(*B3N[^U"`O``0L;(*B3N[^PB!O``0L;(*B3N[^$
XM@$SO`P``!"QL@LI.[O^@(&\`!"QL@LI.[O^F(&\`!"QL@LI.[O^R2.<`,$SO7
XM#P``#$SO``\`'"QL@HI.KOZD3-\,`$YU(&\`!"QL@HI.[O^X(&\`!"QL@HI.L
XM[O\T+PI,[P<```@L;(**3J[^["1?3G4``````^P````!`````0``")H`````'
XM```#\@```^H```!)``````````````````````!D```!7@`*``$`(`(`````;
XM3@`````````````"*`````````````4`!0*``&X``0$``@``'@`0````````D
XM`````````0`"```>``4`````````!````$`!``(```8``P`````````D````:
XM``$``@``!@`#`````````#(````````&*@``!D$`("`@("`@("`@,#`P,#`@E
XM("`@("`@("`@("`@("`@(""00$!`0$!`0$!`0$!`0$!`#`P,#`P,#`P,#$!`H
XM0$!`0$`)"0D)"0D!`0$!`0$!`0$!`0$!`0$!`0$!`4!`0$!`0`H*"@H*"@("*
XM`@("`@("`@("`@("`@("`@("0$!`0"```!0``````````````^P````"````)
XM`0```"H```!D````!0````````!@````=````(@```"0````E`````````/R)
X,```#ZP````$```/RD
X``
Xend
Xsize 4692
END_OF_FILE
if test 6607 -ne `wc -c <'nodelete.uu'`; then
echo shar: \"'nodelete.uu'\" unpacked with wrong size!
fi
# end of 'nodelete.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.misc.