[comp.sys.amiga] ARP1.3 bug

opus@ihlpe.ATT.COM (452is-Kim) (04/17/89)

ARP 1.3 seems great so far, but I did find one bug.  If I use the supplied
mount command, then RAD: won't boot.  My A1000 will ask for a Workbench
disk on a warm boot, though the stuff I put in RAD: is still there.

When I switched back to Commodore's mount then I could boot from RAD: again.
-- 
						RoBiN G. KiM
						...att!ihlpe!opus

jwl@Feanor.Stanford.EDU (John Lockhart) (04/18/89)

In article <4697@ihlpe.ATT.COM> opus@ihlpe.ATT.COM (452is-Kim) writes:

>ARP 1.3 seems great so far, but I did find one bug.  If I use the supplied
>mount command, then RAD: won't boot.  My A1000 will ask for a Workbench
>disk on a warm boot, though the stuff I put in RAD: is still there.
  [stuff deleted]

I had this problem, too, but found that it was easy to solve.  Just
go into your MountList and add something like "BootPri = 5" to your
entry for RAD:.  This makes it work properly.

_________________________________________________________________________
                        -- John Lockhart
         jwl@feanor.stanford.edu        BIX: jlockhart

gilham@polya.Stanford.EDU (Fred Gilham) (04/19/89)

I don't know whether to call this a bug, or my stupidity, or just
something to watch out for.  But with the arp 1.3 delete command, if
you type something like

   delete *~

you delete everything.  At least, I do.  I guess it matches "anything"
concatenated with "not nothing".

