| 1 | unit RawList;
 | 
|---|
| 2 | interface
 | 
|---|
| 3 | uses TypeDefs;
 | 
|---|
| 4 | 
 | 
|---|
| 5 | type
 | 
|---|
| 6 |   THandler = function(ConnectionID, FileID: Integer): TRawDataList;
 | 
|---|
| 7 |   TRawListHandler = record
 | 
|---|
| 8 |     Ext:     String[4];
 | 
|---|
| 9 |     needed:  Boolean;
 | 
|---|
| 10 |     Handler: THandler;
 | 
|---|
| 11 |   end;
 | 
|---|
| 12 |   TRawListHandlers = array of TRawListHandler;
 | 
|---|
| 13 | 
 | 
|---|
| 14 |   TRawLists = class
 | 
|---|
| 15 |     private
 | 
|---|
| 16 |       FRawListHandlers: TRawListHandlers;
 | 
|---|
| 17 |     public
 | 
|---|
| 18 |       property RawListHandlers: TRawListHandlers read FRawListHandlers;
 | 
|---|
| 19 |       procedure InsertRawListHandler(ext: String; needed: Boolean; handler: THandler);
 | 
|---|
| 20 |       function GetRawList(ConnectionID, FileID: Integer): TRawDataList;
 | 
|---|
| 21 |       function GetRawInfo(ConnectionID, FileID, DatOffset: Integer): TRawDataInfo;
 | 
|---|
| 22 |   end;
 | 
|---|
| 23 | 
 | 
|---|
| 24 | 
 | 
|---|
| 25 | var
 | 
|---|
| 26 |   RawLists: TRawLists;
 | 
|---|
| 27 | 
 | 
|---|
| 28 | 
 | 
|---|
| 29 | implementation
 | 
|---|
| 30 | 
 | 
|---|
| 31 | uses
 | 
|---|
| 32 |   Template, ConnectionManager, Access_OniArchive, Classes, SysUtils, Math;
 | 
|---|
| 33 | 
 | 
|---|
| 34 | 
 | 
|---|
| 35 | function AGDB(ConnectionID, FileID: Integer): TRawDataList;
 | 
|---|
| 36 | var
 | 
|---|
| 37 |   link:  Integer;
 | 
|---|
| 38 |   links: Integer;
 | 
|---|
| 39 |   i:     Integer;
 | 
|---|
| 40 | begin
 | 
|---|
| 41 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $1C, 4, @links);
 | 
|---|
| 42 |   links := links * 2;
 | 
|---|
| 43 |   SetLength(Result, links);
 | 
|---|
| 44 |   for i := 0 to links - 1 do
 | 
|---|
| 45 |   begin
 | 
|---|
| 46 |     Result[i].SrcOffset := $20 + i * 4;
 | 
|---|
| 47 |     ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + i * 4, 4, @link);
 | 
|---|
| 48 |     Result[i].RawAddr := link;
 | 
|---|
| 49 |     Result[i].RawSize := 32;
 | 
|---|
| 50 |     Result[i].LocSep  := False;
 | 
|---|
| 51 |   end;
 | 
|---|
| 52 | end;
 | 
|---|
| 53 | 
 | 
|---|
| 54 | 
 | 
|---|
| 55 | 
 | 
|---|
| 56 | 
 | 
|---|
| 57 | function AKVA(ConnectionID, FileID: Integer): TRawDataList;
 | 
|---|
| 58 | var
 | 
|---|
| 59 |   link:  Integer;
 | 
|---|
| 60 |   links: Integer;
 | 
|---|
| 61 |   i:     Integer;
 | 
|---|
| 62 | begin
 | 
|---|
| 63 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $1C, 4, @links);
 | 
|---|
| 64 |   SetLength(Result, links);
 | 
|---|
| 65 |   for i := 0 to links - 1 do
 | 
|---|
| 66 |   begin
 | 
|---|
| 67 |     Result[i].SrcOffset := $20 + i * $74 + $24;
 | 
|---|
| 68 |     ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + i * $74 + $24, 4, @link);
 | 
|---|
| 69 |     Result[i].RawAddr := link;
 | 
|---|
| 70 |     ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + i * $74 + $28, 4, @link);
 | 
|---|
| 71 |     Result[i].RawSize := link;
 | 
|---|
| 72 |     Result[i].LocSep  := False;
 | 
|---|
| 73 |   end;
 | 
|---|
| 74 | end;
 | 
|---|
| 75 | 
 | 
|---|
| 76 | 
 | 
