*/
Written some cool source code? Upload it to Programmer's Heaven.
*/

View \ENGINE.PAS

Uses SearchEngine to find and delete all *.BAK files in any

Submitted By: WEBMASTER
Rating: (Not rated) (Rate It)


UNIT engine; { A generalized search engine for TURBO PASCAL 5.0 }

{$V-}

{********************************************************}
{*                                                      *}
{*  SEARCH ENGINE                                       *}
{*      Input parameters:                               *}
{*         Mask: The file specification to search for.  *}
{*               May contain wildcards.                 *}
{*         Attr: File attribute to search for.          *}
{*         Proc: Procedure to process each found file.  *}
{*                                                      *}
{*      Output parameters:                              *}
{*         ErrorCode: Contains the final error code.    *}
{*                                                      *}
{*  Taken from Turbo Technix #6, 1988.                  *}
{*                                                      *}
{*  Originally written by                               *}
{*     Neil Rubenking                                   *}
{*                                                      *}
{*  Compiled and rewritten by                           *}
{*     Jens Bruun, Borland Scandinavia                  *}
{*                                                      *}
{********************************************************}

INTERFACE

USES DOS;

TYPE
   ProcType    = PROCEDURE (VAR S: SearchRec; P: PathStr);
   FullNameStr = STRING[12];

PROCEDURE SearchEngine( Mask: PathStr;
                        Attr: BYTE;
                        Proc: ProcType;
               VAR ErrorCode: BYTE );

FUNCTION GoodDirectory(S: SearchRec): BOOLEAN;
PROCEDURE ShrinkPath(VAR Path: PathStr);
PROCEDURE ErrorMessage(ErrCode: BYTE);

PROCEDURE SearchEngineAll( Path: PathStr;
                           Mask: FullNameStr;
                           Attr: BYTE;
                           Proc: ProcType;
                  VAR ErrorCode: BYTE );

IMPLEMENTATION

VAR
   EngineMask: FullNameStr;
   EngineAttr: BYTE;
   EngineProc: ProcType;
   EngineCode: BYTE;

PROCEDURE SearchEngine;
VAR
   S  : SearchRec;
   P  : PathStr;
   Ext: ExtStr;
BEGIN
   FSplit(Mask,P,Mask,Ext);
   Mask:=Mask+ext;
   FindFirst(P+Mask,Attr,S);
   IF DosError<>0 THEN
   BEGIN
      ErrorCode:=DosError;
      Exit;
   END;
   WHILE DosError=0 DO
   BEGIN
      Proc(S,P);
      FindNext(S);
   END;
   IF DosError=18 THEN
      ErrorCode:=0
   ELSE
      ErrorCode:=DosError;
END;

FUNCTION GoodDirectory;
BEGIN
   GoodDirectory:=
      (S.name <> '.') AND
      (S.name <> '..') AND
      (S.Attr AND Directory = Directory);
END;

PROCEDURE ShrinkPath;
VAR
   P    : BYTE;
   Dummy: NameStr;
BEGIN
   FSplit(Path,Path,Dummy,Dummy);
   Dec(Path[0]);
END;

{$F+} PROCEDURE SearchOneDir(VAR S: SearchRec; P: PathStr); {$F-}
{ Recursive procedure to search one directory }
BEGIN
   IF GoodDirectory(S) THEN
   BEGIN
      P:=P+S.name;
      SearchEngine(P+'\'+EngineMask,EngineAttr,EngineProc,EngineCode);
      SearchEngine(P+'\*.*', Directory OR Archive,SearchOneDir,EngineCode);
   END;
END;

PROCEDURE SearchEngineAll;
BEGIN
   { Set up UNIT global variables for use in  }
   { recursive directory search procedure.    }
   EngineMask:=Mask;
   EngineProc:=Proc;
   EngineAttr:=Attr;
   SearchEngine(Path+Mask,Attr,Proc,ErrorCode);
   SearchEngine(Path+'*.*',Directory OR Attr,SearchOneDir,ErrorCode);
   ErrorCode:=EngineCode;
END;

PROCEDURE ErrorMessage;
BEGIN
   CASE ErrCode OF
      00:; { OK - no error }
      02: WRITELN('File not found');
      03: WRITELN('Path not found');
      05: WRITELN('Acces denied');
      06: WRITELN('Invalid handle');
      08: WRITELN('Not enough memory');
      10: WRITELN('Invalid environment');
      11: WRITELN('Invalid format');
      18:; { OK - merely "no more files" }
   ELSE
      WRITELN('ERROR #',ErrCode);
   END;
END;

END.

corner
© 1996-2008 CommunityHeaven LLC. All rights reserved. Reproduction in whole or in part, in any form or medium without express written permission is prohibited.
Violators of this policy may be subject to legal action. Please read our Terms Of Use and Privacy Statement for more information.
North American business development: Nicolai Wadstrom. Publisher: Lars Hagelin.