home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SCANDIR5.PAS *)
- (* *)
- (* Das Objekt "ScanDirectories" dient dazu, alle Verzeich-*)
- (* nisse von einem Startverzeichnis ausgehend abzuklap- *)
- (* pern. Für jeden Eintrag wird die virtuelle (Dummy-) *)
- (* Funktion "Matches" aufgerufen. Liefert sie "TRUE", wird*)
- (* die (Dummy-) Prozedur "DoIt" mit dem entsprechenden *)
- (* Eintrag sowie dem vollen Dateinamen (Pfad+Name) als *)
- (* Parameter aufgerufen. AllSize bezieht sich nur auf die *)
- (* unter der Suchmaske "Mask" gefundenen Dateien. *)
- (* *)
- (* (c) 1991 Raimond Reichert & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT ScanDir5;
-
- INTERFACE
-
- USES Dos;
-
- TYPE
- DoItProc = PROCEDURE(Info : SearchRec; Name : STRING);
- MatchesFunc = FUNCTION(Info : SearchRec;
- Name : STRING) : BOOLEAN;
- VAR
- AllSize,
- AllNumber,
- MatchSize,
- MatchNumber : LONGINT;
- Mask : STRING;
-
- DoIt : DoItProc;
- { verwendete prozedurale Pointer }
- Matches : MatchesFunc;
-
- PROCEDURE SetMask(NewMask : STRING);
- PROCEDURE Scan(StartDir : STRING);
- PROCEDURE ScanDir(Dir : STRING);
- PROCEDURE ReSetData;
- PROCEDURE DoItDummy(Info : SearchRec; Name : STRING);
- FUNCTION MatchesDummy(Info : SearchRec;
- Name : STRING) : BOOLEAN;
-
- IMPLEMENTATION
-
- PROCEDURE SetMask(NewMask : STRING);
- BEGIN
- Mask := NewMask;
- END;
-
- PROCEDURE Scan(StartDir : STRING);
- VAR Info : SearchRec;
- BEGIN
- ScanDir(StartDir);
- FindFirst(StartDir+'\*.*', Directory, Info);
- WHILE (DosError <> 18) DO BEGIN
- IF (Info.Attr = Directory) AND
- (Info.Name[1] <> '.') THEN BEGIN
- IF Matches(Info, StartDir+'\'+Info.Name) THEN
- DoIt(Info, StartDir+'\'+Info.Name);
- ScanDir(StartDir+'\'+Info.Name);
- Scan(StartDir+'\'+Info.Name);
- END;
- FindNext(Info);
- END;
- END;
-
- PROCEDURE ScanDir(Dir : STRING);
- VAR Info : SearchRec;
- BEGIN
- FindFirst(Dir+'\'+Mask, AnyFile-Directory, Info);
- WHILE (DosError <> 18) DO BEGIN
- INC(AllNumber);
- INC(AllSize, Info.Size);
- IF Matches(Info, Dir+'\'+Info.Name) THEN BEGIN
- INC(MatchNumber);
- INC(MatchSize, Info.Size);
- DoIt(Info, Dir+'\'+Info.Name);
- END;
- FindNext(Info);
- END;
- END;
-
- PROCEDURE ReSetData;
- BEGIN
- AllSize := 0; AllNumber := 0;
- MatchSize := 0; MatchNumber := 0;
- END;
-
- {$F+}
- PROCEDURE DoItDummy(Info : SearchRec; Name : STRING);
- {$F-}
- BEGIN
- END;
-
- {$F+}
- FUNCTION MatchesDummy(Info : SearchRec;
- Name : STRING) : BOOLEAN;
- {$F-}
- BEGIN
- MatchesDummy := TRUE;
- END;
-
- BEGIN
- AllSize := 0; AllNumber := 0;
- MatchSize := 0; MatchNumber := 0;
- Mask := '*.*';
- DoIt := DoItDummy;
- Matches := MatchesDummy;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SCANDIR5.PAS *)
-