|---|
| 77 | 
 | 
|---|
| 78 | 
 | 
|---|
| 79 | function BINA(ConnectionID, FileID: Integer): TRawDataList;
 | 
|---|
| 80 | var
 | 
|---|
| 81 |   link:     Integer;
 | 
|---|
| 82 |   datasize: Integer;
 | 
|---|
| 83 | begin
 | 
|---|
| 84 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $0C, 4, @link);
 | 
|---|
| 85 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $08, 4, @datasize);
 | 
|---|
| 86 |   SetLength(Result, 1);
 | 
|---|
| 87 |   Result[0].SrcOffset := $0C;
 | 
|---|
| 88 |   Result[0].RawAddr   := link;
 | 
|---|
| 89 |   Result[0].RawSize   := datasize;
 | 
|---|
| 90 |   Result[0].LocSep    := not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN);
 | 
|---|
| 91 | end;
 | 
|---|
| 92 | 
 | 
|---|
| 93 | 
 | 
|---|
| 94 | 
 | 
|---|
| 95 | 
 | 
|---|
| 96 | function OSBD(ConnectionID, FileID: Integer): TRawDataList;
 | 
|---|
| 97 | var
 | 
|---|
| 98 |   link:     Integer;
 | 
|---|
| 99 |   datasize: Integer;
 | 
|---|
| 100 | begin
 | 
|---|
| 101 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $08, 4, @datasize);
 | 
|---|
| 102 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $0C, 4, @link);
 | 
|---|
| 103 |   SetLength(Result, 1);
 | 
|---|
| 104 |   Result[0].SrcOffset := $0C;
 | 
|---|
| 105 |   Result[0].RawAddr   := link;
 | 
|---|
| 106 |   Result[0].RawSize   := datasize;
 | 
|---|
| 107 |   Result[0].LocSep     := not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN);
 | 
|---|
| 108 | end;
 | 
|---|
| 109 | 
 | 
|---|
| 110 | 
 | 
|---|
| 111 | 
 | 
|---|
| 112 | 
 | 
|---|
| 113 | function SNDD(ConnectionID, FileID: Integer): TRawDataList;
 | 
|---|
| 114 | var
 | 
|---|
| 115 |   link:     Integer;
 | 
|---|
| 116 |   datasize: Integer;
 | 
|---|
| 117 | begin
 | 
|---|
| 118 |   SetLength(Result, 1);
 | 
|---|
| 119 |   if ConManager.Connection[ConnectionID].DataOS in [DOS_MACBETA, DOS_MAC] then
 | 
|---|
| 120 |   begin
 | 
|---|
| 121 |     ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $10, 4, @datasize);
 | 
|---|
| 122 |     ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $14, 4, @link);
 | 
|---|
| 123 |     Result[0].SrcOffset := $14;
 | 
|---|
| 124 |   end
 | 
|---|
| 125 |   else
 | 
|---|
| 126 |   begin
 | 
|---|
| 127 |     ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $40, 4, @datasize);
 | 
|---|
| 128 |     ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $44, 4, @link);
 | 
|---|
| 129 |     Result[0].SrcOffset := $44;
 | 
|---|
| 130 |   end;
 | 
|---|
| 131 |   Result[0].RawAddr := link;
 | 
|---|
| 132 |   Result[0].RawSize := datasize;
 | 
|---|
| 133 |   Result[0].LocSep  := False;
 | 
|---|
| 134 | end;
 | 
|---|
| 135 | 
 | 
|---|
| 136 | 
 | 
|---|
| 137 | 
 | 
|---|
| 138 | 
 | 
|---|
| 139 | function SUBT(ConnectionID, FileID: Integer): TRawDataList;
 | 
|---|
| 140 | var
 | 
|---|
| 141 |   baselink, lastlink: Integer;
 | 
|---|
| 142 |   links: Integer;
 | 
|---|
| 143 |   Data:  TStream;
 | 
|---|
| 144 |   read:  Integer;
 | 
|---|
| 145 |   char:  Byte;
 | 
|---|
| 146 |   foundzeros: Byte;
 | 
|---|
| 147 | begin
 | 
|---|
| 148 |   SetLength(Result, 0);
 | 
|---|
| 149 | 
 | 
|---|
| 150 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $18, 4, @baselink);
 | 
|---|
| 151 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $1C, 4, @links);
 | 
|---|
| 152 |   if links > 0 then
 | 
|---|
| 153 |   begin
 | 
|---|
| 154 |     ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + (links - 1) * 4, 4, @lastlink);
 | 
