| 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; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 80 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 81 |  | Strings:    TStrings; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 82 |  | i, j:       Integer; | 
 
 
 
 
 
 
 
 | 83 | + | temps:      String; | 
 
 
 
 
 
 
 
 | 84 | + | FileInfo:   TFileInfo; | 
 
 
 
 
 
 
 
 | 85 | + |  | 
 
 
 
 
 
 
 
 | 86 | + | DatFileStream, RawFileStream: TMemoryStream; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 87 |  | const | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 88 |  | Steps: Byte = 3; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 89 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 204 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 205 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 206 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 207 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 208 | < | extlist := OniDataConnection.GetExtendedExtensionsList; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 209 | < | for i := 0 to High(DatHeader.Ident) do | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 210 | < | DatHeader.Ident[i] := OniDataConnection.LevelInfo.Ident[i]; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 211 | < | DatHeader.Files := OniDataConnection.GetFilesCount; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 207 | > | for i := 0 to High(DatHeader.OSIdent) do | 
 
 
 
 
 | 208 | > | case Connection.DataOS of | 
 
 
 
 
 | 209 | > | DOS_WIN: DatHeader.OSIdent[i] := HeaderOSIdentWin[i]; | 
 
 
 
 
 | 210 | > | DOS_MAC: DatHeader.OSIdent[i] := HeaderOSIdentMac[i]; | 
 
 
 
 
 | 211 | > | DOS_MACBETA: DatHeader.OSIdent[i] := HeaderOSIdentMacBeta[i]; | 
 
 
 
 
 | 212 | > | end; | 
 
 
 
 
 | 213 | > | for i := 0 to High(DatHeader.GlobalIdent) do | 
 
 
 
 
 | 214 | > | DatHeader.GlobalIdent[i] := HeaderGlobalIdent[i]; | 
 
 
 
 
 | 215 | > | DatHeader.Files := Connection.GetFileCount; | 
 
 
 
 
 
 
 
 
 
 
 | 216 |  | DatHeader.NamedFiles := Length(NamedFilesHeader); | 
 
 
 
 
 
 
 
 
 
 
 | 217 | < | DatHeader.Extensions := Length(extlist); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 217 | > |  | 
 
 
 
 
 | 218 | > | Strings := Connection.GetExtensionsList(EF_ExtCount); | 
 
 
 
 
 | 219 | > |  | 
 
 
 
 
 | 220 | > | DatHeader.Extensions := Strings.Count; | 
 
 
 
 
 
 
 
 
 
 
 | 221 |  | DatHeader.DataAddr   := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 222 |  | DatHeader.DataSize   := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 223 |  | DatHeader.NamesAddr  := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 229 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 230 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 231 |  | DoStep('Writing extensions-header'); | 
 
 
 
 
 
 
 
 
 
 
 | 232 | < | progress.Max := Length(OniDataConnection.GetExtensionsList); | 
 
 
 
 
 
 
 
 
 | 232 | > | progress.Max := Strings.Count; | 
 
 
 
 
 
 
 
 
 
 
 | 233 |  | Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 | 234 | < |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 232 | < | for i := 0 to High(ExtensionsHeader) do | 
 
 
 
 
 
 
 
 
 | 234 | > | for i := 0 to Strings.Count - 1 do | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 235 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 | 236 | < | ExtensionsHeader[i].Ident     := extlist[i].Ident; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 237 | < | ExtensionsHeader[i].Extension := extlist[i].Extension; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 238 | < | SetLength(temps, 4); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 236 | > | temps := Strings.Strings[i]; | 
 
 
 
 
 | 237 | > | ExtensionsHeader[i].ExtCount := StrToInt( MidStr( | 
 
 
 
 
 | 238 | > | temps, | 
 
 
 
 
 | 239 | > | Pos('(', temps) + 1, | 
 
 
 
 
 | 240 | > | Pos(')', temps) - Pos('(', temps) - 1 ) ); | 
 
 
 
 
 | 241 | > | temps := MidStr(temps, 1, 4); | 
 
 
 
 
 
 
 
 
 
 
 | 242 |  | for j := 0 to 3 do | 
 
 
 
 
 
 
 
 
 
 
 | 243 | < | temps[j + 1] := ExtensionsHeader[i].Extension[3 - j]; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 244 | < | ExtensionsHeader[i].ExtCount := | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 245 | < | Length(OniDataConnection.GetFilesList(temps, '', False, stIDAsc)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 243 | > | ExtensionsHeader[i].Extension[j] := temps[4-j]; | 
 
 
 
 
 | 244 | > | for j := 0 to High(FileTypes) do | 
 
 
 
 
 | 245 | > | if FileTypes[j].Extension = temps then | 
 
 
 
 
 | 246 | > | Break; | 
 
 
 
 
 | 247 | > | if j < Length(FileTypes) then | 
 
 
 
 
 | 248 | > | begin | 
 
 
 
 
 | 249 | > | case Connection.DataOS of | 
 
 
 
 
 | 250 | > | DOS_WIN:     ExtensionsHeader[i].Ident := FileTypes[j].IdentWin; | 
 
 
 
 
 | 251 | > | DOS_WINDEMO: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac; | 
 
 
 
 
 | 252 | > | DOS_MAC:     ExtensionsHeader[i].Ident := FileTypes[j].IdentMac; | 
 
 
 
 
 | 253 | > | DOS_MACBETA: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac; | 
 
 
 
 
 | 254 | > | end; | 
 
 
 
 
 | 255 | > | end else begin | 
 
 
 
 
 | 256 | > | ShowMessage('Unknown Extension: ' + Strings.Strings[i]); | 
 
 
 
 
 | 257 | > | Exit; | 
 
 
 
 
 | 258 | > | end; | 
 
 
 
 
 
 
 
 
 
 
 | 259 |  | progress.Position    := i + 1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 260 |  | lbl_progress.Caption := 'Extensions done: ' + IntToStr(i + 1) + '/' + | 
 
 
 
 
 
 
 
 
 
 
 | 261 | < | IntToStr(Length(extlist)); | 
 
 
 
 
 
 
 
 
 | 261 | > | IntToStr(Strings.Count); | 
 
 
 
 
 
 
 
 
 
 
 | 262 |  | Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 263 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 264 |  |  | 
 
 
 
 
 
 
 
 
 | 247 | – |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 265 |  | DoStep('Storing files-data'); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 266 |  | progress.Position := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 267 |  | progress.Max      := DatHeader.Files; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 269 |  | lbl_estimation.Caption := 'Estimated finishing time: unknown'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 270 |  | Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 271 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 272 | < | begintime := Time; | 
 
 
 
 
 
 
 
 
 | 272 | > | FileTime := Time; | 
 
 
 
 
 
 
 
 
 
 
 | 273 |  | for i := 0 to DatHeader.Files - 1 do | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 274 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 | 275 | < | fileinfo := OniDataConnection.GetFileInfo(i); | 
 
 
 
 
 
 
 
 
 | 275 | > | FileInfo := Connection.GetFileInfo(i); | 
 
 
 
 
 
 
 
 
 
 
 | 276 |  | for j := 0 to 3 do | 
 
 
 
 
 
 
 
 
 
 
 | 277 | < | FilesHeader[i].Extension[j] := fileinfo.Extension[4 - j]; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 278 | < | if fileinfo.Size > 0 then | 
 
 
 
 
 
 
 
 
 | 277 | > | FilesHeader[i].Extension[j] := FileInfo.Extension[4 - j]; | 
 
 
 
 
 | 278 | > | if FileInfo.Size > 0 then | 
 
 
 
 
 
 
 
 
 
 
 | 279 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 280 |  | //        DatLinks:=; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 281 |  | FilesHeader[i].DataAddr := Stream_Body.Size + 8; | 
 
 
 
 
 
 
 
 
 
 
 | 282 | < | Data    := OniDataConnection.LoadDatFile(i); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 283 | < | Data[4] := (levelid) and $FF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 284 | < | Data[5] := (levelid shr 8) and $FF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 285 | < | Data[6] := (levelid shr 16) and $FF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 269 | < | Data[7] := (levelid shr 24) and $FF; | 
 
 
 
 
 
 
 
 
 | 282 | > | DatFileStream := TMemoryStream.Create; | 
 
 
 
 
 | 283 | > | Connection.LoadDatFile(i, DatFileStream); | 
 
 
 
 
 | 284 | > | DatFileStream.Seek(4, soFromBeginning); | 
 
 
 
 
 | 285 | > | DatFileStream.Write(LevelID, 4); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 286 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 287 |  | if (Pos(UpperCase(fileinfo.Extension), UpperCase(raws)) mod 4) = 1 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 288 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 352 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 353 |  | if ((i mod 10) = 0) and (i >= 100) then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 354 |  | lbl_estimation.Caption := 'Estimated time left: ' + TimeToStr( | 
 
 
 
 
 
 
 
 
 
 
 | 355 | < | (Time - begintime) / i * (progress.Max - i + 1) * 1.1, timeformat ); | 
 
 
 
 
 
 
 
 
 | 355 | > | (Time - FileTime) / i * (progress.Max - i + 1) * 1.1, TimeFormat ); | 
 
 
 
 
 
 
 
 
 
 
 | 356 |  | progress.Position := i + 1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 357 |  | lbl_progress.Caption := 'Files done: ' + IntToStr(i + 1) + '/' + IntToStr(progress.Max); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 358 |  | Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 388 |  | progress.Position      := progress.Max; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 389 |  | lbl_progress.Caption   := 'Files done: ' + IntToStr(progress.Max) + '/' + | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 390 |  | IntToStr(progress.Max); | 
 
 
 
 
 
 
 
 
 
 
 | 391 | < | lbl_estimation.Caption := 'FINISHED (duration: ' + TimeToStr(Time - absolutebegintime, timeformat) + ')'; | 
 
 
 
 
 
 
 
 
 | 391 | > | lbl_estimation.Caption := 'FINISHED (duration: ' + TimeToStr(Time - Begintime, TimeFormat) + ')'; | 
 
 
 
 
 
 
 
 
 
 
 | 392 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 393 |  | DoStep('FIN'); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 394 |  | btn_abortok.Caption := '&OK'; |