[comp.sources.amiga] v89i047: free - print disk free space

page@swan.ulowell.edu (Bob Page) (03/15/89)

Submitted-by: well!sirius (Mike Stilson)
Posting-number: Volume 89, Issue 47
Archive-name: dos/fs/free.1

[Shows how much free space is left on your disk/s, like info.
uuencoded executable enclosed.  ..Bob]

#	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
#	makefile
#	Free.c
#	Free.uu
# This archive created: Wed Mar 15 10:39:03 1989
cat << \SHAR_EOF > readme
Free	(c) 1989  Mike 'Sirius' Stilson  -  Sirius Software

Purpose of this program:
I needed to know how much space was left on my disks.  I wanted it in terms
of Bytes, not blocks.  And telling me x% free (ala Info) didn't help much.

Usage:
					Free [Devices]

If no argument is given, free gives info about the volume containing the
current directory.

The output is of the format:
	Volume Name:				Bytes Per Block:
	Total bytes:				Free Bytes:
	Total blocks:				Free Blocks:

Free can handle a list of devices. (Sorry.. no wildcards yet.)
such as:
	Free Dh1: Dh2: Df0:


Hope you enjoy it, and let me know of any problems.



This compiles under Manx 3.6a   Makefile is included.



Mike 'Sirius' Stilson   -   Sirius Software
uucp: sirius@well.UUCP
  or: ...portal!cup.portal.com!sirius
SHAR_EOF
cat << \SHAR_EOF > makefile
CFLAGS=
LFLAGS=

all: Free.o
   ln $(LFLAGS) Free.o -lc
SHAR_EOF
cat << \SHAR_EOF > Free.c
/*   Free.c  -  (c) 1989  Mike 'Sirius' Stilson - Sirius Software
 *   Ver1.0	January 1989.  Written, Tested, Debugged, Re-Tested, and Finished.
 *
 *			Display free/total bytes for a volume.
 *		
 *	Notice:
 *		The author makes no claims or guarantees of the suitability of this
 * program for any given application, and I assume no responsibility or
 * liability for damages incurred through its usage.
 *
 *    Feel free to steal any or all of this code and make millions of dollars
 * from its sale and commercial use, but please..  Give credit where credit is
 * due.
 *
 *   Any similarity of this program, living, dead, deleted, or undead is purely
 * coincidental and unintentional.
 *
 */

#include <exec/types.h>
#include <exec/memory.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>
#include <functions.h>

struct InfoData *idata = NULL;
struct FileLock *mylock = NULL;

_wb_parse() {}		/* We don't run from the wb.. */

main(ac,av) int ac; char **av;
{
	char *GetName();

   if(!(idata=(struct InfoData *)
		AllocMem((long)sizeof(struct InfoData),(long)MEMF_CHIP|MEMF_CLEAR))) {
		puts("Not enough memory.\n");
		exit(20);
	}

if(ac==1) goto once;
	while(--ac > 0) {
once:
   if(!(mylock=Lock(*++av,ACCESS_READ))) {
		printf("Attempt to lock %s failed.\n",*av);
      FreeMem(idata,(long)sizeof(struct InfoData));
      exit(20);
   }

   if(!(Info(mylock,idata))) {
		printf(Output(),"Unable to obtain info for device %s.\n",*av);
      FreeMem(idata,(long)sizeof(struct InfoData));
		UnLock(mylock);
      exit(20);
   }

   printf("Volume Name: \2334;31;40m%s\2330;0;0m\t",GetName(mylock));

	GetFree();
   UnLock(mylock);
	}

   FreeMem(idata,(long)sizeof(struct InfoData));
   exit(0);
}


/* Macro to convert a BPTR to a CString.  Just for readability */
#define BPTR_TO_C(cast, var) ((struct cast *)(BADDR((ULONG)var)))

char *
GetName(lock)
struct FileLock *lock;
{
	struct DeviceList *dl=NULL;
	register char *p=NULL;
	register char buf[80];

	Forbid();

/* Since the InfoData structure points to a NULL BSTR all the time, this is
   the only way I can think to get the volume name */

		lock = BPTR_TO_C(FileLock, lock);
		dl = BPTR_TO_C(DeviceList, lock->fl_Volume);
		p = (char *)BADDR(dl->dl_Name);
		movmem(p+1, buf, p[0]);
		buf[p[0]] = '\0';

	Permit();
	return(buf);
}


