--- oup/current/Helper/LevelDB.pas 2007/02/22 00:37:39 112 +++ oup/current/Helper/LevelDB.pas 2007/02/25 17:20:22 113 @@ -1,7 +1,5 @@ unit LevelDB; - interface - uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, StrUtils; @@ -27,11 +25,9 @@ var Form_LevelDB: TForm_LevelDB; implementation - {$R *.dfm} - uses ABSMain, ABSDecUtil, Main, - ConnectionManager, TypeDefs, DataAccess, OniImgClass; + ConnectionManager, TypeDefs, DataAccess, OniImgClass, Data; type THandler = procedure(FileID: Integer); @@ -69,14 +65,10 @@ var Stream_Body, Stream_Names: TMemoryStream; Stream_Dat, Stream_Raw, Stream_Sep: TFileStream; -// FileCount: Integer; -// temps, temps2: String; // Data, rawdata: Tdata; BeginTime, FileTime: Double; Step: Integer; // rawlist: TRawDataList; -// extlist: TExtensionsMap; -// fileinfo: TFileInfo; // datlinks: TDatLinks; OniImage: TOniImage; LevelID: Integer; @@ -88,6 +80,10 @@ var Strings: TStrings; i, j: Integer; + temps: String; + FileInfo: TFileInfo; + + DatFileStream, RawFileStream: TMemoryStream; const Steps: Byte = 3; @@ -208,13 +204,20 @@ begin end; end; - - extlist := OniDataConnection.GetExtendedExtensionsList; - for i := 0 to High(DatHeader.Ident) do - DatHeader.Ident[i] := OniDataConnection.LevelInfo.Ident[i]; - DatHeader.Files := OniDataConnection.GetFilesCount; + for i := 0 to High(DatHeader.OSIdent) do + case Connection.DataOS of + DOS_WIN: DatHeader.OSIdent[i] := HeaderOSIdentWin[i]; + DOS_MAC: DatHeader.OSIdent[i] := HeaderOSIdentMac[i]; + DOS_MACBETA: DatHeader.OSIdent[i] := HeaderOSIdentMacBeta[i]; + end; + for i := 0 to High(DatHeader.GlobalIdent) do + DatHeader.GlobalIdent[i] := HeaderGlobalIdent[i]; + DatHeader.Files := Connection.GetFileCount; DatHeader.NamedFiles := Length(NamedFilesHeader); - DatHeader.Extensions := Length(extlist); + + Strings := Connection.GetExtensionsList(EF_ExtCount); + + DatHeader.Extensions := Strings.Count; DatHeader.DataAddr := 0; DatHeader.DataSize := 0; DatHeader.NamesAddr := 0; @@ -226,25 +229,39 @@ begin DoStep('Writing extensions-header'); - progress.Max := Length(OniDataConnection.GetExtensionsList); + progress.Max := Strings.Count; Application.ProcessMessages; - - for i := 0 to High(ExtensionsHeader) do + for i := 0 to Strings.Count - 1 do begin - ExtensionsHeader[i].Ident := extlist[i].Ident; - ExtensionsHeader[i].Extension := extlist[i].Extension; - SetLength(temps, 4); + temps := Strings.Strings[i]; + ExtensionsHeader[i].ExtCount := StrToInt( MidStr( + temps, + Pos('(', temps) + 1, + Pos(')', temps) - Pos('(', temps) - 1 ) ); + temps := MidStr(temps, 1, 4); for j := 0 to 3 do - temps[j + 1] := ExtensionsHeader[i].Extension[3 - j]; - ExtensionsHeader[i].ExtCount := - Length(OniDataConnection.GetFilesList(temps, '', False, stIDAsc)); + ExtensionsHeader[i].Extension[j] := temps[4-j]; + for j := 0 to High(FileTypes) do + if FileTypes[j].Extension = temps then + Break; + if j < Length(FileTypes) then + begin + case Connection.DataOS of + DOS_WIN: ExtensionsHeader[i].Ident := FileTypes[j].IdentWin; + DOS_WINDEMO: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac; + DOS_MAC: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac; + DOS_MACBETA: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac; + end; + end else begin + ShowMessage('Unknown Extension: ' + Strings.Strings[i]); + Exit; + end; progress.Position := i + 1; lbl_progress.Caption := 'Extensions done: ' + IntToStr(i + 1) + '/' + - IntToStr(Length(extlist)); + IntToStr(Strings.Count); Application.ProcessMessages; end; - DoStep('Storing files-data'); progress.Position := 0; progress.Max := DatHeader.Files; @@ -252,21 +269,20 @@ begin lbl_estimation.Caption := 'Estimated finishing time: unknown'; Application.ProcessMessages; - begintime := Time; + FileTime := Time; for i := 0 to DatHeader.Files - 1 do begin - fileinfo := OniDataConnection.GetFileInfo(i); + FileInfo := Connection.GetFileInfo(i); for j := 0 to 3 do - FilesHeader[i].Extension[j] := fileinfo.Extension[4 - j]; - if fileinfo.Size > 0 then + FilesHeader[i].Extension[j] := FileInfo.Extension[4 - j]; + if FileInfo.Size > 0 then begin // DatLinks:=; FilesHeader[i].DataAddr := Stream_Body.Size + 8; - Data := OniDataConnection.LoadDatFile(i); - Data[4] := (levelid) and $FF; - Data[5] := (levelid shr 8) and $FF; - Data[6] := (levelid shr 16) and $FF; - Data[7] := (levelid shr 24) and $FF; + DatFileStream := TMemoryStream.Create; + Connection.LoadDatFile(i, DatFileStream); + DatFileStream.Seek(4, soFromBeginning); + DatFileStream.Write(LevelID, 4); if (Pos(UpperCase(fileinfo.Extension), UpperCase(raws)) mod 4) = 1 then begin @@ -336,7 +352,7 @@ begin if ((i mod 10) = 0) and (i >= 100) then lbl_estimation.Caption := 'Estimated time left: ' + TimeToStr( - (Time - begintime) / i * (progress.Max - i + 1) * 1.1, timeformat ); + (Time - FileTime) / i * (progress.Max - i + 1) * 1.1, TimeFormat ); progress.Position := i + 1; lbl_progress.Caption := 'Files done: ' + IntToStr(i + 1) + '/' + IntToStr(progress.Max); Application.ProcessMessages; @@ -372,7 +388,7 @@ begin progress.Position := progress.Max; lbl_progress.Caption := 'Files done: ' + IntToStr(progress.Max) + '/' + IntToStr(progress.Max); - lbl_estimation.Caption := 'FINISHED (duration: ' + TimeToStr(Time - absolutebegintime, timeformat) + ')'; + lbl_estimation.Caption := 'FINISHED (duration: ' + TimeToStr(Time - Begintime, TimeFormat) + ')'; DoStep('FIN'); btn_abortok.Caption := '&OK';