source: oup/current/Helper_LevelDB.pas @ 46

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