--- oup/rewrite/DataAccess/DataAccess.pas 2007/01/18 17:15:59 93 +++ oup/current/DataAccess/DataAccess.pas 2007/06/20 10:57:51 229 @@ -1,27 +1,30 @@ unit DataAccess; interface -uses TypeDefs, Classes, StrUtils, SysUtils; -//uses Data, Classes, SysUtils, StrUtils, -// Dialogs, ABSDecUtil, ABSMain, DB, Windows; - +uses TypeDefs, Classes, StrUtils, SysUtils, _MetaManager; type TDataAccess = class private + protected FConnectionID: Integer; FFileName: String; FBackend: TDataBackend; + FDataOS: TDataOS; FLevelNumber: Integer; FChangeRights: TChangeRights; - protected + FMeta: TMetaManager; + procedure SetDataOS(DataOS: TDataOS); public property ConnectionID: Integer read FConnectionID; - property FileName: String read FFileName; - property Backend: TDataBackend read FBackend; - property LevelNumber: Integer read FLevelNumber; + property FileName: String read FFileName; + property Backend: TDataBackend read FBackend; + property DataOS: TDataOS read FDataOS write SetDataOS; + property LevelNumber: Integer read FLevelNumber; + property ChangeRights: TChangeRights read FChangeRights; + property MetaData: TMetaManager read FMeta; - constructor Create(FileName: String; ConnectionID: Integer; var Msg: TStatusMessages); virtual; abstract; + constructor Create(FileName: String; ConnectionID: Integer; var Msg: TStatusMessages); virtual; procedure Close; virtual; abstract; function ExtractFileIDOfName(Name: String): Integer; virtual; @@ -33,51 +36,38 @@ type function GetExtensionsList(ExtListFormat: TExtensionFormat): TStrings; virtual; abstract; procedure LoadDatFile(FileID: Integer; var Target: TStream); overload; virtual; abstract; - procedure LoadDatFile(FileID: Integer; var Target: TByteArray); overload; virtual; abstract; + procedure LoadDatFile(FileID: Integer; var Target: TByteData); overload; procedure UpdateDatFile(FileID: Integer; Src: TStream); overload; virtual; abstract; - procedure UpdateDatFile(FileID: Integer; Src: TByteArray); overload; virtual; abstract; + procedure UpdateDatFile(FileID: Integer; Src: TByteData); overload; procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TStream); overload; virtual; abstract; - procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TByteArray); overload; virtual; abstract; - procedure LoadDatFilePart(FileID, Offset, Size: Integer; Target: Pointer); overload; virtual; abstract; + procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TByteData); overload; + procedure LoadDatFilePart(FileID, Offset, Size: Integer; Target: Pointer); overload; procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TStream); overload; virtual; abstract; - procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TByteArray); overload; virtual; abstract; - procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: Pointer); overload; virtual; abstract; + procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: Pointer); overload; + function GetDatLinks(FileID: Integer): TDatLinkList; virtual; abstract; + function GetDatLink(FileID, DatOffset: Integer): TDatLink; virtual; abstract; function GetRawList(FileID: Integer): TRawDataList; virtual; abstract; - function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; + function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; virtual; abstract; procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TStream); overload; virtual; abstract; - procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TByteArray); overload; virtual; abstract; - procedure UpdateRawFile(FileID, DatOffset, Size: Integer; Src: TStream); overload; virtual; abstract; - procedure UpdateRawFile(FileID, DatOffset, Size: Integer; Src: TByteArray); overload; virtual; abstract; + procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TByteData); overload; + procedure UpdateRawFile(FileID, DatOffset: Integer; Src: TStream); overload; virtual; abstract; + procedure UpdateRawFile(FileID, DatOffset: Integer; Src: TByteData); overload; procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TStream); overload; virtual; abstract; - procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TByteArray); overload; virtual; abstract; - procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; Target: Pointer); overload; virtual; abstract; + procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TByteData); overload; + procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; Target: Pointer); overload; procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TStream); overload; virtual; abstract; - procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TByteArray); overload; virtual; abstract; - procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: Pointer); overload; virtual; abstract; + procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: Pointer); overload; - function AppendRawFile(LocSep: Boolean; Size: Integer; Src: TStream): Integer; overload; virtual; abstract; - function AppendRawFile(LocSep: Boolean; Size: Integer; Src: TByteArray): Integer; overload; virtual; abstract; - function AppendRawFile(LocSep: Boolean; Size: Integer; Src: Pointer): Integer; overload; virtual; abstract; + function AppendRawFile(LocSep: Boolean; Src: TStream): Integer; overload; virtual; + function AppendRawFile(LocSep: Boolean; Src: TByteData): Integer; overload; +// function AppendRawFile(LocSep: Boolean; Size: Integer; Src: Pointer): Integer; overload; published end; - - -{ -var - DataConnections: array of TOniData; - -function CreateDataConnection(filename: String; backend: Integer): TOniData; -function ConnectionExists(filename: String): TOniData; -procedure CloseDataConnection(connection: TOniData); -function GetEmptyFileInfo: TFileInfo; -} - - implementation @@ -85,6 +75,14 @@ implementation Implementation of TDataAccess *) +constructor TDataAccess.Create(FileName: String; ConnectionID: Integer; + var Msg: TStatusMessages); +begin + FMeta := TMetaManager.Create(FConnectionID, Self); +end; + + + function TDataAccess.ExtractFileIDOfName(Name: String): Integer; begin if Name[5] = '-' then @@ -129,33 +127,182 @@ begin end; -function TDataAccess.GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; +procedure TDataAccess.LoadDatFile(FileID: Integer; var Target: TByteData); var - i: LongWord; - RawList: TRawDataList; + data: TStream; begin - RawList := GetRawList(FileID); - Result.SrcID := -1; - Result.SrcOffset := -1; - Result.RawAddr := -1; - Result.RawSize := -1; - if Length(RawList) > 0 then + if fileid < GetFileCount then begin - for i := 0 to High(RawList) do - begin - if RawList[i].SrcOffset = DatOffset then - begin - Result.SrcID := FileID; - Result.SrcOffset := RawList[i].SrcOffset; - Result.RawAddr := RawList[i].RawAddr; - Result.RawSize := RawList[i].RawSize; - Result.LocSep := RawList[i].LocSep; - Break; - end; - end; + data := nil; + LoadDatFile(FileID, data); + SetLength(Target, data.Size); + data.Read(Target[0], data.Size); + data.Free; end; end; +procedure TDataAccess.UpdateDatFile(FileID: Integer; Src: TByteData); +var + data: TStream; +begin + if fileid < GetFileCount then + begin + data := TMemoryStream.Create; + data.Write(Src[0], Length(Src)); + data.Seek(0, soFromBeginning); + UpdateDatFile(FileID, data); + data.Free; + end; +end; + +procedure TDataAccess.LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TByteData); +var + data: TStream; +begin + if fileid < GetFileCount then + begin + data := nil; + LoadDatFilePart(FileID, offset, size, data); + SetLength(Target, data.Size); + data.Read(Target[0], data.Size); + data.Free; + end; +end; +procedure TDataAccess.LoadDatFilePart(FileID, Offset, Size: Integer; Target: Pointer); +var + data: TStream; +begin + if fileid < GetFileCount then + begin + data := nil; + LoadDatFilePart(FileID, offset, size, data); + data.Read(Target^, data.Size); + data.Free; + end; +end; + +procedure TDataAccess.UpdateDatFilePart(FileID, Offset, Size: Integer; Src: Pointer); +var + data: TStream; +begin + if fileid < GetFileCount then + begin + data := TMemoryStream.Create; + data.Write(Src^, Size); + data.Seek(0, soFromBeginning); + UpdateDatFilePart(FileID, offset, size, data); + data.Free; + end; +end; + + + +procedure TDataAccess.LoadRawFile(FileID, DatOffset: Integer; var Target: TByteData); +var + data: TStream; +begin + if fileid < GetFileCount then + begin + data := nil; + LoadRawFile(FileID, DatOffset, data); + SetLength(Target, data.Size); + data.Read(Target[0], data.Size); + data.Free; + end; +end; + +procedure TDataAccess.UpdateRawFile(FileID, DatOffset: Integer; Src: TByteData); +var + data: TStream; +begin + if fileid < GetFileCount then + begin + data := TMemoryStream.Create; + data.Write(Src[0], Length(Src)); + data.Seek(0, soFromBeginning); + UpdateRawFile(FileID, DatOffset, data); + data.Free; + end; +end; + +procedure TDataAccess.LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TByteData); +var + data: TStream; +begin + if fileid < GetFileCount then + begin + data := nil; + SetLength(Target, Size); + LoadRawFile(FileID, DatOffset, Data); + Data.Seek(Offset, soFromBeginning); + Data.Read(Target[0], Size); + Data.Free; + end; +end; + +procedure TDataAccess.LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; Target: Pointer); +var + data: TStream; +begin + if fileid < GetFileCount then + begin + data := nil; + LoadRawFile(FileID, DatOffset, Data); + Data.Seek(Offset, soFromBeginning); + Data.Read(Target^, Size); + Data.Free; + end; +end; + +procedure TDataAccess.UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: Pointer); +var + data: TStream; +begin + if fileid < GetFileCount then + begin + data := TMemoryStream.Create; + data.Write(Src^, Size); + data.Seek(0, soFromBeginning); + UpdateRawFilePart(FileID, DatOffset, Offset, Size, data); + data.Free; + end; +end; + + +function TDataAccess.AppendRawFile(LocSep: Boolean; Src: TStream): Integer; +begin + raise ENotImplemented.Create('ERROR: AppendRawFile not implemented here!!!'); +end; + + +function TDataAccess.AppendRawFile(LocSep: Boolean; Src: TByteData): Integer; +var + data: TStream; +begin + data := TMemoryStream.Create; + data.Write(Src[0], Length(Src)); + data.Seek(0, soFromBeginning); + Result := AppendRawFile(LocSep, data); + data.Free; +end; +{ +function TDataAccess.AppendRawFile(LocSep: Boolean; Size: Integer; Src: Pointer): Integer; +var + data: TStream; +begin + data := TMemoryStream.Create; + data.Write(Src^, Size); + data.Seek(0, soFromBeginning); + Result := AppendRawFile(LocSep, data); + data.Free; +end; +} + + +procedure TDataAccess.SetDataOS(DataOS: TDataOS); +begin + raise ENotImplemented.Create('TDataAccess.SetDataOS: TBD!'); +end; end.