|---|
| 155 |     Data := nil;
 | 
|---|
| 156 |     TAccess_OniArchive(ConManager.Connection[ConnectionID]).LoadRawOffset(
 | 
|---|
| 157 |           False, baselink, lastlink + 1024, Data);
 | 
|---|
| 158 |     Data.Seek(lastlink, soFromBeginning);
 | 
|---|
| 159 | 
 | 
|---|
| 160 |     foundzeros := 0;
 | 
|---|
| 161 |     repeat
 | 
|---|
| 162 |       read := Data.Read(char, 1);
 | 
|---|
| 163 |       if (read > 0) and (char = 0) then
 | 
|---|
| 164 |       begin
 | 
|---|
| 165 |         Inc(foundzeros);
 | 
|---|
| 166 |       end;
 | 
|---|
| 167 |     until (read = 0) or (foundzeros = 2);
 | 
|---|
| 168 | 
 | 
|---|
| 169 |     if foundzeros = 2 then
 | 
|---|
| 170 |     begin
 | 
|---|
| 171 |       SetLength(Result, 1);
 | 
|---|
| 172 |       Result[0].SrcID     := FileID;
 | 
|---|
| 173 |       Result[0].SrcOffset := $18;
 | 
|---|
| 174 |       Result[0].RawAddr   := baselink;
 | 
|---|
| 175 |       Result[0].RawSize   := Data.Position;
 | 
|---|
| 176 |       Result[0].LocSep    := False;
 | 
|---|
| 177 |     end;
 | 
|---|
| 178 |   end;
 | 
|---|
| 179 | end;
 | 
|---|
| 180 | 
 | 
|---|
| 181 | 
 | 
|---|
| 182 | 
 | 
|---|
| 183 | 
 | 
|---|
| 184 | function TRAM(ConnectionID, FileID: Integer): TRawDataList;
 | 
|---|
| 185 | var
 | 
|---|
| 186 |   i:      Integer;
 | 
|---|
| 187 |   link:   Integer;
 | 
|---|
| 188 |   frames: Word;
 | 
|---|
| 189 |   tempb:  Byte;
 | 
|---|
| 190 |   tempw:  Word;
 | 
|---|
| 191 |   templ:  Integer;
 | 
|---|
| 192 |   Data:   TByteData;
 | 
|---|
| 193 |   offset: Word;
 | 
|---|
| 194 |   frame_count: Integer;
 | 
|---|
| 195 | begin
 | 
|---|
| 196 |   SetLength(Result, 13);
 | 
|---|
| 197 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $16C, 2, @frames);
 | 
|---|
| 198 |   {x-z-pos}
 | 
|---|
| 199 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $0C, 4, @link);
 | 
|---|
| 200 |   Result[0].SrcOffset := $0C;
 | 
|---|
| 201 |   Result[0].RawAddr   := link;
 | 
|---|
| 202 |   Result[0].RawSize := frames * 4;
 | 
|---|
| 203 |   {y-pos}
 | 
|---|
| 204 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $10, 4, @link);
 | 
|---|
| 205 |   Result[1].SrcOffset := $10;
 | 
|---|
| 206 |   Result[1].RawAddr   := link;
 | 
|---|
| 207 |   Result[1].RawSize := frames * 8;
 | 
|---|
| 208 |   {attacks}
 | 
|---|
| 209 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $182, 1, @tempb);
 | 
|---|
| 210 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $14, 4, @link);
 | 
|---|
| 211 |   Result[2].SrcOffset := $14;
 | 
|---|
| 212 |   Result[2].RawAddr   := link;
 | 
|---|
| 213 |   Result[2].RawSize   := tempb * 32;
 | 
|---|
| 214 |   {damage}
 | 
|---|
| 215 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $183, 1, @tempb);
 | 
|---|
| 216 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $18, 4, @link);
 | 
|---|
| 217 |   Result[3].SrcOffset := $18;
 | 
|---|
| 218 |   Result[3].RawAddr   := link;
 | 
|---|
| 219 |   Result[3].RawSize   := tempb * 8;
 | 
|---|
| 220 |   {motionblur}
 | 
|---|
| 221 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $184, 1, @tempb);
 | 
|---|
| 222 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $1C, 4, @link);
 | 
|---|
| 223 |   Result[4].SrcOffset := $1C;
 | 
|---|
| 224 |   Result[4].RawAddr   := link;
 | 
|---|
| 225 |   Result[4].RawSize   := tempb * 12;
 | 
