| 65 |  | Stream_Body, Stream_Names:          TMemoryStream; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 66 |  | Stream_Dat, Stream_Raw, Stream_Sep: TFileStream; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 67 |  |  | 
 
 
 
 
 
 
 
 
 | 68 | – | //  Data, rawdata: Tdata; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 68 |  | BeginTime, FileTime: Double; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 69 |  | Step:     Integer; | 
 
 
 
 
 
 
 
 
 | 71 | – | //  rawlist:  TRawDataList; | 
 
 
 
 
 
 
 
 
 | 72 | – | //  datlinks: TDatLinks; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 70 |  | OniImage:   TOniImage; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 71 |  | LevelID:    Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 72 |  | TimeFormat: TFormatSettings; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 87 |  | RawLinks:   TRawDataList; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 88 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 89 |  | DatFileStream, RawFileStream: TMemoryStream; | 
 
 
 
 
 
 
 
 | 90 | + |  | 
 
 
 
 
 
 
 
 | 91 | + | // ########################### | 
 
 
 
 
 
 
 
 | 92 | + | datsum, linksum, rawsum: Int64; | 
 
 
 
 
 
 
 
 | 93 | + | freq: Int64; | 
 
 
 
 
 
 
 
 | 94 | + | tempticks1, tempticks2: Int64; | 
 
 
 
 
 
 
 
 | 95 | + | // ########################### | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 96 |  | const | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 97 |  | Steps: Byte = 3; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 98 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 283 |  | lbl_estimation.Caption := 'Estimated finishing time: unknown'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 284 |  | Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 285 |  |  | 
 
 
 
 
 
 
 
 | 286 | + | QueryPerformanceFrequency(freq); | 
 
 
 
 
 
 
 
 | 287 | + | datsum := 0; | 
 
 
 
 
 
 
 
 | 288 | + | linksum := 0; | 
 
 
 
 
 
 
 
 | 289 | + | rawsum := 0; | 
 
 
 
 
 
 
 
 | 290 | + |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 291 |  | FileTime := Time; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 292 |  | for FileID := 0 to DatHeader.Files - 1 do | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 293 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 296 |  | FilesHeader[FileID].Extension[j] := FileInfo.Extension[4 - j]; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 297 |  | if FileInfo.Size > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 298 |  | begin | 
 
 
 
 
 
 
 
 | 299 | + | QueryPerformanceCounter(tempticks1); | 
 
 
 
 
 
 
 
 | 300 | + |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 301 |  | FilesHeader[FileID].DataAddr := Stream_Body.Size + 8; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 302 |  | DatFileStream := TMemoryStream.Create; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 303 |  | Connection.LoadDatFile(FileID, TStream(DatFileStream)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 304 |  | DatFileStream.Seek(4, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 305 |  | DatFileStream.Write(LevelID, 4); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 306 |  |  | 
 
 
 
 
 
 
 
 | 307 | + | QueryPerformanceCounter(tempticks2); | 
 
 
 
 
 
 
 
 | 308 | + | datsum := datsum + (tempticks2 - tempticks1); | 
 
 
 
 
 
 
 
 | 309 | + |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 310 |  | DatLinks := Connection.GetDatLinks(FileID); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 311 |  | if Length(DatLinks) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 312 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 321 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 322 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 323 |  |  | 
 
 
 
 
 
 
 
 | 324 | + | QueryPerformanceCounter(tempticks1); | 
 
 
 
 
 
 
 
 | 325 | + | linksum := linksum + (tempticks1 - tempticks2); | 
 
 
 
 
 
 
 
 | 326 | + |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 327 |  | RawLinks := Connection.GetRawList(FileID); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 328 |  | if Length(RawLinks) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 329 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 350 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 351 |  | DatFileStream.Seek(0, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 352 |  | Stream_Body.CopyFrom(DatFileStream, DatFileStream.Size); | 
 
 
 
 
 
 
 
 | 353 | + |  | 
 
 
 
 
 
 
 
 | 354 | + | QueryPerformanceCounter(tempticks2); | 
 
 
 
 
 
 
 
 | 355 | + | rawsum := rawsum + (tempticks2 - tempticks1); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 356 |  | end | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 357 |  | else | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 358 |  | FilesHeader[i].DataAddr := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 375 |  | Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 376 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 377 |  |  | 
 
 
 
 
 
 
 
 | 378 | + | ShowMessage('AvgDats: ' + FloatToStr((datsum / progress.Max) / freq) + #13#10 + | 
 
 
 
 
 
 
 
 | 379 | + | 'AvgLinks: ' + FloatToStr((linksum / progress.Max) / freq) + #13#10 + | 
 
 
 
 
 
 
 
 | 380 | + | 'AvgRaws: ' + FloatToStr((rawsum / progress.Max) / freq) | 
 
 
 
 
 
 
 
 | 381 | + | ); | 
 
 
 
 
 
 
 
 | 382 | + |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 383 |  | Stream_Dat.Write(DatHeader, SizeOf(DatHeader)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 384 |  | for i := 0 to High(FilesHeader) do | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 385 |  | Stream_Dat.Write(FilesHeader[i], SizeOf(FilesHeader[i])); |