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 142 by alloc, Fri Mar 30 02:08:49 2007 UTC vs.
Revision 166 by alloc, Tue Apr 3 02:58:53 2007 UTC

# Line 24 | Line 24 | var
24   implementation
25   {$R *.dfm}
26   uses ABSMain, ABSDecUtil, Main,
27 <    ConnectionManager, TypeDefs, DataAccess, OniImgClass, Data, RawList;
27 >    ConnectionManager, TypeDefs, DataAccess, OniImgClass, Data, RawList,
28 >  Access_OniArchive;
29  
30   var
31    Converting:  Boolean = False;
# Line 44 | Line 45 | end;
45  
46  
47   procedure TForm_LevelDB.CreateLevel(Source, Target: String);
48 + const
49 +  EmptyBytes: Array[0..31] of Byte = (
50 +      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 );
51   var
52    DatHeader:        THeader;
53    FilesHeader:      TFilesMap;
# Line 199 | Line 203 | begin
203    Stream_Names := TMemoryStream.Create;
204    Stream_Dat   := TFileStream.Create(Target, fmCreate);
205    Stream_Raw   := TFileStream.Create(AnsiReplaceStr(Target, '.dat', '.raw'), fmCreate);
206 +  Stream_Raw.Write(EmptyBytes[0], 32);
207    if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then
208 +  begin
209      Stream_Sep := TFileStream.Create(AnsiReplaceStr(Target, '.dat', '.sep'), fmCreate);
210 +    Stream_Sep.Write(EmptyBytes[0], 32);
211 +  end;
212 +
213  
214    DoStep('Creating header');
215    progress.Position      := 0;
# Line 335 | Line 344 | begin
344              begin
345                RawLinks[i].RawAddr := Stream_Sep.Size;
346                Stream_sep.CopyFrom(RawFileStream, RawFileStream.Size);
347 +              if (Stream_Sep.Size mod 32) > 0 then
348 +                Stream_Sep.Write(EmptyBytes[0], 32 - (Stream_Sep.Size mod 32));
349              end else begin
350                RawLinks[i].RawAddr := Stream_Raw.Size;
351                Stream_Raw.CopyFrom(RawFileStream, RawFileStream.Size);
352 +              if (Stream_Raw.Size mod 32) > 0 then
353 +                Stream_Raw.Write(EmptyBytes[0], 32 - (Stream_Raw.Size mod 32));
354              end;
355            end else
356              RawLinks[i].RawAddr := 0;
# Line 347 | Line 360 | begin
360        end;
361        DatFileStream.Seek(0, soFromBeginning);
362        Stream_Body.CopyFrom(DatFileStream, DatFileStream.Size);
363 +      if (Stream_Body.Size mod 32) > 0 then
364 +      begin
365 +        ShowMessage(
366 +            IntToStr(FileID) + '-' + FileInfo.Name + '.' + FileInfo.Extension + #13#10 +
367 +            IntToStr(FileInfo.Size) + ' - 0x' + IntToHex(FileInfo.Size, 6) + ' - real: ' + IntToStr(DatFileStream.Size) + ' - 0x' + IntToHex(DatFileStream.Size, 6) + #13#10 +
368 +            IntToStr(Stream_Body.Size) + ' - 0x' + IntToHex(Stream_Body.Size, 6) );
369 +        Stream_Body.Write(EmptyBytes[0], 32 - (Stream_Body.Size mod 32));
370 +      end;
371      end
372      else
373        FilesHeader[FileID].DataAddr := 0;
# Line 377 | Line 398 | begin
398    for i := 0 to High(ExtensionsHeader) do
399      Stream_Dat.Write(ExtensionsHeader[i], SizeOf(ExtensionsHeader[i]));
400  
401 +  if (Stream_Dat.Size mod 32) > 0 then
402 +    Stream_Dat.Write(EmptyBytes[0], 32 - (Stream_Dat.Size mod 32));
403 +
404    DatHeader.DataSize  := Stream_Body.Size;
405    DatHeader.NamesSize := Stream_Names.Size;
406    DatHeader.DataAddr  := Stream_Dat.Size;
407  
408    Stream_Body.Seek(0, soFromBeginning);
409    Stream_Dat.CopyFrom(Stream_Body, Stream_Body.Size);
410 +
411 +  if (Stream_Dat.Size mod 32) > 0 then
412 +    Stream_Dat.Write(EmptyBytes[0], 32 - (Stream_Dat.Size mod 32));
413 +
414    DatHeader.NamesAddr := Stream_Dat.Size;
415    Stream_Names.Seek(0, soFromBeginning);
416    Stream_Dat.CopyFrom(Stream_Names, Stream_Names.Size);
# Line 604 | Line 632 | begin
632    DoStep('Writing .dat-fileslist');
633    Application.ProcessMessages;
634  
635 +  TAccess_OniArchive(Connection).UnloadWhenUnused := False;
636 +
637    FileTime := Time;
638    Database.StartTransaction;
639    for FileID := 0 to Connection.GetFileCount - 1 do

Diff Legend

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