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

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