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 112 by alloc, Thu Feb 22 00:37:39 2007 UTC vs.
Revision 113 by alloc, Sun Feb 25 17:20:22 2007 UTC

# Line 1 | Line 1
1   unit LevelDB;
2
2   interface
4
3   uses
4    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
5    Dialogs, ComCtrls, StdCtrls, StrUtils;
# Line 27 | Line 25 | var
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);
# Line 69 | Line 65 | var
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;
# Line 88 | Line 80 | var
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  
# Line 208 | Line 204 | begin
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;
# Line 226 | Line 229 | begin
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;
# Line 252 | Line 269 | begin
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
# Line 336 | Line 352 | 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;
# Line 372 | Line 388 | begin
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';

Diff Legend

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