[Back to DIRS SWAG index] [Back to Main SWAG index] [Original]

    {
     RA> Does anyone have a procedure for search for wildcards on Harddisks?
     RA> It needs to check multiple hard disks and all directories.  I tried
     RA> some TP built in functions (Fsearch, and another one) but one doesn't
     RA> support wildcards and neither scan all dirs unless I do alot of fancy
     RA> stuff...

       Here's some code, written by another of the frequent contributors
    here, which should help:
    }
    program Tree_Search;                          { by John Stephenson 1994 }
    Uses DOS,CRT;
    var files : word;

    Function UpCaseStr(st: String): String;
    var loop: byte;
    Begin
      for loop := 1 to length(st) do st[loop] := upcase(st[loop]);
      upcasestr := st
    end;

    Procedure FileList(Path: PathStr; Var OutFile: Text; lookingfor: string);
    Var
      dir,fs: SearchRec;
      final: String;
    Begin
      textattr := lightred; write(#13,'Scanning: ', path); clreol;
      FindFirst(path+'*.*',directory,dir);
      with dir do While DosError = 0 Do
        Begin
          if (name[1] <> '.') and (attr and directory = directory) then
            FileList(Path+Name+'\',outfile,lookingfor);
          FindNext(dir)
        end;
      FindFirst(path+lookingfor,anyfile-directory,fs);
      with fs do While DosError = 0 do
        Begin
          inc(files); fillchar(final,sizeof(final),' ');
          final := #13 + path + name;
          final[0] := #60; textattr := lightcyan;
          write(#13,final); textattr := lightblue;
          write(size, ' bytes'); clreol; writeln;
          FindNext(fs)
        end
    End;

    Procedure Help;
    begin
      textattr := lightcyan; writeln('FDir v1.00b by John Stephenson');
      textattr := lightgray;
      writeln(#10'USAGE: FDir (path\)filename.ext');
      halt
    end;

    var
      lookingfor: string;
      d: dirstr;
      n: namestr;
      e: extstr;
    Begin
      lookingfor := upcasestr(paramstr(1));
      fsplit(lookingfor, d, n, e);
      if d = '' then d := '\';
      lookingfor := n + e;
      if lookingfor = '' then help;
      textattr := white; writeln('Searching for: ', lookingfor);
      files := 0;
      FileList(d,output,lookingfor); write(#13); clreol;
      textattr := white; write(#10, files, ' files(s) found');
      textattr := lightgray; writeln
    End.

[Back to DIRS SWAG index] [Back to Main SWAG index] [Original]