| 2 |  | interface | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 3 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 4 |  | uses TypeDefs, Classes, StrUtils, SysUtils; | 
 
 
 
 
 
 
 
 
 | 5 | – | //uses Data, Classes, SysUtils, StrUtils, | 
 
 
 
 
 
 
 
 
 | 6 | – | //  Dialogs, ABSDecUtil, ABSMain, DB, Windows; | 
 
 
 
 
 
 
 
 
 | 7 | – |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 5 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 6 |  | type | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 7 |  | TDataAccess = class | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 8 |  | private | 
 
 
 
 
 
 
 
 | 9 | + | protected | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 10 |  | FConnectionID:  Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 11 |  | FFileName:      String; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 12 |  | FBackend:       TDataBackend; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 14 |  | FLevelNumber:   Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 15 |  | FChangeRights:  TChangeRights; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 16 |  | procedure SetDataOS(DataOS: TDataOS); | 
 
 
 
 
 
 
 
 
 | 19 | – | protected | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 17 |  | public | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 18 |  | property ConnectionID: Integer      read FConnectionID; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 19 |  | property FileName:     String       read FFileName; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 20 |  | property Backend:      TDataBackend read FBackend; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 21 |  | property DataOS:       TDataOS      read FDataOS write SetDataOS; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 22 |  | property LevelNumber:  Integer      read FLevelNumber; | 
 
 
 
 
 
 
 
 | 23 | + | property ChangeRights: TChangeRights read FChangeRights; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 24 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 25 |  | constructor Create(FileName: String; ConnectionID: Integer; var Msg: TStatusMessages); virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 26 |  | procedure Close; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 34 |  | function GetExtensionsList(ExtListFormat: TExtensionFormat): TStrings; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 35 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 36 |  | procedure LoadDatFile(FileID: Integer; var Target: TStream); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 | 37 | < | procedure LoadDatFile(FileID: Integer; var Target: TByteData); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 | 37 | > | procedure LoadDatFile(FileID: Integer; var Target: TByteData); overload; | 
 
 
 
 
 
 
 
 
 
 
 | 38 |  | procedure UpdateDatFile(FileID: Integer; Src: TStream); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 | 39 | < | procedure UpdateDatFile(FileID: Integer; Src: TByteData); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 | 39 | > | procedure UpdateDatFile(FileID: Integer; Src: TByteData); overload; | 
 
 
 
 
 
 
 
 
 
 
 | 40 |  | procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TStream); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 | 41 | < | procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TByteData); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 42 | < | procedure LoadDatFilePart(FileID, Offset, Size: Integer; Target: Pointer); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 | 41 | > | procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TByteData); overload; | 
 
 
 
 
 | 42 | > | procedure LoadDatFilePart(FileID, Offset, Size: Integer; Target: Pointer); overload; | 
 
 
 
 
 
 
 
 
 
 
 | 43 |  | procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TStream); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 | 44 | < | procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TByteData); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 45 | < | procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: Pointer); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 | 44 | > | procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TByteData); overload; | 
 
 
 
 
 | 45 | > | procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: Pointer); overload; | 
 
 
 
 
 
 
 
 
 
 
 | 46 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 47 |  | function GetRawList(FileID: Integer): TRawDataList; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 | 48 | < | function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; | 
 
 
 
 
 
 
 
 
 | 48 | > | function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 | 49 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 50 |  | procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TStream); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 | 51 | < | procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TByteData); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 52 | < | procedure UpdateRawFile(FileID, DatOffset, Size: Integer; Src: TStream); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 53 | < | procedure UpdateRawFile(FileID, DatOffset, Size: Integer; Src: TByteData); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 | 51 | > | procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TByteData); overload; | 
 
 
 
 
 | 52 | > | procedure UpdateRawFile(FileID, DatOffset: Integer; Src: TStream); overload; virtual; abstract; | 
 
 
 
 
 | 53 | > | procedure UpdateRawFile(FileID, DatOffset: Integer; Src: TByteData); overload; | 
 
 
 
 
 
 
 
 
 
 
 | 54 |  | procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TStream); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 | 55 | < | procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TByteData); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 56 | < | procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; Target: Pointer); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 | 55 | > | procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TByteData); overload; | 
 
 
 
 
 | 56 | > | procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; Target: Pointer); overload; | 
 
 
 
 
 
 
 
 
 
 
 | 57 |  | procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TStream); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 | 58 | < | procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TByteData); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 59 | < | procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: Pointer); overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 | 58 | > | procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TByteData); overload; | 
 
 
 
 
 | 59 | > | procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: Pointer); overload; | 
 
 
 
 
 
 
 
 
 
 
 | 60 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 61 | < | function AppendRawFile(LocSep: Boolean; Size: Integer; Src: TStream): Integer; overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 62 | < | function AppendRawFile(LocSep: Boolean; Size: Integer; Src: TByteData): Integer; overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 63 | < | function AppendRawFile(LocSep: Boolean; Size: Integer; Src: Pointer): Integer; overload; virtual; abstract; | 
 
 
 
 
 
 
 
 
 | 61 | > | function AppendRawFile(LocSep: Boolean; Size: Integer; Src: TStream): Integer; overload; virtual; | 
 
 
 
 
 | 62 | > | function AppendRawFile(LocSep: Boolean; Size: Integer; Src: TByteData): Integer; overload; | 
 
 
 
 
 | 63 | > | function AppendRawFile(LocSep: Boolean; Size: Integer; Src: Pointer): Integer; overload; | 
 
 
 
 
 
 
 
 
 
 
 | 64 |  | published | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 65 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 66 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 117 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 118 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 119 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 120 | < | function TDataAccess.GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; | 
 
 
 
 
 
 
 
 
 | 120 | > | procedure TDataAccess.LoadDatFile(FileID: Integer; var Target: TByteData); | 
 
 
 
 
 
 
 
 
 
 
 | 121 |  | var | 
 
 
 
 
 
 
 
 
 
 
 | 122 | < | i: LongWord; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 125 | < | RawList: TRawDataList; | 
 
 
 
 
 
 
 
 
 | 122 | > | data: TStream; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 123 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 | 124 | < | RawList          := GetRawList(FileID); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 128 | < | Result.SrcID     := -1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 129 | < | Result.SrcOffset := -1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 130 | < | Result.RawAddr   := -1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 131 | < | Result.RawSize   := -1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 132 | < | if Length(RawList) > 0 then | 
 
 
 
 
 
 
 
 
 | 124 | > | if fileid < GetFileCount then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 125 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 | 126 | < | for i := 0 to High(RawList) do | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 127 | < | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 128 | < | if RawList[i].SrcOffset = DatOffset then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 129 | < | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 130 | < | Result.SrcID     := FileID; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 131 | < | Result.SrcOffset := RawList[i].SrcOffset; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 132 | < | Result.RawAddr   := RawList[i].RawAddr; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 133 | < | Result.RawSize   := RawList[i].RawSize; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 134 | < | Result.LocSep    := RawList[i].LocSep; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 135 | < | Break; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 136 | < | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 137 | < | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 126 | > | data := nil; | 
 
 
 
 
 | 127 | > | LoadDatFile(FileID, data); | 
 
 
 
 
 | 128 | > | SetLength(Target, data.Size); | 
 
 
 
 
 | 129 | > | data.Read(Target[0], data.Size); | 
 
 
 
 
 | 130 | > | data.Free; | 
 
 
 
 
 | 131 | > | end; | 
 
 
 
 
 | 132 | > | end; | 
 
 
 
 
 | 133 | > |  | 
 
 
 
 
 | 134 | > | procedure TDataAccess.UpdateDatFile(FileID: Integer; Src: TByteData); | 
 
 
 
 
 | 135 | > | var | 
 
 
 
 
 | 136 | > | data: TStream; | 
 
 
 
 
 | 137 | > | begin | 
 
 
 
 
 | 138 | > | if fileid < GetFileCount then | 
 
 
 
 
 | 139 | > | begin | 
 
 
 
 
 | 140 | > | data := TMemoryStream.Create; | 
 
 
 
 
 | 141 | > | data.Write(Src[0], Length(Src)); | 
 
 
 
 
 | 142 | > | data.Seek(0, soFromBeginning); | 
 
 
 
 
 | 143 | > | UpdateDatFile(FileID, data); | 
 
 
 
 
 | 144 | > | data.Free; | 
 
 
 
 
 | 145 | > | end; | 
 
 
 
 
 | 146 | > | end; | 
 
 
 
 
 | 147 | > |  | 
 
 
 
 
 | 148 | > | procedure TDataAccess.LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TByteData); | 
 
 
 
 
 | 149 | > | var | 
 
 
 
 
 | 150 | > | data: TStream; | 
 
 
 
 
 | 151 | > | begin | 
 
 
 
 
 | 152 | > | if fileid < GetFileCount then | 
 
 
 
 
 | 153 | > | begin | 
 
 
 
 
 | 154 | > | data := nil; | 
 
 
 
 
 | 155 | > | LoadDatFilePart(FileID, offset, size, data); | 
 
 
 
 
 | 156 | > | SetLength(Target, data.Size); | 
 
 
 
 
 | 157 | > | data.Read(Target[0], data.Size); | 
 
 
 
 
 | 158 | > | data.Free; | 
 
 
 
 
 | 159 | > | end; | 
 
 
 
 
 | 160 | > | end; | 
 
 
 
 
 | 161 | > |  | 
 
 
 
 
 | 162 | > | procedure TDataAccess.LoadDatFilePart(FileID, Offset, Size: Integer; Target: Pointer); | 
 
 
 
 
 | 163 | > | var | 
 
 
 
 
 | 164 | > | data: TStream; | 
 
 
 
 
 | 165 | > | begin | 
 
 
 
 
 | 166 | > | if fileid < GetFileCount then | 
 
 
 
 
 | 167 | > | begin | 
 
 
 
 
 | 168 | > | data := nil; | 
 
 
 
 
 | 169 | > | LoadDatFilePart(FileID, offset, size, data); | 
 
 
 
 
 | 170 | > | data.Read(Target^, data.Size); | 
 
 
 
 
 | 171 | > | data.Free; | 
 
 
 
 
 | 172 | > | end; | 
 
 
 
 
 | 173 | > | end; | 
 
 
 
 
 | 174 | > |  | 
 
 
 
 
 | 175 | > | procedure TDataAccess.UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TByteData); | 
 
 
 
 
 | 176 | > | var | 
 
 
 
 
 | 177 | > | data: TStream; | 
 
 
 
 
 | 178 | > | begin | 
 
 
 
 
 | 179 | > | if fileid < GetFileCount then | 
 
 
 
 
 | 180 | > | begin | 
 
 
 
 
 | 181 | > | data := TMemoryStream.Create; | 
 
 
 
 
 | 182 | > | data.Write(Src[0], Size); | 
 
 
 
 
 | 183 | > | data.Seek(0, soFromBeginning); | 
 
 
 
 
 | 184 | > | UpdateDatFilePart(FileID, offset, size, data); | 
 
 
 
 
 | 185 | > | data.Free; | 
 
 
 
 
 | 186 | > | end; | 
 
 
 
 
 | 187 | > | end; | 
 
 
 
 
 | 188 | > |  | 
 
 
 
 
 | 189 | > | procedure TDataAccess.UpdateDatFilePart(FileID, Offset, Size: Integer; Src: Pointer); | 
 
 
 
 
 | 190 | > | var | 
 
 
 
 
 | 191 | > | data: TStream; | 
 
 
 
 
 | 192 | > | begin | 
 
 
 
 
 | 193 | > | if fileid < GetFileCount then | 
 
 
 
 
 | 194 | > | begin | 
 
 
 
 
 | 195 | > | data := TMemoryStream.Create; | 
 
 
 
 
 | 196 | > | data.Write(Src^, Size); | 
 
 
 
 
 | 197 | > | data.Seek(0, soFromBeginning); | 
 
 
 
 
 | 198 | > | UpdateDatFilePart(FileID, offset, size, data); | 
 
 
 
 
 | 199 | > | data.Free; | 
 
 
 
 
 | 200 | > | end; | 
 
 
 
 
 | 201 | > | end; | 
 
 
 
 
 | 202 | > |  | 
 
 
 
 
 | 203 | > |  | 
 
 
 
 
 | 204 | > |  | 
 
 
 
 
 | 205 | > | procedure TDataAccess.LoadRawFile(FileID, DatOffset: Integer; var Target: TByteData); | 
 
 
 
 
 | 206 | > | var | 
 
 
 
 
 | 207 | > | data: TStream; | 
 
 
 
 
 | 208 | > | begin | 
 
 
 
 
 | 209 | > | if fileid < GetFileCount then | 
 
 
 
 
 | 210 | > | begin | 
 
 
 
 
 | 211 | > | data := nil; | 
 
 
 
 
 | 212 | > | LoadRawFile(FileID, DatOffset, data); | 
 
 
 
 
 | 213 | > | SetLength(Target, data.Size); | 
 
 
 
 
 | 214 | > | data.Read(Target[0], data.Size); | 
 
 
 
 
 | 215 | > | data.Free; | 
 
 
 
 
 | 216 | > | end; | 
 
 
 
 
 | 217 | > | end; | 
 
 
 
 
 | 218 | > |  | 
 
 
 
 
 | 219 | > | procedure TDataAccess.UpdateRawFile(FileID, DatOffset: Integer; Src: TByteData); | 
 
 
 
 
 | 220 | > | var | 
 
 
 
 
 | 221 | > | data: TStream; | 
 
 
 
 
 | 222 | > | begin | 
 
 
 
 
 | 223 | > | if fileid < GetFileCount then | 
 
 
 
 
 | 224 | > | begin | 
 
 
 
 
 | 225 | > | data := TMemoryStream.Create; | 
 
 
 
 
 | 226 | > | data.Write(Src[0], Length(Src)); | 
 
 
 
 
 | 227 | > | data.Seek(0, soFromBeginning); | 
 
 
 
 
 | 228 | > | UpdateRawFile(FileID, DatOffset, data); | 
 
 
 
 
 | 229 | > | data.Free; | 
 
 
 
 
 
 
 
 
 
 
 | 230 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 231 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 232 |  |  | 
 
 
 
 
 
 
 
 | 233 | + | procedure TDataAccess.LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TByteData); | 
 
 
 
 
 
 
 
 | 234 | + | var | 
 
 
 
 
 
 
 
 | 235 | + | data: TStream; | 
 
 
 
 
 
 
 
 | 236 | + | begin | 
 
 
 
 
 
 
 
 | 237 | + | if fileid < GetFileCount then | 
 
 
 
 
 
 
 
 | 238 | + | begin | 
 
 
 
 
 
 
 
 | 239 | + | data := nil; | 
 
 
 
 
 
 
 
 | 240 | + | SetLength(Target, Size); | 
 
 
 
 
 
 
 
 | 241 | + | LoadRawFile(FileID, DatOffset, Data); | 
 
 
 
 
 
 
 
 | 242 | + | Data.Seek(Offset, soFromBeginning); | 
 
 
 
 
 
 
 
 | 243 | + | Data.Read(Target[0], Size); | 
 
 
 
 
 
 
 
 | 244 | + | Data.Free; | 
 
 
 
 
 
 
 
 | 245 | + | end; | 
 
 
 
 
 
 
 
 | 246 | + | end; | 
 
 
 
 
 
 
 
 | 247 | + |  | 
 
 
 
 
 
 
 
 | 248 | + | procedure TDataAccess.LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; Target: Pointer); | 
 
 
 
 
 
 
 
 | 249 | + | var | 
 
 
 
 
 
 
 
 | 250 | + | data: TStream; | 
 
 
 
 
 
 
 
 | 251 | + | begin | 
 
 
 
 
 
 
 
 | 252 | + | if fileid < GetFileCount then | 
 
 
 
 
 
 
 
 | 253 | + | begin | 
 
 
 
 
 
 
 
 | 254 | + | data := nil; | 
 
 
 
 
 
 
 
 | 255 | + | LoadRawFile(FileID, DatOffset, Data); | 
 
 
 
 
 
 
 
 | 256 | + | Data.Seek(Offset, soFromBeginning); | 
 
 
 
 
 
 
 
 | 257 | + | Data.Read(Target^, Size); | 
 
 
 
 
 
 
 
 | 258 | + | Data.Free; | 
 
 
 
 
 
 
 
 | 259 | + | end; | 
 
 
 
 
 
 
 
 | 260 | + | end; | 
 
 
 
 
 
 
 
 | 261 | + |  | 
 
 
 
 
 
 
 
 | 262 | + | procedure TDataAccess.UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TByteData); | 
 
 
 
 
 
 
 
 | 263 | + | var | 
 
 
 
 
 
 
 
 | 264 | + | data: TStream; | 
 
 
 
 
 
 
 
 | 265 | + | begin | 
 
 
 
 
 
 
 
 | 266 | + | if fileid < GetFileCount then | 
 
 
 
 
 
 
 
 | 267 | + | begin | 
 
 
 
 
 
 
 
 | 268 | + | data := TMemoryStream.Create; | 
 
 
 
 
 
 
 
 | 269 | + | data.Write(Src[0], Size); | 
 
 
 
 
 
 
 
 | 270 | + | data.Seek(0, soFromBeginning); | 
 
 
 
 
 
 
 
 | 271 | + | UpdateRawFilePart(FileID, DatOffset, Offset, Size, data); | 
 
 
 
 
 
 
 
 | 272 | + | data.Free; | 
 
 
 
 
 
 
 
 | 273 | + | end; | 
 
 
 
 
 
 
 
 | 274 | + | end; | 
 
 
 
 
 
 
 
 | 275 | + |  | 
 
 
 
 
 
 
 
 | 276 | + | procedure TDataAccess.UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: Pointer); | 
 
 
 
 
 
 
 
 | 277 | + | var | 
 
 
 
 
 
 
 
 | 278 | + | data: TStream; | 
 
 
 
 
 
 
 
 | 279 | + | begin | 
 
 
 
 
 
 
 
 | 280 | + | if fileid < GetFileCount then | 
 
 
 
 
 
 
 
 | 281 | + | begin | 
 
 
 
 
 
 
 
 | 282 | + | data := TMemoryStream.Create; | 
 
 
 
 
 
 
 
 | 283 | + | data.Write(Src^, Size); | 
 
 
 
 
 
 
 
 | 284 | + | data.Seek(0, soFromBeginning); | 
 
 
 
 
 
 
 
 | 285 | + | UpdateRawFilePart(FileID, DatOffset, Offset, Size, data); | 
 
 
 
 
 
 
 
 | 286 | + | data.Free; | 
 
 
 
 
 
 
 
 | 287 | + | end; | 
 
 
 
 
 
 
 
 | 288 | + | end; | 
 
 
 
 
 
 
 
 | 289 | + |  | 
 
 
 
 
 
 
 
 | 290 | + |  | 
 
 
 
 
 
 
 
 | 291 | + | function TDataAccess.AppendRawFile(LocSep: Boolean; Size: Integer; Src: TStream): Integer; | 
 
 
 
 
 
 
 
 | 292 | + | begin | 
 
 
 
 
 
 
 
 | 293 | + | raise ENotImplemented.Create('ERROR: AppendRawFile not implemented here!!!'); | 
 
 
 
 
 
 
 
 | 294 | + | end; | 
 
 
 
 
 
 
 
 | 295 | + |  | 
 
 
 
 
 
 
 
 | 296 | + |  | 
 
 
 
 
 
 
 
 | 297 | + | function TDataAccess.AppendRawFile(LocSep: Boolean; Size: Integer; Src: TByteData): Integer; | 
 
 
 
 
 
 
 
 | 298 | + | var | 
 
 
 
 
 
 
 
 | 299 | + | data: TStream; | 
 
 
 
 
 
 
 
 | 300 | + | begin | 
 
 
 
 
 
 
 
 | 301 | + | data := TMemoryStream.Create; | 
 
 
 
 
 
 
 
 | 302 | + | data.Write(Src[0], Size); | 
 
 
 
 
 
 
 
 | 303 | + | AppendRawFile(LocSep, Size, data); | 
 
 
 
 
 
 
 
 | 304 | + | data.Free; | 
 
 
 
 
 
 
 
 | 305 | + | end; | 
 
 
 
 
 
 
 
 | 306 | + |  | 
 
 
 
 
 
 
 
 | 307 | + | function TDataAccess.AppendRawFile(LocSep: Boolean; Size: Integer; Src: Pointer): Integer; | 
 
 
 
 
 
 
 
 | 308 | + | var | 
 
 
 
 
 
 
 
 | 309 | + | data: TStream; | 
 
 
 
 
 
 
 
 | 310 | + | begin | 
 
 
 
 
 
 
 
 | 311 | + | data := TMemoryStream.Create; | 
 
 
 
 
 
 
 
 | 312 | + | data.Write(Src^, Size); | 
 
 
 
 
 
 
 
 | 313 | + | AppendRawFile(LocSep, Size, data); | 
 
 
 
 
 
 
 
 | 314 | + | data.Free; | 
 
 
 
 
 
 
 
 | 315 | + | end; | 
 
 
 
 
 
 
 
 | 316 | + |  | 
 
 
 
 
 
 
 
 | 317 | + |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 318 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 319 |  | procedure TDataAccess.SetDataOS(DataOS: TDataOS); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 320 |  | begin |