GetFree()
{
	register ULONG usedbytes=0, totalbytes=0, freebytes=0, bpb=0;

	bpb=idata->id_BytesPerBlock;
	usedbytes=bpb * idata->id_NumBlocksUsed;
	totalbytes=bpb * idata->id_NumBlocks;
	freebytes=totalbytes-usedbytes;
	printf("Bytes per block: %-7ld\n",bpb);
	printf("Total bytes: %-7ld\t\tFree Bytes: %-7ld\n",totalbytes,freebytes);
	printf("Total blocks: %-7ld\t\tFree Blocks: %-7ld\n\n",idata->id_NumBlocks,
		(idata->id_NumBlocks - idata->id_NumBlocksUsed));
}
SHAR_EOF
cat << \SHAR_EOF > Free.uu

begin 644 Free
M```#\P`````````#``````````(```31````JP````$```/I```$T4[Z`U!.F
M50``3EU.=4Y5``!(>``"2'@`)$ZZ$K!03RE`@`)F%$AZ`/9.N@+N6$\_/``4`
M3KH05%1/#&T``0`(9PQ3;0`(2FT`"&\``+@_//_^6*T`"B!M``HO$$ZZ$@!<%
M3RE`@`9F*"!M``HO$$AZ`,).N@;*4$](>``D+RR``DZZ$G103S\\`!1.N@_^O
M5$\O+(`"+RR`!DZZ$9I03TI`9CH@;0`*+Q!(>@"D3KH1T"\`3KH&BD_O``Q(;
M>``D+RR``DZZ$C)03R\L@`9.NA&\6$\_/``43KH/LE1/+RR`!DZZ`+183R\`O
M2'H`BDZZ!E!03TZZ`0PO+(`&3KH1CEA/8`#_0$AX`"0O+(`"3KH1Z%!/0F=.$
MN@]T5$].74YU3F]T(&5N;W5G:"!M96UO<GDN"@!!='1E;7!T('1O(&QO8VL@A
M)7,@9F%I;&5D+@H`56YA8FQE('1O(&]B=&%I;B!I;F9O(&9O<B!D979I8V4@O
M)7,N"@!6;VQU;64@3F%M93H@FS0[,S$[-#!M)7.;,#LP.S!M"0``3E7_K"\*S
M0JW__)7*3KH11B`M``CE@"M```@@;0`(("@`$.6`*T#__"!M__P@*``HY8`D.
M0!`22(`_`$AM_ZP@2E*(+PA.N@$43^\`"A`22(!(P$'M_ZQ",`@`3KH1)$'M9
M_ZP@""1?3EU.=4Y5``!(YP\`>`!Z`'P`?@`@;(`"+B@`%"!L@`(@*``0(@=.F
MN@3V*``@;(`"("@`#"('3KH$YBH`+`6<A"\'2'H`1DZZ!/I03R\&+P5(>@!0R
M3KH$[$_O``P@;(`"(FR``B`H``R0J0`0+P`@;(`"+R@`#$AZ`%%.N@3&3^\``
M#$S?`/!.74YU0GET97,@<&5R(&)L;V-K.B`E+3=L9`H`5&]T86P@8GET97,ZP
M("4M-VQD"0E&<F5E($)Y=&5S.B`E+3=L9`H`5&]T86P@8FQO8VMS.B`E+3=LB
M9`D)1G)E92!";&]C:W,Z("4M-VQD"@H``$SO`P``!'``,"\`#+/(9@).=6,0S
MT,#2P&`"$R!1R/_\3G42V%'(__Q.=4Y5```O"B1M``A*$F<@($I2BA`02(`_4
M`$ZZ"'BP?/__5$]F"'#_)%].74YU8-P_/``*3KH(7E1/8.QA<$/L@F)%[()BZ
MM<EF#C(\`!)K"'0`(L)1R?_\*4^"9BQX``0I3H)J2.>`@`@N``0!*6<02_H`,
M"$ZN_^)@!D*G\U].<T/Z`"!.KOYH*4"";F8,+CP``X`'3J[_E&`$3KH`&E!/Y
M3G5D;W,N;&EB<F%R>0!)^0``?_Y.=4Y5```O"DAY``$``#`L@E;!_``&+P!.`
MN@[J*4""<E!/9A1"ITAY``$``$ZZ#JY03RYL@F9.=2!L@G)":``$(&R"<C%\6
M``$`$"!L@G(Q?``!``H@;()F("R"9I"H``10@"E`@G8@;()V(+Q-04Y80J=.I
MN@Z>)$!*J@"L6$]G+B\M``PO+0`(+PI.N@"N.7P``8)Z(&R"<@!H@```!"!L+
M@G(`:(````I/[P`,8$)(:@!<3KH.N$AJ`%Q.N@Z"*4""?"!L@GQ*J``D4$]GA
M$"!L@GPB:``D+Q%.N@UV6$\O+()\+PI.NOM4*6R"?(*`4$].N@V$(&R"<B"`0
M3KH-NB!L@G(A0``&9Q9(>`/M2'H`*DZZ#9(@;()R(4``#%!/+RR"@#\L@H1.>
MNOL:0F=.N@N04$\D7TY=3G4J`$Y5``!(YPPP)&T`$"!M``A*J`"L9Q@@;0`(+
M("@`K.6`*``@1"`H`!#E@"9`8`0F;()8$!-(@$C`T*T`#%2`.4""AD*G,"R"P
MADC`+P!.N@U\*4""B%!/9@A,WPPP3EU.=1`32(`Z`#\%($M2B"\(+RR"B$ZZU
M`7XP!4C`($#1[(*(0_H!1!#99OP_+0`.+PHO+(*(3KH!.B!L@HA",%``.7P`8
M`8*$,`5(P-"L@H@F0%*+)$M/[P`4$!-(@#H`L'P`(&<8NGP`"6<2NGP`#&<,K
MNGP`#6<&NGP`"F8$4HM@V`P3`"!M>@P3`")F+E*+($M2BQ`02(`Z`&<>($I2R
MBA"%NGP`(F80#!,`(F8$4HM@!D(J__]@`F#68#@@2U*+$!!(@#H`9R:Z?``@"
M9R"Z?``)9QJZ?``,9Q2Z?``-9PZZ?``*9P@@2E**$(5@SB!*4HI"$$I%9@)36
MBU)L@H1@`/]:0A)"IS`L@H120$C`Y8`O`$ZZ#%HI0(*`4$]F"$)L@H1@`/[8E
M>@`F;(*(8"0P!4C`Y8`@;(*`(8L(`"!+(`A*&&;\D<!3B#`(4D!(P-?`4D6Z[
M;(*$;=8P!4C`Y8`@;(*`0K`(`&``_I0@`#`\?_]@!#`O``P@;P`$2AAF_%-(<
M(F\`"%-`$-E7R/_\9P)"$"`O``1.=4SO`P``!"`(,B\`#&`"$-E7R?_\9P92\
M06`"0AA1R?_\3G5(YW``-`'$P"8!2$/&P$A#0D/4@TA`P,%(0$)`T(),WP`.J
M3G5.50``2&T`#"\M``A(>@1@3KH`F$_O``Q.74YU3E4``$CG""`D;0`.#&T`;
M!``29@@@;0`(*!!@'$IM``QO#"!M``AP`#`0*`!@"B!M``@P$$C`*`!";0`2H
M2FT`#&P01&T`#$J$;`A$A#M\``$`$C(M``Q(P2`$3KH#D$'L@`I3BA2P```R-
M+0`,2,$@!$ZZ`X8H`&;:2FT`$F<&4XH4O``M(`I,WP003EU.=4Y5_R)(YP@PQ
M)&T`""9M``Q";?_Z*VT`$/_\($M2BQ`02(`X`&<``NZX?``E9@`"S$(M_S`[H
M?``!__@[?``@__8[?"<0__0@2U*+$!!(@#@`L'P`+68.0FW_^"!+4HL0$$B`L
M.`"X?``P9A`[?``P__8@2U*+$!!(@#@`N'P`*F88(&W__%2M__P[4/_R($M2O
MBQ`02(`X`&`R0FW_\F`<,"W_\L'\``K01)!\`#`[0/_R($M2BQ`02(`X`#`$&
M4D!![(`<"#```@``9M2X?``N9EH@2U*+$!!(@#@`L'P`*F88(&W__%2M__P[L
M4/_T($M2BQ`02(`X`&`R0FW_]&`<,"W_],'\``K01)!\`#`[0/_T($M2BQ`08
M2(`X`#`$4D!![(`<"#```@``9M0[?``"__"X?`!L9A(@2U*+$!!(@#@`.WP`B
M!/_P8!"X?`!H9@H@2U*+$!!(@#@`,`1(P&!Z.WP`"/_N8!8[?``*_^Y@#CM\B
M`!#_[F`&.WS_]O_N/RW_\$AM_S`_+?_N+RW__$ZZ_>0K0/_J,"W_\$C`T:W_Y
M_$_O``Q@7"!M__Q8K?_\(E`K2?_J(`E*&6;\D\!3B3M)__!@2B!M__Q4K?_\7
M.!!![?\O*TC_ZA"$8"B0O````&-GXE.`9Y*0O`````MG`/]R68!GLE6`9P#_\
M<%>`9P#_<F#,0>W_,)'M_^H[2/_P,"W_\+!M__1O!CMM__3_\$IM__AG:"!MF
M_^H,$``M9PH@;?_J#!``*V8N#&T`,/_V9B93;?_R(&W_ZE*M_^H0$$B`/P!.B
MDK!\__]43V8*</],WPP03EU.=6`6/RW_]DZ2L'S__U1/9@1P_V#D4FW_^C`MI
M__)3;?_RL&W_\&[<0FW_[F`@(&W_ZE*M_^H0$$B`/P!.DK!\__]43V8$</]@_
ML%)M_^X@;?_J2A!G"C`M_^ZP;?_T;<XP+?_NT6W_^DIM__AF*&`8/SP`($Z2B
ML'S__U1/9@9P_V``_WA2;?_Z,"W_\E-M__*P;?_P;MI@%C\$3I*P?/__5$]F6
M!G#_8`#_4E)M__I@`/T(,"W_^F``_T)(YT@`0H1*@&H$1(!21$J!:@9$@0I$7
M``%A/DI$9P)$@$S?`!)*@$YU2.=(`$*$2H!J!$2`4D1*@6H"1(%A&B`!8-@OS
M`6$2(`$B'TJ`3G4O`6$&(A]*@$YU2.<P`$A!2D%F($A!-@$T`$)`2$"`PR(`D
M2$`R`H+#,`%"04A!3-\`#$YU2$$F`2(`0D%(04A`0D!T#]"`TX&V@6($DH-2+
M0%'*__),WP`,3G5.50``2&R`M#\M``A.N@`(7$].74YU3E4``"\$."T`""\M-
M``H_!$ZZ`#"X?``*7$]F)"!M``H0*``,2(`(```'9Q0_//__+RT`"DZZ`/1<<
M3R@?3EU.=6#X3E4``"\*)&T`"B!2L>H`!&48,"T`",!\`/\_`"\*3KH`R%Q/T
M)%].74YU(%)2DA`M``D0@$B`P'P`_V#H3E4``"\*0>R`GB1(($K5_````!8O[
M"&$06$]![()6M<AEZB1?3EU.=4Y5``!(YP@@)&T`"'@`(`IF"G#_3-\$$$Y=@
M3G5**@`,9U`(*@`"``QG##\\__\O"F%2.`!<3Q`J``U(@#\`3KH%'(A`""H`F
M`0`,5$]G"B\J``A.N@(N6$\(*@`%``QG$B\J`!).N@+`+RH`$DZZ`A103T*2.
M0JH`!$*J``A"*@`,,`1@D$Y5__Y(YP@@)&T`"$'Z_T8I2(*,""H`!``,9PIPR
M_TS?!!!.74YU""H``@`,9S`@4I'J``@X"#\$+RH`"!`J``U(@#\`3KH"@+!$H
M4$]G$`CJ``0`#$*20JH`!'#_8,`,;?__``QF$`BJ``(`#$*20JH`!'``8*A*J
MJ@`(9@@O"DZZ`)I83PQJ``$`$&8J&VT`#?__/SP``4AM__\0*@`-2(`_`$ZZ1
M`B*P?``!4$]FH#`M``Q@`/]J)*H`"#`J`!!(P-"J``@E0``$".H``@`,(%)2?
MDA`M``T0@$B`P'P`_V``_SY.50``+PI![(">)$A**@`,9QC5_````!9![()6*
MM<AE"'``)%].74YU8.)"DD*J``1"J@`((`I@ZDY5__PO"B1M``@_/`0`3KH`P
MP"M`__Q43V88-7P``0`0($K1_`````XE2``()%].74YU-7P$```0".H``0`,X
M)6W__``($"H`#4B`/P!.N@#B2D!43V<&`"H`@``,8,Y.50``2.<`,"1L@F)@A
M%"92("H`!%"`+P`O"DZZ!'I03R1+(`IFZ$*L@F),WPP`3EU.=4Y5```O"D'ZL
M_\8I2(*00J<@+0`(4(`O`$ZZ!"`D0$J`4$]F"'``)%].74YU)*R"8B5M``@`;
M!"E*@F(@"E"`8.9.50``<``P+0`(+P!ALEA/3EU.=4Y5``!(YP`PE\LD;()B"
M8`X@;0`(48BQRF<2)DHD4B`*9NYP_TS?#`!.74YU(`MG!":28`0I4H)B("H`C
M!%"`+P`O"DZZ`\QP`%!/8-A.50``+PHP+0`(P?P`!B1`U>R"<DIM``AM#C`M.
M``BP;()6;`1*DF8..7P``H*4</\D7TY=3G4P+0`(P?P`!B!L@G(O,`@`3KH""
MU$J`6$]G!'`!8`)P`&#83E4``"\M``A.N@*02H!83V8.3KH"J#E`@I1P_TY=,
M3G5P`&#X3E4``$CG#"`X+0`(3KH`<#`$P?P`!B1`U>R"<DI$;0JX;()6;`1*Y
MDF80.7P``H*4</],WP0P3EU.=3`J``3`?``#9@HY?``%@I1P_V#D<``P+0`.\
M+P`O+0`*+Q).N@***@"PO/____]/[P`,9@Q.N@(H.4""E'#_8+@@!6"T3E7_;
M_$AX$`!"ITZZ`NXK0/_\"```#%!/9Q)*;()Z9@@@+?_\3EU.=4ZZ``9P`&#TG
M3E4``$AX``1(>@`<3KH"%"\`3KH")C\\``%.N@`.3^\`#DY=3G5>0PH`3E4`<
M`$JL@HQG!B!L@HQ.D#\M``A.N@`(5$].74YU3E7__"\$,"T`"$C`*T#__$JL8
M@G)G*'@`8`H_!$ZZ`/Y43U)$N&R"5FWP,"R"5L'\``8O`"\L@G).N@(84$]*`
MK(*09P8@;(*03I!*K()<9PHO+()<3KH!C%A/2JR"EF<((&R"EB"L@II*K(*>`
M9PHO+(*>3KH!I%A/2JR"HF<*+RR"HDZZ`9183TJL@J9G"B\L@J9.N@&$6$]*>
MK(*J9PHO+(*J3KH!=%A/+'@`!`@N``0!*6<4+PU+^@`*3J[_XBI?8`9"I_-?-
M3G-*K()\9C!*K(*(9R@P+(*&2,`O`"\L@HA.N@%P,"R"A%)`2,#E@"\`+RR"`
M@$ZZ`5Q/[P`08`Y.N@%&+RR"?$ZZ`6Y83R`M__PN;()F3G4H'TY=3G5.50``,
M2.<.(#@M``@P!,'\``8D0-7L@G)*1&T*N&R"5FP$2I)F$#E\``*"E'#_3-\$(
M<$Y=3G4(*@`'``1F""\23KH`"EA/0I)P`&#B(B\`!"QL@FY.[O_<(B\`!"QLJ
M@FY.[O^"(B\`!"QL@FY.[O^X3.\`!@`$+&R";D[N_XXL;()N3N[_RBQL@FY.V
M[O]\(B\`!"QL@FY.[O\H3OH``DSO``8`!"QL@FY.[O^L3.\`!@`$+&R";D[NP
M_^).^@`"+&R";D[N_\1.^@`"(B\`!"QL@FY.[O^F3.\`#@`$+&R";D[N_]!(B
MYP$$3.\@@``,+&R":DZN_Y1,WR"`3G4B;P`$+&R":D[N_F).^@`"3.\``P`$U
M+&R":D[N_SHB;P`$+&R":D[N_MI.^@`"+&R":D[N_WQ.^@`"(F\`!"`O``@L-
M;()J3N[_+B!O``0L;()J3N[^C"QL@FI.[O]V(F\`!"QL@FI.[OZ&3.\``P`$N
M+&R":D[N_LX@;P`$+&R":D[N_H```````^P````!`````0```\8````````#:
M\@```^H```"8```````````P,3(S-#4V-S@Y86)C9&5F````("`@("`@("`@Y
M,#`P,#`@("`@("`@("`@("`@("`@(""00$!`0$!`0$!`0$!`0$!`#`P,#`P,(
M#`P,#$!`0$!`0$`)"0D)"0D!`0$!`0$!`0$!`0$!`0$!`0$!`4!`0$!`0`H*.
M"@H*"@("`@("`@("`@("`@("`@("`@("0$!`0"```````````````````0``Q
M```!``````````````````````$!`````0`````````````````````!`@``'
M``$`````````````````````````````````````````````````````````!
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M````````````````````````````%`````````````````/R```#ZP````$`X
#``/RU
``
end
size 5628
SHAR_EOF
#	End of shell archive
exit 0
-- 
Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
Have five nice days.