|---|
| 226 |   {shortcut}
 | 
|---|
| 227 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $185, 1, @tempb);
 | 
|---|
| 228 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20, 4, @link);
 | 
|---|
| 229 |   Result[5].SrcOffset := $20;
 | 
|---|
| 230 |   Result[5].RawAddr   := link;
 | 
|---|
| 231 |   Result[5].RawSize   := tempb * 8;
 | 
|---|
| 232 |   {throw}
 | 
|---|
| 233 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $24, 4, @link);
 | 
|---|
| 234 |   Result[6].SrcOffset := $24;
 | 
|---|
| 235 |   Result[6].RawAddr   := link;
 | 
|---|
| 236 |   Result[6].RawSize := 24;
 | 
|---|
| 237 |   {footstep}
 | 
|---|
| 238 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $186, 1, @tempb);
 | 
|---|
| 239 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $28, 4, @link);
 | 
|---|
| 240 |   Result[7].SrcOffset := $28;
 | 
|---|
| 241 |   Result[7].RawAddr   := link;
 | 
|---|
| 242 |   Result[7].RawSize   := tempb * 4;
 | 
|---|
| 243 |   {particle}
 | 
|---|
| 244 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $187, 1, @tempb);
 | 
|---|
| 245 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $2C, 4, @link);
 | 
|---|
| 246 |   Result[8].SrcOffset := $2C;
 | 
|---|
| 247 |   Result[8].RawAddr   := link;
 | 
|---|
| 248 |   Result[8].RawSize   := tempb * 24;
 | 
|---|
| 249 |   {position}
 | 
|---|
| 250 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $30, 4, @link);
 | 
|---|
| 251 |   Result[9].SrcOffset := $30;
 | 
|---|
| 252 |   Result[9].RawAddr   := link;
 | 
|---|
| 253 |   Result[9].RawSize   := frames * 8;
 | 
|---|
| 254 |   {particle}
 | 
|---|
| 255 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $154, 2, @tempw);
 | 
|---|
| 256 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $38, 4, @link);
 | 
|---|
| 257 |   Result[11].SrcOffset := $38;
 | 
|---|
| 258 |   Result[11].RawAddr   := link;
 | 
|---|
| 259 |   Result[11].RawSize   := tempw * 34;
 | 
|---|
| 260 |   {extent}
 | 
|---|
| 261 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $138, 4, @templ);
 | 
|---|
| 262 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $13C, 4, @link);
 | 
|---|
| 263 |   Result[12].SrcOffset := $13C;
 | 
|---|
| 264 |   Result[12].RawAddr   := link;
 | 
|---|
| 265 |   Result[12].RawSize   := templ * 12;
 | 
|---|
| 266 | 
 | 
|---|
| 267 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $34, 4, @link);
 | 
|---|
| 268 |   if link > 0 then
 | 
|---|
| 269 |   begin
 | 
|---|
| 270 |     ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $160, 2, @tempw);
 | 
|---|
| 271 |     frame_count := 0;
 | 
|---|
| 272 |     i := 0;
 | 
|---|
| 273 |     SetLength(Data, $FFFF);
 | 
|---|
| 274 |     TAccess_OniArchive(ConManager.Connection[ConnectionID]).LoadRawOffset(
 | 
|---|
| 275 |           False, link, $FFFF, Data);
 | 
|---|
| 276 |     offset := Data[$24] + Data[$25] * 256;
 | 
|---|
| 277 |     while (offset + i < Length(Data)) and (frame_count < frames - 1) do
 | 
|---|
| 278 |     begin
 | 
|---|
| 279 |       Inc(i, tempw);
 | 
|---|
| 280 |       frame_count := frame_count + Data[offset + i];
 | 
|---|
| 281 |       Inc(i);
 | 
|---|
| 282 |     end;
 | 
|---|
| 283 |     if offset + i < Length(Data) then
 | 
|---|
| 284 |     begin
 | 
|---|
| 285 |       Inc(i, tempw);
 | 
|---|
| 286 |       Result[10].RawSize := offset + i;
 | 
|---|
| 287 |     end
 | 
|---|
| 288 |     else
 | 
|---|
| 289 |     begin
 | 
|---|
| 290 |       Result[10].RawSize := 0;
 | 
|---|
| 291 |     end;
 | 
|---|
| 292 |   end;
 | 
|---|
| 293 |   Result[10].SrcOffset := $34;
 | 
|---|
| 294 |   Result[10].RawAddr   := link;
 | 
