Unit WGTFile; {TextFile Reader for CRLF or LF TEXT FILES!} {eventually this unit will be a decendant of WGBFILE!} {$I WGDEFINE.INC} { SEE WGFFIND.PAS for this include } Interface Uses WGBFile, {$IFDEF WINDOWS} WinDos; {$ELSE} Dos; {$ENDIF} Type TFile = Object Decendant:FFileObj; {short cut for now!} StringFound:Boolean; MyIOResult:Word; Constructor Init(BSize:Word); Destructor Done; Procedure Open(FilePath:String); Virtual; Procedure CloseFile; Virtual; { Function EraseFile; Virtual;} Function GetString:String; {Get CRLF string from file} Function GetUString:String; {Get LF delimited string} Function Found:Boolean; {Was a string found} Function SeekFile(SeekPos:LongInt):Boolean; {Seek to position} Function FilePos:LongInt; {Get text file position} Function RawSize:LongInt; {Get text file position} End; Implementation Constructor TFile.Init(BSize:Word); Begin Decendant.Init(BSize); If Decendant.MyIOResult<>0 then Fail; MyIOResult:=0; StringFound:=False; End; Destructor TFile.Done; Begin If Decendant.IsOpen then Decendant.CloseFile; Decendant.Done; StringFound:=False; End; Procedure TFile.Open(FilePath:String); Begin Decendant.Open(FilePath,fmReadOnly+fmDenyNone); MyIOResult:=Decendant.MyIOResult; End; Procedure TFile.CloseFile; Begin Decendant.Closefile; MyIOResult:=Decendant.MyIOResult; End; Function TFile.GetString:String; Var TempStr:String; GDone:Boolean; Ch:Char; NRead:Word; Begin TempStr:=''; StringFound:=False; If Decendant.FilePos>=Decendant.RawSize then GDone:=True Else GDone:=False; While Not GDone Do Begin Decendant.BlkRead(Ch,1,NRead); MyIOResult:=Decendant.MYIOResult; If (MYIOResult<>0) or (NRead<>1) then Ch:=#0; Case Ch Of #0:If Decendant.FilePos>=Decendant.RawSize Then GDone:=True Else Begin Inc(TempStr[0]); TempStr[Ord(TempStr[0])]:=Ch; StringFound:=True; If Length(TempStr)=255 Then GDone:=True; End; #10:; #26:; #13: Begin GDone:=True; StringFound:=True; End; Else Begin Inc(TempStr[0]); TempStr[Ord(TempStr[0])]:=Ch; StringFound:=True; If Length(TempStr)=255 Then GDone:=True; End; End; {case} End; GetString:=TempStr; End; Function TFile.GetUString:String; Var TempStr:String; GDone:Boolean; Ch:Char; NRead:Word; Begin TempStr:=''; StringFound:=False; If Decendant.FilePos>=Decendant.RawSize then GDone:=True Else GDone:=False; While Not GDone Do Begin Decendant.BlkRead(Ch,1,NRead); MyIOResult:=Decendant.MYIOResult; If (MYIOResult<>0) or (NRead<>1) then Ch:=#0; Case Ch Of #0:If Decendant.FilePos>=Decendant.RawSize Then GDone:=True Else Begin Inc(TempStr[0]); TempStr[Ord(TempStr[0])]:=Ch; StringFound:=True; If Length(TempStr)=255 Then GDone:=True; End; #13:; #26:; #10:Begin GDone:=True; StringFound:=True; End; Else Begin Inc(TempStr[0]); TempStr[Ord(TempStr[0])]:=Ch; StringFound:=True; If Length(TempStr)=255 Then GDone:=True; End; End; {case} End; GetUString:=TempStr; End; Function TFile.Found:Boolean; Begin Found:=StringFound; End; Function TFile.SeekFile(SeekPos:LongInt):Boolean; {Seek to position} Begin Decendant.SeekFile(SeekPos); MyIOResult:=Decendant.MyIOResult; End; Function TFile.FilePos:LongInt; {Get text file position} Begin FilePos:=Decendant.FilePos; End; Function TFile.RawSize:LongInt; {Get text file position} Begin RawSize:=Decendant.RawSize; End; End.