| 74 | 
   | 
   RawLinks:   TRawDataList; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 75 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 76 | 
   | 
   DatFileStream, RawFileStream: TMemoryStream; | 
 
 
 
 
 
 
 
 
 
 | 77 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 | 78 | 
 – | 
 // ########################### | 
 
 
 
 
 
 
 
 
 
 | 79 | 
 – | 
   datsum, linksum, rawsum: Int64; | 
 
 
 
 
 
 
 
 
 
 | 80 | 
 – | 
   freq: Int64; | 
 
 
 
 
 
 
 
 
 
 | 81 | 
 – | 
   tempticks1, tempticks2: Int64; | 
 
 
 
 
 
 
 
 
 
 | 82 | 
 – | 
 // ########################### | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 77 | 
   | 
 const | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 78 | 
   | 
   Steps: Byte = 3; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 79 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 291 | 
   | 
   lbl_estimation.Caption := 'Estimated finishing time: unknown'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 292 | 
   | 
   Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 293 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 | 300 | 
 – | 
   QueryPerformanceFrequency(freq); | 
 
 
 
 
 
 
 
 
 
 | 301 | 
 – | 
   datsum := 0; | 
 
 
 
 
 
 
 
 
 
 | 302 | 
 – | 
   linksum := 0; | 
 
 
 
 
 
 
 
 
 
 | 303 | 
 – | 
   rawsum := 0; | 
 
 
 
 
 
 
 
 
 
 | 304 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 294 | 
   | 
   FileTime := Time; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 295 | 
   | 
   for FileID := 0 to DatHeader.Files - 1 do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 296 | 
   | 
   begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 299 | 
   | 
       FilesHeader[FileID].Extension[j] := FileInfo.Extension[4 - j]; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 300 | 
   | 
     if FileInfo.Size > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 301 | 
   | 
     begin | 
 
 
 
 
 
 
 
 
 
 | 313 | 
 – | 
       QueryPerformanceCounter(tempticks1); | 
 
 
 
 
 
 
 
 
 
 | 314 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 302 | 
   | 
       FilesHeader[FileID].DataAddr := Stream_Body.Size + 8; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 303 | 
   | 
       DatFileStream := TMemoryStream.Create; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 304 | 
   | 
       Connection.LoadDatFile(FileID, TStream(DatFileStream)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 307 | 
   | 
       DatFileStream.Write(tempi, 4); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 308 | 
   | 
       DatFileStream.Write(LevelID, 4); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 309 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 | 323 | 
 – | 
       QueryPerformanceCounter(tempticks2); | 
 
 
 
 
 
 
 
 
 
 | 324 | 
 – | 
       datsum := datsum + (tempticks2 - tempticks1); | 
 
 
 
 
 
 
 
 
 
 | 325 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 310 | 
   | 
       DatLinks := Connection.GetDatLinks(FileID); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 311 | 
   | 
       if Length(DatLinks) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 312 | 
   | 
       begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 321 | 
   | 
         end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 322 | 
   | 
       end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 323 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 | 340 | 
 – | 
       QueryPerformanceCounter(tempticks1); | 
 
 
 
 
 
 
 
 
 
 | 341 | 
 – | 
       linksum := linksum + (tempticks1 - tempticks2); | 
 
 
 
 
 
 
 
 
 
 | 342 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 324 | 
   | 
       RawLinks := Connection.GetRawList(FileID); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 325 | 
   | 
       if Length(RawLinks) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 326 | 
   | 
       begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 347 | 
   | 
       end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 348 | 
   | 
       DatFileStream.Seek(0, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 349 | 
   | 
       Stream_Body.CopyFrom(DatFileStream, DatFileStream.Size); | 
 
 
 
 
 
 
 
 
 
 | 369 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 | 370 | 
 – | 
       QueryPerformanceCounter(tempticks2); | 
 
 
 
 
 
 
 
 
 
 | 371 | 
 – | 
       rawsum := rawsum + (tempticks2 - tempticks1); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 350 | 
   | 
     end | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 351 | 
   | 
     else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 352 | 
   | 
       FilesHeader[FileID].DataAddr := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 369 | 
   | 
     Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 370 | 
   | 
   end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 371 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 | 394 | 
 – | 
   ShowMessage('AvgDats: ' + FloatToStr((datsum / progress.Max) / freq) + #13#10 + | 
 
 
 
 
 
 
 
 
 
 | 395 | 
 – | 
       'AvgLinks: ' + FloatToStr((linksum / progress.Max) / freq) + #13#10 + | 
 
 
 
 
 
 
 
 
 
 | 396 | 
 – | 
       'AvgRaws: ' + FloatToStr((rawsum / progress.Max) / freq) | 
 
 
 
 
 
 
 
 
 
 | 397 | 
 – | 
    ); | 
 
 
 
 
 
 
 
 
 
 | 398 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 372 | 
   | 
   Stream_Dat.Write(DatHeader, SizeOf(DatHeader)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 373 | 
   | 
   for i := 0 to High(FilesHeader) do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 374 | 
   | 
     Stream_Dat.Write(FilesHeader[i], SizeOf(FilesHeader[i])); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 423 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 424 | 
   | 
   BeginTime, FileTime: Double; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 425 | 
   | 
   Step:       Integer; | 
 
 
 
 
 
 
 
 
 
 | 453 | 
 – | 
   LevelID:    Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 426 | 
   | 
   TimeFormat: TFormatSettings; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 427 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 428 | 
   | 
   ConID:      Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 431 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 432 | 
   | 
   FileID:     Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 433 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 | 462 | 
 – | 
   Strings:    TStrings; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 434 | 
   | 
   i:          Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 435 | 
   | 
   temps:      String; | 
 
 
 
 
 
 
 
 
 
 | 465 | 
 – | 
   tempi:      Integer; | 
 
 
 
 
 
 
 
 
 
 | 466 | 
 – | 
   tempb:      Byte; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 436 | 
   | 
   tempdata:   TByteData; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 437 | 
   | 
   FileInfo:   TFileInfo; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 438 | 
   | 
   DatLinks:   TDatLinkList; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 604 | 
   | 
   DoStep('Writing .dat-fileslist'); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 605 | 
   | 
   Application.ProcessMessages; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 606 | 
   | 
  | 
 
 
 
 
 
 
 
 
 | 607 | 
 + | 
   FileTime := Time; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 608 | 
   | 
   Database.StartTransaction; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 609 | 
   | 
   for FileID := 0 to Connection.GetFileCount - 1 do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 610 | 
   | 
   begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 679 | 
   | 
     end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 680 | 
   | 
     if ((FileID mod 10) = 0) and (FileID >= 100) then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 681 | 
   | 
       lbl_estimation.Caption := 'Estimated time left: ' + TimeToStr( | 
 
 
 
 
 
 
 
 
 
 
 
 | 682 | 
 < | 
         (Time - BeginTime) / FileID * (progress.Max - FileID + 1) * 1.1, timeformat ); | 
 
 
 
 
 
 
 
 
 
 | 682 | 
 > | 
         (Time - FileTime) / FileID * (progress.Max - FileID + 1) * 1.1, timeformat ); | 
 
 
 
 
 
 
 
 
 
 
 
 | 683 | 
   | 
     progress.Position := FileID; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 684 | 
   | 
     lbl_progress.Caption := 'Files done: ' + IntToStr(FileID) + '/' + IntToStr(progress.Max); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 685 | 
   | 
     Application.ProcessMessages; |