home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 07_08 / praxis / virkill / scandir5.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-04-15  |  3.2 KB  |  113 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      SCANDIR5.PAS                      *)
  3. (*                                                        *)
  4. (* Das Objekt "ScanDirectories" dient dazu, alle Verzeich-*)
  5. (* nisse von einem Startverzeichnis ausgehend abzuklap-   *)
  6. (* pern. Für jeden Eintrag wird die virtuelle (Dummy-)    *)
  7. (* Funktion "Matches" aufgerufen. Liefert sie "TRUE", wird*)
  8. (* die (Dummy-) Prozedur "DoIt" mit dem entsprechenden    *)
  9. (* Eintrag sowie dem vollen Dateinamen (Pfad+Name) als    *)
  10. (* Parameter aufgerufen. AllSize bezieht sich nur auf die *)
  11. (* unter der Suchmaske "Mask" gefundenen Dateien.         *)
  12. (*                                                        *)
  13. (*          (c) 1991 Raimond Reichert & TOOLBOX           *)
  14. (* ------------------------------------------------------ *)
  15. UNIT ScanDir5;
  16.  
  17. INTERFACE
  18.  
  19. USES Dos;
  20.  
  21. TYPE
  22.   DoItProc = PROCEDURE(Info : SearchRec; Name : STRING);
  23.   MatchesFunc = FUNCTION(Info : SearchRec;
  24.                          Name : STRING) : BOOLEAN;
  25. VAR
  26.   AllSize,
  27.   AllNumber,
  28.   MatchSize,
  29.   MatchNumber : LONGINT;
  30.   Mask        : STRING;
  31.  
  32.   DoIt    : DoItProc;
  33.                           { verwendete prozedurale Pointer }
  34.   Matches : MatchesFunc;
  35.  
  36.   PROCEDURE SetMask(NewMask : STRING);
  37.   PROCEDURE Scan(StartDir : STRING);
  38.   PROCEDURE ScanDir(Dir : STRING);
  39.   PROCEDURE ReSetData;
  40.   PROCEDURE DoItDummy(Info : SearchRec; Name : STRING);
  41.   FUNCTION MatchesDummy(Info : SearchRec;
  42.                         Name : STRING) : BOOLEAN;
  43.  
  44. IMPLEMENTATION
  45.  
  46.   PROCEDURE SetMask(NewMask : STRING);
  47.   BEGIN
  48.     Mask := NewMask;
  49.   END;
  50.  
  51.   PROCEDURE Scan(StartDir : STRING);
  52.   VAR Info : SearchRec;
  53.   BEGIN
  54.     ScanDir(StartDir);
  55.     FindFirst(StartDir+'\*.*', Directory, Info);
  56.     WHILE (DosError <> 18) DO BEGIN
  57.       IF (Info.Attr = Directory) AND
  58.       (Info.Name[1] <> '.') THEN BEGIN
  59.         IF Matches(Info, StartDir+'\'+Info.Name) THEN
  60.           DoIt(Info, StartDir+'\'+Info.Name);
  61.         ScanDir(StartDir+'\'+Info.Name);
  62.         Scan(StartDir+'\'+Info.Name);
  63.       END;
  64.       FindNext(Info);
  65.     END;
  66.   END;
  67.  
  68.   PROCEDURE ScanDir(Dir : STRING);
  69.   VAR Info : SearchRec;
  70.   BEGIN
  71.     FindFirst(Dir+'\'+Mask, AnyFile-Directory, Info);
  72.     WHILE (DosError <> 18) DO BEGIN
  73.       INC(AllNumber);
  74.       INC(AllSize, Info.Size);
  75.       IF Matches(Info, Dir+'\'+Info.Name) THEN BEGIN
  76.         INC(MatchNumber);
  77.         INC(MatchSize, Info.Size);
  78.         DoIt(Info, Dir+'\'+Info.Name);
  79.       END;
  80.       FindNext(Info);
  81.     END;
  82.   END;
  83.  
  84.   PROCEDURE ReSetData;
  85.   BEGIN
  86.     AllSize := 0; AllNumber := 0;
  87.     MatchSize := 0; MatchNumber := 0;
  88.   END;
  89.  
  90. {$F+}
  91.   PROCEDURE DoItDummy(Info : SearchRec; Name : STRING);
  92. {$F-}
  93.   BEGIN
  94.   END;
  95.  
  96. {$F+}
  97.   FUNCTION MatchesDummy(Info : SearchRec;
  98.                         Name : STRING) : BOOLEAN;
  99. {$F-}
  100.   BEGIN
  101.     MatchesDummy := TRUE;
  102.   END;
  103.  
  104. BEGIN
  105.   AllSize := 0; AllNumber := 0;
  106.   MatchSize := 0; MatchNumber := 0;
  107.   Mask := '*.*';
  108.   DoIt := DoItDummy;
  109.   Matches := MatchesDummy;
  110. END.
  111. (* ------------------------------------------------------ *)
  112. (*                  Ende von SCANDIR5.PAS                 *)
  113.