source: oup/current/Helper/LevelDB.pas@ 136

Last change on this file since 136 was 136, checked in by alloc, 18 years ago
File size: 44.1 KB
Line 
1unit LevelDB;
2interface
3uses
4 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
5 Dialogs, ComCtrls, StdCtrls, StrUtils;
6
7type
8 TForm_LevelDB = class(TForm)
9 group_progress: TGroupBox;
10 progress: TProgressBar;
11 lbl_progress: TLabel;
12 btn_abortok: TButton;
13 lbl_estimation: TLabel;
14 procedure btn_abortokClick(Sender: TObject);
15 private
16 procedure HandleFile(Ext: String; FileID: Integer);
17 procedure StopConvert;
18 public
19 procedure CreateDatabase(Source, Target: String);
20 procedure CreateLevel(Source, Target: String);
21 end;
22
23
24var
25 Form_LevelDB: TForm_LevelDB;
26
27implementation
28{$R *.dfm}
29uses ABSMain, ABSDecUtil, Main,
30 ConnectionManager, TypeDefs, DataAccess, OniImgClass, Data;
31
32type
33 THandler = procedure(FileID: Integer);
34 TConvertHandler = record
35 Ext: String[4];
36 Handler: THandler;
37 end;
38
39var
40 ConvertHandlers: array of TConvertHandler;
41// loaded_filename: String;
42 Converting: Boolean = False;
43 Abort: Boolean = False;
44
45
46function GetOpenMsg(msg: TStatusMessages): String;
47begin
48 case msg of
49 SM_AlreadyOpened: Result := 'File already opened.';
50 SM_FileNotFound: Result := 'File not found.';
51 SM_UnknownExtension: Result := 'Unknown extension.';
52 SM_IncompatibleFile: Result := 'Incompatible file format.';
53 SM_UnknownError: Result := 'Unknown error.';
54 end;
55end;
56
57
58procedure TForm_LevelDB.CreateLevel(Source, Target: String);
59var
60 DatHeader: THeader;
61 FilesHeader: TFilesMap;
62 NamedFilesHeader: TNamedFilesMap;
63 ExtensionsHeader: TExtensionsMap;
64
65 Stream_Body, Stream_Names: TMemoryStream;
66 Stream_Dat, Stream_Raw, Stream_Sep: TFileStream;
67
68 BeginTime, FileTime: Double;
69 Step: Integer;
70 OniImage: TOniImage;
71 LevelID: Integer;
72 TimeFormat: TFormatSettings;
73
74 ConID: Integer;
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// ###########################
96const
97 Steps: Byte = 3;
98
99
100 procedure DoStep(StepName: String);
101 begin
102 Inc(Step);
103 if StepName <> 'FIN' then
104 group_progress.Caption :=
105 'Creating Dat (Step ' + IntToStr(Step) + '/' + IntToStr(Steps) + ': ' + StepName + ')'
106 else
107 group_progress.Caption := 'Creating Dat (FINISHED)';
108 end;
109
110begin
111
112 //
113 // FILE EXISTS CHECK FÜR DAT/RAW/SEP!!!
114 //
115
116 TimeFormat.ShortTimeFormat := 'hh:nn:ss';
117 TimeFormat.LongTimeFormat := 'hh:nn:ss';
118 TimeFormat.TimeSeparator := ':';
119
120 ConID := ConManager.OpenConnection(Source, ConRepMsg);
121 if not (ConRepMsg in [SM_OK, SM_AlreadyOpened]) then
122 begin
123 ShowMessage('Source-file couldn''t be opened! Aborting' + CrLf + GetOpenMsg(ConRepMsg));
124 Exit;
125 end else
126 Connection := ConManager.Connection[ConID];
127
128 ConID := ConManager.FileOpened(Target);
129 if ConID >= 0 then
130 begin
131 if MessageBox(Self.Handle, PChar('Destination-file is opened, close it in ' +
132 'order to proceed conversion?'), PChar('Destination-file opened'),
133 MB_YESNO + MB_ICONQUESTION) = ID_YES then
134 begin
135 if Form_Main.CheckConnectionCloseable(ConID) then
136 if not ConManager.CloseConnection(ConID, ConRepMsg) then
137 begin
138 ShowMessage('Couldn''t close destination-file. Aborting');
139 Exit;
140 end;
141 end else begin
142 ShowMessage('Aborting');
143 Exit;
144 end;
145 end;
146
147 if FileExists(Target) then
148 begin
149 if MessageBox(Self.Handle, PChar('Destination-file exists. ' +
150 'Overwrite it?'), PChar('Destination-file exists'),
151 MB_YESNO + MB_ICONWARNING) = ID_YES then
152 begin
153 if not DeleteFile(Target) then
154 begin
155 ShowMessage('Couldn''t delete file. Aborting');
156 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;
174 end;
175 end;
176
177 LevelID := Connection.LevelNumber;
178 LevelID := (LevelID * 2) * 256 * 256 * 256 + $01;
179 OniImage := TOniImage.Create;
180
181 Self.Visible := True;
182 Form_Main.Visible := False;
183 Step := 0;
184 Converting := True;
185 Abort := False;
186 btn_abortok.Caption := '&Abort...';
187 btn_abortok.Default := False;
188 BeginTime := Time;
189
190 Stream_Body := TMemoryStream.Create;
191 Stream_Names := TMemoryStream.Create;
192 Stream_Dat := TFileStream.Create(Target, fmCreate);
193 Stream_Raw := TFileStream.Create(AnsiReplaceStr(Target, '.dat', '.raw'), fmCreate);
194 if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then
195 Stream_Sep := TFileStream.Create(AnsiReplaceStr(Target, '.dat', '.sep'), fmCreate);
196
197 DoStep('Creating header');
198 progress.Position := 0;
199 lbl_progress.Caption := '';
200 lbl_estimation.Caption := 'Estimated finishing time: unknown';
201 Application.ProcessMessages;
202
203 SetLength(NamedFilesHeader, 0);
204 Strings := TStringList.Create;
205 Strings := Connection.GetFilesList('', '', False, ST_ExtNameAsc);
206 for i := 0 to Strings.Count - 1 do
207 begin
208 if MidStr(Strings.Strings[i],
209 Pos('-', Strings.Strings[i]) + 1,
210 Length(Strings.Strings[i]) -
211 Pos('.', ReverseString(Strings.Strings[i])) -
212 Pos('-', Strings.Strings[i])
213 ) <> '' then
214 begin
215 SetLength(NamedFilesHeader, Length(NamedFilesHeader) + 1);
216 NamedFilesHeader[High(NamedFilesHeader)].FileNumber := StrToInt(MidStr(Strings.Strings[i], 1, 5));
217 NamedFilesHeader[High(NamedFilesHeader)].blubb := 0;
218 end;
219 end;
220
221 for i := 0 to High(DatHeader.OSIdent) do
222 case Connection.DataOS of
223 DOS_WIN: DatHeader.OSIdent[i] := HeaderOSIdentWin[i];
224 DOS_MAC: DatHeader.OSIdent[i] := HeaderOSIdentMac[i];
225 DOS_MACBETA: DatHeader.OSIdent[i] := HeaderOSIdentMacBeta[i];
226 end;
227 for i := 0 to High(DatHeader.GlobalIdent) do
228 DatHeader.GlobalIdent[i] := HeaderGlobalIdent[i];
229 DatHeader.Files := Connection.GetFileCount;
230 DatHeader.NamedFiles := Length(NamedFilesHeader);
231
232 Strings := Connection.GetExtensionsList(EF_ExtCount);
233
234 DatHeader.Extensions := Strings.Count;
235 DatHeader.DataAddr := 0;
236 DatHeader.DataSize := 0;
237 DatHeader.NamesAddr := 0;
238 DatHeader.NamesSize := 0;
239 for i := 0 to High(DatHeader.Ident2) do
240 DatHeader.Ident2[i] := 0;
241 SetLength(FilesHeader, DatHeader.Files);
242 SetLength(ExtensionsHeader, DatHeader.Extensions);
243
244
245 DoStep('Writing extensions-header');
246 progress.Max := Strings.Count;
247 Application.ProcessMessages;
248 for i := 0 to Strings.Count - 1 do
249 begin
250 temps := Strings.Strings[i];
251 ExtensionsHeader[i].ExtCount := StrToInt( MidStr(
252 temps,
253 Pos('(', temps) + 1,
254 Pos(')', temps) - Pos('(', temps) - 1 ) );
255 temps := MidStr(temps, 1, 4);
256 for j := 0 to 3 do
257 ExtensionsHeader[i].Extension[j] := temps[4-j];
258 for j := 0 to High(FileTypes) do
259 if FileTypes[j].Extension = temps then
260 Break;
261 if j < Length(FileTypes) then
262 begin
263 case Connection.DataOS of
264 DOS_WIN: ExtensionsHeader[i].Ident := FileTypes[j].IdentWin;
265 DOS_WINDEMO: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac;
266 DOS_MAC: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac;
267 DOS_MACBETA: ExtensionsHeader[i].Ident := FileTypes[j].IdentMac;
268 end;
269 end else begin
270 ShowMessage('Unknown Extension: ' + Strings.Strings[i]);
271 Exit;
272 end;
273 progress.Position := i + 1;
274 lbl_progress.Caption := 'Extensions done: ' + IntToStr(i + 1) + '/' +
275 IntToStr(Strings.Count);
276 Application.ProcessMessages;
277 end;
278
279 DoStep('Storing files-data');
280 progress.Position := 0;
281 progress.Max := DatHeader.Files;
282 lbl_progress.Caption := '';
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 FileID := 0 to DatHeader.Files - 1 do
293 begin
294 FileInfo := Connection.GetFileInfo(FileID);
295 for j := 0 to 3 do
296 FilesHeader[FileID].Extension[j] := FileInfo.Extension[4 - j];
297 if FileInfo.Size > 0 then
298 begin
299 QueryPerformanceCounter(tempticks1);
300
301 FilesHeader[FileID].DataAddr := Stream_Body.Size + 8;
302 DatFileStream := TMemoryStream.Create;
303 Connection.LoadDatFile(FileID, TStream(DatFileStream));
304 DatFileStream.Seek(0, soFromBeginning);
305 DatFileStream.Write(FileID, 4);
306 DatFileStream.Write(LevelID, 4);
307
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 for i := 0 to High(RawLinks) do
332 begin
333 if RawLinks[i].RawSize > 0 then
334 begin
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 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 QueryPerformanceCounter(tempticks2);
356 rawsum := rawsum + (tempticks2 - tempticks1);
357 end
358 else
359 FilesHeader[FileID].DataAddr := 0;
360 if Length(fileinfo.Name) > 0 then
361 begin
362 FilesHeader[FileID].NameAddr := Stream_Names.Size;
363 temps := fileinfo.Extension + fileinfo.Name + Chr(0);
364 Stream_Names.Write(temps[1], Length(temps));
365 end
366 else
367 FilesHeader[FileID].NameAddr := 0;
368 FilesHeader[FileID].FileSize := fileinfo.Size;
369 FilesHeader[FileID].FileType := fileinfo.FileType;
370
371 if ((FileID mod 10) = 0) and (FileID >= 100) then
372 lbl_estimation.Caption := 'Estimated time left: ' + TimeToStr(
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]));
387 for i := 0 to High(NamedFilesHeader) do
388 Stream_Dat.Write(NamedFilesHeader[i], SizeOf(NamedFilesHeader[i]));
389 for i := 0 to High(ExtensionsHeader) do
390 Stream_Dat.Write(ExtensionsHeader[i], SizeOf(ExtensionsHeader[i]));
391
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;
399 Stream_Names.Seek(0, soFromBeginning);
400 Stream_Dat.CopyFrom(Stream_Names, Stream_Names.Size);
401
402 Stream_Dat.Seek(0, soFromBeginning);
403 Stream_Dat.Write(DatHeader, SizeOf(DatHeader));
404
405 Stream_Dat.Free;
406 Stream_Body.Free;
407 Stream_Names.Free;
408 Stream_Raw.Free;
409
410 if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then
411 Stream_Sep.Free;
412
413 progress.Position := progress.Max;
414 lbl_progress.Caption := 'Files done: ' + IntToStr(progress.Max) + '/' +
415 IntToStr(progress.Max);
416 lbl_estimation.Caption := 'FINISHED (duration: ' + TimeToStr(Time - Begintime, TimeFormat) + ')';
417
418 DoStep('FIN');
419 btn_abortok.Caption := '&OK';
420 btn_abortok.Default := True;
421
422 OniImage.Free;
423
424 converting := False;
425
426// CloseDataConnection(DataConnections[conIndex]);
427end;
428
429
430
431
432procedure TForm_LevelDB.HandleFile;
433var
434 i: Byte;
435begin
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
440 ConvertHandlers[i].Handler(fileid, dir_dat2db);
441 Break;
442 end
443 else
444 Break;
445}end;
446
447
448
449
450procedure TForm_LevelDB.CreateDatabase(Source, target: String);
451var
452 DataBase: TABSDatabase;
453{
454var
455 DataBase: TABSDatabase;
456 Query: TABSQuery;
457 MimeCoder: TStringFormat_MIME64;
458
459 i, j: LongWord;
460 temps, temps2: String;
461 Data: Tdata;
462 absolutebegintime, begintime: Double;
463 step: Byte;
464 rawlist: TRawList;
465 extlist: TExtensionsMap;
466 fileinfo: TFileInfo;
467 timeformat: TFormatSettings;
468
469 conIndex: Integer;
470const
471 steps: Byte = 4;
472
473
474
475
476 procedure DoStep(stepname: String);
477 begin
478 Inc(step);
479 if stepname <> 'FIN' then
480 group_progress.Caption :=
481 'Creating DB (Step ' + IntToStr(step) + '/' + IntToStr(steps) + ': ' + stepname + ')'
482 else
483 group_progress.Caption := 'Creating DB (FINISHED)';
484 end;
485}
486
487begin
488{ if CreateDataConnection(Source, ODB_Dat) = nil then
489 begin
490 ShowMessage('Could not connect to .dat-file');
491 Exit;
492 end
493 else
494 begin
495 TOniDataDat(OniDataConnection).UnloadWhenUnused := False;
496 end;
497
498 timeformat.LongTimeFormat := 'hh:nn:ss';
499 timeformat.ShortTimeFormat := 'hh:nn:ss';
500 timeformat.TimeSeparator := ':';
501
502 Self.Visible := True;
503 Form_Main.Visible := False;
504 step := 0;
505 converting := True;
506 abort := False;
507 btn_abortok.Caption := '&Abort...';
508 btn_abortok.Default := False;
509 loaded_filename := target;
510
511 absolutebegintime := Time;
512
513 DataBase := TABSDatabase.Create(Self);
514}
515 DataBase.MaxConnections := 1;
516 DataBase.PageSize := 8112;
517 DataBase.PageCountInExtent := 8;
518{
519 DataBase.DatabaseName := 'OLDB';
520 DataBase.DatabaseFileName := target;
521 DataBase.CreateDatabase;
522
523 DoStep('Creating tables');
524 progress.Position := 0;
525 lbl_progress.Caption := '';
526 lbl_estimation.Caption := 'Estimated finishing time: unknown';
527 Application.ProcessMessages;
528
529 Query := TABSQuery.Create(Self);
530 Query.DatabaseName := 'OLDB';
531 Query.SQL.Text :=
532 'CREATE TABLE globals ( id AUTOINC PRIMARY KEY, name STRING(128), ' +
533 'value STRING(128) );';
534 Query.ExecSQL;
535 Query.SQL.Text :=
536 'CREATE TABLE linkmap ( id AUTOINC PRIMARY KEY, src_id INTEGER, ' +
537 'src_link_offset INTEGER, target_id INTEGER, INDEX idsrcid src_id, ' +
538 'INDEX iddestid target_id);';
539 Query.ExecSQL;
540 Query.SQL.Text :=
541 'CREATE TABLE rawmap ( id AUTOINC PRIMARY KEY, src_id INTEGER, ' +
542 'src_link_offset INTEGER, sep BOOLEAN, size INTEGER, ' +
543 'data BLOB BlobCompressionMode 9 BlobBlockSize 1024 BlobCompressionAlgorithm ZLib, ' +
544 'INDEX idsrcid src_id);';
545 // Query.SQL.Text:='CREATE TABLE rawmap ( id AUTOINC PRIMARY KEY, src_id INTEGER, src_link_offset INTEGER, size INTEGER, data BLOB BlobCompressionAlgorithm None );';
546 Query.ExecSQL;
547 Query.SQL.Text :=
548 'CREATE TABLE datfiles ( id INTEGER PRIMARY KEY, extension CHAR(4), ' +
549 'name STRING(128), contenttype INTEGER, size INTEGER, ' +
550 'data BLOB BlobCompressionMode 9 BlobBlockSize 1024 BlobCompressionAlgorithm ZLib );';
551 // Query.SQL.Text:='CREATE TABLE datfiles ( id INTEGER PRIMARY KEY, extension CHAR(4), name STRING(128), contenttype INTEGER, size INTEGER, data BLOB BlobCompressionAlgorithm None );';
552 Query.ExecSQL;
553// Query.SQL.Text :=
554// 'CREATE TABLE extlist ( id AUTOINC PRIMARY KEY, ext CHAR(4), ident CHAR(16) );';
555// Query.ExecSQL;
556
557 Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("dbversion","' +
558 dbversion + '");';
559 Query.ExecSQL;
560 SetLength(Data, Length(OniDataConnection.LevelInfo.Ident));
561 for i := 0 to High(OniDataConnection.LevelInfo.Ident) do
562 Data[i] := OniDataConnection.LevelInfo.Ident[i];
563 temps := CreateHexString(Data, True);
564// Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("ident","' + temps + '");';
565// Query.ExecSQL;
566 Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("lvl","' +
567 IntToStr(OniDataConnection.LevelInfo.LevelNumber) + '");';
568 Query.ExecSQL;
569 if OniDataConnection.OSisMAC then
570 Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("os","MAC");'
571 else
572 Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("os","PC");';
573 Query.ExecSQL;
574
575 DoStep('Writing extensionslist');
576 progress.Max := Length(OniDataConnection.GetExtensionsList);
577 Application.ProcessMessages;
578
579 extlist := OniDataConnection.GetExtendedExtensionsList;
580 for i := 0 to High(extlist) do
581 begin
582 SetLength(Data, Length(extlist[i].Ident));
583 for j := 0 to High(extlist[i].Ident) do
584 Data[j] := extlist[i].Ident[j];
585 temps := CreateHexString(Data, True);
586 temps2 := extlist[i].Extension[3] + extlist[i].Extension[2] +
587 extlist[i].Extension[1] + extlist[i].Extension[0];
588 Query.SQL.Text := 'INSERT INTO extlist (ext,ident) VALUES ("' +
589 temps2 + '","' + temps + '");';
590 Query.ExecSQL;
591 progress.Position := i;
592 lbl_progress.Caption := 'Extensions done: ' + IntToStr(i) + '/' +
593 IntToStr(Length(extlist));
594 Application.ProcessMessages;
595 if abort then
596 begin
597 stop_convert;
598 Exit;
599 end;
600 end;
601 lbl_progress.Caption := '';
602
603 progress.Position := 0;
604 lbl_progress.Caption := 'Files done: ' + IntToStr(0) + '/' + IntToStr(
605 OniDataConnection.GetFilesCount);
606 lbl_estimation.Caption := 'Estimated finishing time: unknown';
607
608 DoStep('Loading .dat into memory');
609 Application.ProcessMessages;
610
611 progress.Max := OniDataConnection.GetFilesCount;
612 begintime := Time;
613 DoStep('Writing .dat-fileslist');
614 Application.ProcessMessages;
615
616 Database.StartTransaction;
617 for i := 0 to OniDataConnection.GetFilesCount - 1 do
618 begin
619 fileinfo := OniDataConnection.GetFileInfo(i);
620 if (fileinfo.FileType and $02) = 0 then
621 begin
622 mimecoder := TStringFormat_MIME64.Create;
623 Data := OniDataConnection.LoadDatFile(i);
624 Query.SQL.Text :=
625 'INSERT INTO datfiles (id,extension,name,contenttype,size,data) VALUES (' +
626 IntToStr(i) + ',"' + fileinfo.Extension + '","' + fileinfo.Name + '","' + IntToHex(
627 fileinfo.FileType, 8) + '",' + IntToStr(fileinfo.Size) + ',MimeToBin("' +
628 MimeCoder.StrTo(@Data[0], Length(Data)) + '") );';
629 Query.ExecSQL;
630 mimecoder.Free;
631
632 rawlist := OniDataConnection.GetRawList(i);
633 if Length(rawlist) > 0 then
634 begin
635 for j := 0 to High(rawlist) do
636 begin
637 if rawlist[j].raw_size > 0 then
638 begin
639 SetLength(Data, rawlist[j].raw_size);
640 OniDataConnection.LoadRawFile(i, rawlist[j].src_offset, Data);
641 mimecoder := TStringFormat_MIME64.Create;
642 Query.SQL.Text :=
643 'INSERT INTO rawmap (src_id,src_link_offset,sep,size,data) VALUES (' +
644 IntToStr(i) + ',' + IntToStr(rawlist[j].src_offset) + ',' + BoolToStr(
645 rawlist[j].loc_sep) + ',' + IntToStr(rawlist[j].raw_size) + ',MimeToBin("' +
646 MimeCoder.StrTo(@Data[0], rawlist[j].raw_size) + '") );';
647 Query.ExecSQL;
648 mimecoder.Free;
649 end
650 else
651 begin
652 Query.SQL.Text :=
653 'INSERT INTO rawmap (src_id,src_link_offset,sep,size) VALUES (' +
654 IntToStr(i) + ',' + IntToStr(rawlist[j].src_offset) + ',' + BoolToStr(rawlist[j].loc_sep) + ',0);';
655 Query.ExecSQL;
656 end;
657 end;
658 end;
659
660 HandleFile(fileinfo.Extension, i, True);
661 end
662 else
663 begin
664 Query.SQL.Text :=
665 'INSERT INTO datfiles (id,extension,name,contenttype,size) VALUES (' +
666 IntToStr(i) + ',"' + fileinfo.Extension + '","' + fileinfo.Name + '","' + IntToHex(
667 fileinfo.FileType, 8) + '",0);';
668 Query.ExecSQL;
669 end;
670 if ((i mod 100) = 0) and (i > 0) then
671 begin
672 Database.Commit(False);
673 Database.StartTransaction;
674 end;
675 if ((i mod 10) = 0) and (i >= 100) then
676 lbl_estimation.Caption := 'Estimated time left: ' + TimeToStr(
677 (Time - begintime) / i * (progress.Max - i + 1) * 1.1, timeformat );
678 progress.Position := i;
679 lbl_progress.Caption := 'Files done: ' + IntToStr(i) + '/' + IntToStr(progress.Max);
680 Application.ProcessMessages;
681 if abort then
682 begin
683 stop_convert;
684 Exit;
685 end;
686 end;
687 Database.Commit(False);
688 progress.Position := progress.Max;
689 lbl_progress.Caption := 'Files done: ' + IntToStr(progress.Max) + '/' +
690 IntToStr(progress.Max);
691
692 lbl_estimation.Caption := 'FINISHED (duration: ' + TimeToStr(Time - absolutebegintime, timeformat) + ')';
693
694 DoStep('FIN');
695 btn_abortok.Caption := '&OK';
696 btn_abortok.Default := True;
697
698 converting := False;
699
700 database.Close;
701 database.Free;
702
703 CloseDataConnection(DataConnections[conIndex]);
704}
705end;
706
707
708
709
710procedure TForm_LevelDB.StopConvert;
711begin
712{ btn_abortok.Caption := '&Close';
713 btn_abortok.Default := True;
714 converting := False;
715 lbl_estimation.Caption := 'ABORTED';
716 group_progress.Caption := 'Creating DB (ABORTED)';
717 DataBase.Close;
718 if MessageBox(Self.Handle, PChar('Delete the unfinished DB-file?'),
719 PChar('Delete file?'), MB_YESNO) = idYes then
720 begin
721 DeleteFile(loaded_filename);
722 end;
723}end;
724
725
726
727
728procedure TForm_LevelDB.btn_abortokClick(Sender: TObject);
729begin
730 if converting then
731 begin
732 if MessageBox(Self.Handle,
733 PChar('Do you really want to cancel the convert-progress?'),
734 PChar('Warning: Converting'), MB_YESNO) = idYes then
735 abort := True;
736 end
737 else
738 begin
739 Self.Visible := False;
740 Form_Main.Visible := True;
741 end;
742end;
743
744
745
746{
747procedure InsertDatLinkToDB(fileid: LongWord; offset: LongWord);
748var
749 link: LongWord;
750begin
751 OniDataConnection.LoadDatFilePart(fileid, offset, 4, @link);
752 if link = 0 then
753 link := $FFFFFFFF
754 else
755 link := link div 256;
756 Query.SQL.Text := 'INSERT INTO linkmap (src_id,src_link_offset,target_id) VALUES (' +
757 IntToStr(fileid) + ',' + IntToStr(offset) + ',' + IntToStr(link) + ');';
758 Query.ExecSQL;
759end;
760
761
762
763
764procedure AISA(fileid: LongWord; dir_dat2db: Boolean);
765var
766 packages: Word;
767 i: LongWord;
768begin
769 if dir_dat2db then
770 begin
771 OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
772 if packages > 0 then
773 begin
774 for i := 0 to packages - 1 do
775 InsertDatLinkToDB(fileid, $20 + i * $160 + $28);
776 for i := 0 to packages - 1 do
777 InsertDatLinkToDB(fileid, $20 + i * $160 + $150);
778 end;
779 end
780 else
781 begin
782 end;
783end;
784
785
786
787
788procedure AKEV(fileid: LongWord; dir_dat2db: Boolean);
789var
790 i: LongWord;
791begin
792 if dir_dat2db then
793 begin
794 for i := 0 to 16 do
795 InsertDatLinkToDB(fileid, $8 + i * 4);
796 end
797 else
798 begin
799 end;
800end;
801
802
803
804
805procedure AKOT(fileid: LongWord; dir_dat2db: Boolean);
806var
807 i: LongWord;
808begin
809 if dir_dat2db then
810 begin
811 for i := 0 to 4 do
812 InsertDatLinkToDB(fileid, $8 + i * 4);
813 end
814 else
815 begin
816 end;
817end;
818
819
820
821
822procedure CBPI(fileid: LongWord; dir_dat2db: Boolean);
823var
824 i: LongWord;
825begin
826 if dir_dat2db then
827 begin
828 for i := 0 to 56 do
829 InsertDatLinkToDB(fileid, $8 + i * 4);
830 end
831 else
832 begin
833 end;
834end;
835
836
837
838
839procedure CBPM(fileid: LongWord; dir_dat2db: Boolean);
840var
841 i: LongWord;
842begin
843 if dir_dat2db then
844 begin
845 for i := 0 to 18 do
846 InsertDatLinkToDB(fileid, $8 + i * 4);
847 end
848 else
849 begin
850 end;
851end;
852
853
854
855
856procedure CONS(fileid: LongWord; dir_dat2db: Boolean);
857var
858 i: LongWord;
859begin
860 if dir_dat2db then
861 begin
862 for i := 0 to 1 do
863 InsertDatLinkToDB(fileid, $24 + i * 4);
864 end
865 else
866 begin
867 end;
868end;
869
870
871
872
873procedure CRSA(fileid: LongWord; dir_dat2db: Boolean);
874var
875 packages: LongWord;
876 i: LongWord;
877begin
878 if dir_dat2db then
879 begin
880 OniDataConnection.LoadDatFilePart(fileid, $14, 4, @packages);
881 if packages > 0 then
882 for i := 0 to packages - 1 do
883 InsertDatLinkToDB(fileid, $20 + i * 1100 + $A0);
884 end
885 else
886 begin
887 end;
888end;
889
890
891
892
893procedure DOOR(fileid: LongWord; dir_dat2db: Boolean);
894begin
895 if dir_dat2db then
896 begin
897 InsertDatLinkToDB(fileid, $08);
898 InsertDatLinkToDB(fileid, $10);
899 end
900 else
901 begin
902 end;
903end;
904
905
906
907
908procedure DPGE(fileid: LongWord; dir_dat2db: Boolean);
909begin
910 if dir_dat2db then
911 begin
912 InsertDatLinkToDB(fileid, $40);
913 end
914 else
915 begin
916 end;
917end;
918
919
920
921
922procedure HPGE(fileid: LongWord; dir_dat2db: Boolean);
923begin
924 if dir_dat2db then
925 begin
926 InsertDatLinkToDB(fileid, $0C);
927 end
928 else
929 begin
930 end;
931end;
932
933
934
935
936procedure IGHH(fileid: LongWord; dir_dat2db: Boolean);
937begin
938 if dir_dat2db then
939 begin
940 InsertDatLinkToDB(fileid, $24);
941 InsertDatLinkToDB(fileid, $28);
942 end
943 else
944 begin
945 end;
946end;
947
948
949
950
951procedure IGPA(fileid: LongWord; dir_dat2db: Boolean);
952var
953 links: LongWord;
954 i: LongWord;
955begin
956 if dir_dat2db then
957 begin
958 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @links);
959 if links > 0 then
960 for i := 0 to links - 1 do
961 InsertDatLinkToDB(fileid, $20 + i * 4);
962 end
963 else
964 begin
965 end;
966end;
967
968
969
970
971procedure IGPG(fileid: LongWord; dir_dat2db: Boolean);
972var
973 i: LongWord;
974begin
975 if dir_dat2db then
976 begin
977 for i := 0 to 1 do
978 InsertDatLinkToDB(fileid, $1C + i * 4);
979 end
980 else
981 begin
982 end;
983end;
984
985
986
987
988procedure IGSA(fileid: LongWord; dir_dat2db: Boolean);
989var
990 links: LongWord;
991 i: LongWord;
992begin
993 if dir_dat2db then
994 begin
995 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @links);
996 if links > 0 then
997 for i := 0 to links - 1 do
998 InsertDatLinkToDB(fileid, $20 + i * 4);
999 end
1000 else
1001 begin
1002 end;
1003end;
1004
1005
1006
1007
1008procedure IMPT(fileid: LongWord; dir_dat2db: Boolean);
1009begin
1010 if dir_dat2db then
1011 begin
1012 InsertDatLinkToDB(fileid, $10);
1013 end
1014 else
1015 begin
1016 end;
1017end;
1018
1019
1020
1021
1022procedure IPGE(fileid: LongWord; dir_dat2db: Boolean);
1023begin
1024 if dir_dat2db then
1025 begin
1026 InsertDatLinkToDB(fileid, $0C);
1027 end
1028 else
1029 begin
1030 end;
1031end;
1032
1033
1034
1035
1036procedure KEYI(fileid: LongWord; dir_dat2db: Boolean);
1037var
1038 i: LongWord;
1039begin
1040 if dir_dat2db then
1041 begin
1042 for i := 0 to 9 do
1043 InsertDatLinkToDB(fileid, $08 + i * 4);
1044 end
1045 else
1046 begin
1047 end;
1048end;
1049
1050
1051
1052
1053procedure M3GA(fileid: LongWord; dir_dat2db: Boolean);
1054var
1055 links: LongWord;
1056 i: LongWord;
1057begin
1058 if dir_dat2db then
1059 begin
1060 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @links);
1061 if links > 0 then
1062 for i := 0 to links - 1 do
1063 InsertDatLinkToDB(fileid, $20 + i * 4);
1064 end
1065 else
1066 begin
1067 end;
1068end;
1069
1070
1071
1072
1073procedure M3GM(fileid: LongWord; dir_dat2db: Boolean);
1074var
1075 i: LongWord;
1076begin
1077 if dir_dat2db then
1078 begin
1079 for i := 0 to 6 do
1080 InsertDatLinkToDB(fileid, $0C + i * 4);
1081 end
1082 else
1083 begin
1084 end;
1085end;
1086
1087
1088
1089
1090procedure MTRL(fileid: LongWord; dir_dat2db: Boolean);
1091begin
1092 if dir_dat2db then
1093 begin
1094 InsertDatLinkToDB(fileid, $10);
1095 end
1096 else
1097 begin
1098 end;
1099end;
1100
1101
1102
1103
1104procedure OBDC(fileid: LongWord; dir_dat2db: Boolean);
1105var
1106 packages: Word;
1107 i: LongWord;
1108begin
1109 if dir_dat2db then
1110 begin
1111 OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
1112 if packages > 0 then
1113 for i := 0 to packages - 1 do
1114 InsertDatLinkToDB(fileid, $20 + i * $18 + $4);
1115 end
1116 else
1117 begin
1118 end;
1119end;
1120
1121
1122
1123
1124procedure OBOA(fileid: LongWord; dir_dat2db: Boolean);
1125var
1126 packages: Word;
1127 i: LongWord;
1128begin
1129 if dir_dat2db then
1130 begin
1131 OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
1132 if packages > 0 then
1133 for i := 0 to packages - 1 do
1134 begin
1135 InsertDatLinkToDB(fileid, $20 + i * 240 + $0);
1136 InsertDatLinkToDB(fileid, $20 + i * 240 + $4);
1137 InsertDatLinkToDB(fileid, $20 + i * 240 + $8);
1138 end;
1139 end
1140 else
1141 begin
1142 end;
1143end;
1144
1145
1146
1147
1148procedure OFGA(fileid: LongWord; dir_dat2db: Boolean);
1149var
1150 packages: LongWord;
1151 i: LongWord;
1152begin
1153 if dir_dat2db then
1154 begin
1155 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
1156 if packages > 0 then
1157 for i := 0 to packages - 1 do
1158 InsertDatLinkToDB(fileid, $20 + i * 12 + $04);
1159 end
1160 else
1161 begin
1162 end;
1163end;
1164
1165
1166
1167
1168procedure ONCC(fileid: LongWord; dir_dat2db: Boolean);
1169var
1170 i: LongWord;
1171begin
1172 if dir_dat2db then
1173 begin
1174 InsertDatLinkToDB(fileid, $28);
1175 InsertDatLinkToDB(fileid, $434);
1176 InsertDatLinkToDB(fileid, $438);
1177 InsertDatLinkToDB(fileid, $43C);
1178 InsertDatLinkToDB(fileid, $C3C);
1179 InsertDatLinkToDB(fileid, $C40);
1180 InsertDatLinkToDB(fileid, $C44);
1181 InsertDatLinkToDB(fileid, $C48);
1182 InsertDatLinkToDB(fileid, $C88);
1183 InsertDatLinkToDB(fileid, $C8C);
1184 end
1185 else
1186 begin
1187 end;
1188end;
1189
1190
1191
1192
1193procedure ONCV(fileid: LongWord; dir_dat2db: Boolean);
1194begin
1195 if dir_dat2db then
1196 begin
1197 InsertDatLinkToDB(fileid, $08);
1198 end
1199 else
1200 begin
1201 end;
1202end;
1203
1204
1205
1206
1207procedure ONLV(fileid: LongWord; dir_dat2db: Boolean);
1208var
1209 i: LongWord;
1210begin
1211 if dir_dat2db then
1212 begin
1213 for i := 0 to 5 do
1214 InsertDatLinkToDB(fileid, $48 + i * 4);
1215 for i := 0 to 5 do
1216 InsertDatLinkToDB(fileid, $64 + i * 4);
1217 InsertDatLinkToDB(fileid, $300);
1218 end
1219 else
1220 begin
1221 end;
1222end;
1223
1224
1225
1226
1227procedure ONOA(fileid: LongWord; dir_dat2db: Boolean);
1228var
1229 packages: LongWord;
1230 i: LongWord;
1231begin
1232 if dir_dat2db then
1233 begin
1234 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
1235 if packages > 0 then
1236 for i := 0 to packages - 1 do
1237 InsertDatLinkToDB(fileid, $20 + i * 8 + $04);
1238 end
1239 else
1240 begin
1241 end;
1242end;
1243
1244
1245
1246
1247procedure ONSK(fileid: LongWord; dir_dat2db: Boolean);
1248begin
1249 if dir_dat2db then
1250 begin
1251 InsertDatLinkToDB(fileid, $08);
1252 InsertDatLinkToDB(fileid, $0C);
1253 InsertDatLinkToDB(fileid, $10);
1254 InsertDatLinkToDB(fileid, $14);
1255 InsertDatLinkToDB(fileid, $18);
1256 InsertDatLinkToDB(fileid, $20);
1257 InsertDatLinkToDB(fileid, $44);
1258 end
1259 else
1260 begin
1261 end;
1262end;
1263
1264
1265
1266
1267procedure ONVL(fileid: LongWord; dir_dat2db: Boolean);
1268var
1269 packages: LongWord;
1270 i: LongWord;
1271begin
1272 if dir_dat2db then
1273 begin
1274 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
1275 if packages > 0 then
1276 for i := 0 to packages - 1 do
1277 InsertDatLinkToDB(fileid, $20 + i * 4);
1278 end
1279 else
1280 begin
1281 end;
1282end;
1283
1284
1285
1286
1287procedure ONWC(fileid: LongWord; dir_dat2db: Boolean);
1288begin
1289 if dir_dat2db then
1290 begin
1291 InsertDatLinkToDB(fileid, $28);
1292 InsertDatLinkToDB(fileid, $34);
1293 InsertDatLinkToDB(fileid, $40);
1294 InsertDatLinkToDB(fileid, $54);
1295 InsertDatLinkToDB(fileid, $58);
1296 InsertDatLinkToDB(fileid, $5C);
1297 InsertDatLinkToDB(fileid, $60);
1298 InsertDatLinkToDB(fileid, $6FC);
1299 InsertDatLinkToDB(fileid, $700);
1300 end
1301 else
1302 begin
1303 end;
1304end;
1305
1306
1307
1308
1309procedure OPGE(fileid: LongWord; dir_dat2db: Boolean);
1310begin
1311 if dir_dat2db then
1312 begin
1313 InsertDatLinkToDB(fileid, $0C);
1314 end
1315 else
1316 begin
1317 end;
1318end;
1319
1320
1321
1322
1323procedure PSPC(fileid: LongWord; dir_dat2db: Boolean);
1324begin
1325 if dir_dat2db then
1326 begin
1327 InsertDatLinkToDB(fileid, $50);
1328 end
1329 else
1330 begin
1331 end;
1332end;
1333
1334
1335
1336
1337procedure PSPL(fileid: LongWord; dir_dat2db: Boolean);
1338var
1339 packages: LongWord;
1340 i: LongWord;
1341begin
1342 if dir_dat2db then
1343 begin
1344 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
1345 if packages > 0 then
1346 for i := 0 to packages - 1 do
1347 InsertDatLinkToDB(fileid, $20 + i * 8 + $4);
1348 end
1349 else
1350 begin
1351 end;
1352end;
1353
1354
1355
1356
1357procedure PSUI(fileid: LongWord; dir_dat2db: Boolean);
1358var
1359 i: LongWord;
1360begin
1361 if dir_dat2db then
1362 begin
1363 for i := 0 to 43 do
1364 InsertDatLinkToDB(fileid, $08 + i * 4);
1365 end
1366 else
1367 begin
1368 end;
1369end;
1370
1371
1372
1373
1374procedure STNA(fileid: LongWord; dir_dat2db: Boolean);
1375var
1376 packages: Word;
1377 i: LongWord;
1378begin
1379 if dir_dat2db then
1380 begin
1381 OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
1382 if packages > 0 then
1383 for i := 0 to packages - 1 do
1384 InsertDatLinkToDB(fileid, $20 + i * 4);
1385 end
1386 else
1387 begin
1388 end;
1389end;
1390
1391
1392
1393
1394procedure TRAC(fileid: LongWord; dir_dat2db: Boolean);
1395var
1396 packages: Word;
1397 i: LongWord;
1398begin
1399 if dir_dat2db then
1400 begin
1401 InsertDatLinkToDB(fileid, $18);
1402 OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
1403 if packages > 0 then
1404 for i := 0 to packages - 1 do
1405 InsertDatLinkToDB(fileid, $20 + i * 12 + 8);
1406 end
1407 else
1408 begin
1409 end;
1410end;
1411
1412
1413
1414
1415procedure TRAM(fileid: LongWord; dir_dat2db: Boolean);
1416begin
1417 if dir_dat2db then
1418 begin
1419 InsertDatLinkToDB(fileid, $40);
1420 InsertDatLinkToDB(fileid, $44);
1421 end
1422 else
1423 begin
1424 end;
1425end;
1426
1427
1428
1429
1430procedure TRAS(fileid: LongWord; dir_dat2db: Boolean);
1431begin
1432 if dir_dat2db then
1433 begin
1434 InsertDatLinkToDB(fileid, $08);
1435 end
1436 else
1437 begin
1438 end;
1439end;
1440
1441
1442
1443
1444procedure TRBS(fileid: LongWord; dir_dat2db: Boolean);
1445var
1446 i: LongWord;
1447begin
1448 if dir_dat2db then
1449 begin
1450 for i := 0 to 4 do
1451 InsertDatLinkToDB(fileid, $08 + i * 4);
1452 end
1453 else
1454 begin
1455 end;
1456end;
1457
1458
1459
1460
1461procedure TRCM(fileid: LongWord; dir_dat2db: Boolean);
1462var
1463 i: LongWord;
1464begin
1465 if dir_dat2db then
1466 begin
1467 for i := 0 to 2 do
1468 InsertDatLinkToDB(fileid, $5C + i * 4);
1469 end
1470 else
1471 begin
1472 end;
1473end;
1474
1475
1476
1477
1478procedure TRGA(fileid: LongWord; dir_dat2db: Boolean);
1479var
1480 i: LongWord;
1481 packages: Word;
1482begin
1483 if dir_dat2db then
1484 begin
1485 OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
1486 if packages > 0 then
1487 for i := 0 to packages - 1 do
1488 InsertDatLinkToDB(fileid, $20 + i * 4);
1489 end
1490 else
1491 begin
1492 end;
1493end;
1494
1495
1496
1497
1498procedure TRGE(fileid: LongWord; dir_dat2db: Boolean);
1499begin
1500 if dir_dat2db then
1501 begin
1502 InsertDatLinkToDB(fileid, $20);
1503 end
1504 else
1505 begin
1506 end;
1507end;
1508
1509
1510
1511
1512procedure TRIG(fileid: LongWord; dir_dat2db: Boolean);
1513begin
1514 if dir_dat2db then
1515 begin
1516 InsertDatLinkToDB(fileid, $18);
1517 InsertDatLinkToDB(fileid, $24);
1518 InsertDatLinkToDB(fileid, $28);
1519 end
1520 else
1521 begin
1522 end;
1523end;
1524
1525
1526
1527
1528procedure TRMA(fileid: LongWord; dir_dat2db: Boolean);
1529var
1530 i: LongWord;
1531 packages: Word;
1532begin
1533 if dir_dat2db then
1534 begin
1535 OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
1536 if packages > 0 then
1537 for i := 0 to packages - 1 do
1538 InsertDatLinkToDB(fileid, $20 + i * 4);
1539 end
1540 else
1541 begin
1542 end;
1543end;
1544
1545
1546
1547
1548procedure TRSC(fileid: LongWord; dir_dat2db: Boolean);
1549var
1550 i: LongWord;
1551 packages: Word;
1552begin
1553 if dir_dat2db then
1554 begin
1555 OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
1556 if packages > 0 then
1557 for i := 0 to packages - 1 do
1558 InsertDatLinkToDB(fileid, $20 + i * 4);
1559 end
1560 else
1561 begin
1562 end;
1563end;
1564
1565
1566
1567
1568procedure TSFF(fileid: LongWord; dir_dat2db: Boolean);
1569var
1570 i: LongWord;
1571 packages: LongWord;
1572begin
1573 if dir_dat2db then
1574 begin
1575 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
1576 if packages > 0 then
1577 for i := 0 to packages - 1 do
1578 InsertDatLinkToDB(fileid, $20 + i * 4);
1579 end
1580 else
1581 begin
1582 end;
1583end;
1584
1585
1586
1587
1588procedure TSFT(fileid: LongWord; dir_dat2db: Boolean);
1589begin
1590 if dir_dat2db then
1591 begin
1592 InsertDatLinkToDB(fileid, $1C);
1593 end
1594 else
1595 begin
1596 end;
1597end;
1598
1599
1600
1601
1602procedure TURR(fileid: LongWord; dir_dat2db: Boolean);
1603begin
1604 if dir_dat2db then
1605 begin
1606 InsertDatLinkToDB(fileid, $60);
1607 InsertDatLinkToDB(fileid, $6C);
1608 InsertDatLinkToDB(fileid, $74);
1609 end
1610 else
1611 begin
1612 end;
1613end;
1614
1615
1616
1617
1618procedure TXAN(fileid: LongWord; dir_dat2db: Boolean);
1619var
1620 i: LongWord;
1621 packages: LongWord;
1622begin
1623 if dir_dat2db then
1624 begin
1625 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
1626 if packages > 0 then
1627 for i := 0 to packages - 1 do
1628 InsertDatLinkToDB(fileid, $20 + i * 4);
1629 end
1630 else
1631 begin
1632 end;
1633end;
1634
1635
1636
1637
1638procedure TXMA(fileid: LongWord; dir_dat2db: Boolean);
1639var
1640 i: LongWord;
1641 packages: LongWord;
1642begin
1643 if dir_dat2db then
1644 begin
1645 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
1646 if packages > 0 then
1647 for i := 0 to packages - 1 do
1648 InsertDatLinkToDB(fileid, $20 + i * 4);
1649 end
1650 else
1651 begin
1652 end;
1653end;
1654
1655
1656
1657
1658procedure TXMB(fileid: LongWord; dir_dat2db: Boolean);
1659var
1660 i: LongWord;
1661 packages: LongWord;
1662begin
1663 if dir_dat2db then
1664 begin
1665 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
1666 if packages > 0 then
1667 for i := 0 to packages - 1 do
1668 InsertDatLinkToDB(fileid, $20 + i * 4);
1669 end
1670 else
1671 begin
1672 end;
1673end;
1674
1675
1676
1677
1678procedure TXMP(fileid: LongWord; dir_dat2db: Boolean);
1679begin
1680 if dir_dat2db then
1681 begin
1682 InsertDatLinkToDB(fileid, $94);
1683 InsertDatLinkToDB(fileid, $98);
1684 end
1685 else
1686 begin
1687 end;
1688end;
1689
1690
1691
1692
1693procedure TXTC(fileid: LongWord; dir_dat2db: Boolean);
1694begin
1695 if dir_dat2db then
1696 begin
1697 InsertDatLinkToDB(fileid, $08);
1698 end
1699 else
1700 begin
1701 end;
1702end;
1703
1704
1705
1706
1707procedure WMCL(fileid: LongWord; dir_dat2db: Boolean);
1708var
1709 i: LongWord;
1710 packages: LongWord;
1711begin
1712 if dir_dat2db then
1713 begin
1714 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
1715 if packages > 0 then
1716 for i := 0 to packages - 1 do
1717 InsertDatLinkToDB(fileid, $20 + i * 8 + $4);
1718 end
1719 else
1720 begin
1721 end;
1722end;
1723
1724
1725
1726
1727procedure WMDD(fileid: LongWord; dir_dat2db: Boolean);
1728var
1729 i: LongWord;
1730 packages: LongWord;
1731begin
1732 if dir_dat2db then
1733 begin
1734 OniDataConnection.LoadDatFilePart(fileid, $11C, 4, @packages);
1735 if packages > 0 then
1736 for i := 0 to packages - 1 do
1737 InsertDatLinkToDB(fileid, $120 + i * $124 + $114);
1738 end
1739 else
1740 begin
1741 end;
1742end;
1743
1744
1745
1746
1747procedure WMMB(fileid: LongWord; dir_dat2db: Boolean);
1748var
1749 i: LongWord;
1750 packages: LongWord;
1751begin
1752 if dir_dat2db then
1753 begin
1754 OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
1755 if packages > 0 then
1756 for i := 0 to packages - 1 do
1757 InsertDatLinkToDB(fileid, $20 + i * 4);
1758 end
1759 else
1760 begin
1761 end;
1762end;
1763
1764
1765
1766
1767procedure WPGE(fileid: LongWord; dir_dat2db: Boolean);
1768begin
1769 if dir_dat2db then
1770 begin
1771 InsertDatLinkToDB(fileid, $08);
1772 InsertDatLinkToDB(fileid, $0C);
1773 end
1774 else
1775 begin
1776 end;
1777end;
1778}
1779
1780
1781{
1782procedure InsertHandler(ext: String; needed: Boolean; handler: THandler);
1783begin
1784 SetLength(ConvertHandlers, Length(ConvertHandlers) + 1);
1785 ConvertHandlers[High(ConvertHandlers)].Ext := ext;
1786 ConvertHandlers[High(ConvertHandlers)].needed := needed;
1787 ConvertHandlers[High(ConvertHandlers)].handler := handler;
1788end;
1789}
1790begin
1791{ InsertHandler('ABNA', False, nil);
1792 // InsertHandler('AGDB',True,AGDB);
1793 InsertHandler('AGDB', False, nil);
1794 InsertHandler('AGQC', False, nil);
1795 InsertHandler('AGQG', False, nil);
1796 InsertHandler('AGQR', False, nil);
1797 InsertHandler('AISA', True, AISA);
1798 InsertHandler('AITR', False, nil);
1799 InsertHandler('AKAA', False, nil);
1800 InsertHandler('AKBA', False, nil);
1801 InsertHandler('AKBP', False, nil);
1802 InsertHandler('AKDA', False, nil);
1803 InsertHandler('AKEV', True, AKEV);
1804 InsertHandler('AKOT', True, AKOT);
1805 InsertHandler('AKVA', False, nil);
1806 InsertHandler('BINA', False, nil);
1807 InsertHandler('CBPI', True, CBPI);
1808 InsertHandler('CBPM', True, CBPM);
1809 InsertHandler('CONS', True, CONS);
1810 InsertHandler('CRSA', True, CRSA);
1811 InsertHandler('DOOR', True, DOOR);
1812 InsertHandler('DPGE', True, DPGE);
1813 InsertHandler('ENVP', False, nil);
1814 InsertHandler('FILM', False, nil);
1815 InsertHandler('HPGE', True, HPGE);
1816 InsertHandler('IDXA', False, nil);
1817 InsertHandler('IGHH', True, IGHH);
1818 InsertHandler('IGPA', True, IGPA);
1819 InsertHandler('IGPG', True, IGPG);
1820 InsertHandler('IGSA', True, IGSA);
1821 InsertHandler('IMPT', True, IMPT);
1822 InsertHandler('IPGE', True, IPGE);
1823 InsertHandler('KEYI', True, KEYI);
1824 InsertHandler('M3GA', True, M3GA);
1825 InsertHandler('M3GM', True, M3GM);
1826 InsertHandler('MTRL', True, MTRL);
1827 InsertHandler('OBAN', False, nil);
1828 InsertHandler('OBDC', True, OBDC);
1829 InsertHandler('OBOA', True, OBOA);
1830 InsertHandler('OFGA', True, OFGA);
1831 InsertHandler('ONCC', True, ONCC);
1832 InsertHandler('ONCP', False, nil);
1833 InsertHandler('ONCV', True, ONCV);
1834 InsertHandler('ONFA', False, nil);
1835 InsertHandler('ONGS', False, nil);
1836 InsertHandler('ONIA', False, nil);
1837 InsertHandler('ONLD', False, nil);
1838 InsertHandler('ONLV', True, ONLV);
1839 InsertHandler('ONMA', False, nil);
1840 InsertHandler('ONOA', True, ONOA);
1841 InsertHandler('ONSA', False, nil);
1842 InsertHandler('ONSK', True, ONSK);
1843 InsertHandler('ONTA', False, nil);
1844 InsertHandler('ONVL', True, ONVL);
1845 InsertHandler('ONWC', True, ONWC);
1846 InsertHandler('OPGE', True, OPGE);
1847 InsertHandler('OSBD', False, nil);
1848 InsertHandler('OTIT', False, nil);
1849 InsertHandler('OTLF', False, nil);
1850 InsertHandler('PLEA', False, nil);
1851 InsertHandler('PNTA', False, nil);
1852 InsertHandler('PSPC', True, PSPC);
1853 InsertHandler('PSPL', True, PSPL);
1854 InsertHandler('PSUI', True, PSUI);
1855 InsertHandler('QTNA', False, nil);
1856 InsertHandler('SNDD', False, nil);
1857 InsertHandler('STNA', True, STNA);
1858 InsertHandler('SUBT', False, nil);
1859 InsertHandler('TRAC', True, TRAC);
1860 InsertHandler('TRAM', True, TRAM);
1861 InsertHandler('TRAS', True, TRAS);
1862 InsertHandler('TRBS', True, TRBS);
1863 InsertHandler('TRCM', True, TRCM);
1864 InsertHandler('TRGA', True, TRGA);
1865 InsertHandler('TRGE', True, TRGE);
1866 InsertHandler('TRIA', False, nil);
1867 InsertHandler('TRIG', True, TRIG);
1868 InsertHandler('TRMA', True, TRMA);
1869 InsertHandler('TRSC', True, TRSC);
1870 InsertHandler('TRTA', False, nil);
1871 InsertHandler('TSFF', True, TSFF);
1872 InsertHandler('TSFL', False, nil);
1873 InsertHandler('TSFT', True, TSFT);
1874 InsertHandler('TSGA', False, nil);
1875 InsertHandler('TSTR', False, nil);
1876 InsertHandler('TURR', True, TURR);
1877 InsertHandler('TXAN', True, TXAN);
1878 InsertHandler('TXCA', False, nil);
1879 InsertHandler('TXMA', True, TXMA);
1880 InsertHandler('TXMB', True, TXMB);
1881 InsertHandler('TXMP', True, TXMP);
1882 InsertHandler('TXTC', True, TXTC);
1883 InsertHandler('VCRA', False, nil);
1884 InsertHandler('WMCL', True, WMCL);
1885 InsertHandler('WMDD', True, WMDD);
1886 InsertHandler('WMM_', False, nil);
1887 InsertHandler('WMMB', True, WMMB);
1888 InsertHandler('WPGE', True, WPGE);
1889}end.
Note: See TracBrowser for help on using the repository browser.