{ PO> How is one supposed to search for files? For example there is a DOS PO> function for finding the next file and some others, but I tried those and PO> they need a DTA (disk x-fer area). I've tried to generate my own DTA but PO> it never works. Here's a program I wrote sometimes ago to search files through a hard disk. You can also redirect output to a file! } USES Dos, Crt; {$M $A000, 0, 0} TYPE DIRT = STRING[127]; CONST Atr = $10; { Scan only Directories (system, read only and hidden) } VAR ActualDir : DIRT; drv : STRING[2]; FileDir : DIRT; File_To_Search_For : STRING[12]; TotalSize : LONGINT; NbFiles : LONGINT; F : Text; outp, quit : boolean; ch : char; PROCEDURE ScanFor(direc : DIRT); VAR FileS : SEARCHREC; pth : PATHSTR; Diro : DIRSTR; Nme : NAMESTR; Ext : EXTSTR; BEGIN FindFirst(direc+'\'+File_To_Search_For, AnyFile, FileS); While DosError=0 Do Begin IF (FileS.Name <> '.') AND (FileS.Name <> '..') Then Begin {pth:=FileS.Name; fSplit(pth, Diro, Nme, Ext);} Write(direc+'\'+FileS.Name); if outp then WriteLn(f, direc+'\'+FileS.Name); GotoXY(60, WhereY); WriteLn(FileS.Size); INC(TotalSize, FileS.Size); INC(NbFiles); End; FindNext(FileS); End; END; PROCEDURE ScanDir(ddr : DIRT); VAR S : SEARCHREC; BEGIN { WriteLn(ddr); } ChDir(ddr); ScanFor(ddr); FindFirst('*.*', AnyFile, S); While (DOSERROR=0) Do Begin IF S.Attr=$10 Then Begin IF (S.Name <> '.') AND (S.Name <> '..') Then Begin IF Length(ddr)>3 then ScanDir(ddr+'\'+S.Name) ELSE ScanDir(ddr+S.Name); ChDir(ddr); End; End; if keypressed then begin ch:=readkey; if ch=#27 then quit:=true; end; if quit then exit; FindNext(S); End; END; PROCEDURE DoIt; BEGIN quit:=false; TotalSize:=0; NbFiles:=0; File_To_Search_For:=ParamStr(1); if paramcount=2 then outp:=true else outp:=false; WriteLn('File output : ', outp); If outp then begin assign(f, paramstr(2)); rewrite(f); end; WriteLn('Searching : '); WriteLn; FileDir:=''; GetDir(0, ActualDir); drv:=''; {Copy(ActualDir, 1, 2); } ScanDir(actualdir); If quit then begin writeln; writeln('Research aborted by user with ESC...'); end; ChDir(ActualDir); WriteLn(NbFiles, ' files listed in ', TotalSize, ' Bytes.'); WriteLn(DiskFree(0), ' free bytes.'); if outp then close(f); END; BEGIN WriteLn; WriteLn('þ Search For v1.0 By Discovery/EfS! (c)1994'); WriteLn; IF ParamCount=0 Then Begin WriteLn('þ Syntax : SF [FileName] [OutPut]'); WriteLn; WriteLn('þ Where [FileName] will be searched on all directories of'); WriteLn(' current drive from current directory. '); WriteLn(' [FileName] Accept WildCards (*, ?)'); WriteLn; WriteLn(' If [Output] is specified, display is copied to file[output],'); WriteLn(' wihtout size... Very useful to create modules lists:)'); WriteLn; End ELSE DoIt; END.