home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
02
/
tricks
/
space.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1989-11-14
|
5KB
|
187 lines
(* ------------------------------------------------------ *)
(* SPACE.PAS *)
(* Zeigt Platz auf vorhandenen Laufwerken *)
(* (c) 1989 Peter Stehlik & TOOLBOX *)
(* ------------------------------------------------------ *)
PROGRAM DiskSpaceInfo;
{$N-}
USES Dos;
VAR
Drive : INTEGER;
Lw, Cmd : STRING;
Platz : LongInt;
ScanDirF,
ScanSubDirF,
ShowFlag,
AllFlag : BOOLEAN;
Pfad : STRING;
PROCEDURE Info;
BEGIN
WriteLn('Gebrauch: space [Pfadname] [/a] [/d] [/s] [/l]');
WriteLn;
WriteLn('Pfadname Laufwerk mit oder ohne Verzeichnisse');
WriteLn('/a zeigt alle Laufwerke');
WriteLn('/d Grösse des aktuellen Verzeichnis');
WriteLn('/s Grösse des aktuellen Verzeichnis mit');
WriteLn(' der Grösse der Unterverzeichnisse');
WriteLn('/l zeigt die Verzeichnisse');
Halt;
END;
PROCEDURE UP (VAR EingabeText : STRING);
{ Wandelt Wort in Grossbuchstaben um }
VAR
Drive : INTEGER;
BEGIN
Drive := 1;
FOR Drive := 1 TO Length(EingabeText) DO
EingabeText[Drive] := UpCase(EingabeText[Drive]);
END;
FUNCTION Size(pfad : STRING) : LongInt;
{ Errechnet Grösse aller Dateien }
VAR
i : LongInt; { im momentanen Verzeichnis }
DirInfo : SearchRec;
BEGIN
I := 0;
FindFirst(Pfad, anyfile, DirInfo);
WHILE DosError = 0 DO BEGIN
i := i + Dirinfo.Size;
FindNext(DirInfo);
END;
Size := i;
END;
PROCEDURE More(pfad : STRING; show : BOOLEAN);
VAR
dir : SearchRec;
temp : STRING;
d : DirStr;
n : NameStr;
e : ExtStr;
BEGIN
FindFirst(pfad, directory, Dir);
WHILE DosError = 0 DO BEGIN
IF (Dir.attr = directory) AND
(Dir.name[1] <> '.') THEN BEGIN
Fsplit(pfad, d, n, e);
temp := d + n + e;
pfad := d + dir.name + '\*.*';
IF show THEN WriteLn(d + dir.name);
platz := Size(pfad) + platz;
More(pfad, show);
pfad := temp;
END;
FindNext(dir);
END;
END;
PROCEDURE Eingabe;
VAR
anzahl : BYTE;
BEGIN
ScanDirF := FALSE;
ScanSubDirF := FALSE;
AllFlag := FALSE;
Showflag := FALSE;
Drive := 0;
Lw := ParamStr(1);
up(Lw);
IF (ParamStr(1) = '?') THEN Info;
IF Length(lw) = 0 THEN Drive := 0
ELSE Drive := Ord(Lw[1]) - 64;
FOR anzahl := 1 TO ParamCount DO BEGIN
Cmd := ParamStr(anzahl);
Up(Cmd);
IF (Cmd[1] = '/') OR (Cmd[1] = '\') THEN BEGIN
CASE Cmd[2] OF
'A' : AllFlag := TRUE;
'D' : ScanDirF := TRUE;
'S' : ScanSubDirF := TRUE;
'L' : ShowFlag := TRUE;
END;
END;
END;
END;
PROCEDURE all;
VAR
Drive : INTEGER;
BEGIN
WriteLn;
FOR Drive := 1 TO 26 DO BEGIN
IF DiskSize(Drive) <> -1 THEN BEGIN
Write('Laufwerk ', Chr(64+Drive), ': Gesamt ',
DiskSize(Drive), ' bytes');
WriteLn(', davon frei: ', DiskFree(Drive) , ' bytes');
END;
END;
END;
PROCEDURE PreparePath;
BEGIN
IF pos('/', lw) = 0 THEN BEGIN
pfad := FExpand(lw);
IF pfad[Length(pfad)] <> '\' THEN
Insert('\', pfad, Length(pfad)+1);
pfad := pfad + '*.*';
END ELSE
pfad:='*.*';
END;
PROCEDURE ScanDir; { Durchsucht aktuellen Pfad }
VAR
d : DirStr;
N : NameStr;
e : ExtStr;
BEGIN
WriteLn;
PreparePath;
Write(' ', Size(pfad));
Fsplit(pfad, d, n, e);
WriteLn(' bytes im Verzeichnis ', Fexpand(d));
END;
PROCEDURE ScanSubDir; { Durchsucht alle weitere Pfade }
VAR
d : DirStr;
N : NameStr;
e : ExtStr;
p : STRING;
BEGIN
WriteLn;
PreparePath;
Platz := Size('*.*');
IF ShowFlag THEN WriteLn('Verzeichnisse:');
More(pfad, ShowFlag);
Write(' ', Platz);
Fsplit(pfad, d, n, e);
WriteLn(' bytes im gesamten Verzeichnis ', Fexpand(d));
END;
BEGIN
Platz := 0;
Eingabe;
IF AllFlag THEN All
ELSE
IF ScanSubDirF THEN ScanSubDir
ELSE
IF ScanDirF THEN ScanDir
ELSE
IF DiskSize(Drive) <> -1 THEN BEGIN
WriteLn;
Write('Total ', DiskSize(Drive),
' bytes, davon sind ');
WriteLn(DiskFree(Drive),
' bytes auf der Platte frei verfügbar');
END ELSE
WriteLn('Laufwerk nicht ansprechbar!');
END.
(* ------------------------------------------------------ *)
(* Ende von SPACE.PAS *)