| 1 | 
   | 
 unit LevelDB; | 
 
 
 
 
 
 
 
 
 
 | 2 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 2 | 
   | 
 interface | 
 
 
 
 
 
 
 
 
 
 | 4 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 3 | 
   | 
 uses | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 4 | 
   | 
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 5 | 
   | 
   Dialogs, ComCtrls, StdCtrls, StrUtils; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 25 | 
   | 
   Form_LevelDB: TForm_LevelDB; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 26 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 27 | 
   | 
 implementation | 
 
 
 
 
 
 
 
 
 
 | 30 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 28 | 
   | 
 {$R *.dfm} | 
 
 
 
 
 
 
 
 
 
 | 32 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 29 | 
   | 
 uses ABSMain, ABSDecUtil, Main, | 
 
 
 
 
 
 
 
 
 
 
 
 | 30 | 
 < | 
     ConnectionManager, TypeDefs, DataAccess, OniImgClass; | 
 
 
 
 
 
 
 
 
 
 | 30 | 
 > | 
     ConnectionManager, TypeDefs, DataAccess, OniImgClass, Data; | 
 
 
 
 
 
 
 
 
 
 
 
 | 31 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 32 | 
   | 
 type | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 33 | 
   | 
   THandler = procedure(FileID: Integer); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 65 | 
   | 
   Stream_Body, Stream_Names:          TMemoryStream; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 66 | 
   | 
   Stream_Dat, Stream_Raw, Stream_Sep: TFileStream; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 67 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 | 72 | 
 – | 
 //  FileCount: Integer; | 
 
 
 
 
 
 
 
 
 
 | 73 | 
 – | 
 //  temps, temps2: String; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 68 | 
   | 
 //  Data, rawdata: Tdata; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 69 | 
   | 
   BeginTime, FileTime: Double; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 70 | 
   | 
   Step:     Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 71 | 
   | 
 //  rawlist:  TRawDataList; | 
 
 
 
 
 
 
 
 
 
 | 78 | 
 – | 
 //  extlist:  TExtensionsMap; | 
 
 
 
 
 
 
 
 
 
 | 79 | 
 – | 
 //  fileinfo: TFileInfo; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 72 | 
   | 
 //  datlinks: TDatLinks; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 73 | 
   | 
   OniImage:   TOniImage; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 74 | 
   | 
   LevelID:    Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 78 | 
   | 
   Connection: TDataAccess; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 79 | 
   | 
   ConRepMsg:  TStatusMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 80 | 
   | 
  | 
 
 
 
 
 
 
 
 
 | 81 | 
 + | 
   FileID:     Integer; | 
 
 
 
 
 
 
 
 
 | 82 | 
 + | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 83 | 
   | 
   Strings:    TStrings; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 84 | 
   | 
   i, j:       Integer; | 
 
 
 
 
 
 
 
 
 | 85 | 
 + | 
   temps:      String; | 
 
 
 
 
 
 
 
 
 | 86 | 
 + | 
   tempi:      Integer; | 
 
 
 
 
 
 
 
 
 | 87 | 
 + | 
   tempb:      Byte; | 
 
 
 
 
 
 
 
 
 | 88 | 
 + | 
   FileInfo:   TFileInfo; | 
 
 
 
 
 
 
 
 
 | 89 | 
 + | 
   DatLinks:   TDatLinkList; | 
 
 
 
 
 
 
 
 
 | 90 | 
 + | 
   RawLinks:   TRawDataList; | 
 
 
 
 
 
 
 
 
 | 91 | 
 + | 
  | 
 
 
 
 
 
 
 
 
 | 92 | 
 + | 
   DatFileStream, RawFileStream: TMemoryStream; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 93 | 
   | 
 const | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 94 | 
   | 
   Steps: Byte = 3; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 95 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 210 | 
   | 
     end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 211 | 
   | 
   end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 212 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 | 213 | 
 < | 
    | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 214 | 
 < | 
   extlist := OniDataConnection.GetExtendedExtensionsList; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 215 | 
 < | 
   for i := 0 to High(DatHeader.Ident) do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 216 | 
 < | 
     DatHeader.Ident[i] := OniDataConnection.LevelInfo.Ident[i]; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 217 | 
 < | 
   DatHeader.Files := OniDataConnection.GetFilesCount; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 213 | 
 > | 
   for i := 0 to High(DatHeader.OSIdent) do | 
 
 
 
 
 
 | 214 | 
 > | 
     case Connection.DataOS of | 
 
 
 
 
 
 | 215 | 
 > | 
       DOS_WIN: DatHeader.OSIdent[i] := HeaderOSIdentWin[i]; | 
 
 
 
 
 
 | 216 | 
 > | 
       DOS_MAC: DatHeader.OSIdent[i] := HeaderOSIdentMac[i]; | 
 
 
 
 
 
 | 217 | 
 > | 
       DOS_MACBETA: DatHeader.OSIdent[i] := HeaderOSIdentMacBeta[i]; | 
 
 
 
 
 
 | 218 | 
 > | 
     end; | 
 
 
 
 
 
 | 219 | 
 > | 
   for i := 0 to High(DatHeader.GlobalIdent) do | 
 
 
 
 
 
 | 220 | 
 > | 
     DatHeader.GlobalIdent[i] := HeaderGlobalIdent[i]; | 
 
 
 
 
 
 | 221 | 
 > | 
   DatHeader.Files := Connection.GetFileCount; | 
 
 
 
 
 
 
 
 
 
 
 
 | 222 | 
   | 
   DatHeader.NamedFiles := Length(NamedFilesHeader); | 
 
 
 
 
 
 
 
 
 
 
 
 | 223 | 
 < | 
   DatHeader.Extensions := Length(extlist); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 223 | 
 > | 
  | 
 
 
 
 
 
 | 224 | 
 > | 
   Strings := Connection.GetExtensionsList(EF_ExtCount); | 
 
 
 
 
 
 | 225 | 
 > | 
  | 
 
 
 
 
 
 | 226 | 
 > | 
   DatHeader.Extensions := Strings.Count; | 
 
 
 
 
 
 
 
 
 
 
 
 | 227 | 
   | 
   DatHeader.DataAddr   := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 228 | 
   | 
   DatHeader.DataSize   := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 229 | 
   | 
   DatHeader.NamesAddr  := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 235 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 236 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 237 | 
   | 
   DoStep('Writing extensions-header'); | 
 
 
 
 
 
 
 
 
 
 
 
 | 238 | 
 < | 
   progress.Max := Length(OniDataConnection.GetExtensionsList); | 
 
 
 
 
 
 
 
 
 
 | 238 | 
 > | 
   progress.Max := Strings.Count; | 
 
 
 
 
 
 
 
 
 
 
 
 | 239 | 
   | 
   Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 | 240 | 
 < | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 232 | 
 < | 
   for i := 0 to High(ExtensionsHeader) do | 
 
 
 
 
 
 
 
 
 
 | 240 | 
 > | 
   for i := 0 to Strings.Count - 1 do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 241 | 
   | 
   begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 242 | 
 < | 
     ExtensionsHeader[i].Ident     := extlist[i].Ident; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 243 | 
 < | 
     ExtensionsHeader[i].Extension := extlist[i].Extension; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 244 | 
 < | 
     SetLength(temps, 4); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 242 | 
 > | 
     temps := Strings.Strings[i]; | 
 
 
 
 
 
 | 243 | 
 > | 
     ExtensionsHeader[i].ExtCount := StrToInt( MidStr( | 
 
 
 
 
 
 | 244 | 
 > | 
             temps, | 
 
 
 
 
 
 | 245 | 
 > | 
             Pos('(', temps) + 1, | 
 
 
 
 
 
 | 246 | 
 > | 
             Pos(')', temps) - Pos('(', temps) - 1 ) ); | 
 
 
 
 
 
 | 247 | 
 > | 
     temps := MidStr(temps, 1, 4); | 
 
 
 
 
 
 
 
 
 
 
 
 | 248 | 
   | 
     for j := 0 to 3 do | 
 
 
 
 
 
 
 
 
 
 
 
 | 249 | 
 < | 
       temps[j + 1] := ExtensionsHeader[i].Extension[3 - j]; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 250 | 
 < | 
     ExtensionsHeader[i].ExtCount := | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 251 | 
 < | 
       Length(OniDataConnection.GetFilesList(temps, '', False, stIDAsc)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 249 | 
 > | 
       ExtensionsHeader[i].Extension[j] := temps[4-j]; | 
 
 
 
 
 
 | 250 | 
 > | 
     for j := 0 to High(FileTypes) do | 
 
 
 
 
 
 | 251 | 
 > | 
       if FileTypes[j].Extension = temps then | 
 
 
 
 
 
 | 252 | 
 > | 
         Break; | 
 
 
 
 
 
 | 253 | 
 > | 
     if j < Length(FileTypes) then | 
 
 
 
 
 
 | 254 | 
 > | 
     begin | 
 
 
 
 
 
 | 255 | 
 > | 
       case Connection.DataOS of | 
 
 
 
 
 
 | 256 | 
 > | 
         DOS_WIN:     ExtensionsHeader[i].Ident := FileTypes[j].IdentWin; | 
 
 
 
 
 
 | 257 | 
 > | 
         DOS_WINDEMO: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac; | 
 
 
 
 
 
 | 258 | 
 > | 
         DOS_MAC:     ExtensionsHeader[i].Ident := FileTypes[j].IdentMac; | 
 
 
 
 
 
 | 259 | 
 > | 
         DOS_MACBETA: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac; | 
 
 
 
 
 
 | 260 | 
 > | 
       end; | 
 
 
 
 
 
 | 261 | 
 > | 
     end else begin | 
 
 
 
 
 
 | 262 | 
 > | 
       ShowMessage('Unknown Extension: ' + Strings.Strings[i]); | 
 
 
 
 
 
 | 263 | 
 > | 
       Exit; | 
 
 
 
 
 
 | 264 | 
 > | 
     end; | 
 
 
 
 
 
 
 
 
 
 
 
 | 265 | 
   | 
     progress.Position    := i + 1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 266 | 
   | 
     lbl_progress.Caption := 'Extensions done: ' + IntToStr(i + 1) + '/' + | 
 
 
 
 
 
 
 
 
 
 
 
 | 267 | 
 < | 
       IntToStr(Length(extlist)); | 
 
 
 
 
 
 
 
 
 
 | 267 | 
 > | 
       IntToStr(Strings.Count); | 
 
 
 
 
 
 
 
 
 
 
 
 | 268 | 
   | 
     Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 269 | 
   | 
   end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 270 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 | 247 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 271 | 
   | 
   DoStep('Storing files-data'); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 272 | 
   | 
   progress.Position := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 273 | 
   | 
   progress.Max      := DatHeader.Files; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 275 | 
   | 
   lbl_estimation.Caption := 'Estimated finishing time: unknown'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 276 | 
   | 
   Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 277 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 | 278 | 
 < | 
   begintime := Time; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 279 | 
 < | 
   for i := 0 to DatHeader.Files - 1 do | 
 
 
 
 
 
 
 
 
 
 | 278 | 
 > | 
   FileTime := Time; | 
 
 
 
 
 
 | 279 | 
 > | 
   for FileID := 0 to DatHeader.Files - 1 do | 
 
 
 
 
 
 
 
 
 
 
 
 | 280 | 
   | 
   begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 281 | 
 < | 
     fileinfo := OniDataConnection.GetFileInfo(i); | 
 
 
 
 
 
 
 
 
 
 | 281 | 
 > | 
     FileInfo := Connection.GetFileInfo(FileID); | 
 
 
 
 
 
 
 
 
 
 
 
 | 282 | 
   | 
     for j := 0 to 3 do | 
 
 
 
 
 
 
 
 
 
 
 
 | 283 | 
 < | 
       FilesHeader[i].Extension[j] := fileinfo.Extension[4 - j]; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 284 | 
 < | 
     if fileinfo.Size > 0 then | 
 
 
 
 
 
 
 
 
 
 | 283 | 
 > | 
       FilesHeader[FileID].Extension[j] := FileInfo.Extension[4 - j]; | 
 
 
 
 
 
 | 284 | 
 > | 
     if FileInfo.Size > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 | 285 | 
   | 
     begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 286 | 
 < | 
       //        DatLinks:=; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 287 | 
 < | 
       FilesHeader[i].DataAddr := Stream_Body.Size + 8; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 288 | 
 < | 
       Data    := OniDataConnection.LoadDatFile(i); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 289 | 
 < | 
       Data[4] := (levelid) and $FF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 290 | 
 < | 
       Data[5] := (levelid shr 8) and $FF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 268 | 
 < | 
       Data[6] := (levelid shr 16) and $FF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 269 | 
 < | 
       Data[7] := (levelid shr 24) and $FF; | 
 
 
 
 
 
 
 
 
 
 | 286 | 
 > | 
       FilesHeader[FileID].DataAddr := Stream_Body.Size + 8; | 
 
 
 
 
 
 | 287 | 
 > | 
       DatFileStream := TMemoryStream.Create; | 
 
 
 
 
 
 | 288 | 
 > | 
       Connection.LoadDatFile(FileID, TStream(DatFileStream)); | 
 
 
 
 
 
 | 289 | 
 > | 
       DatFileStream.Seek(4, soFromBeginning); | 
 
 
 
 
 
 | 290 | 
 > | 
       DatFileStream.Write(LevelID, 4); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 291 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 | 292 | 
 < | 
       if (Pos(UpperCase(fileinfo.Extension), UpperCase(raws)) mod 4) = 1 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 292 | 
 > | 
       DatLinks := Connection.GetDatLinks(FileID); | 
 
 
 
 
 
 | 293 | 
 > | 
       if Length(DatLinks) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 | 294 | 
   | 
       begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 295 | 
 < | 
         rawlist := OniDataConnection.GetRawList(i); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 274 | 
 < | 
         if Length(rawlist) > 0 then | 
 
 
 
 
 
 
 
 
 
 | 295 | 
 > | 
         for i := 0 to High(DatLinks) do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 296 | 
   | 
         begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 297 | 
 < | 
           for j := 0 to High(rawlist) do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 297 | 
 > | 
           DatFileStream.Seek(DatLinks[i].SrcOffset, soFromBeginning); | 
 
 
 
 
 
 | 298 | 
 > | 
           if DatLinks[i].DestID < 0 then | 
 
 
 
 
 
 | 299 | 
 > | 
             tempi := 0 | 
 
 
 
 
 
 | 300 | 
 > | 
           else | 
 
 
 
 
 
 | 301 | 
 > | 
             tempi := DatLinks[i].DestID * 256 + 1; | 
 
 
 
 
 
 | 302 | 
 > | 
           DatFileStream.Write(tempi, 4); | 
 
 
 
 
 
 | 303 | 
 > | 
         end; | 
 
 
 
 
 
 | 304 | 
 > | 
       end; | 
 
 
 
 
 
 | 305 | 
 > | 
  | 
 
 
 
 
 
 | 306 | 
 > | 
       RawLinks := Connection.GetRawList(FileID); | 
 
 
 
 
 
 | 307 | 
 > | 
       if Length(RawLinks) > 0 then | 
 
 
 
 
 
 | 308 | 
 > | 
       begin | 
 
 
 
 
 
 | 309 | 
 > | 
         for i := 0 to High(RawLinks) do | 
 
 
 
 
 
 | 310 | 
 > | 
         begin | 
 
 
 
 
 
 | 311 | 
 > | 
           if RawLinks[i].RawSize > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 | 312 | 
   | 
           begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 313 | 
 < | 
             if rawlist[j].raw_size > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 313 | 
 > | 
             RawFileStream := TMemoryStream.Create; | 
 
 
 
 
 
 | 314 | 
 > | 
             Connection.LoadRawFile(FileID, RawLinks[i].SrcOffset, TStream(RawFileStream)); | 
 
 
 
 
 
 | 315 | 
 > | 
             RawFileStream.Seek(0, soFromBeginning); | 
 
 
 
 
 
 | 316 | 
 > | 
             if RawLinks[i].LocSep then | 
 
 
 
 
 
 
 
 
 
 
 
 | 317 | 
   | 
             begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 318 | 
 < | 
               if (UpperCase(fileinfo.Extension) = 'TXMP') and | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 319 | 
 < | 
                 ((Data[$88] and $01) > 0) then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 320 | 
 < | 
               begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 321 | 
 < | 
                 OniImage.LoadFromTXMP(Connection, i); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 322 | 
 < | 
                 OniImage.GetMipMappedImage(rawdata); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 323 | 
 < | 
                 rawlist[j].raw_size := OniImage.GetImageDataSize(True); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 324 | 
 < | 
                 Data[$90] := $08; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 325 | 
 < | 
                 Data[$89] := 32; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 326 | 
 < | 
 {                  if data[$90]<>OniImage.StoreType then begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 327 | 
 < | 
                     data[$90]:=OniImage.StoreType; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 290 | 
 < | 
                     data[$89]:=(data[$89] and $CF) or $20; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 291 | 
 < | 
                   end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 292 | 
 < | 
 }                end | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 293 | 
 < | 
               else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 294 | 
 < | 
               begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 295 | 
 < | 
                 SetLength(rawdata, rawlist[j].raw_size); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 296 | 
 < | 
                 OniDataConnection.LoadRawFile(i, rawlist[j].src_offset, @rawdata[0]); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 297 | 
 < | 
               end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 298 | 
 < | 
               //                data[$88]:=data[$88] and $FE; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 299 | 
 < | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 300 | 
 < | 
               if rawlist[j].loc_sep then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 301 | 
 < | 
               begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 302 | 
 < | 
                 rawlist[j].raw_addr := Stream_Sep.Size; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 303 | 
 < | 
                 Stream_Sep.Write(rawdata[0], Length(rawdata)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 304 | 
 < | 
               end | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 305 | 
 < | 
               else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 306 | 
 < | 
               begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 307 | 
 < | 
                 rawlist[j].raw_addr := Stream_Raw.Size; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 308 | 
 < | 
                 Stream_Raw.Write(rawdata[0], Length(rawdata)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 309 | 
 < | 
               end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 310 | 
 < | 
             end | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 311 | 
 < | 
             else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 312 | 
 < | 
               rawlist[j].raw_addr := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 313 | 
 < | 
             Data[rawlist[j].src_offset + 0] := (rawlist[j].raw_addr) and $FF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 314 | 
 < | 
             Data[rawlist[j].src_offset + 1] := (rawlist[j].raw_addr shr 8) and $FF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 315 | 
 < | 
             Data[rawlist[j].src_offset + 2] := (rawlist[j].raw_addr shr 16) and $FF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 316 | 
 < | 
             Data[rawlist[j].src_offset + 3] := (rawlist[j].raw_addr shr 24) and $FF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 317 | 
 < | 
           end; | 
 
 
 
 
 
 
 
 
 
 | 318 | 
 > | 
               RawLinks[i].RawAddr := Stream_Sep.Size; | 
 
 
 
 
 
 | 319 | 
 > | 
               Stream_sep.CopyFrom(RawFileStream, RawFileStream.Size); | 
 
 
 
 
 
 | 320 | 
 > | 
             end else begin | 
 
 
 
 
 
 | 321 | 
 > | 
               RawLinks[i].RawAddr := Stream_Raw.Size; | 
 
 
 
 
 
 | 322 | 
 > | 
               Stream_Raw.CopyFrom(RawFileStream, RawFileStream.Size); | 
 
 
 
 
 
 | 323 | 
 > | 
             end; | 
 
 
 
 
 
 | 324 | 
 > | 
           end else | 
 
 
 
 
 
 | 325 | 
 > | 
             RawLinks[i].RawAddr := 0; | 
 
 
 
 
 
 | 326 | 
 > | 
           DatFileStream.Seek(RawLinks[i].SrcOffset, soFromBeginning); | 
 
 
 
 
 
 | 327 | 
 > | 
           DatFileStream.Write(RawLinks[i].RawAddr, 4); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 328 | 
   | 
         end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 329 | 
   | 
       end; | 
 
 
 
 
 
 
 
 
 
 
 
 | 330 | 
 < | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 331 | 
 < | 
       Stream_Body.Write(Data[0], Length(Data)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 322 | 
 < | 
       // | 
 
 
 
 
 
 
 
 
 
 | 330 | 
 > | 
       DatFileStream.Seek(0, soFromBeginning); | 
 
 
 
 
 
 | 331 | 
 > | 
       Stream_Body.CopyFrom(DatFileStream, DatFileStream.Size); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 332 | 
   | 
     end | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 333 | 
   | 
     else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 334 | 
   | 
       FilesHeader[i].DataAddr := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 345 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 346 | 
   | 
     if ((i mod 10) = 0) and (i >= 100) then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 347 | 
   | 
       lbl_estimation.Caption := 'Estimated time left: ' + TimeToStr( | 
 
 
 
 
 
 
 
 
 
 
 
 | 348 | 
 < | 
         (Time - begintime) / i * (progress.Max - i + 1) * 1.1, timeformat ); | 
 
 
 
 
 
 
 
 
 
 | 348 | 
 > | 
         (Time - FileTime) / i * (progress.Max - i + 1) * 1.1, TimeFormat ); | 
 
 
 
 
 
 
 
 
 
 
 
 | 349 | 
   | 
     progress.Position := i + 1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 350 | 
   | 
     lbl_progress.Caption := 'Files done: ' + IntToStr(i + 1) + '/' + IntToStr(progress.Max); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 351 | 
   | 
     Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 375 | 
   | 
   Stream_Body.Free; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 376 | 
   | 
   Stream_Names.Free; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 377 | 
   | 
   Stream_Raw.Free; | 
 
 
 
 
 
 
 
 
 
 
 
 | 378 | 
 < | 
   if OniDataConnection.OSisMac then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 378 | 
 > | 
  | 
 
 
 
 
 
 | 379 | 
 > | 
   if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then | 
 
 
 
 
 
 
 
 
 
 
 
 | 380 | 
   | 
     Stream_Sep.Free; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 381 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 382 | 
   | 
   progress.Position      := progress.Max; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 383 | 
   | 
   lbl_progress.Caption   := 'Files done: ' + IntToStr(progress.Max) + '/' + | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 384 | 
   | 
     IntToStr(progress.Max); | 
 
 
 
 
 
 
 
 
 
 
 
 | 385 | 
 < | 
   lbl_estimation.Caption := 'FINISHED (duration: ' + TimeToStr(Time - absolutebegintime, timeformat) + ')'; | 
 
 
 
 
 
 
 
 
 
 | 385 | 
 > | 
   lbl_estimation.Caption := 'FINISHED (duration: ' + TimeToStr(Time - Begintime, TimeFormat) + ')'; | 
 
 
 
 
 
 
 
 
 
 
 
 | 386 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 387 | 
   | 
   DoStep('FIN'); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 388 | 
   | 
   btn_abortok.Caption := '&OK'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 392 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 393 | 
   | 
   converting := False; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 394 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 | 395 | 
 < | 
   CloseDataConnection(DataConnections[conIndex]); | 
 
 
 
 
 
 
 
 
 
 | 395 | 
 > | 
 //  CloseDataConnection(DataConnections[conIndex]); | 
 
 
 
 
 
 
 
 
 
 
 
 | 396 | 
   | 
 end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 397 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 398 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 402 | 
   | 
 var | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 403 | 
   | 
   i: Byte; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 404 | 
   | 
 begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 405 | 
 < | 
   for i := 1 to Length(ConvertHandlers) do | 
 
 
 
 
 
 
 
 
 
 | 405 | 
 > | 
 {  for i := 1 to Length(ConvertHandlers) do | 
 
 
 
 
 
 
 
 
 
 
 
 | 406 | 
   | 
     if UpperCase(ConvertHandlers[i].Ext) = UpperCase(ext) then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 407 | 
   | 
       if ConvertHandlers[i].needed then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 408 | 
   | 
       begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 411 | 
   | 
       end | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 412 | 
   | 
       else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 413 | 
   | 
         Break; | 
 
 
 
 
 
 
 
 
 
 
 
 | 414 | 
 < | 
 end; | 
 
 
 
 
 
 
 
 
 
 | 414 | 
 > | 
 }end; | 
 
 
 
 
 
 
 
 
 
 
 
 | 415 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 416 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 417 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 418 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 419 | 
   | 
 procedure TForm_LevelDB.CreateDatabase(Source, target: String); | 
 
 
 
 
 
 
 
 
 | 420 | 
 + | 
 { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 421 | 
   | 
 var | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 422 | 
   | 
   DataBase:    TABSDatabase; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 423 | 
   | 
   Query:       TABSQuery; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 449 | 
   | 
     else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 450 | 
   | 
       group_progress.Caption := 'Creating DB (FINISHED)'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 451 | 
   | 
   end; | 
 
 
 
 
 
 
 
 
 | 452 | 
 + | 
 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 453 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 454 | 
   | 
 begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 455 | 
 < | 
   if CreateDataConnection(Source, ODB_Dat) = nil then | 
 
 
 
 
 
 
 
 
 
 | 455 | 
 > | 
 {  if CreateDataConnection(Source, ODB_Dat) = nil then | 
 
 
 
 
 
 
 
 
 
 
 
 | 456 | 
   | 
   begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 457 | 
   | 
     ShowMessage('Could not connect to .dat-file'); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 458 | 
   | 
     Exit; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 655 | 
   | 
   database.Free; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 656 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 657 | 
   | 
   CloseDataConnection(DataConnections[conIndex]); | 
 
 
 
 
 
 
 
 
 | 658 | 
 + | 
 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 659 | 
   | 
 end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 660 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 661 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 662 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 663 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 | 664 | 
 < | 
 procedure TForm_LevelDB.stop_convert; | 
 
 
 
 
 
 
 
 
 
 | 664 | 
 > | 
 procedure TForm_LevelDB.StopConvert; | 
 
 
 
 
 
 
 
 
 
 
 
 | 665 | 
   | 
 begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 666 | 
 < | 
   btn_abortok.Caption := '&Close'; | 
 
 
 
 
 
 
 
 
 
 | 666 | 
 > | 
 {  btn_abortok.Caption := '&Close'; | 
 
 
 
 
 
 
 
 
 
 
 
 | 667 | 
   | 
   btn_abortok.Default := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 668 | 
   | 
   converting := False; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 669 | 
   | 
   lbl_estimation.Caption := 'ABORTED'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 674 | 
   | 
   begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 675 | 
   | 
     DeleteFile(loaded_filename); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 676 | 
   | 
   end; | 
 
 
 
 
 
 
 
 
 
 
 
 | 677 | 
 < | 
 end; | 
 
 
 
 
 
 
 
 
 
 | 677 | 
 > | 
 }end; | 
 
 
 
 
 
 
 
 
 
 
 
 | 678 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 679 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 680 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 697 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 698 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 699 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 | 700 | 
 < | 
  | 
 
 
 
 
 
 
 
 
 
 | 700 | 
 > | 
 { | 
 
 
 
 
 
 
 
 
 
 
 
 | 701 | 
   | 
 procedure InsertDatLinkToDB(fileid: LongWord; offset: LongWord); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 702 | 
   | 
 var | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 703 | 
   | 
   link: LongWord; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1729 | 
   | 
   begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1730 | 
   | 
   end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1731 | 
   | 
 end; | 
 
 
 
 
 
 
 
 
 | 1732 | 
 + | 
 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1733 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1734 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 | 1735 | 
 < | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1722 | 
 < | 
  | 
 
 
 
 
 
 
 
 
 
 | 1735 | 
 > | 
 { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1736 | 
   | 
 procedure InsertHandler(ext: String; needed: Boolean; handler: THandler); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1737 | 
   | 
 begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1738 | 
   | 
   SetLength(ConvertHandlers, Length(ConvertHandlers) + 1); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1740 | 
   | 
   ConvertHandlers[High(ConvertHandlers)].needed  := needed; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1741 | 
   | 
   ConvertHandlers[High(ConvertHandlers)].handler := handler; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1742 | 
   | 
 end; | 
 
 
 
 
 
 
 
 
 
 
 
 | 1743 | 
 < | 
  | 
 
 
 
 
 
 
 
 
 
 | 1743 | 
 > | 
 } | 
 
 
 
 
 
 
 
 
 
 
 
 | 1744 | 
   | 
 begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 1745 | 
 < | 
   InsertHandler('ABNA', False, nil); | 
 
 
 
 
 
 
 
 
 
 | 1745 | 
 > | 
 {  InsertHandler('ABNA', False, nil); | 
 
 
 
 
 
 
 
 
 
 
 
 | 1746 | 
   | 
   //  InsertHandler('AGDB',True,AGDB); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1747 | 
   | 
   InsertHandler('AGDB', False, nil); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1748 | 
   | 
   InsertHandler('AGQC', False, nil); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1840 | 
   | 
   InsertHandler('WMM_', False, nil); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1841 | 
   | 
   InsertHandler('WMMB', True, WMMB); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1842 | 
   | 
   InsertHandler('WPGE', True, WPGE); | 
 
 
 
 
 
 
 
 
 
 
 
 | 1843 | 
 < | 
 end. | 
 
 
 
 
 
 
 
 
 
 | 1843 | 
 > | 
 }end. |