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?`````'``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