ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/Helper/LevelDB.pas
(Generate patch)

Comparing oup/current/Helper/LevelDB.pas (file contents):
Revision 113 by alloc, Sun Feb 25 17:20:22 2007 UTC vs.
Revision 133 by alloc, Wed Mar 28 02:23:44 2007 UTC

# Line 65 | Line 65 | var
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;
# Line 78 | Line 75 | var
75    Connection: TDataAccess;
76    ConRepMsg:  TStatusMessages;
77  
78 +  FileID:     Integer;
79 +
80    Strings:    TStrings;
81    i, j:       Integer;
82    temps:      String;
83 +  tempi:      Integer;
84 +  tempb:      Byte;
85    FileInfo:   TFileInfo;
86 +  DatLinks:   TDatLinkList;
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  
# Line 145 | Line 154 | begin
154        begin
155          ShowMessage('Couldn''t delete file. Aborting');
156          Exit;
148      end else if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.raw')) then
149      begin
150        ShowMessage('Couldn''t delete file. Aborting');
151        Exit;
152      end else if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.sep')) then
153      begin
154        ShowMessage('Couldn''t delete file. Aborting');
155        Exit;
157        end;
158 +      if FileExists(AnsiReplaceStr(Target, '.dat', '.raw')) then
159 +        if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.raw')) then
160 +        begin
161 +          ShowMessage('Couldn''t delete file. Aborting');
162 +          Exit;
163 +        end;
164 +      if FileExists(AnsiReplaceStr(Target, '.dat', '.sep')) then
165 +        if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then
166 +          if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.sep')) then
167 +          begin
168 +            ShowMessage('Couldn''t delete file. Aborting');
169 +            Exit;
170 +          end;
171      end else begin
172        ShowMessage('Aborting');
173        Exit;
# Line 269 | Line 283 | begin
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 i := 0 to DatHeader.Files - 1 do
292 >  for FileID := 0 to DatHeader.Files - 1 do
293    begin
294 <    FileInfo := Connection.GetFileInfo(i);
294 >    FileInfo := Connection.GetFileInfo(FileID);
295      for j := 0 to 3 do
296 <      FilesHeader[i].Extension[j] := FileInfo.Extension[4 - j];
296 >      FilesHeader[FileID].Extension[j] := FileInfo.Extension[4 - j];
297      if FileInfo.Size > 0 then
298      begin
299 <      //        DatLinks:=;
300 <      FilesHeader[i].DataAddr := Stream_Body.Size + 8;
299 >      QueryPerformanceCounter(tempticks1);
300 >
301 >      FilesHeader[FileID].DataAddr := Stream_Body.Size + 8;
302        DatFileStream := TMemoryStream.Create;
303 <      Connection.LoadDatFile(i, DatFileStream);
304 <      DatFileStream.Seek(4, soFromBeginning);
303 >      Connection.LoadDatFile(FileID, TStream(DatFileStream));
304 >      DatFileStream.Seek(0, soFromBeginning);
305 >      DatFileStream.Write(FileID, 4);
306        DatFileStream.Write(LevelID, 4);
307  
308 <      if (Pos(UpperCase(fileinfo.Extension), UpperCase(raws)) mod 4) = 1 then
308 >      QueryPerformanceCounter(tempticks2);
309 >      datsum := datsum + (tempticks2 - tempticks1);
310 >
311 >      DatLinks := Connection.GetDatLinks(FileID);
312 >      if Length(DatLinks) > 0 then
313 >      begin
314 >        for i := 0 to High(DatLinks) do
315 >        begin
316 >          DatFileStream.Seek(DatLinks[i].SrcOffset, soFromBeginning);
317 >          if DatLinks[i].DestID < 0 then
318 >            tempi := 0
319 >          else
320 >            tempi := DatLinks[i].DestID * 256 + 1;
321 >          DatFileStream.Write(tempi, 4);
322 >        end;
323 >      end;
324 >
325 >      QueryPerformanceCounter(tempticks1);
326 >      linksum := linksum + (tempticks1 - tempticks2);
327 >
328 >      RawLinks := Connection.GetRawList(FileID);
329 >      if Length(RawLinks) > 0 then
330        begin
331 <        rawlist := OniDataConnection.GetRawList(i);
290 <        if Length(rawlist) > 0 then
331 >        for i := 0 to High(RawLinks) do
332          begin
333 <          for j := 0 to High(rawlist) do
333 >          if RawLinks[i].RawSize > 0 then
334            begin
335 <            if rawlist[j].raw_size > 0 then
335 >            RawFileStream := TMemoryStream.Create;
336 >            Connection.LoadRawFile(FileID, RawLinks[i].SrcOffset, TStream(RawFileStream));
337 >            RawFileStream.Seek(0, soFromBeginning);
338 >            if RawLinks[i].LocSep then
339              begin
340 <              if (UpperCase(fileinfo.Extension) = 'TXMP') and
341 <                ((Data[$88] and $01) > 0) then
342 <              begin
343 <                OniImage.LoadFromTXMP(Connection, i);
344 <                OniImage.GetMipMappedImage(rawdata);
345 <                rawlist[j].raw_size := OniImage.GetImageDataSize(True);
346 <                Data[$90] := $08;
347 <                Data[$89] := 32;
348 < {                  if data[$90]<>OniImage.StoreType then begin
349 <                    data[$90]:=OniImage.StoreType;
306 <                    data[$89]:=(data[$89] and $CF) or $20;
307 <                  end;
308 < }                end
309 <              else
310 <              begin
311 <                SetLength(rawdata, rawlist[j].raw_size);
312 <                OniDataConnection.LoadRawFile(i, rawlist[j].src_offset, @rawdata[0]);
313 <              end;
314 <              //                data[$88]:=data[$88] and $FE;
315 <
316 <              if rawlist[j].loc_sep then
317 <              begin
318 <                rawlist[j].raw_addr := Stream_Sep.Size;
319 <                Stream_Sep.Write(rawdata[0], Length(rawdata));
320 <              end
321 <              else
322 <              begin
323 <                rawlist[j].raw_addr := Stream_Raw.Size;
324 <                Stream_Raw.Write(rawdata[0], Length(rawdata));
325 <              end;
326 <            end
327 <            else
328 <              rawlist[j].raw_addr := 0;
329 <            Data[rawlist[j].src_offset + 0] := (rawlist[j].raw_addr) and $FF;
330 <            Data[rawlist[j].src_offset + 1] := (rawlist[j].raw_addr shr 8) and $FF;
331 <            Data[rawlist[j].src_offset + 2] := (rawlist[j].raw_addr shr 16) and $FF;
332 <            Data[rawlist[j].src_offset + 3] := (rawlist[j].raw_addr shr 24) and $FF;
333 <          end;
340 >              RawLinks[i].RawAddr := Stream_Sep.Size;
341 >              Stream_sep.CopyFrom(RawFileStream, RawFileStream.Size);
342 >            end else begin
343 >              RawLinks[i].RawAddr := Stream_Raw.Size;
344 >              Stream_Raw.CopyFrom(RawFileStream, RawFileStream.Size);
345 >            end;
346 >          end else
347 >            RawLinks[i].RawAddr := 0;
348 >          DatFileStream.Seek(RawLinks[i].SrcOffset, soFromBeginning);
349 >          DatFileStream.Write(RawLinks[i].RawAddr, 4);
350          end;
351        end;
352 +      DatFileStream.Seek(0, soFromBeginning);
353 +      Stream_Body.CopyFrom(DatFileStream, DatFileStream.Size);
354  
355 <      Stream_Body.Write(Data[0], Length(Data));
356 <      //
355 >      QueryPerformanceCounter(tempticks2);
356 >      rawsum := rawsum + (tempticks2 - tempticks1);
357      end
358      else
359        FilesHeader[i].DataAddr := 0;
# Line 350 | Line 368 | begin
368      FilesHeader[i].FileSize := fileinfo.Size;
369      FilesHeader[i].FileType := fileinfo.FileType;
370  
371 <    if ((i mod 10) = 0) and (i >= 100) then
371 >    if ((FileID mod 10) = 0) and (FileID >= 100) then
372        lbl_estimation.Caption := 'Estimated time left: ' + TimeToStr(
373 <        (Time - FileTime) / i * (progress.Max - i + 1) * 1.1, TimeFormat );
374 <    progress.Position := i + 1;
375 <    lbl_progress.Caption := 'Files done: ' + IntToStr(i + 1) + '/' + IntToStr(progress.Max);
373 >        (Time - FileTime) / FileID * (progress.Max - FileID + 1) * 1.1, TimeFormat );
374 >    progress.Position := FileID + 1;
375 >    lbl_progress.Caption := 'Files done: ' + IntToStr(FileID + 1) + '/' + IntToStr(progress.Max);
376      Application.ProcessMessages;
377    end;
378  
379 +  ShowMessage('AvgDats: ' + FloatToStr((datsum / progress.Max) / freq) + #13#10 +
380 +      'AvgLinks: ' + FloatToStr((linksum / progress.Max) / freq) + #13#10 +
381 +      'AvgRaws: ' + FloatToStr((rawsum / progress.Max) / freq)
382 +   );
383 +
384    Stream_Dat.Write(DatHeader, SizeOf(DatHeader));
385    for i := 0 to High(FilesHeader) do
386      Stream_Dat.Write(FilesHeader[i], SizeOf(FilesHeader[i]));
# Line 369 | Line 392 | begin
392    DatHeader.DataSize  := Stream_Body.Size;
393    DatHeader.NamesSize := Stream_Names.Size;
394    DatHeader.DataAddr  := Stream_Dat.Size;
395 +
396    Stream_Body.Seek(0, soFromBeginning);
397    Stream_Dat.CopyFrom(Stream_Body, Stream_Body.Size);
398    DatHeader.NamesAddr := Stream_Dat.Size;
# Line 382 | Line 406 | begin
406    Stream_Body.Free;
407    Stream_Names.Free;
408    Stream_Raw.Free;
409 <  if OniDataConnection.OSisMac then
409 >
410 >  if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then
411      Stream_Sep.Free;
412  
413    progress.Position      := progress.Max;
# Line 398 | Line 423 | begin
423  
424    converting := False;
425  
426 <  CloseDataConnection(DataConnections[conIndex]);
426 > //  CloseDataConnection(DataConnections[conIndex]);
427   end;
428  
429  
# Line 408 | Line 433 | procedure TForm_LevelDB.HandleFile;
433   var
434    i: Byte;
435   begin
436 <  for i := 1 to Length(ConvertHandlers) do
436 > {  for i := 1 to Length(ConvertHandlers) do
437      if UpperCase(ConvertHandlers[i].Ext) = UpperCase(ext) then
438        if ConvertHandlers[i].needed then
439        begin
# Line 417 | Line 442 | begin
442        end
443        else
444          Break;
445 < end;
445 > }end;
446  
447  
448  
449  
450   procedure TForm_LevelDB.CreateDatabase(Source, target: String);
451 + {
452   var
453    DataBase:    TABSDatabase;
454    Query:       TABSQuery;
# Line 454 | Line 480 | const
480      else
481        group_progress.Caption := 'Creating DB (FINISHED)';
482    end;
483 + }
484  
485   begin
486 <  if CreateDataConnection(Source, ODB_Dat) = nil then
486 > {  if CreateDataConnection(Source, ODB_Dat) = nil then
487    begin
488      ShowMessage('Could not connect to .dat-file');
489      Exit;
# Line 659 | Line 686 | begin
686    database.Free;
687  
688    CloseDataConnection(DataConnections[conIndex]);
689 + }
690   end;
691  
692  
693  
694  
695 < procedure TForm_LevelDB.stop_convert;
695 > procedure TForm_LevelDB.StopConvert;
696   begin
697 <  btn_abortok.Caption := '&Close';
697 > {  btn_abortok.Caption := '&Close';
698    btn_abortok.Default := True;
699    converting := False;
700    lbl_estimation.Caption := 'ABORTED';
# Line 677 | Line 705 | begin
705    begin
706      DeleteFile(loaded_filename);
707    end;
708 < end;
708 > }end;
709  
710  
711  
# Line 700 | Line 728 | end;
728  
729  
730  
731 <
731 > {
732   procedure InsertDatLinkToDB(fileid: LongWord; offset: LongWord);
733   var
734    link: LongWord;
# Line 1732 | Line 1760 | begin
1760    begin
1761    end;
1762   end;
1763 + }
1764  
1765  
1766 <
1738 <
1766 > {
1767   procedure InsertHandler(ext: String; needed: Boolean; handler: THandler);
1768   begin
1769    SetLength(ConvertHandlers, Length(ConvertHandlers) + 1);
# Line 1743 | Line 1771 | begin
1771    ConvertHandlers[High(ConvertHandlers)].needed  := needed;
1772    ConvertHandlers[High(ConvertHandlers)].handler := handler;
1773   end;
1774 <
1774 > }
1775   begin
1776 <  InsertHandler('ABNA', False, nil);
1776 > {  InsertHandler('ABNA', False, nil);
1777    //  InsertHandler('AGDB',True,AGDB);
1778    InsertHandler('AGDB', False, nil);
1779    InsertHandler('AGQC', False, nil);
# Line 1843 | Line 1871 | begin
1871    InsertHandler('WMM_', False, nil);
1872    InsertHandler('WMMB', True, WMMB);
1873    InsertHandler('WPGE', True, WPGE);
1874 < end.
1874 > }end.

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)