Since I am used to typing rm *~ and delete #?~ because of gnuemacs and
mg, the risk is obvious.  Probably I'll just make a "clean" alias with
the right string (delete *'~ I think).  But maybe knowing this will
save someone some text....
-Fred Gilham

crs@cpsc6b.cpsc6a.att.com (Chris (Life is hard, and then you die) Seaman) (04/21/89)

In article <6585@medusa.cs.purdue.edu>, wolff@cs.purdue.EDU (Robert M. Wolff) writes:
< From article <8589@polya.Stanford.EDU>, by gilham@polya.Stanford.EDU (Fred Gilham):
< > I don't know whether to call this a bug, or my stupidity, or just
< > something to watch out for.  But with the arp 1.3 delete command, if
< > you type something like
< > 
< >    delete *~
< > 
< > you delete everything.  At least, I do.  I guess it matches "anything"
< > concatenated with "not nothing".

That's exactly what it is doing, which evaluates to "anything" :-).

< I believe (please correct me if I'm wrong) that you are trying to NOT delete
< something by the *~ notation.
< The docs for arp13 state that you need to use ~* to NOT delete something.
< 
< i.e. If you want to NOT delete *.c, you would 'delete ~*.c'...
< 
< Right? Now I'm not positive...I think this is right though.
< bob
< 

Bob is right on the money here.  Ths ARP overview manual tells us that
the "~" is a special character, and must be quoted via the tick "'"
character to escape its special meaning.  I think you will find that
modifying the original command to:

    delete *'~

will do what you expect it to.

-- 
Chris Seaman            |    o\  /o
crs@cpsc6a.att.com <or> |      ||         See "Attack of the Killer Smiley"!
..!ihnp4!cpsc6a!crs     |   \vvvvvv/     Coming Soon to a newsgroup near you!
                        |    \____/ 

billsey@agora.UUCP (Bill Seymour) (04/21/89)

From article <4697@ihlpe.ATT.COM:, by opus@ihlpe.ATT.COM (452is-Kim):
: 
: ARP 1.3 seems great so far, but I did find one bug.  If I use the supplied
: mount command, then RAD: won't boot.  My A1000 will ask for a Workbench
: disk on a warm boot, though the stuff I put in RAD: is still there.

	All you have to do is set the mount priority in the MountList. It
seems they assume that if you don't have it set, the priority goes to -127,
not 0 as in the commodore Mount command.

: When I switched back to Commodore's mount then I could boot from RAD: again.
: -- 
: 						RoBiN G. KiM
: 						...att!ihlpe!opus
-- 
     -Bill Seymour             ...tektronix!reed!percival!agora!billsey
                               ...tektronix!sequent.UUCP!blowpig!billsey
     Creative Microsystems   Northwest Amiga Group    At Home Sometimes
     (503) 691-2552          (503) 656-7393 BBS       (503) 640-0842

thad@cup.portal.com (Thad P Floryan) (04/23/89)

Since it appears so many are having the same problem for which I developed a
solution several months ago, enclosed is a shar containing my "purge" program.

Since it's small, distribution via the "text" newsgroup seems the expedient
solution.  In conversation with Bob Page over dinner last week, he's still
getting the { sources | binaries } set up "here"; Bob is now in N.California.

Makefile, source code, and uuencoded executable (for those without a C compiler)
are included.  Hope this prevents teeth-gnashing, hair-pulling, etc.   :-)

Thad Floryan [ thad@cup.portal.com (OR) ..!sun!portal!cup.portal.com!thad ]

#	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:
#	Makefile
#	purge.c
#	purge.uue
# This archive created: Sun Apr 23 03:51:29 1989
echo shar: extracting Makefile
sed 's/^X//' << \SHAR_EOF > Makefile
X# Makefile for purge command
X#
X
Xpurge:		purge.o
X		ln -M +Q purge -lc
X
Xpurge.o:	purge.c
X		cc purge
SHAR_EOF
if test 98 -ne "`wc -c Makefile`"
then
echo shar: error transmitting Makefile '(should have been 98 characters)'
fi
echo shar: extracting purge.c
sed 's/^X//' << \SHAR_EOF > purge.c
X/*				P U R G E
X *
X * Deletes files in the current directory whose names match the pattern "*~".
X * Such filenames are typically (GNU and MG) EMACS' and PATCH's backup files.
X * Execution errors return silently with the exit status set = 20 and without
X * deleting any files.
X *
X * USAGE:
X *
X *	CLI> PURGE
X *
X *
X * HISTORY:
X *
X *	V1.0	8-Jan-1989, Initial Release, Thad Floryan
X *		Copyright (c) 1989 by Thad Floryan
X *
X * DISTRIBUTION:
X *
X *	Although copyrighted, this program is freely redistributable.  Feel
X *	welcome to use this program for your personal learning.
X *
X * NOTES:
X *
X * 1.	The deleting of a file within an ExNext() loop perturbs the "order" of
X *	ExNext() in RAM: under 1.2.  To get around this OS bug, PURGE collects
X *	all the qualifying filenames in one pass and deletes them en masse; this
X *	is the reason for the DeleteNames structure and its support routines.
X *
X *	If the bug is fixed in later OS releases, then the following program
X *	suffices (assuming the presence of Manx' scdir() or equivalent):
X *
X *		extern char *scdir();
X *		main() {
X *			char *ptr;
X *			while ((ptr=scdir("*~")) != 0) 	unlink(ptr);
X *		}
X *		_wb_parse(){}
X *		_cli_parse(){}
X *
X *	The above program does work fine under 1.2 *IF* the current directory
X *	is a disk (either floppy or HD).
X *
X * 2.	At the end of this file are stubs for _cli_parse() and _wb_parse() to
X *	reduce the size of the executable because no arguments are parsed nor
X *	does PURGE run from the Workbench.
X *
X * 3.	The "equivalent" shell script I use on my UNIXPC/3B1 is:
X *
X * # @(#) purge - removes Emacs' and patch's "*~" files (including .*~ files)
X * #
X * # Usage:
X * #
X * #	$ purge			purges current directory  [ rm ./*~        ]
X * #	$ purge .		purges current directory  [ rm ./*~        ]
X * #	$ purge foo		purges named directory    [ rm foo/*~      ]
X * #	$ purge /foo/bar	purges named directory	  [ rm /foo/bar/*~ ]
X * #
X * # Thad Floryan, 3-Dec-1988
X *
X *	if [ -z "$1" ]; then 
X *	    rm -f ./*~ ./.*~
X *	else
X *	    rm -f $1/*~ $1/.*~
X *	fi
X *	exit 0
X *
X * BUILDING:
X *
X *	A Makefile is supplied to perform the following using Manx 3.6a:
X *
X *		cc purge
X *		ln -M +Q purge -lc
X */
X
X#include <functions.h>
X#include <libraries/dos.h>
X#include <libraries/dosextens.h>
X#include <exec/exec.h>
X
X#define MAXFILENAME 30		/* max length of a file name */
X
Xextern char *rindex();
Xextern int strlen();
X
Xvoid ACCUMULATE_NAME();
Xvoid DO_DELETE();
Xvoid FREE_NAMESPACE();
X
Xstatic char *version = "purge V1.0 8-Jan-1989; Copyright (c) 1989 Thad Floryan";
X
Xstatic struct FileInfoBlock *fibptr;
X
Xstruct DeleteNames {
X	struct DeleteNames	*DN_Next;
X	struct DeleteNames	*DN_Prev;
X	char			DN_Name[MAXFILENAME + 1];
X};
X
Xstatic struct DeleteNames *delbase;
Xstatic struct DeleteNames *dellast;
Xstatic struct DeleteNames *deltemp;
Xstatic int delcnt = 0;
X
X/*****************************************************************************/
Xmain()
X{
X	struct FileLock	*lockptr;
X	long		errcod = 0;
X
X/*
X *	Allocate memory for structure(s) of interest
X */
X	fibptr = (struct FileInfoBlock *)
X		AllocMem((long)sizeof(struct FileInfoBlock), (long)MEMF_CLEAR);
X/*
X *	Get Lock on current directory
X */
X	lockptr = Lock("", ACCESS_READ);
X/*
X *	Check for file(s)
X */
X	if (Examine(lockptr, fibptr) == 0)
X	{
X	    errcod = -1L;
X	}
X
X	if (errcod == 0L)
X	{
X	    ACCUMULATE_NAME();
X
X	    for (;;)
X	    {
X		if (ExNext(lockptr, fibptr) == 0L)
X		{
X		    if ((errcod = IoErr()) == ERROR_NO_MORE_ENTRIES)
X		    {
X			errcod = 0L;
X		    }
X		    break;	/* gets out of "for" loop */
X		}
X		ACCUMULATE_NAME();
X	    }
X	}
X	if (delcnt != 0)
X	{
X	    if (errcod == 0)
X	    {
X		DO_DELETE();
X	    }
X	    FREE_NAMESPACE();
X	}
X/*
X *	Free up everything we got from the system
X */
X	UnLock(lockptr);
X	FreeMem(fibptr, (long)sizeof(struct FileInfoBlock));
X
X	(errcod == 0L) ? exit(0) : exit(20);
X}
X
X/*****************************************************************************
X *	Qualifies a file whose last filename character is a '~'
X *
X */
Xvoid ACCUMULATE_NAME()
X{
X	register char	*stringptr;
X	register char	*indexptr;
X	int		status;
X/*
X *	Assure this is a FILE and not a DIRECTORY
X */
X	if (fibptr->fib_DirEntryType < 0)
X	{
X	    stringptr = fibptr->fib_FileName;
X	    indexptr  = rindex(stringptr, '~');
X
X	    if (indexptr == 0)
X	    {
X		return;
X	    }
X	    if((long)strlen(stringptr) == (indexptr - stringptr + 1L))
X	    {
X		if (delcnt == 0)	/* check if 1st name */
X		{
X		    delbase = (struct DeleteNames *)
X			AllocMem((long)sizeof(struct DeleteNames),
X				 (long)MEMF_CLEAR);
X		    dellast = delbase;
X		    strcpy(dellast->DN_Name, stringptr);
X		    delcnt++;
X		}
X		else			/* subsequent entries */
X		{
X		    deltemp = (struct DeleteNames *)
X			AllocMem((long)sizeof(struct DeleteNames),
X				 (long)MEMF_CLEAR);
X		    deltemp->DN_Prev = dellast;
X		    dellast->DN_Next = deltemp;
X		    strcpy(deltemp->DN_Name, stringptr);
X		    dellast = deltemp;
X		    delcnt++;
X		}
X	    }
X	}
X}
X
Xvoid DO_DELETE()
X{
X	deltemp = delbase;
X	while (deltemp != 0)
X	{
X/*
X *	unlink(deltemp->DN_Name) could be used, too.
X */
X	    DeleteFile(deltemp->DN_Name);
X	    deltemp = deltemp->DN_Next;
X	}
X}
X
X/*****************************************************************************
X *	Frees up the filename space in the reverse order it was allocated;
X *	this seems best to help the system coalesce the free memory chunks.
X */
Xvoid FREE_NAMESPACE()
X{
X	while (dellast != 0)
X	{
X	    deltemp = dellast->DN_Prev;
X	    FreeMem(dellast, (long)sizeof(struct DeleteNames));
X	    dellast = deltemp;
X	}
X}
X
X/*****************************************************************************
X *	The following two stubs are here to prevent linking in the library
X *	routines of the same name since we don't run from Workbench and
X *	there are no CLI arguments to parse.
X */
X_wb_parse(){}
X_cli_parse(){}
SHAR_EOF
if test 5769 -ne "`wc -c purge.c`"
then
echo shar: error transmitting purge.c '(should have been 5769 characters)'
fi
echo shar: extracting purge.uue
sed 's/^X//' << \SHAR_EOF > purge.uue
Xbegin 777 purge
XM```#\P`````````#``````````(```&M````&@````$```/I```!K4[Z`F)PZ
XM=7)G92!6,2XP(#@M2F%N+3$Y.#D@*&,I5&AA9"!&;&]R>6%N`$Y5__A"K?_XN
XM2'D``0``2'@!!$ZZ!A903RE`@!)(>/_^2'H`I$ZZ!:A03RM`__PO+(`2+RW_J
XM_$ZZ!6)03TI`9@@K?/______^$JM__AF+F%X+RR`$B\M__Q.N@524$]*0&86_
XM3KH%7BM`__BPO````.AF!$*M__A@!&%.8-1*;(`&9PY*K?_X9@1.N@$$3KH!7
XM+"\M__Q.N@5@6$](>`$$+RR`$DZZ!:Q03TJM__AF"D)G3KH#.E1/8`H_/``4)
XM3KH#+E1/3EU.=0``3E7__DCG`#`@;(`22J@`!&P``+`D;(`24(H_/`!^+PI.U
XMN@$.7$\F0"`+9@A,WPP`3EU.=2!+D<I2B"\(+PI.N@$@6$](P"!?L<!F=DIL"
XM@`9F,$AY``$``$AX`"A.N@4$4$\I0(`6*6R`%H`:+PH@;(`:4(@O"$ZZ`-A08
XM3U)L@`9@0$AY``$``$AX`"A.N@344$\I0(`>(&R`'B%L@!H`!"!L@!H@K(`>(
XM+PH@;(`>4(@O"$ZZ`)Q03REL@!Z`&E)L@`9@`/]H3E4``"EL@!:`'DJL@!YGT
XM&"!L@!Y0B"\(3KH#XEA/(&R`'BE0@!Y@XDY=3G5.50``2JR`&F<@(&R`&BEH'
XM``2`'DAX`"@O+(`:3KH$>%!/*6R`'H`:8-I.74YU3E4``$Y=3G5.50``3EU.$
XM=2!O``0B2$H89OQ3B!`O``FSR&<(L"!F^"`(3G5P`$YU(&\`!"`((F\`"!#9,
XM9OQ.=2!O``0@"$H89OR1P"`(4X!.=6%P0^R`$D7L@!*UR68.,CP`%6L(=``B&
XMPE')__PI3X`B+'@`!"E.@"9(YX"`""X`!`$I9Q!+^@`(3J[_XF`&0J?S7TYS,
XM0_H`($ZN_F@I0(`J9@PN/``#@`=.KO^48`1.N@`:4$].=61O<RYL:6)R87)Y8
XM`$GY``!__DYU3E4``"\*2'D``0``,"R`",'\``8O`$ZZ`V(I0(`N4$]F%$*G\
XM2'D``0``3KH#)E!/+FR`(DYU(&R`+D)H``0@;(`N,7P``0`0(&R`+C%\``$`9
XM"B!L@"(@+(`BD*@`!%"`*4"`,B!L@#(@O$U!3EA"ITZZ`Q8D0$JJ`*Q83V<NE
XM+RT`#"\M``@O"DZZ_K(Y?``!@#8@;(`N`&B````$(&R`+@!H@```"D_O``Q@E
XM0DAJ`%Q.N@,62&H`7$ZZ`O8I0(`X(&R`.$JH`"103V<0(&R`.")H`"0O$4ZZ*
XM`?)83R\L@#@O"DZZ_E`I;(`X@#Q03TZZ`A8@;(`N((!.N@)`(&R`+B%```9GP
XM%DAX`^U(>@`J3KH"'"!L@"XA0``,4$\O+(`\/RR`0$ZZ_"9"9TZZ``Q03R1?I
XM3EU.=2H`3E4``$JL@$)G!B!L@$).D#\M``A.N@`(5$].74YU3E7__"\$,"T`/
XM"$C`*T#__$JL@"YG*'@`8`H_!$ZZ`/Y43U)$N&R`"&WP,"R`",'\``8O`"\L'
XM@"Y.N@(04$]*K(!&9P8@;(!&3I!*K(`.9PHO+(`.3KH!EEA/2JR`2F<((&R`?
XM2B"L@$Y*K(!29PHO+(!23KH!H%A/2JR`5F<*+RR`5DZZ`9!83TJL@%IG"B\LD
XM@%I.N@&`6$]*K(!>9PHO+(!>3KH!<%A/+'@`!`@N``0!*6<4+PU+^@`*3J[_U
XMXBI?8`9"I_-?3G-*K(`X9C!*K(!B9R@P+(!F2,`O`"\L@&).N@%H,"R`0%)`-
XM2,#E@"\`+RR`/$ZZ`51/[P`08`Y.N@$^+RR`.$ZZ`5Y83R`M__PN;(`B3G4HC
XM'TY=3G5.50``2.<.(#@M``@P!,'\``8D0-7L@"Y*1&T*N&R`"&P$2I)F$#E\L
XM``*`:'#_3-\$<$Y=3G4(*@`'``1F""\23KH`"EA/0I)P`&#B(B\`!"QL@"I.V
XM[O_<(B\`!"QL@"I.[O^"3OH``B(O``0L;(`J3N[_N$[Z``),[P`&``0L;(`J"
XM3N[_FDSO``8`!"QL@"I.[O^4+&R`*D[N_\I.^@`"+&R`*D[N_WQ.^@`"3.\`Z
XM!@`$+&R`*D[N_ZQ,[P`&``0L;(`J3N[_XBQL@"I.[O_$3OH``B(O``0L;(`JY
XM3N[_IDCG`01,[R"```PL;(`F3J[_E$S?((!.=2)O``0L;(`F3N[^8D[Z``),<
XM[P`#``0L;(`F3N[_.B)O``0L;(`F3N[^VBQL@"9.[O]\3OH``B)O``0@+P`([
XM+&R`)D[N_RX@;P`$+&R`)D[N_HPB;P`$+&R`)D[N_H8@;P`$+&R`)D[N_H``<
XM`````^P````!`````0```M@````````#\@```^H````$````!````!0`````)
XH`````````^P````!```````````````````#\@```^L````!```#\A0`=
X``
Xend
SHAR_EOF
if test 2602 -ne "`wc -c purge.uue`"
then
echo shar: error transmitting purge.uue '(should have been 2602 characters)'
fi
#	End of shell archive
exit 0

gilham@polya.Stanford.EDU (Fred Gilham) (04/23/89)

In article <17528@cup.portal.com> thad@cup.portal.com (Thad P Floryan) writes:
>Since it appears so many are having the same problem for which I developed a
>solution several months ago, enclosed is a shar containing my "purge" program.
>
(over 2k of text and code omitted)

Or you can do the following:

    alias purge delete *'~

which accomplishes a less general version of the same thing.
-Fred Gilham

ecphssrw@lucky.csun.edu (Stephen Walton) (04/24/89)

In article <4697@ihlpe.ATT.COM>, opus@ihlpe (452is-Kim) writes:
>
>ARP 1.3 seems great so far, but I did find one bug.  If I use the supplied
>mount command, then RAD: won't boot.  My A1000 will ask for a Workbench
>disk on a warm boot, though the stuff I put in RAD: is still there.

Charlie Heath admitted over on Bix that he had somewhat misunderstood
how to make Mount work:  in particular, that a default BootPri of 5 is
to be supplied if there is none in the MountList.  Add a BootPri=5 to
your MountList entry for RAD: and all will be well.
--
Stephen Walton, Dept. of Physics & Astronomy, Cal State Univ. Northridge
RCKG01M@CALSTATE.BITNET       ecphssrw@afws.csun.edu
swalton@solar.stanford.edu    ...!csun!afws.csun.edu!ecphssrw

Sullivan@cup.portal.com (sullivan - segall) (04/24/89)

>Since it appears so many are having the same problem for which I developed a
>solution several months ago, enclosed is a shar containing my "purge" program.
>
>Since it's small, distribution via the "text" newsgroup seems the expedient
>solution.  In conversation with Bob Page over dinner last week, he's still
>getting the { sources | binaries } set up "here"; Bob is now in N.California.
>
>Makefile, source code, and uuencoded executable (for those without a C compiler)
>are included.  Hope this prevents teeth-gnashing, hair-pulling, etc.   :-)
>
>Thad Floryan [ thad@cup.portal.com (OR) ..!sun!portal!cup.portal.com!thad ]
>
[program deleted]

Thad here is a smaller faster solution:

ALIAS PURGE DELETE *'~


                           -Sullivan Segall
_____________________________________________________________

/V\  Sully set the example: to fly without moving.  We shall
 '   learn to soar on wings of thought. And the student will
     surpass the teacher.
To Quote the immortal Socrates: "I drank what?" -Sullivan
_____________________________________________________________

Mail to: ...sun!portal!cup.portal.com!Sullivan or
         Sullivan@cup.portal.com

edwin@hcr.UUCP (Edwin Hoogerbeets) (04/25/89)

Try the following with ARP's type command and with the standard AmigaDOS
type:

	type con:0/0/200/200/foo to con:200/0/200/200/bar

The CBM version opens two windows nicely and after a ctrl-\ in the
left window, they both go away.

ARP opens the output window and then gives:

Can't open con:0/0/200/200/foo

on the standard error after which the output window goes away again.

I run ConMan, but I don't think that should have anything to do with
it since the CBM version works. 

Can someone verify this?

Edwin

thad@cup.portal.com (Thad P Floryan) (04/26/89)

Thanks to all for their one-line ALIASes for my "purge" program!

When I first had the "problem", however, 1.3 (and its shell and alias &tc)
weren't available.  Besides, I wouldn't have discovered the RAM: bug if I
didn't write the (several versions of) "purge."  :-)

And pity to those who enter an extra space in their alias definition ...
reminiscient of the "rm -f * .o" typo on UNIX systems.  Bye bye files ... :-)

Thad Floryan [thad@cup.portal.com (OR) ..!sun!portal!cup.portal.com!thad]