[comp.binaries.amiga] amicron

ain@j.cc.purdue.edu (Patrick White) (04/28/88)

Submitted by:	kim@amdahl.uts.amdhal.com (Kim DeVaughn)
Summary:	unix cron for the Amiga -- run a command at a particular time.
Poster Boy:	Patrick White	(ain@j.cc.purdue.edu)
Archive Name:	sources/volume4/amicron24a.d.sh.Z binaries/volume5/amicron24a.d.sh.Z
Tested.
 
NOTES:
   I re-did the arc to sepatate the binaries, sources & docs.
   There are some set-up files in the docs shar.
 
 
-- Pat White   (co-moderator comp.sources/binaries.amiga)
ARPA/UUCP: j.cc.purdue.edu!ain  BITNET: PATWHITE@PURCCVM  PHONE: (317) 743-8421
U.S.  Mail:  320 Brown St. apt. 406,    West Lafayette, IN 47906
 
========================================
 
#	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
#	AmiCron.doc
#	.startcron
#	crontab
#	alias4shell
# This archive created: Wed Apr 27 10:10:51 1988
# By:	Patrick White (PUCC Land, USA)
echo shar: extracting README '(1997 characters)'
cat << \SHAR_EOF > README
This is an improved version of the AmiCron program on Fish Disk #113.  It was
originally written by Steve Sampson, and is NOT copyrighted, but is explicitly
placed Public Domain (p).  The Amiga port was done by Rick Schaeffer, with the
latest (v2.4a) improvements courtesy of Christian Balzer, and others (see the
AmiCron.doc file).  The timer code is extracted from Rob Peck's "simple timer
example" program.

I've included sample "crontab" and ".startcron" files, as well as my "startcron"
alias for the Dillon/Drew "shell".

To run amicron, simply copy "AmiCron24a" to your c: directory (renaming it to
"amicron"), and the ".startcron" and "crontab" files to your s: directory.
Add the initiating alias (in "alias4shell") to your shell ".login" file, and
re-source it.  Then just enter "startcron", and (poof) AmiCron will be up and
running whatever commands you've added to the "crontab" file.  [ If you're
NOT using "shell", just enter the newcli command as shown in "alias4shell" (or
some variation thereof). ]

Note that the "months" field now runs from 1-12 (instead of 0-11), and that
command initiation "accuracy" has been improved.  See the doc file for a
more complete list of improvements over v2.3.


Some future enhancements I'd like to see are:

    1 - A cleaner way of shutting amicron down

    2 - Fix amicron to run without a window to avoid it "blocking" when
        one accidentally types into it's window (you *will* do this, per
        Murphy)

    3 - Have amicron write it's output to a log file (due to 2), and
        provide a method for listing this file without shutting amicron
        down.

    4 - Continue to improve the "accuracy" of amicron's timing (in a load
        independent way).

I'll probably get working on these "RSN" ...


/kim


UUCP:  kim@amdahl.amdahl.com
  or:  {sun,decwrl,hplabs,pyramid,ihnp4,uunet,oliveb,cbosgd,ames}!amdahl!kim
DDD:   408-746-8462
USPS:  Amdahl Corp.  M/S 249,  1250 E. Arques Av,  Sunnyvale, CA 94086
CIS:   76535,25

SHAR_EOF
if test 1997 -ne "`wc -c README`"
then
echo shar: error transmitting README '(should have been 1997 characters)'
fi
echo shar: extracting AmiCron.doc '(8033 characters)'
cat << \SHAR_EOF > AmiCron.doc
                    AmiCron - Cron task for the Amiga

Following below is the original AmiCron documentation by Rick
Schaeffer (Version 2.3). I changed it were necessary and listed
additional features below.
<CB>

This is a (no longer) crude but effective version of the Unix (tm) 
program known as "cron" modified to run on an Amiga.  For those 
who aren't Unix knowledgeable, cron is a background task which 
uses a disk-resident table to automatically run certain tasks on a 
regular basis.  The cron table's format is very simple...it 
contains entries in the form of lines where each line has 6 fields 
and each field is separated by "white space" (either tabs or 
spaces) from it's neighbor. The fields are as follows:

   1.  Minute       (0-59)
   2.  Hour         (0-23)
   3.  Day          (1-31)	(now works, <CB>)
   4.  Month        (1-12) 
   5.  Day of week  (0-6 where 0=Sunday and 6=Saturday)
   6.  Command      This is the command to be run at the appointed 
                    time.  It will be run just as if typed into 
                    the CLI.

Each of the first 5 fields are numbers.  However, it is 
permissable to use an asterisk (*) in a field to mean ALL possible 
numbers for that field,  and you can specify a series of numbers 
separated by commas (,) and ranges separated by dashes (-).  For 
instance, in the Day field you could specify "1,5,10" to mean the 
first, fifth, and tenth days of the month; or you could specify 
"1-15" to mean the first through the fifteenth of the month.  Here 
are some examples of Amicron table entries:

  	Print the date in the crontask window every minute:
  		* * * * * date
  
  	Print the date in the crontask window on the hour, every hour:
  		0 * * * * date
  
  	Run uupc at 4:30 am every day except Sat and Sun:
  		30 4 * * 1-5 uupc -siscuva
  
  	Incrementally backup the files every other day at 7:30 pm:
  		30 19 * * 1,3,5 sdbackup -l -s LAST dh0: incbkup_1:

    	Backup the files on the 1st and 15th of each month at 1:00 am:
        	00 01 1,15 * * sdbackup -l dh0: SemiBkup_1:

