home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* GETDIRS.PAS *)
- (* (c) 1990 Hagen Lehmann & TOOLBOX *)
- (* ------------------------------------------------------ *)
- {$R-,S-,I-,D-,F-,V-,B-,N-,L-}
- {$M 1024,0,0}
- USES Crt, Dos;
- CONST
- CopyRight = 'GETDIRS, (C) 1990 Hagen Lehmann & TOOLBOX';
- Return = ^M^J;
- TYPE
- SearchArray = ARRAY [1..100] OF SearchRec;
- DirSearchArray = ARRAY [1..100] OF STRING;
- DriveString = STRING [2];
- VAR
- Verzeichnisse : DirSearchArray;
- Gefundene, Loop : BYTE;
- Parameter : STRING;
- Drive : DriveString;
-
- PROCEDURE GetDirs(VAR Dateien : SearchArray;
- VAR Anzahl : BYTE);
- VAR
- Suche : SearchRec;
- BEGIN
- Anzahl := 0;
- FindFirst('*', Directory, Suche);
- IF DosError = 0 THEN { ist einer vorhanden? }
- REPEAT { ja, weitere einlesen }
- Anzahl := Anzahl + 1;
- IF Suche.Attr = Directory THEN
- Dateien[Anzahl] := Suche { abspeichern }
- ELSE
- Anzahl := Anzahl - 1;
- FindNext(Suche); { nächster Pfad }
- UNTIL (DosError <> 0) OR (Anzahl >= 100); { Ende }
- END;
-
- PROCEDURE GetAllDirs( Laufwerk : DriveString;
- VAR Pfade : DirSearchArray;
- VAR Gefunden : BYTE);
- LABEL Ende;
- VAR
- Dateien : SearchArray;
- Pfad, TestPfad : STRING;
- Anzahl, I, J, Getestet : BYTE;
- Vorhanden, NichtGefunden : BOOLEAN;
- BEGIN
- GetDir(0, Pfad); { aktiven Pfad speichern }
- ChDir(Laufwerk + '\');
- GetDir(0, TestPfad);
- FOR I := 1 TO 100 DO
- Pfade[I] := ''; { Pfadspeicher löschen }
- Gefunden := 0;
- Getestet := 1;
- Pfade[1] := TestPfad[1] + ':\'; { Hauptpfad speichern }
- GetDirs(Dateien, Anzahl);
- IF Anzahl > 1 THEN
- REPEAT
- GetDirs(Dateien, Anzahl); { weitere einlesen }
- IF (Dateien[1].Name = '.') AND
- (Dateien[2].Name='..') THEN BEGIN
- FOR I := 1 TO Anzahl DO
- { die ersten beiden Einträge löschen }
- Dateien[I] := Dateien[I+2];
- Anzahl := Anzahl - 2;
- END;
- IF Anzahl > 0 THEN BEGIN
- FOR I := 1 TO Anzahl DO BEGIN
- ChDir(Dateien[I].Name);
- GetDir(0, TestPfad); { vollen Pfadnamen holen }
- ChDir('..'); { zurückkehren }
- Vorhanden := FALSE;
- FOR J := 1 TO Getestet DO
- IF Pfade[J] = TestPfad THEN Vorhanden := TRUE;
- IF NOT Vorhanden THEN BEGIN
- Getestet := Getestet + 1;
- Pfade[Getestet] := TestPfad;
- END;
- END;
- Gefunden := Gefunden + 1;
- NichtGefunden := TRUE;
- ChDir(Pfade[Getestet]);
- IF IOResult <> 0 THEN GOTO Ende;
- END ELSE BEGIN
- IF NOT NichtGefunden THEN
- Gefunden := Gefunden + 1;
- ChDir(Pfade[Gefunden]);
- IF IOResult <> 0 THEN GOTO Ende;
- NichtGefunden := FALSE;
- END;
- IF Length(Pfade[Gefunden]) = 0 THEN GOTO Ende;
- UNTIL (IOResult <> 0) OR (Getestet >= 100);
- Ende :
- Gefunden := Getestet;
- ChDir(Pfad);
- END;
-
- BEGIN
- Parameter := ParamStr(1);
- Drive := '';
- IF (UpCase(Parameter[1]) IN ['A'..'Z']) AND
- (Parameter[2] = ':') AND
- (Length(Parameter) = 2) THEN Drive := Parameter;
- IF Parameter = '?' THEN BEGIN
- ClrScr;
- WriteLn;
- WriteLn('Aufruf : GETDIRS [d:] ');
- WriteLn;
- WriteLn('Beispiel :');
- WriteLn('A:\>getdirs a:');
- WriteLn(' (sucht alle Pfade im Laufwerk A:)');
- WriteLn('A:\>getdirs');
- WriteLn(' (sucht alle Pfade im aktuellen Laufwerk)');
- Halt;
- END;
- WriteLn(CopyRight, Return);
- Write('Scanning disk to get tree information ...');
- GetAllDirs(Drive, Verzeichnisse, Gefundene);
- WriteLn(Return);
- FOR Loop := 1 TO Gefundene DO
- WriteLn(Verzeichnisse[Loop]);
- WriteLn(Return, Gefundene, ' directories found.');
- END.
- (* ------------------------------------------------------ *)
- (* Ende von GETDIRS.PAS *)