|---|
| 295 | end;
 | 
|---|
| 296 | 
 | 
|---|
| 297 | 
 | 
|---|
| 298 | 
 | 
|---|
| 299 | 
 | 
|---|
| 300 | function TXMP(ConnectionID, FileID: Integer): TRawDataList;
 | 
|---|
| 301 | var
 | 
|---|
| 302 |   link_pc:   Integer;
 | 
|---|
| 303 |   link_mac:  Integer;
 | 
|---|
| 304 |   x, y:      Word;
 | 
|---|
| 305 |   storetype: Byte;
 | 
|---|
| 306 |   datasize:  Integer;
 | 
|---|
| 307 |   mipmap:    Byte;
 | 
|---|
| 308 | 
 | 
|---|
| 309 |   function GetImgSize(w,h, storetype: Integer): Integer;
 | 
|---|
| 310 |   begin
 | 
|---|
| 311 |     case storetype of
 | 
|---|
| 312 |       0, 1, 2:
 | 
|---|
| 313 |         Result := w*h*2;
 | 
|---|
| 314 |       8:
 | 
|---|
| 315 |         Result := w*h*4;
 | 
|---|
| 316 |       9:
 | 
|---|
| 317 |         Result :=  Max(1, w div 4) * Max(1, h div 4) * 8;
 | 
|---|
| 318 |     else
 | 
|---|
| 319 |       Result := -1;
 | 
|---|
| 320 |     end;
 | 
|---|
| 321 |   end;
 | 
|---|
| 322 | 
 | 
|---|
| 323 | begin
 | 
|---|
| 324 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $88, SizeOf(mipmap), @mipmap);
 | 
|---|
| 325 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $8C, SizeOf(x), @x);
 | 
|---|
| 326 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $8E, SizeOf(y), @y);
 | 
|---|
| 327 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $90, SizeOf(storetype), @storetype);
 | 
|---|
| 328 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $9C, 4, @link_pc);
 | 
|---|
| 329 |   ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $A0, 4, @link_mac);
 | 
|---|
| 330 | 
 | 
|---|
| 331 | 
 | 
|---|
| 332 |   datasize := GetImgSize(x, y, storetype);
 | 
|---|
| 333 |   if (mipmap and $01) > 0 then
 | 
|---|
| 334 |   begin
 | 
|---|
| 335 |     repeat
 | 
|---|
| 336 |       x    := Max(x div 2, 1);
 | 
|---|
| 337 |       y    := Max(y div 2, 1);
 | 
|---|
| 338 |       datasize := datasize + GetImgSize(x, y, storetype);
 | 
|---|
| 339 |     until (x = 1) and (y = 1);
 | 
|---|
| 340 |   end;
 | 
|---|
| 341 | 
 | 
|---|
| 342 |   SetLength(Result, 1);
 | 
|---|
| 343 |   if ConManager.Connection[ConnectionID].DataOS = DOS_WIN then
 | 
|---|
| 344 |   begin
 | 
|---|
| 345 |     Result[0].SrcOffset := $9C;
 | 
|---|
| 346 |     Result[0].RawAddr   := link_pc;
 | 
|---|
| 347 |   end
 | 
|---|
| 348 |   else
 | 
|---|
| 349 |   begin
 | 
|---|
| 350 |     Result[0].SrcOffset := $A0;
 | 
|---|
| 351 |     Result[0].RawAddr   := link_mac;
 | 
|---|
| 352 |   end;
 | 
|---|
| 353 |   Result[0].RawSize := datasize;
 | 
|---|
| 354 |   Result[0].LocSep  := not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN);
 | 
|---|
| 355 | end;
 | 
|---|
| 356 | 
 | 
|---|
| 357 | 
 | 
|---|
| 358 | 
 | 
|---|
| 359 | 
 | 
|---|
| 360 | function TRawLists.GetRawInfo(ConnectionID, FileID,
 | 
|---|
| 361 |   DatOffset: Integer): TRawDataInfo;
 | 
|---|
| 362 | var
 | 
|---|
| 363 |   i: Integer;
 | 
|---|
| 364 |   RawList: TRawDataList;
 | 
|---|
| 365 | begin
 | 
|---|
| 366 |   RawList          := GetRawList(ConnectionID, FileID);
 | 
|---|
| 367 |   Result.SrcID     := -1;
 | 
|---|
| 368 |   Result.SrcOffset := -1;
 | 
|---|
| 369 |   Result.RawAddr   := -1;
 | 