The Amicron table file is by default located using the following path:

    S:	(or S:CronTab to be exact and include the filename)

but you now may specify a complete path (including filename!) for
the CronTab file (which needn't but should have this name) as a
command line parameter like this:

    Amicron RAM:MyCronTab

which would cause Amicron to use the CronTab file "MyCronTab"
located in the RAM: disk and not to access a disk drive every minute
to read in the CronTab file.

Crontab entries *MUST* be left justified starting in column 1 and 
each entry must contain 6 fields, each separated by spaces or 
tabs.

To run Amicron, you must use your favorite editor to create the
"CronTab" file.  Amicron needs a CLI window for displaying the 
output of the commands it runs...but it can be made as small or 
large as you wish.  Assuming that you have placed Amicron in your 
command directory (c:), you can start it by typing the following 
line into a "newcli" window:
    Amicron
Then you can size and move the window anywhere you want, just be 
sure not to type anything else into the window because that would 
prevent cron tasks from running (read: printing something in that 
window).

I have an entry in my startup-sequence file that looks like this:
   run newcli con:0/140/160/50/CronTask s:startcron
The "s:startcron" file contains one line:
   Amicron
This automatically sets up a tiny CronTask window and runs Amicron 
in it.

This program was originally written by Steve R.  Sampson (UUCP:
sys1!killer!sampson), who very kindly responded to my request for
a PD cron that I could port to Minix.  I haven't done that yet
(My new Amiga 2000 came in right after I received the cron
program <grin>) but will do so ASAP.  The modifications to make
it run on the Amiga were very minor!

Rick Schaeffer          UUCP:  seismo!uunet!iscuva!ricks
E. 13611 26th Ave.      Phone: (509)928-3533
Spokane, WA  99216

---- Changes up to Version 2.4
V2.31& V2.32
Besides changing the paths for CronTab (s:) & CronErr (t:) to more
decent Amiga places, I encountered a bug when I wanted to start
cron a special program on xmas. After some investigation I found
out that the localtime() function returns months only in the range
from  0 to 11. So it was not surprising  that my "12" in the month
field of CronTab was completely ignored. 
To not have the user adapt to the computer by having him to supply
months in the range from 0 to 11, I now increase the localtime()
month by one, so the documentation above is correct again. 

V2.33
Then I started wondering what that CronErr file was doing in the
first place, since all errors where displayed in the CLI window.
That instantly lead to the removal of this Unix artefact.
I'm aware of the need for a stderr output, nevertheless Cron should
always be attached to a CLI, so we can get rid of CronErr. 

V2.4 (a = Aztec C V3.4b , L = Lattice C V4.0)
I experienced a loss of aprox. one second per minute in the AmiCron
wakeups, since it was send to sleep for a fixed amount of time (59
seconds). The time Cron did spent in "bed" increased with the
length of the command call and the workload of the machine
(especially I/O ints. like disk access). 
So I now align to the to the next minute and keep this alignment by
tranquilizing the task only for the remaining time 'till the next
minute. Although the goal of starting it on the minute may only work
if there is no heavy workload on your machine, this delay is at least
not cumulative, like the one in the original version.
Another odd thing is that the Delay() function (nasty AmigaDog) 
obviously creates 5 I/O ints. per second (measured with SysMon
by Perry S. Kivolovitz). 
Although I couldn't detect any performance decreases caused by these
interrupts, I decided to use the TimeDelay function from the Timer.c
RKM example by Rob Peck in version 2.4 of AmiCron. Besides creating
no I/O ints., I found that the TimeDelay() function is not effected
by other I/O ints., so it turned out to be MUCH more accurate than
the Delay() function and therefore worth compiling & linking that
timer.c part.  
I also included the path command line parameter, a check for the 
existance of the CronTab file and tighten up the code here and there.

Some hints for the serious AmiCron addict: 
If don't wanna AmiCron to stumble  through your default path and
blast you with requesters (i.e you sometimes remove a disk with
utilities on which you have a path assigned to), why not defining
your own path in the StartCron batch file? Quite simple, but very
effective.
AmiCron can be easyly terminated (on it's next wakeup) by typing
Ctrl-C in its window or by sending it a break using the BREAK
command.  

This project/enhancement/fix is a combined effort by:
                          
______  /          
______\O                    - The Software Brewery - 
      \\              		    
       o            Sparkling, fresh software from W.-Germany
                 
     @@@@@	      Straight from the bar to your Amiga
     |~~~|\        
     | | |/        
     |___|        With our regards to the Software Distillery
---------------------------------------------------------------------

a West-German group of (hopefully professional) Amiga programmers
inspired by the Software Destillery 
(but we germans are more into brewing & drinking beer <grin>).

Programming & documentation by <CB>

<CB> is : Christian Balzer 
          Im Wingertsberg 45
          D-6108 Weiterstadt
          W. Germany

Aztec C support by Christof Bonnkirch (another CB :-) )
Further support/ideas by Peter Stark, Heiko Rath and Ralf Woitinas.

I would like to thank Steve R. Sampson for his initial PD cron, Rick
Schaeffer for his port to the Amiga, Rob Peck for all the work he
did and will (hopefully) do in the future and especially Fred Fish
for his continuous effort to spread all that fantastic PD software 
all over the world, without all of them I wouldn't have done this.   
<CB>
SHAR_EOF
if test 8033 -ne "`wc -c AmiCron.doc`"
then
echo shar: error transmitting AmiCron.doc '(should have been 8033 characters)'
fi
echo shar: extracting .startcron '(391 characters)'
cat << \SHAR_EOF > .startcron
; Edit the "path" command to suit your system, and personal preferences.
;
; Note: in my startup-sequence I make assigns for /: (to vd0:), r: (to ram:),
;       and ~: to my "home" directory (where "home" is defined as the
;       directory I'm cd'd to when I start up "shell").  Makes life a little
;       easier!

path    ~:bin /:usr/local/bin /:usr/bin r: /:bin /:etc
amicron s:crontab

SHAR_EOF
if test 391 -ne "`wc -c .startcron`"
then
echo shar: error transmitting .startcron '(should have been 391 characters)'
fi
echo shar: extracting crontab '(16 characters)'
cat << \SHAR_EOF > crontab
* * * * * date

SHAR_EOF
if test 16 -ne "`wc -c crontab`"
then
echo shar: error transmitting crontab '(should have been 16 characters)'
fi
echo shar: extracting alias4shell '(65 characters)'
cat << \SHAR_EOF > alias4shell
alias startcron  "run newcli con:0/13/640/55/CRON s:.startcron"

SHAR_EOF
if test 65 -ne "`wc -c alias4shell`"
then
echo shar: error transmitting alias4shell '(should have been 65 characters)'
fi
#	End of shell archive
exit 0

ain@j.cc.purdue.edu (Patrick White) (04/29/88)

Submitted by:	kim@amdahl.uts.amdhal.com (Kim DeVaughn)
Summary:	unix cron for the Amiga -- run a command at a particular time.
Poster Boy:	Patrick White	(ain@j.cc.purdue.edu)
Archive Name:	binaries/amiga/volume5/amicron24a.b.sh.Z
Tested.
 
NOTES:
   I re-did the arc to sepatate the binaries, sources & docs.
   There are some set-up files in the docs shar.
 
 
-- Pat White   (co-moderator comp.sources/binaries.amiga)
ARPA/UUCP: j.cc.purdue.edu!ain  BITNET: PATWHITE@PURCCVM  PHONE: (317) 743-8421
U.S.  Mail:  320 Brown St. apt. 406,    West Lafayette, IN 47906
 
========================================
 
#	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:
#	AmiCron24a.uu
# This archive created: Wed Apr 27 10:14:21 1988
# By:	Patrick White (PUCC Land, USA)
echo shar: extracting AmiCron24a.uu '(13241 characters)'
cat << \SHAR_EOF > AmiCron24a.uu

begin 600 AmiCron24a
M```#\P`````````#``````````(```A-```!9@````$```/I```(34[Z"C9./
M5?_R0J="ITZZ'KY03RM`__9*K?_V9@9P`$Y=3G5(>``H+RW_]DZZ'XI03RM`E
M__)*K?_R9@XO+?_V3KH?&%A/<`!@UDIM``IG!D)M__I@!CM\``'_^D*G+RW_;
M\C`M__I(P"\`2'H`.$ZZ($9/[P`0*T#__$JM__QG'$AX`"@O+?_R3KH?<E!/]
M+RW_]DZZ'L983W``8(0@+?_R8`#_?G1I;65R+F1E=FEC90``3E7_^$ZZ_TXKL
M0/_X(&W_^"MH`!3__"\M__A.N@"46$\@+?_\3EU.=4Y5__A*K0`(909*K0`0T
M9PHK?`````'__&`$0JW__"\M__Q.NO\(6$\K0/_X2JW_^&8&</].74YU+RT`D
M#"\M``@O+?_X81!/[P`,+RW_^&$X6$]P`&#>3E4``"!M``@Q?``)`!P@;0`(>
M(6T`#``@(&T`""%M`!``)"\M``A.NA[R6$]P`$Y=3G5.5?_\(&T`""MH``[_E
M_$JM``AG&"\M``A.NATV6$](>``H+RT`"$ZZ'G)03TJM__QG"B\M__Q.NAW`"
M6$]P`$Y=3G5.5?_\+PI(>@#,3KH0_%A/2'H!"$ZZ$/)83R!M``PO$$AZ`3%.[
MNA#B4$\@;0`,+Q!(>@$^3KH0TE!/#*T````"``AF,B!M``PB:``$#!$`/V80!
M3KH$@$AX``I.NAIR6$]@$B!M``PO*``$2&R$T$ZZ#A903V`.2'H!$TALA-!.D
MN@X&4$](;(302'H!"TZZ$'I03TZZ`19(;?_\3KH/L%A/2&W__$ZZ#K183R1`V
M,!)(P'(\DH`Y08-"0J="IS`L@T)(P"\`3KK^<$_O``Q@Q"1?3EU.=9LQ.S,SU
M;4%M:4-R;VX@=C(N-)LP;2!B>2";,6T\0T(^FS!M("8@+2";,VU4:&4@4V]F:
M='=A<F4@0G)E=V5R>9LP;2`M"@!);2!7:6YG97)T<V)E<F<@-#4L($0M-C$P8
M."!796ET97)S=&%D="P@FS%M5RU'97)M86YYFS!M"@!5<V%G93H@)7,@6U!A9
M=&@@)B!&:6QE;F%M95T*`"`@("`@("!O<B`G)7,@/R<@9F]R(&AE;'`*`%,ZW
M0W)O;E1A8@!#<F]N5&%B('!A=&@@/2`E<R`*``!.5?[^+PI(;?_\3KH.EEA/Y
M2&W__$ZZ#9I83R1`2'H`^$ALA-!.N@7N4$\I0(-,9AY(;(302'H`XDAL@5).#
MN@9V3^\`#$AX``%.NAC:6$]"K(-(2JR#2&8``*Y.N@#@2H!G``"@,"H``DC`-
M+P!(;(-03KH!C%!/2H!G``"(,"H`!$C`+P!(;(.03KH!=%!/2H!G<#`J``9(D
MP"\`2&R#T$ZZ`5Y03TJ`9UHP*@`(2,!2@"\`2&R$$$ZZ`4903TJ`9T(P*@`,!
M2,`O`$ALA%!.N@$P4$]*@&<L2'H`64AM_OY.N@O\4$](;(202&W^_DZZ"Y10>
M3T*G0J=(;?[^3KH9S$_O``Q@`/].+RR#3$ZZ$]183R1?3EU.=7(`0V%N)W0@F
M;W!E;B`E<PI4<GD@86=A:6X*`%)53B`^3DE,.B``3E7_?$CG""`O+(-,2'@`,
MA$AM_WQ.N@->3^\`#$J`9A(I?`````&#2'``3-\$$$Y=3G5![?]\)$AX`&`>"
M+PH@!.6`0>R``B\P"`!A)E!/)$!*@&8$<`!@TE*$N+P````%;=HO"DALA)!.=
MN@LV4$]P`6"X3E4``$CG`#`D;0`()FT`#`P3`"!G%@P3``EG$$H39PP@2U*+0
M(DI2BA*08.1*$V8*<`!,WPP`3EU.=4(2#!,`(&<&#!,`"68$4HM@\"`+8.).*
M50``2.<.("1M``@H+0`,>@!(>@$6+PI.N@J44$]*@&8*<`%,WP1P3EU.=2!*?
M4HH<$&<JO#P`,&TDO#P`.6X>$`9(@$C`<@HO`"`%3KH8-"0?U(`J`IJ\````R
M,&#.$`9(@$C`8```K+B%9@1P`6`"<`!@L+B%9@1P`6"H>@`@2E**'!!G*KP\?
M`#!M)+P\`#EN'A`&2(!(P'(*+P`@!4ZZ%^(D']2`*@*:O````#!@SKB%9@9P%
M`6``_VR\/``L9[QP`&``_V"XA6P&<`!@`/]6>@`@2E**'!!G*KP\`#!M)+P\$
M`#EN'A`&2(!(P'(*+P`@!4ZZ%XXD']2`*@*:O````#!@SKB%;@1P`6`"<`!@Q
M`/\42H!G`/]2D+P````L9P#_5%.`9Z!@`/[\*@!.50``2'H`2$ZZ#"I83TAZY
M`&Q.N@P@6$](>@"!3KH,%EA/2'H`JTZZ#`Q83TAZ`-Q.N@P"6$](>@$`3KH+`
M^%A/2'H!,4ZZ"^Y83TY=3G4*5V5L;"P@>6]U(')E86QL>2!S:&]U;&0@<F5A@
M9"!T:&4@+F1O8R!F:6QE+`H`8G5T(&AE<F4@87)E('-O;64@;6]R92!H:6YT@
M<SH*`%EO=2!M:6=H="!S<&5C:69Y(&]N;'D@3TY%(&-O;6UA;F0@;&EN92!P[
M87)A;65T97(L"@!T:&4@<&%T:"!W97)E($%M:6-R;VX@<VAO=6QD(&QO;VL@U
M9F]R(&ET)W,@8V]M;6%N9"!T86)L92P*`&EN8VQU9&EN9R!T:&4@9FEL96YAH
M;64@;V8@=&AE(&-O;6UA;F0@=&%B;&4N"@!)9B!Y;W4@9&]N)W0@<W5P<&QY\
M(&$@<&%T:"P@06UI8W)O;B!W:6QL('5S92!I="=S(&1E9F%U;'0*`'!A=&@@;
M*%,Z0W)O;E1A8BDN"@!.50``2.<(("1M``A3K0`,2JT`#&\D+RT`$$ZZ`#Y8^
M3R@`L+S_____9Q`@2E**$(2XO`````IG`F#20A*XO/____]F$+7M``AF"G``-
M3-\$$$Y=3G4@+0`(8/).50``2.<(("1M``@O"DZZ`#)83R@`L+S_____9R`@X
M!&`44Y((Z@`#``QP_TS?!!!.74YU8-9*@&?Z68!GY"`$8.I.50``2.<(,"1M(
M``A![($F)D@0*P`,2(!(P,"\````A+"\````A&8,2'C__R\+3KH/[%!/U_P`P
M```60>R"WK?(9=`@4K'J``1E;!`J``S`/``89PIP_TS?#!!.74YU"*H``@`,H
M2JH`"&8(+PI.NA#66$\P*@`02,`O`"\J``@2*@`-2(%(P2\!3KH&'D_O``PHC
M`$J`;A)*A&8$<`A@`G`0@2H`#'#_8*XDJ@`(("H`"-"$)4``!"!24I(0$$B`S
M2,#`O````/]@CDY5```O"DZZ$#PD0$J`9@AP`"1?3EU.=2\*+RT`#"\M``AA$
M!D_O``Q@Z$Y5``!(YP@@+RT`$$ZZ#I183T'L@!8D2$H29A(I?`````6#`G``Q
M3-\$$$Y=3G4O+0`,+PI.N@8X4$]*@&<$4(I@UB\J``0O+0`(3KH$#E!/*`"P*
MO/____]F!'``8,@@;0`0$40`#2!M`!`1?``!``P@+0`08+!.50``*6T`"(,F'
M2&T`$"\M``Q(>@`.3KH)-$_O``Q.74YU3E4``"\L@R8O+0`(3KH-3%!/3EU.^
M=6%P0^R#)D7L@R:UR68.,CP`G&L(=``BPE')__PI3X+Z+'@`!"E.@N9(YX"`^
M""X`!`$I9Q!+^@`(3J[_XF`&0J?S7TYS0_H`($ZN_F@I0(+J9@PN/``#@`=.O
MKO^48`1.N@`:4$].=61O<RYL:6)R87)Y`$GY``!__DYU3E4``"\*2'D``0``R
M,"R#(L'\``8O`$ZZ%7!03RE`@QYF%$*G2'D``0``3KH3NE!/+FR"^DYU(&R#J
M'D)H``0@;(,>,7P``0`0(FR#'C-\``$`"B!L@OH@+(+ZD*@`!%"`*4""_B!LQ
M@OX@O$U!3EA"ITZZ%3Y83R1`2JH`K&<P+RT`#"\M``@O"DZZ`+)/[P`,*7P`$
M```!@P8@;(,>`&B````$(&R#'@!H@```"F!$2&H`7$ZZ%9I83TAJ`%Q.NA4FC
M6$\I0(,:(&R#&DJH`"1G$"!L@QHB:``D+Q%.NA)N6$\O+(,:+PI.N@2>4$\I,
M;(,:@Q).NA)\(&R#'B"`3KH2JB!L@QXA0``&2'@#[4AZ`"Q.NA*(4$\@;(,>E
M(4``#"\L@Q(O+(,*3KKUR%!/0J=.NA".6$\D7TY=3G4J`$Y5``!(YPPP)&T`9
M$"!M``@@*`"LY8`H`"!$("@`$.6`)D`0$TB`2,#0K0`,5(`I0(,.0J<O+(,.,
M3KH4$E!/*4"#%F8(3-\,,$Y=3G40$TB`2,`O`"!+4H@O""\L@Q9.N@%:3^\`%
M#$AZ`5`0$TB`2,#0K(,6+P!.N@/"4$\O+0`,+PHO+(,63KH#7D_O``Q"K(,*%
M)FR#%B1+$!-(@$C`*@"PO````"!G(+J\````"6<8NKP````,9Q"ZO`````UGK
M"+J\````"F8$4HM@S`P3`"!M``",#!,`(F8R4HL@2U*+$!!(@$C`*@!G("!*\
M4HH0A;J\````(F80#!,`(F8$4HM@!D(J__]@`F#28$0@2U*+$!!(@$C`*@!G8
M,+J\````(&<HNKP````)9R"ZO`````QG&+J\````#6<0NKP````*9P@@2E**+
M$(5@PB!*4HI"$$J%9@)3BU*L@PI@`/\\0A)"IR`L@PI2@.6`+P!.NA+>4$\I&
M0(,29@A"K(,*8`#^QGH`)FR#%F`:(`7E@"!L@Q(ABP@`+PM.N@G.6$]2@-?`)
M4H6ZK(,*;>`@!>6`(&R#$D*P"`!@`/Z.(`!,[P,```0@""(O``Q@`A#95\G_Y
M_&<&4D%@`D(84<G__$YU3E4``"\M``Q(>`,!+RT`"&$(3^\`#$Y=3G5.50``'
M2.</,"1M``A.N@XB)FR#'G@`8!!R!B`$3KH/RDJS"`!G$E*$,"R#(DC`N(!M9
MYGH&8```T`@M``$`#F<T2'C__R\*3KH0$E!/+`!G)"\&3KH01EA/+PI.N@_(^
M6$]*@&803KH/X"H`L+P```#-9@``E$AX`^TO"DZZ#^Q03RP`2H9F9`@M````!
M#F8$>@%@=$AX`^XO"DZZ#\Y03RP`9@A.N@^B*@!@7$AX`"%(>@">3KH2,E!/:
M+@!G"B\'3KH0'%A/8")(>``!2'H`CB\&3KH/U$_O``Q(>/__0J<O!DZZ#ZI/9
M[P`,8"H@+0`,P+P```4`L+P```4`9A@O!DZZ#PQ83WH$*46#`G#_3-\,\$Y=_
M3G5R!B`$3KH.SB>&"`!R!B`$3KH.PB!`T<LQ;0`.``0(+0`#``YG$$AX``%"8
MIR\&3KH/2$_O``P@!&"^9&]S+FQI8G)A<GD```!.50``2.<,("@M``A.N@S&E
M<@8@!$ZZ#G8D0-7L@QY*A&T.,"R#(DC`N(!L!$J29A(I?`````*#`G#_3-\$&
M,$Y=3G4P*@`$2,#`O`````.PO`````%F#"E\````!8,"</]@V"\M`!`O+0`,,
M+Q).N@ZT3^\`#"H`L+S_____9@Q.N@YJ*4"#`G#_8+`@!6"L,#Q__V`$,"\`D
M#B!O``1*&&;\4T@B;P`(4T`0V5?(__QG`D(0("\`!$YU,#Q__V`$,"\`#E-`.
M:Q0@;P`$(F\`"+$)9@Q32$H85\C_]G``3G5C!'`!3G5P_TYU(&\`!"`((F\`T
M"!#99OQ.=4Y5``!(YPXP)&T`"$*G2'H`CDZZ$'Y03RE`@%YF"$S?#'!.74YUW
M(&T`#")H`"0O*0`$3KH0NEA/*`!G4DAZ`&T@1"\H`#9.NA",4$\F0$J`9S1(S
M>`/M+PM.N@VZ4$\L`&<D(`;E@"H`($4E:``(`*0E1@"<2'@#[4AZ`#A.N@V6V
M4$\E0`"@+P1.NA!86$\O+(!>3KH-\%A/0JR`7F"`:6-O;BYL:6)R87)Y`%=)K
M3D1/5P`J`$Y5```O+0`(80983TY=3G5.50``2.<.`"!M``@H$'(\(`1.N@7$U
M.4"#*G(\(`1.N@60*`!R/"`$3KH%KCE`@RQR/"`$3KH%>B@`<A@@!$ZZ!9@Y_
M0(,N<A@@!$ZZ!60H`'('(`1.N@6".4"#-B(\```%M2`$3KH%2N6`T+P```!.H
M.4"#-"(\```%M2`$3KH%6B@`2H1G'BH\```!;3`L@S3`?``#9@)2A;B%;0B8]
MA5)L@S1@WE*$.42#.'P`(`;E@$'L@&(J,`@`O+P````!9@PP+(,TP'P``V8"C
M4H6XA6\,F(52AKR\````#&W0.4:#,CE$@S!![(,J(`A,WP!P3EU.=4Y5_]1"L
MITAM_]1(>``!2'H`ADZZ#K)/[P`02H!G%$AZ`(-.N@"86$](>``!3KH*5%A/M
M0J="ITZZ#*903RM`_^([?``*__!(;?_43KH.#EA/("W_^-"\``>A("(\``]"!
M0$ZZ!*K0K?_T*T#__$AM_]1.N@Q06$\O+?_B3KH,[EA/2JT`"&<((&T`"""M5
M__P@+?_\3EU.=71I;65R+F1E=FEC90!T:6UE<B!I<R!N;W0@879A:6QA8FQE_
M"@``3E4``$AM``PO+0`(2'H$KDZZ`)!/[P`,3EU.=4Y5``!(YP@@)&T`$`RMJ
M````!``49@@@;0`(*!!@%$JM``QO""!M``@H$&`&(&T`""@00JT`%$JM``QLS
M$D2M``Q*A&P*1(0K?`````$`%"(M``P@!$ZZ`])![("24XH4L`@`(BT`#"`$:
M3KH#RB@`9MY*K0`49P93BA2\`"T@"DS?!!!.74YU3E7_%$CG"#`D;0`()FT`S
M#$*M__@K;0`0__P@2U*+$!!(@$C`*`!G``,PN+P````E9@`#"D(M_R(K?```2
M``'_]"M\````(/_P*WP``"<0_^P@2U*+$!!(@$C`*`"PO````"UF$$*M__0@D
M2U*+$!!(@$C`*`"XO````#!F%"M\````,/_P($M2BQ`02(!(P"@`N+P````JB
M9AH@;?_\6*W__"M0_^@@2U*+$!!(@$C`*`!@-$*M_^A@(G(*("W_Z$ZZ"<#0'
MA)"\````,"M`_^@@2U*+$!!(@$C`*`!![("E"#```D@`9M*XO````"YF8B!+3
M4HL0$$B`2,`H`+"\````*F8:(&W__%BM__PK4/_L($M2BQ`02(!(P"@`8#1"O
MK?_L8")R"B`M_^Q.N@E6T(20O````#`K0/_L($M2BQ`02(!(P"@`0>R`I0@P%
M``)(`&;2*WP````$_^2XO````&QF%B!+4HL0$$B`2,`H`"M\````!/_D8!2X&
MO````&AF#"!+4HL0$$B`2,`H`"`$8'XK?`````C_X&`<*WP````*_^!@$BM\K
M````$/_@8`@K?/____;_X"\M_^1(;?\B+RW_X"\M__Q.NOVT3^\`$"M`_]P@D
M+?_DT:W__&!:(&W__%BM__PK4/_<+RW_W$ZZ`AQ83RM`_^1@2B!M__Q8K?_\E
M*!!![?\A*TC_W!"$8"B0O````&-GXE.`9Y20O`````MG`/]N68!GM%6`9P#_0
M;E>`9P#_<F#,0>W_(I'M_]PK2/_D("W_Y+"M_^QO!BMM_^S_Y$JM__1G<"!MH
M_]P,$``M9PHB;?_<#!$`*V8T#*T````P__!F*E.M_^@@;?_<4JW_W!`02(!(B
MP"\`3I)83["\_____V8*</],WPP03EU.=6`8+RW_\$Z26$^PO/____]F!'#_]
M8.)2K?_X("W_Z%.M_^BPK?_D;MI"K?_@8"0@;?_<4JW_W!`02(!(P"\`3I)8&
M3["\_____V8$</]@JE*M_^`@;?_<2A!G"B`M_^"PK?_L;<H@+?_@T:W_^$JMN
M__1F*F`:2'@`($Z26$^PO/____]F!G#_8`#_<%*M__@@+?_H4ZW_Z+"M_^1NU
MV&`8+P1.DEA/L+S_____9@9P_V``_TA2K?_X8`#\Q"`M__A@`/\X2.=(`$*$B
M2H!J!$2`4D1*@6H&1($*1``!83Y*1&<"1(!,WP`22H!.=4CG2`!"A$J`:@1$^
M@%)$2H%J`D2!81H@`6#8+P%A$B`!(A]*@$YU+P%A!B(?2H!.=4CG,`!(04I!0
M9B!(038!-`!"0$A`@,,B`$A`,@*"PS`!0D%(04S?``Q.=4A!)@$B`$)!2$%('
M0$)`=`_0@-.!MH%B!)*#4D!1RO_R3-\`#$YU(&\`!"`(2AAF_)'`(`A3@$YU!
M3E4``$AL@3PO+0`(3KH`"%!/3EU.=4Y5```O!"@M``@O+0`,+P1.N@`T4$^XV
MO`````IF)B!M``P0*``,2(!(P`@```=G%$AX__\O+0`,3KH`_E!/*!].74YU)
M8/A.50``+PHD;0`,(%*QZ@`$91H@+0`(P+P```#_+P`O"DZZ`-!03R1?3EU.,
M=2!24I(0+0`+$(!(@$C`P+P```#_8.1.50``+PI![($F)$@@2M7\````%B\(6
M81!83T'L@MZUR&7J)%].74YU3E4``$CG""`D;0`(>``@"F8*</],WP003EU.N
M=4HJ``QG5`@J``(`#&<,2'C__R\*85903R@`$"H`#4B`2,`O`$ZZ!0A83XB`B
M""H``0`,9PHO*@`(3KH"/%A/""H`!0`,9Q0O*@`23KH"V%A/+RH`$DZZ`B!8=
M3T*20JH`!$*J``A"*@`,(`1@C$Y5__Y(YP@@)&T`"$'Z_T(I2(+>""H`!``,N
M9PIP_TS?!!!.74YU""H``@`,9S(H$IBJ``@O!"\J``@0*@`-2(!(P"\`3KH".
MED_O``RPA&<0".H`!``,0I)"J@`$</]@O@RM_____P`,9A`(J@`"``Q"DD*J5
M``1P`&"D2JH`"&8(+PI.N@"D6$\,:@`!`!!F,!MM``___TAX``%(;?__$"H`.
M#4B`2,`O`$ZZ`C)/[P`,L+P````!9I@@+0`,8`#_8"2J``@P*@`02,#0J@`(?
M)4``!`CJ``(`#"!24I(0+0`/$(!(@$C`P+P```#_8`#_,$Y5```O"D'L@28D)
M2$HJ``QG&-7\````%D'L@MZUR&4(<``D7TY=3G5@XD*20JH`!$*J``@@"F#JT
M3E7__"\*)&T`"$AX!`!.N@#"6$\K0/_\9A@U?``!`!`@"M"\````#B5```@D@
M7TY=3G4U?`0``!`(Z@`!``PE;?_\``@0*@`-2(!(P"\`3KH`WEA/2H!G!@`J:
M`(``#&#,3E4``$CG`#`D;(,^8!0F4B`J``10@"\`+PI.N@8B4$\D2R`*9NA"U
MK(,^3-\,`$Y=3G5.50``+PI!^O_&*4B"XD*G("T`"%"`+P!.N@6R4$\D0$J`,
M9@AP`"1?3EU.=22L@SXE;0`(``0I2H,^(`I0@&#F3E4``"\M``AAMEA/3EU.P
M=4Y5``!(YP`PE\LD;(,^8`X@;0`(48BQRF<2)DHD4B`*9NYP_TS?#`!.74YUR
M(`MG!":28`0I4H,^("H`!%"`+P`O"DZZ!7A03W``8-A.50``+PIR!B`M``A.W
MN@*T)$#5[(,>2JT`"&T2,"R#(DC`(BT`"+*`;`1*DF80*7P````"@P)P_R1?F
M3EU.=7(&("T`"$ZZ`GP@;(,>+S`(`$ZZ`M983TJ`9P1P`6`"<`!@UDY5```O<
M+0`(3KH"DEA/2H!F#DZZ`JHI0(,"</].74YU<`!@^$Y5``!(YPP@*"T`"$ZZ@
M`'9R!B`$3KH")B1`U>R#'DJ$;0XP+(,B2,"X@&P$2I)F$BE\`````H,"</],]
MWP0P3EU.=3`J``3`?``#9@PI?`````6#`G#_8.(O+0`0+RT`#"\23KH"ED_OC
M``PJ`+"\_____V8,3KH")"E`@P)P_V"Z(`5@MDY5__Q(>!``0J=.N@324$\KO
M0/_\"```#&<22JR#!F8(("W__$Y=3G5.N@`&<`!@]$Y5``!(>``$2'H`'DZZ,
M`@@O`$ZZ`C)/[P`,2'@``4ZZ``Q83TY=3G5>0PH`3E4``$JL@MYG!B!L@MY.T
MD"\M``A.N@`(6$].74YU3E7__"\$*VT`"/_\2JR#'F<L>`!@"B\$3KH`SEA/!
M4H0P+(,B2,"X@&WL,"R#(L'\``8O`"\L@QY.N@.R4$]*K(+B9P8@;(+B3I!*:
MK(+R9PHO+(+R3KH!W%A/2JR"[F<*+RR"[DZZ`<Q83TJL@O9G"B\L@O9.N@&\!
M6$\L>``$""X`!`$I9Q0O#4OZ``I.KO_B*E]@!D*G\U].<TJL@QIF*DJL@Q9G:
M(B\L@PXO+(,63KH#/%!/("R#"E*`Y8`O`"\L@Q).N@,H4$]@#DZZ`Q0O+(,:N
M3KH#A%A/("W__"YL@OI.=2@?3EU.=4Y5``!(YPX@*"T`"'(&(`1.N@!$)$#5*
M[(,>2H1M#C`L@R)(P+B`;`1*DF82*7P````"@P)P_TS?!'!.74YU,"H`!,!\=
M@`!F""\23KH`+EA/0I)P`&#@2.=P`#0!Q,`F`4A#QL!(0T)#U(-(0,#!2$!":
M0-""3-\`#DYU(B\`!"QL@NI.[O_<(B\`!"QL@NI.[O^"(B\`!"QL@NI.[O^X@
M3.\`#@`$+&R"ZD[N_R(L;(+J3N[_RBQL@NI.[O]\(B\`!"QL@NI.[O\H3.\`I
M!@`$+&R"ZD[N_ZQ,[P`&``0L;(+J3N[_XBQL@NI.[O_$3.\`#@`$+&R"ZD[NK
M_]9,[P`.``0L;(+J3N[_OB(O``0L;(+J3N[_IDSO``X`!"QL@NI.[O_02.<!E
M!$SO((``#"QL@N9.KO^43-\@@$YU(F\`!"QL@N9.[OX^3OH``B)O``0L;(+FT
M3N[^8DY5``!(YP@@2'C__TZZ`-!83R@`L+S_____9@IP`$S?!!!.74YU2'D`Q
M`0`!2'@`(DZZ`3A03R1`2H!F#"\$3KH!?EA/<`!@UB5M``@`"A5M``\`"15\Z
M``0`"$(J``X51``/0J=.N@$L6$\E0``02JT`"&<*+PI.N@!:6$]@"DAJ`!1.8
MN@%26$\@"F"23E4``"\*)&T`"$JJ``IG""\*3KH!;EA/%7P`_P`()7S_____^
M`!1P`!`J``\O`$ZZ`0)83TAX`"(O"DZZ`.)03R1?3EU.=2)O``0L;(+F3N[^2
MGB`O``0L;(+F3N[^MDY5```O"DJM``AF"'``)%].74YU2'D``0`!+RT`#$ZZ^
M`&!03R1`2H!F!'``8.`5?``%``@U;0`.`!(E;0`(``X@"F#*3E4``"\*)&T`0
M""`*9@8D7TY=3G45?`#_``@E?/____\`%"5\_____P`8<``P*@`2+P`O"DZZ9
M`$903V#23OH``DSO``,`!"QL@N9.[O\Z2.<#`")O``PL;(+F3J[^.$S?`,!.2
M=4[Z``(B;P`$+&R"YD[N_MHL;(+F3N[_?$[Z``(B;P`$("\`""QL@N9.[O\N^
M("\`!"QL@N9.[OZP(&\`!"QL@N9.[OZ,(&\`!""(6)!"J``$(4@`"$YU(&\`J
M!$SO`@$`""(O`!`L;(+F3N[^1"QL@N8B;P`$("\`"$[N_=@B;P`$+&R"YD[NW
M_I@B;P`$+&R"YD[N_H9,[P`#``0L;(+F3N[^SB!O``0L;(+F3N[^@$SO`P```
M!"QL@%Y.[O^@(&\`!"QL@%Y.[O^F(&\`!"QL@%Y.[O^R``````/L`````0``E
M``$```JL`````````_(```/J````R0```TX```..```#S@``!`X```1.<@``K
M``````!R*P```````G<```````,!=RL``````P)A```````)`6$K``````D"#
M>```````!0%X*P`````%`@```````````````````!\````<````'P```!X`@
M```?````'@```!\````?````'@```!\````>````'S`Q,C,T-38W.#EA8F-D,
M968````@("`@("`@("`P,#`P,"`@("`@("`@("`@("`@("`@()!`0$!`0$!`K
M0$!`0$!`0$`,#`P,#`P,#`P,0$!`0$!`0`D)"0D)"0$!`0$!`0$!`0$!`0$!\
M`0$!`0$!0$!`0$!`"@H*"@H*`@("`@("`@("`@("`@("`@("`@)`0$!`(```*
M```````````````!``````$``````````````````````0$````!````````%
M``````````````$"`````0``````````````````````````````````````$
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````!0``````^P````%`````0`````````$````"`````P`A
7```0`````````_(```/K`````0```_(%N
``
end
size 9428
SHAR_EOF
if test 13241 -ne "`wc -c AmiCron24a.uu`"
then
echo shar: error transmitting AmiCron24a.uu '(should have been 13241 characters)'
fi
#	End of shell archive
exit 0