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

    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.

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