| 1 | unit DataAccess; | 
 
 
 
 
 | 2 | interface | 
 
 
 
 
 | 3 |  | 
 
 
 
 
 | 4 | uses TypeDefs, Classes, StrUtils, SysUtils; | 
 
 
 
 
 | 5 | //uses Data, Classes, SysUtils, StrUtils, | 
 
 
 
 
 | 6 | //  Dialogs, ABSDecUtil, ABSMain, DB, Windows; | 
 
 
 
 
 | 7 |  | 
 
 
 
 
 | 8 |  | 
 
 
 
 
 | 9 | type | 
 
 
 
 
 | 10 | TDataAccess = class | 
 
 
 
 
 | 11 | private | 
 
 
 
 
 | 12 | FConnectionID:  Integer; | 
 
 
 
 
 | 13 | FFileName:      String; | 
 
 
 
 
 | 14 | FBackend:       TDataBackend; | 
 
 
 
 
 | 15 | FDataOS:        TDataOS; | 
 
 
 
 
 | 16 | FLevelNumber:   Integer; | 
 
 
 
 
 | 17 | FChangeRights:  TChangeRights; | 
 
 
 
 
 | 18 | procedure SetDataOS(DataOS: TDataOS); | 
 
 
 
 
 | 19 | protected | 
 
 
 
 
 | 20 | public | 
 
 
 
 
 | 21 | property ConnectionID: Integer      read FConnectionID; | 
 
 
 
 
 | 22 | property FileName:     String       read FFileName; | 
 
 
 
 
 | 23 | property Backend:      TDataBackend read FBackend; | 
 
 
 
 
 | 24 | property DataOS:       TDataOS      read FDataOS write SetDataOS; | 
 
 
 
 
 | 25 | property LevelNumber:  Integer      read FLevelNumber; | 
 
 
 
 
 | 26 |  | 
 
 
 
 
 | 27 | constructor Create(FileName: String; ConnectionID: Integer; var Msg: TStatusMessages); virtual; abstract; | 
 
 
 
 
 | 28 | procedure Close; virtual; abstract; | 
 
 
 
 
 | 29 |  | 
 
 
 
 
 | 30 | function ExtractFileIDOfName(Name: String): Integer; virtual; | 
 
 
 
 
 | 31 | function GetFileInfo(FileID: Integer): TFileInfo; virtual; | 
 
 
 
 
 | 32 | function GetFileInfoByName(Name: String): TFileInfo; virtual; | 
 
 
 
 
 | 33 | function GetFilesList(Ext: String; Pattern: String; | 
 
 
 
 
 | 34 | NoEmptyFiles: Boolean; SortType: TSortType): TStrings; virtual; abstract; | 
 
 
 
 
 | 35 | function GetFileCount: Integer; virtual; abstract; | 
 
 
 
 
 | 36 | function GetExtensionsList(ExtListFormat: TExtensionFormat): TStrings; virtual; abstract; | 
 
 
 
 
 | 37 |  | 
 
 
 
 
 | 38 | procedure LoadDatFile(FileID: Integer; var Target: TStream); overload; virtual; abstract; | 
 
 
 
 
 | 39 | procedure LoadDatFile(FileID: Integer; var Target: TByteData); overload; virtual; abstract; | 
 
 
 
 
 | 40 | procedure UpdateDatFile(FileID: Integer; Src: TStream); overload; virtual; abstract; | 
 
 
 
 
 | 41 | procedure UpdateDatFile(FileID: Integer; Src: TByteData); overload; virtual; abstract; | 
 
 
 
 
 | 42 | procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TStream); overload; virtual; abstract; | 
 
 
 
 
 | 43 | procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TByteData); overload; virtual; abstract; | 
 
 
 
 
 | 44 | procedure LoadDatFilePart(FileID, Offset, Size: Integer; Target: Pointer); overload; virtual; abstract; | 
 
 
 
 
 | 45 | procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TStream); overload; virtual; abstract; | 
 
 
 
 
 | 46 | procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TByteData); overload; virtual; abstract; | 
 
 
 
 
 | 47 | procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: Pointer); overload; virtual; abstract; | 
 
 
 
 
 | 48 |  | 
 
 
 
 
 | 49 | function GetRawList(FileID: Integer): TRawDataList; virtual; abstract; | 
 
 
 
 
 | 50 | function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; | 
 
 
 
 
 | 51 |  | 
 
 
 
 
 | 52 | procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TStream); overload; virtual; abstract; | 
 
 
 
 
 | 53 | procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TByteData); overload; virtual; abstract; | 
 
 
 
 
 | 54 | procedure UpdateRawFile(FileID, DatOffset, Size: Integer; Src: TStream); overload; virtual; abstract; | 
 
 
 
 
 | 55 | procedure UpdateRawFile(FileID, DatOffset, Size: Integer; Src: TByteData); overload; virtual; abstract; | 
 
 
 
 
 | 56 | procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TStream); overload; virtual; abstract; | 
 
 
 
 
 | 57 | procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TByteData); overload; virtual; abstract; | 
 
 
 
 
 | 58 | procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; Target: Pointer); overload; virtual; abstract; | 
 
 
 
 
 | 59 | procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TStream); overload; virtual; abstract; | 
 
 
 
 
 | 60 | procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TByteData); overload; virtual; abstract; | 
 
 
 
 
 | 61 | procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: Pointer); overload; virtual; abstract; | 
 
 
 
 
 | 62 |  | 
 
 
 
 
 | 63 | function AppendRawFile(LocSep: Boolean; Size: Integer; Src: TStream): Integer; overload; virtual; abstract; | 
 
 
 
 
 | 64 | function AppendRawFile(LocSep: Boolean; Size: Integer; Src: TByteData): Integer; overload; virtual; abstract; | 
 
 
 
 
 | 65 | function AppendRawFile(LocSep: Boolean; Size: Integer; Src: Pointer): Integer; overload; virtual; abstract; | 
 
 
 
 
 | 66 | published | 
 
 
 
 
 | 67 | end; | 
 
 
 
 
 | 68 |  | 
 
 
 
 
 | 69 |  | 
 
 
 
 
 | 70 |  | 
 
 
 
 
 | 71 | implementation | 
 
 
 
 
 | 72 |  | 
 
 
 
 
 | 73 |  | 
 
 
 
 
 | 74 | (* | 
 
 
 
 
 | 75 | Implementation of TDataAccess | 
 
 
 
 
 | 76 | *) | 
 
 
 
 
 | 77 |  | 
 
 
 
 
 | 78 | function TDataAccess.ExtractFileIDOfName(Name: String): Integer; | 
 
 
 
 
 | 79 | begin | 
 
 
 
 
 | 80 | if Name[5] = '-' then | 
 
 
 
 
 | 81 | Result := StrToInt(MidStr(Name, 1, 4)) | 
 
 
 
 
 | 82 | else | 
 
 
 
 
 | 83 | Result := StrToInt(MidStr(Name, 1, 5)); | 
 
 
 
 
 | 84 | end; | 
 
 
 
 
 | 85 |  | 
 
 
 
 
 | 86 |  | 
 
 
 
 
 | 87 | function TDataAccess.GetFileInfo(FileID: Integer): TFileInfo; | 
 
 
 
 
 | 88 | begin | 
 
 
 
 
 | 89 | Result.ID := -1; | 
 
 
 
 
 | 90 | Result.Name := ''; | 
 
 
 
 
 | 91 | Result.Extension := ''; | 
 
 
 
 
 | 92 | Result.Size := -1; | 
 
 
 
 
 | 93 | Result.FileType := 0; | 
 
 
 
 
 | 94 | Result.DatAddr := -1; | 
 
 
 
 
 | 95 | end; | 
 
 
 
 
 | 96 |  | 
 
 
 
 
 | 97 |  | 
 
 
 
 
 | 98 | function TDataAccess.GetFileInfoByName(Name: String): TFileInfo; | 
 
 
 
 
 | 99 | var | 
 
 
 
 
 | 100 | i:     Integer; | 
 
 
 
 
 | 101 | files: TStrings; | 
 
 
 
 
 | 102 | begin | 
 
 
 
 
 | 103 | Result := GetFileInfo(-1); | 
 
 
 
 
 | 104 | files  := GetFilesList('', Name, False, ST_IDAsc); | 
 
 
 
 
 | 105 | if files.Count = 0 then | 
 
 
 
 
 | 106 | else | 
 
 
 
 
 | 107 | begin | 
 
 
 
 
 | 108 | for i := 0 to files.Count - 1 do | 
 
 
 
 
 | 109 | begin | 
 
 
 
 
 | 110 | if MidStr(files.Strings[i], Pos('-', files.Strings[i]) + 1, | 
 
 
 
 
 | 111 | Length(files.Strings[i]) - Pos('-', files.Strings[i]) - 5) = name then | 
 
 
 
 
 | 112 | begin | 
 
 
 
 
 | 113 | Result := GetFileInfo(ExtractFileIDOfName(files.Strings[i])); | 
 
 
 
 
 | 114 | Break; | 
 
 
 
 
 | 115 | end; | 
 
 
 
 
 | 116 | end; | 
 
 
 
 
 | 117 | end; | 
 
 
 
 
 | 118 | files.Free; | 
 
 
 
 
 | 119 | end; | 
 
 
 
 
 | 120 |  | 
 
 
 
 
 | 121 |  | 
 
 
 
 
 | 122 | function TDataAccess.GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; | 
 
 
 
 
 | 123 | var | 
 
 
 
 
 | 124 | i: LongWord; | 
 
 
 
 
 | 125 | RawList: TRawDataList; | 
 
 
 
 
 | 126 | begin | 
 
 
 
 
 | 127 | 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 | 
 
 
 
 
 | 133 | begin | 
 
 
 
 
 | 134 | for i := 0 to High(RawList) do | 
 
 
 
 
 | 135 | begin | 
 
 
 
 
 | 136 | if RawList[i].SrcOffset = DatOffset then | 
 
 
 
 
 | 137 | begin | 
 
 
 
 
 | 138 | Result.SrcID     := FileID; | 
 
 
 
 
 | 139 | Result.SrcOffset := RawList[i].SrcOffset; | 
 
 
 
 
 | 140 | Result.RawAddr   := RawList[i].RawAddr; | 
 
 
 
 
 | 141 | Result.RawSize   := RawList[i].RawSize; | 
 
 
 
 
 | 142 | Result.LocSep    := RawList[i].LocSep; | 
 
 
 
 
 | 143 | Break; | 
 
 
 
 
 | 144 | end; | 
 
 
 
 
 | 145 | end; | 
 
 
 
 
 | 146 | end; | 
 
 
 
 
 | 147 | end; | 
 
 
 
 
 | 148 |  | 
 
 
 
 
 | 149 |  | 
 
 
 
 
 | 150 | procedure TDataAccess.SetDataOS(DataOS: TDataOS); | 
 
 
 
 
 | 151 | begin | 
 
 
 
 
 | 152 | raise ENotImplemented.Create('TDataAccess.SetDataOS: TBD!'); | 
 
 
 
 
 | 153 | end; | 
 
 
 
 
 | 154 |  | 
 
 
 
 
 | 155 | end. |