|---|
| 370 |   Result.RawSize   := -1;
 | 
|---|
| 371 |   if Length(RawList) > 0 then
 | 
|---|
| 372 |   begin
 | 
|---|
| 373 |     for i := 0 to High(RawList) do
 | 
|---|
| 374 |     begin
 | 
|---|
| 375 |       if RawList[i].SrcOffset = DatOffset then
 | 
|---|
| 376 |       begin
 | 
|---|
| 377 |         Result.SrcID     := FileID;
 | 
|---|
| 378 |         Result.SrcOffset := RawList[i].SrcOffset;
 | 
|---|
| 379 |         Result.RawAddr   := RawList[i].RawAddr;
 | 
|---|
| 380 |         Result.RawSize   := RawList[i].RawSize;
 | 
|---|
| 381 |         Result.LocSep    := RawList[i].LocSep;
 | 
|---|
| 382 |         Break;
 | 
|---|
| 383 |       end;
 | 
|---|
| 384 |     end;
 | 
|---|
| 385 |   end;
 | 
|---|
| 386 | end;
 | 
|---|
| 387 | 
 | 
|---|
| 388 | 
 | 
|---|
| 389 | function TRawLists.GetRawList(ConnectionID, FileID: Integer): TRawDataList;
 | 
|---|
| 390 | var
 | 
|---|
| 391 |   i: Integer;
 | 
|---|
| 392 |   fileinfo: TFileInfo;
 | 
|---|
| 393 | begin
 | 
|---|
| 394 |   SetLength(Result, 0);
 | 
|---|
| 395 |   fileinfo := ConManager.Connection[ConnectionID].GetFileInfo(FileID);
 | 
|---|
| 396 |   for i := 0 to High(FRawListHandlers) do
 | 
|---|
| 397 |     if UpperCase(FRawListHandlers[i].Ext) = UpperCase(fileinfo.extension) then
 | 
|---|
| 398 |     begin
 | 
|---|
| 399 |       if FRawListHandlers[i].needed then
 | 
|---|
| 400 |         Result := FRawListHandlers[i].Handler(ConnectionID, FileID);
 | 
|---|
| 401 |       Break;
 | 
|---|
| 402 |     end;
 | 
|---|
| 403 |   if Length(Result) > 0 then
 | 
|---|
| 404 |     for i := 0 to High(Result) do
 | 
|---|
| 405 |       if Result[i].RawAddr = 0 then
 | 
|---|
| 406 |         Result[i].RawSize := 0;
 | 
|---|
| 407 | end;
 | 
|---|
| 408 | 
 | 
|---|
| 409 | procedure TRawLists.InsertRawListHandler(ext: String; needed: Boolean; handler: THandler);
 | 
|---|
| 410 | begin
 | 
|---|
| 411 |   SetLength(FRawListHandlers, Length(FRawListHandlers) + 1);
 | 
|---|
| 412 |   FRawListHandlers[High(FRawListHandlers)].Ext := ext;
 | 
|---|
| 413 |   FRawListHandlers[High(FRawListHandlers)].needed := needed;
 | 
|---|
| 414 |   FRawListHandlers[High(FRawListHandlers)].handler := handler;
 | 
|---|
| 415 | //  Raws := Raws + ext;
 | 
|---|
| 416 |   AddToolListEntry('rawedit', '', ext);
 | 
|---|
| 417 | end;
 | 
|---|
| 418 | 
 | 
|---|
| 419 | 
 | 
|---|
| 420 | 
 | 
|---|
| 421 | 
 | 
|---|
| 422 | initialization
 | 
|---|
| 423 |   RawLists := TRawLists.Create;
 | 
|---|
| 424 |   RawLists.InsertRawListHandler('AGDB', False, AGDB);
 | 
|---|
| 425 |   RawLists.InsertRawListHandler('AKVA', True, AKVA);
 | 
|---|
| 426 |   RawLists.InsertRawListHandler('BINA', True, BINA);
 | 
|---|
| 427 |   RawLists.InsertRawListHandler('OSBD', True, OSBD);
 | 
|---|
| 428 |   RawLists.InsertRawListHandler('SNDD', True, SNDD);
 | 
|---|
| 429 |   RawLists.InsertRawListHandler('SUBT', True, SUBT);
 | 
|---|
| 430 |   RawLists.InsertRawListHandler('TRAM', True, TRAM);
 | 
|---|
| 431 |   RawLists.InsertRawListHandler('TXMP', True, TXMP);
 | 
|---|
| 432 | end.
 | 
|---|