source: oup/current/Helper_LevelDB.pas @ 102

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