ejkst@cisunx.UUCP (Eric J. Kennedy) (07/01/88)
Well, I was monitoring an experiment in the lab until the wee hours of the morning, and started thinking... "Wouldn't it be nice if... I could run things from batch files, either attended or unattended, without having to worry about whether there's enough ram available?" So... # 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: # enough.man # enough.c # enough.uu # launch # launch.sh # This archive created: Fri Jul 1 03:28:05 EDT 1988 # By: Eric Kennedy echo shar: extracting enough.man '(2272 characters)' cat << \SHAR_EOF > enough.man Enough AMIGA PROGRAMMER'S MANUAL Enough NAME Enough - test for the availibility of ram. SYNOPSIS Enough TOTAL [CHIP] DESCRIPTION This short command makes launching applications via batch files a little safer. We all know that the Amiga should be able to handle a situation where your memory is running low and you try to start an application that requires more ram than you have free, or more chip ram than you have free. A well written program will let you know of the situation, if possible, and exit properly. If there isn't even enough ram free to load the program, AmigaDOS should safely exit with the ever-so-intelligible "not an object module." We also all know that this doesn't always happen, or that the low memory situation will cause problems elsewhere in the system. The Amiga simply doesn't like to be low on memory. Enough's uses include those "setup" types of files, where you rez -l make cc ln as or run preview run mg tex -R or the ever popular AmiCron, where you could run MRBackup every Monday afternoon at 3:00, provided there's enough ram. EXAMPLE Enough 200000 100000 will test for the existance of 200000 bytes of ram, 100000 of which must be chip ram. If there is enough, enough will exit with a return code of 0; if there isn't, it will exit with a return code of 10. Very simple. If you look at the source code, you'll see just how simple. Two very simple examples are provided. Launch is an execute script, and launch.sh is a script for Matt Dillon's shell. AUTHOR Eric Kennedy ejkst@cisunix.edu BUGS How could anything so short have bugs? Enough simply compares your requested amount with the amount in the system, so it is up to you to provide your own safety margins. Experiment first, using pm or shell or mclk, or some other utility that provides seperate reports for fast, chip, and total. Run your system down do what you think the minimum is and see if there's a problem running your application. SHAR_EOF if test 2272 -ne "`wc -c enough.man`" then echo shar: error transmitting enough.man '(should have been 2272 characters)' fi echo shar: extracting enough.c '(1317 characters)' cat << \SHAR_EOF > enough.c /************** * * Enough.c - Tests for the presence of a specified amount of free total ram and * free chip ram. * * Synopsis - enough TOTAL [CHIP] * * Returns - 0 if enough total ram and chip ram is available. * 10 (AmigaDOS ERROR level) if enough total ram or chip ram is not * available. * * Author - Eric Kennedy ejkst@cisunx.edu * * Status - public domain * **************/ #include <exec/memory.h> main(argc,argv) char *argv[]; { long freechip, freefast; extern long AvailMem(); long reqchip = 0L; long reqtot; extern long atol(); if(argc>1) /* Is there a first argument? */ { reqtot = atol(argv[1]); if(argc > 2) /* Is there a second argument? */ reqchip = atol(argv[2]); } else exit(20); /* no error message--keep it small */ Forbid(); /* get available memory */ freechip = AvailMem (MEMF_CHIP); freefast = AvailMem (MEMF_FAST); Permit(); /* compare to requested mem */ if((freechip >= reqchip) && (freechip+freefast >= reqtot)) exit(0); /* there was enough */ else exit(10); /* there wasn't enough */ } SHAR_EOF if test 1317 -ne "`wc -c enough.c`" then echo shar: error transmitting enough.c '(should have been 1317 characters)' fi echo shar: extracting enough.uu '(3199 characters)' cat << \SHAR_EOF > enough.uu begin 644 enough M #\P # ( () ,0 $ /I ""4[Z 21. M5?_P0JW_] QM $ "&\N(&T "B\H 1.N@""6$\K0/_P#&T @ (;Q(@;0 * M+R@ "$ZZ &A83RM __1@"C\\ !1.N@6 5$].N@=82'@ DZZ!QI83RM __Q( M> $3KH'#%A/*T#_^$ZZ!W @+?_\L*W_]&T8(BW__-*M__BRK?_P;0I"9TZZ M!3Q43V */SP "DZZ!3!43TY=3G5.5?_\2.<(("1M @,$@ @9P8,$@ )9@12 MBF#P> ,$@ M9@9X 5**8 @,$@ K9@)2BD*M__Q@)"!*4HH0$$B 2,!R"B\ M("W__$ZZ _(D']2 E+P P*T+__! 22(!20$'L@ ((, " !FRDI$9P@@ M+?_\1(!@!" M__Q,WP003EU.=6%P0^R AD7L@(:UR68.,CP #VL(= BPE') M__PI3X"&+'@ !"E.@(I(YX" ""X ! $I9Q!+^@ (3J[_XF &0J?S7TYS0_H M($ZN_F@I0(".9@PN/ #@ =.KO^48 1.N@ :4$].=61O<RYL:6)R87)Y $GY M !__DYU3E4 "\*2'D 0 ,"R A,'\ 8O $ZZ!=103RE @))F%$*G2'D M 0 3KH%C%!/+FR ADYU(&R DD)H 0@;("2,7P 0 0(FR DC-\ $ "B!L M@(8@+("&D*@ !%" *4" EB!L@)8@O$U!3EA"ITZZ!8A83R1 2JH K&<N+RT M#"\M @O"DZZ +)/[P ,.7P 8":(&R D@!H@ !"!L@)( :( I@1$AJ M %Q.N@6@6$](:@!<3KH%9EA/*4" G"!L@)Q*J D9Q @;("<(F@ )"\13KH$ MM%A/+RR G"\*3KH"?%!/*6R G("@3KH$J"!L@)(@@$ZZ!+0@;("2(4 !F<6 M2'@#[4AZ "Q.N@204$\@;("2(4 #"\L@* _+("D3KK]/%Q/0F=.N@+X5$\D M7TY=3G4J $Y5 !(YPPP)&T $"!M @@* "LY8 H "!$("@ $.6 )D 0$TB M2,#0K0 ,5( Y0("F0J<P+("F2, O $ZZ!')03RE @*AF"$S?##!.74YU$!-( M@#\ ($M2B"\(+RR J$ZZ 41/[P *2'H!.A 32(!(P-"L@*@O $ZZ 7A03S\M M XO"B\L@*A.N@%$3^\ "D)L@*0F;("H)$L0$TB .@"P? @9QBZ? )9Q*Z M? ,9PRZ? -9P:Z? *9@12BV#8#!, (&UZ#!, (F8N4HL@2U*+$!!(@#H M9QX@2E**$(6Z? B9A ,$P B9@12BV &0BK__V "8-9@."!+4HL0$$B .@!G M)KI\ "!G(+I\ EG&KI\ QG%+I\ UG#KI\ IG""!*4HH0A6#.($I2BD(0 M2D5F E.+4FR I& _UI"$D*G,"R I%) 2,#E@"\ 3KH#7%!/*4" H&8(0FR MI& _N1Z "9L@*A@'C %2,#E@"!L@* ABP@ +PM.N@%:6$]20$C U\!21;IL M@*1MW# %2,#E@"!L@*!"L @ 8 #^IB 3.\# $( @R+P ,8 (0V5?)__QG M!E)!8 )"&%')__Q.=3 \?_]@!# O P@;P $2AAF_%-((F\ "%- $-E7R/_\ M9P)"$" O 1.=2!O 0@"")O @0V6;\3G5(YW - '$P"8!2$/&P$A#0D/4 M@TA P,%(0$) T(),WP .3G5.50 2.<.,"1M A"ITAZ (Y.N@*X4$\I0("Z M9@A,WPQP3EU.=2!M PB: D+RD !$ZZ N)83R@ 9U)(>@!M($0O* V3KH" MM%!/)D!*@&<T2'@#[2\+3KH!YE!/+ !G)" &Y8 J "!%)6@ " "D)48 G$AX M ^U(>@ X3KH!PE!/)4 H"\$3KH"@%A/+RR NDZZ >983T*L@+I@@&EC;VXN M;&EB<F%R>0!724Y$3U< *@ @;P $( A*&&;\D< @"%. 3G5.50 2JR OF<& M(&R ODZ0/RT "$ZZ A43TY=3G5.5?_\+P0P+0 (2, K0/_\2JR DF<H> !@ M"C\$3KH T%1/4D2X;("$;? P+("$P?P !B\ +RR DDZZ 9)03TJL@,)G!B!L M@,).D$JL@*QG"B\L@*Q.N@%$6$]*K("P9PHO+("P3KH!-%A/2JR M&<*+RR MM$ZZ 2183RQX 0(+@ $ 2EG%"\-2_H "DZN_^(J7V &0J?S7TYS2JR G&8P M2JR J&<H,"R IDC +P O+("H3KH!&%!/,"R I%) 2,#E@"\ +RR H$ZZ 0)0 M3V .3KH \B\L@)Q.N@$F6$\@+?_\+FR ADYU*!].74YU3E4 $CG#B X+0 ( M, 3!_ &)$#5[("22D1M"KAL@(1L!$J29A Y? "@+AP_TS?!'!.74YU,"H M!,!\@ !F""\23KH "EA/0I)P &#@(B\ !"QL@(Y.[O_<(B\ !"QL@(Y.[O^" M+&R CD[N_\I,[P & 0L;(".3N[_XBQL@(Y.[O_$2.<!!$SO(( #"QL@(I. MKO^43-\@@$YU(B\ !"QL@(I.[O\H3OH B)O 0L;("*3N[^8DSO , !"QL M@(I.[O\Z(F\ !"QL@(I.[O[:3OH BQL@(I.[O]\(F\ !" O @L;("*3N[_ M+B!O 0L;("*3N[^C"QL@(HB;P $("\ "$[N_=@L;("*3N[_=B)O 0L;("* M3N[^AB!O 0L;("*3N[^@$SO P !"QL@+I.[O^@(&\ !"QL@+I.[O^F(&\ M!"QL@+I.[O^R #[ $ ! !F@ /R #Z@ "$ (" @ M(" @(" @,# P,# @(" @(" @(" @(" @(" @(""00$! 0$! 0$! 0$! 0$! M# P,# P,# P,#$! 0$! 0$ )"0D)"0D! 0$! 0$! 0$! 0$! 0$! 0$! 4! M0$! 0 H*"@H*"@(" @(" @(" @(" @(" @(" @("0$! 0" !0 /R # )ZP $ /R end SHAR_EOF if test 3199 -ne "`wc -c enough.uu`" then echo shar: error transmitting enough.uu '(should have been 3199 characters)' fi echo shar: extracting launch '(98 characters)' cat << \SHAR_EOF > launch failat 20 enough 300000 100000 if not error run ue else echo "Not enough memory for Uedit" endif SHAR_EOF if test 98 -ne "`wc -c launch`" then echo shar: error transmitting launch '(should have been 98 characters)' fi echo shar: extracting launch.sh '(99 characters)' cat << \SHAR_EOF > launch.sh enough 300000 100000 if $_lasterr < 10 ; run ue ; else ; echo Not enough memory for Uedit ; endif SHAR_EOF if test 99 -ne "`wc -c launch.sh`" then echo shar: error transmitting launch.sh '(should have been 99 characters)' fi # End of shell archive exit 0 -- ------------ Eric Kennedy ejkst@cisunx.UUCP