Unit WGFFind; {File Find Object Unit} {$I WGDEFINE.INC} { see below for WGDEFINE !! } Interface Uses {$IFDEF WINDOWS} WinDos; {$ELSE} Dos; {$ENDIF} Const {searchtypes} stReadOnly=$01; stHidden=$02; stSysFile=$04; stVolumeID=$08; stDirectory=$10; stArchive=$20; stAnyFile=$3F; Type {$IFDEF WINDOWS} PathStr=String[128]; DirStr=String[128]; NameStr=String[13]; ExtStr=String[4]; {$ENDIF} FindRec=Record {$IFDEF WINDOWS} SR:TSearchRec; TStr:Array[0..180] of Char; {$ELSE} SR:SearchRec; {$ENDIF} Dir:DirStr; Name:NameStr; Ext:ExtStr; DError:Word; SearchType:Word; End; FindObj = Object FI: ^FindRec; Constructor Init(ST:Word); {SearchType: Sysfile, AnyFile, Archive} Destructor Done; Procedure FFirst(FN:String); Procedure FNext; Function Found:Boolean; Function GetName:String; Function GetFullPath:String; Function GetDate:LongInt; Function GetSize:LongInt; Function GetAttr:Word; End; Implementation {$IFDEF WINDOWS} Function FExpand(Str:String):String; Var IStr:Array[0..128] of Char; OStr:Array[0..128] of Char; Begin StrPCopy(IStr,Str); FileExpand(OStr,IStr); FExpand:=StrPas(OStr); End; {$ENDIF} {$IFDEF WINDOWS} Procedure FSplit(Path:String;Var Dir:String;Var Name:String;Var Ext:String); Var FPath:Array[0..129] of Char; TD:Array[0..129] of Char; TN:Array[0..14] of Char; TE:Array[0..5] of Char; Begin StrPCopy(FPath,Path); FileSplit(FPath,TD,TN,TE); Dir:=StrPas(TD); Name:=StrPas(TN); Ext:=StrPas(TE); End; {$ENDIF} Constructor FindObj.Init; Begin New(FI); If FI=Nil then Fail; FI^.DError:=1; FI^.SearchType:=StArchive+StReadOnly; {default} End; Destructor FindObj.Done; Begin If FI<>Nil then Dispose(FI); End; Procedure FindObj.FFirst(FN:String); Begin If FI<>Nil then Begin FN:=FExpand(FN); FSplit(FN,FI^.Dir,FI^.Name,FI^.Ext); {$IFDEF WINDOWS} StrPCopy(FI^.TStr, FN); FindFirst(FI^.TStr,FI^.SearchType,FI^.SR); {$ELSE} FindFirst(FN,FI^.SearchType,FI^.SR); {$ENDIF} FI^.DError:=DosError; End Else FI^.DError:=1; End; Function FindObj.GetName:String; Begin GetName:=''; If FI<>Nil then If Found Then {$IFDEF WINDOWS} GetName:=StrPas(FI^.SR.Name); {$ELSE} GetName:=FI^.SR.Name; {$ENDIF} End; Function FindObj.GetFullPath:String; Begin If FI<>Nil then GetFullPath:=FI^.Dir+GetName Else GetFullPath:=''; End; Function FindObj.GetSize:LongInt; Begin GetSize:=0; If FI<>Nil then If Found Then GetSize:=FI^.SR.Size; End; Function FindObj.GetDate: LongInt; Begin GetDate:=0; If FI<>Nil then If Found Then GetDate:=FI^.SR.Time; End; Function FindObj.GetAttr:Word; Begin GetAttr:=0; If FI<>Nil then If Found Then GetAttr:=FI^.SR.Attr; End; Procedure FindObj.FNext; Begin If FI<>Nil then Begin FindNext(FI^.SR); FI^.DError:=DosError; End Else FI^.DError:=1; End; Function FindObj.Found:Boolean; Begin Found:=(FI^.DError=0); End; End. [WGDEFINE.INC] {$I-} {$V-} {$S+} {$F+} {$D-} {$L-} {$R-} {$X+} {$IFNDEF WINDOWS} {$O+} {Make units overlayable} {$IFNDEF OS2} {$X-} {Turn off extended syntax} {$ENDIF} {$ENDIF} {$IFDEF WINDOWS} {$DEFINE BASMINT} {Use BASM for interrupts under windows} {$ENDIF} {.$.DEFINE OPRO} {.$.DEFINE DEBUG} {BBS Definitions below (some that I have tested the new WGMSG*.PAS w/!)} {$IFDEF MAXIMUS} {$DEFINE SQUISH} {$ENDIF} {$IFDEF RA2} {$DEFINE JAM} {$DEFINE HUDSON} {$ENDIF} {$IFDEF XENOPHOBE} {$DEFINE FIDO} {$DEFINE SQUISH} {$DEFINE JAM} {$ENDIF}