Index: /oup/current/Global/Data.pas
===================================================================
--- /oup/current/Global/Data.pas	(revision 137)
+++ /oup/current/Global/Data.pas	(revision 138)
@@ -5,5 +5,5 @@
 const
   Version:   String    = 'v0.34a';
-  DBVersion: String    = '0.3';
+  DBVersion: String    = '0.4';
   CrLf:      String[2] = #13 + #10;
 
Index: /oup/current/Helper/LevelDB.pas
===================================================================
--- /oup/current/Helper/LevelDB.pas	(revision 137)
+++ /oup/current/Helper/LevelDB.pas	(revision 138)
@@ -13,7 +13,4 @@
     lbl_estimation: TLabel;
     procedure btn_abortokClick(Sender: TObject);
-  private
-    procedure HandleFile(Ext: String; FileID: Integer);
-    procedure StopConvert;
   public
     procedure CreateDatabase(Source, Target: String);
@@ -28,16 +25,7 @@
 {$R *.dfm}
 uses ABSMain, ABSDecUtil, Main,
-    ConnectionManager, TypeDefs, DataAccess, OniImgClass, Data;
-
-type
-  THandler = procedure(FileID: Integer);
-  TConvertHandler = record
-    Ext:     String[4];
-    Handler: THandler;
-  end;
+    ConnectionManager, TypeDefs, DataAccess, OniImgClass, Data, RawList;
 
 var
-  ConvertHandlers: array of TConvertHandler;
-//  loaded_filename: String;
   Converting:  Boolean = False;
   Abort:       Boolean = False;
@@ -68,5 +56,4 @@
   BeginTime, FileTime: Double;
   Step:     Integer;
-  OniImage:   TOniImage;
   LevelID:    Integer;
   TimeFormat: TFormatSettings;
@@ -106,4 +93,32 @@
     else
       group_progress.Caption := 'Creating Dat (FINISHED)';
+  end;
+
+  procedure StopConvert;
+  begin
+    btn_abortok.Caption := '&Close';
+    btn_abortok.Default := True;
+    converting := False;
+    lbl_estimation.Caption := 'ABORTED';
+    group_progress.Caption := 'Creating Level (ABORTED)';
+
+    Stream_Body.Free;
+    Stream_Names.Free;
+    DatFileStream.Free;
+    RawFileStream.Free;
+    
+    Stream_Dat.Free;
+    Stream_Raw.Free;
+    if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then
+      Stream_Sep.Free;
+    
+    if MessageBox(Self.Handle, PChar('Delete the unfinished level-files?'),
+      PChar('Delete files?'), MB_YESNO) = idYes then
+    begin
+      DeleteFile(target);
+      DeleteFile(AnsiReplaceStr(Target, '.dat', '.raw'));
+      if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then
+        DeleteFile(AnsiReplaceStr(Target, '.dat', '.sep'));
+    end;
   end;
 
@@ -177,5 +192,4 @@
   LevelID  := Connection.LevelNumber;
   LevelID  := (LevelID * 2) * 256 * 256 * 256 + $01;
-  OniImage := TOniImage.Create;
 
   Self.Visible := True;
@@ -421,28 +435,8 @@
   btn_abortok.Default := True;
 
-  OniImage.Free;
-
   converting := False;
 
 //  CloseDataConnection(DataConnections[conIndex]);
 end;
-
-
-
-
-procedure TForm_LevelDB.HandleFile;
-var
-  i: Byte;
-begin
-{  for i := 1 to Length(ConvertHandlers) do
-    if UpperCase(ConvertHandlers[i].Ext) = UpperCase(ext) then
-      if ConvertHandlers[i].needed then
-      begin
-        ConvertHandlers[i].Handler(fileid, dir_dat2db);
-        Break;
-      end
-      else
-        Break;
-}end;
 
 
@@ -452,26 +446,29 @@
 var
   DataBase:  TABSDatabase;
-{
-var
-  DataBase:    TABSDatabase;
-  Query:       TABSQuery;
-  MimeCoder:   TStringFormat_MIME64;
-
-  i, j:     LongWord;
-  temps, temps2: String;
-  Data:     Tdata;
-  absolutebegintime, begintime: Double;
-  step:     Byte;
-  rawlist:  TRawList;
-  extlist:  TExtensionsMap;
-  fileinfo: TFileInfo;
-  timeformat: TFormatSettings;
-
-  conIndex: Integer;
+  Query:     TABSQuery;
+  MimeCoder: TStringFormat_MIME64;
+
+  BeginTime, FileTime: Double;
+  Step:       Integer;
+  LevelID:    Integer;
+  TimeFormat: TFormatSettings;
+
+  ConID:      Integer;
+  Connection: TDataAccess;
+  ConRepMsg:  TStatusMessages;
+
+  FileID:     Integer;
+
+  Strings:    TStrings;
+  i:          Integer;
+  temps:      String;
+  tempi:      Integer;
+  tempb:      Byte;
+  tempdata:   TByteData;
+  FileInfo:   TFileInfo;
+  DatLinks:   TDatLinkList;
+  RawLinks:   TRawDataList;
 const
-  steps: Byte = 4;
-
-
-
+  steps: Byte = 2;
 
   procedure DoStep(stepname: String);
@@ -484,20 +481,75 @@
       group_progress.Caption := 'Creating DB (FINISHED)';
   end;
-}
+
+  procedure StopConvert;
+  begin
+    btn_abortok.Caption := '&Close';
+    btn_abortok.Default := True;
+    converting := False;
+    lbl_estimation.Caption := 'ABORTED';
+    group_progress.Caption := 'Creating DB (ABORTED)';
+    DataBase.Close;
+    if MessageBox(Self.Handle, PChar('Delete the unfinished DB-file?'),
+      PChar('Delete file?'), MB_YESNO) = idYes then
+    begin
+      DeleteFile(target);
+    end;
+end;
+
+
 
 begin
-{  if CreateDataConnection(Source, ODB_Dat) = nil then
-  begin
-    ShowMessage('Could not connect to .dat-file');
+
+  //
+  // FILE EXISTS CHECK FÜR DAT/RAW/SEP!!!
+  //
+
+  TimeFormat.ShortTimeFormat := 'hh:nn:ss';
+  TimeFormat.LongTimeFormat  := 'hh:nn:ss';
+  TimeFormat.TimeSeparator   := ':';
+
+  ConID := ConManager.OpenConnection(Source, ConRepMsg);
+  if not (ConRepMsg in [SM_OK, SM_AlreadyOpened]) then
+  begin
+    ShowMessage('Source-file couldn''t be opened! Aborting' + CrLf + GetOpenMsg(ConRepMsg));
     Exit;
-  end
-  else
-  begin
-    TOniDataDat(OniDataConnection).UnloadWhenUnused := False;
-  end;
-
-  timeformat.LongTimeFormat := 'hh:nn:ss';
-  timeformat.ShortTimeFormat := 'hh:nn:ss';
-  timeformat.TimeSeparator := ':';
+  end else
+    Connection := ConManager.Connection[ConID];
+
+  ConID := ConManager.FileOpened(Target);
+  if ConID >= 0 then
+  begin
+    if MessageBox(Self.Handle, PChar('Destination-file is opened, close it in ' +
+          'order to proceed conversion?'), PChar('Destination-file opened'),
+          MB_YESNO + MB_ICONQUESTION) = ID_YES then
+    begin
+      if Form_Main.CheckConnectionCloseable(ConID) then
+        if not ConManager.CloseConnection(ConID, ConRepMsg) then
+        begin
+          ShowMessage('Couldn''t close destination-file. Aborting');
+          Exit;
+        end;
+    end else begin
+      ShowMessage('Aborting');
+      Exit;
+    end;
+  end;
+
+  if FileExists(Target) then
+  begin
+    if MessageBox(Self.Handle, PChar('Destination-file exists. ' +
+          'Overwrite it?'), PChar('Destination-file exists'),
+          MB_YESNO + MB_ICONWARNING) = ID_YES then
+    begin
+      if not DeleteFile(Target) then
+      begin
+        ShowMessage('Couldn''t delete file. Aborting');
+        Exit;
+      end;
+    end else begin
+      ShowMessage('Aborting');
+      Exit;
+    end;
+  end;
 
   Self.Visible := True;
@@ -508,14 +560,12 @@
   btn_abortok.Caption := '&Abort...';
   btn_abortok.Default := False;
-  loaded_filename := target;
-
-  absolutebegintime := Time;
+
+  BeginTime := Time;
 
   DataBase := TABSDatabase.Create(Self);
-}
   DataBase.MaxConnections := 1;
   DataBase.PageSize := 8112;
   DataBase.PageCountInExtent := 8;
-{
+
   DataBase.DatabaseName := 'OLDB';
   DataBase.DatabaseFileName := target;
@@ -559,56 +609,23 @@
     dbversion + '");';
   Query.ExecSQL;
-  SetLength(Data, Length(OniDataConnection.LevelInfo.Ident));
-  for i := 0 to High(OniDataConnection.LevelInfo.Ident) do
-    Data[i] := OniDataConnection.LevelInfo.Ident[i];
-  temps := CreateHexString(Data, True);
-//  Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("ident","' + temps + '");';
-//  Query.ExecSQL;
+
   Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("lvl","' +
-    IntToStr(OniDataConnection.LevelInfo.LevelNumber) + '");';
+    IntToStr(Connection.LevelNumber) + '");';
   Query.ExecSQL;
-  if OniDataConnection.OSisMAC then
-    Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("os","MAC");'
-  else
-    Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("os","PC");';
+  case Connection.DataOS of
+    DOS_WIN: temps := 'WIN';
+    DOS_WINDEMO: temps := 'WINDEMO';
+    DOS_MAC: temps := 'MAC';
+    DOS_MACBETA: temps := 'MACBETA';
+  end;
+  Query.SQL.Text := 'INSERT INTO globals (name,value) VALUES ("os","' + temps + '");';
   Query.ExecSQL;
-
-  DoStep('Writing extensionslist');
-  progress.Max := Length(OniDataConnection.GetExtensionsList);
-  Application.ProcessMessages;
-
-  extlist := OniDataConnection.GetExtendedExtensionsList;
-  for i := 0 to High(extlist) do
-  begin
-    SetLength(Data, Length(extlist[i].Ident));
-    for j := 0 to High(extlist[i].Ident) do
-      Data[j] := extlist[i].Ident[j];
-    temps := CreateHexString(Data, True);
-    temps2 := extlist[i].Extension[3] + extlist[i].Extension[2] +
-      extlist[i].Extension[1] + extlist[i].Extension[0];
-    Query.SQL.Text := 'INSERT INTO extlist (ext,ident) VALUES ("' +
-      temps2 + '","' + temps + '");';
-    Query.ExecSQL;
-    progress.Position    := i;
-    lbl_progress.Caption := 'Extensions done: ' + IntToStr(i) + '/' +
-      IntToStr(Length(extlist));
-    Application.ProcessMessages;
-    if abort then
-    begin
-      stop_convert;
-      Exit;
-    end;
-  end;
-  lbl_progress.Caption := '';
 
   progress.Position      := 0;
   lbl_progress.Caption   := 'Files done: ' + IntToStr(0) + '/' + IntToStr(
-    OniDataConnection.GetFilesCount);
+    Connection.GetFileCount);
   lbl_estimation.Caption := 'Estimated finishing time: unknown';
 
-  DoStep('Loading .dat into memory');
-  Application.ProcessMessages;
-
-  progress.Max := OniDataConnection.GetFilesCount;
+  progress.Max := Connection.GetFileCount;
   begintime    := Time;
   DoStep('Writing .dat-fileslist');
@@ -616,34 +633,35 @@
 
   Database.StartTransaction;
-  for i := 0 to OniDataConnection.GetFilesCount - 1 do
-  begin
-    fileinfo := OniDataConnection.GetFileInfo(i);
+  for FileID := 0 to Connection.GetFileCount - 1 do
+  begin
+    fileinfo := Connection.GetFileInfo(FileID);
     if (fileinfo.FileType and $02) = 0 then
     begin
       mimecoder := TStringFormat_MIME64.Create;
-      Data      := OniDataConnection.LoadDatFile(i);
+      Connection.LoadDatFile(FileID, tempdata);
       Query.SQL.Text :=
         'INSERT INTO datfiles (id,extension,name,contenttype,size,data) VALUES (' +
-        IntToStr(i) + ',"' + fileinfo.Extension + '","' + fileinfo.Name + '","' + IntToHex(
+        IntToStr(FileID) + ',"' + fileinfo.Extension + '","' + fileinfo.Name + '","' + IntToHex(
         fileinfo.FileType, 8) + '",' + IntToStr(fileinfo.Size) + ',MimeToBin("' +
-        MimeCoder.StrTo(@Data[0], Length(Data)) + '") );';
+        MimeCoder.StrTo(@tempdata[0], Length(tempdata)) + '") );';
       Query.ExecSQL;
       mimecoder.Free;
 
-      rawlist := OniDataConnection.GetRawList(i);
-      if Length(rawlist) > 0 then
+      RawLinks := Connection.GetRawList(FileID);
+      if Length(RawLinks) > 0 then
       begin
-        for j := 0 to High(rawlist) do
+        for i := 0 to High(RawLinks) do
         begin
-          if rawlist[j].raw_size > 0 then
+          if RawLinks[i].RawSize > 0 then
           begin
-            SetLength(Data, rawlist[j].raw_size);
-            OniDataConnection.LoadRawFile(i, rawlist[j].src_offset, Data);
+            SetLength(tempdata, RawLinks[i].RawSize);
+            Connection.LoadRawFile(FileID, RawLinks[i].SrcOffset, tempdata);
             mimecoder      := TStringFormat_MIME64.Create;
             Query.SQL.Text :=
               'INSERT INTO rawmap (src_id,src_link_offset,sep,size,data) VALUES (' +
-              IntToStr(i) + ',' + IntToStr(rawlist[j].src_offset) + ',' + BoolToStr(
-              rawlist[j].loc_sep) + ',' + IntToStr(rawlist[j].raw_size) + ',MimeToBin("' +
-              MimeCoder.StrTo(@Data[0], rawlist[j].raw_size) + '") );';
+              IntToStr(FileID) + ', ' + IntToStr(RawLinks[i].SrcOffset) + ',' +
+              BoolToStr(RawLinks[i].LocSep) + ', ' +
+              IntToStr(RawLinks[i].RawSize) + ', ' +
+              'MimeToBin("' + MimeCoder.StrTo(@tempdata[0], RawLinks[i].RawSize) + '") );';
             Query.ExecSQL;
             mimecoder.Free;
@@ -653,5 +671,6 @@
             Query.SQL.Text :=
               'INSERT INTO rawmap (src_id,src_link_offset,sep,size) VALUES (' +
-              IntToStr(i) + ',' + IntToStr(rawlist[j].src_offset) + ',' + BoolToStr(rawlist[j].loc_sep) + ',0);';
+              IntToStr(FileID) + ', ' + IntToStr(RawLinks[i].SrcOffset) + ', ' +
+              BoolToStr(RawLinks[i].LocSep) + ', 0);';
             Query.ExecSQL;
           end;
@@ -659,5 +678,16 @@
       end;
 
-      HandleFile(fileinfo.Extension, i, True);
+      DatLinks := Connection.GetDatLinks(FileID);
+      if Length(DatLinks) > 0 then
+      begin
+        for i := 0 to High(DatLinks) do
+        begin
+          Query.SQL.Text :=
+            'INSERT INTO linkmap (src_id, src_link_offset, target_id) VALUES (' +
+            IntToStr(FileID) + ', ' + IntToStr(DatLinks[i].SrcOffset) + ', ' +
+            IntToStr(DatLinks[i].DestID) + ');';
+          Query.ExecSQL;
+        end;
+      end;
     end
     else
@@ -665,22 +695,22 @@
       Query.SQL.Text :=
         'INSERT INTO datfiles (id,extension,name,contenttype,size) VALUES (' +
-        IntToStr(i) + ',"' + fileinfo.Extension + '","' + fileinfo.Name + '","' + IntToHex(
-        fileinfo.FileType, 8) + '",0);';
+        IntToStr(FileID) + ', "' + fileinfo.Extension + '", ' +
+        '"' + fileinfo.Name + '", "' + IntToHex(fileinfo.FileType, 8) + '", 0);';
       Query.ExecSQL;
     end;
-    if ((i mod 100) = 0) and (i > 0) then
+    if ((FileID mod 100) = 0) and (FileID > 0) then
     begin
       Database.Commit(False);
       Database.StartTransaction;
     end;
-    if ((i mod 10) = 0) and (i >= 100) then
+    if ((FileID mod 10) = 0) and (FileID >= 100) then
       lbl_estimation.Caption := 'Estimated time left: ' + TimeToStr(
-        (Time - begintime) / i * (progress.Max - i + 1) * 1.1, timeformat );
-    progress.Position := i;
-    lbl_progress.Caption := 'Files done: ' + IntToStr(i) + '/' + IntToStr(progress.Max);
+        (Time - BeginTime) / FileID * (progress.Max - FileID + 1) * 1.1, timeformat );
+    progress.Position := FileID;
+    lbl_progress.Caption := 'Files done: ' + IntToStr(FileID) + '/' + IntToStr(progress.Max);
     Application.ProcessMessages;
     if abort then
     begin
-      stop_convert;
+      StopConvert;
       Exit;
     end;
@@ -691,5 +721,5 @@
     IntToStr(progress.Max);
 
-  lbl_estimation.Caption := 'FINISHED (duration: ' + TimeToStr(Time - absolutebegintime, timeformat) + ')';
+  lbl_estimation.Caption := 'FINISHED (duration: ' + TimeToStr(Time - BeginTime, timeformat) + ')';
 
   DoStep('FIN');
@@ -699,28 +729,9 @@
   converting := False;
 
-  database.Close;
-  database.Free;
-
-  CloseDataConnection(DataConnections[conIndex]);
-}
+  Query.Close;
+  Query.Free;
+  DataBase.Close;
+  DataBase.Free;
 end;
-
-
-
-
-procedure TForm_LevelDB.StopConvert;
-begin
-{  btn_abortok.Caption := '&Close';
-  btn_abortok.Default := True;
-  converting := False;
-  lbl_estimation.Caption := 'ABORTED';
-  group_progress.Caption := 'Creating DB (ABORTED)';
-  DataBase.Close;
-  if MessageBox(Self.Handle, PChar('Delete the unfinished DB-file?'),
-    PChar('Delete file?'), MB_YESNO) = idYes then
-  begin
-    DeleteFile(loaded_filename);
-  end;
-}end;
 
 
@@ -744,1147 +755,3 @@
 
 
-
-{
-procedure InsertDatLinkToDB(fileid: LongWord; offset: LongWord);
-var
-  link: LongWord;
-begin
-  OniDataConnection.LoadDatFilePart(fileid, offset, 4, @link);
-  if link = 0 then
-    link := $FFFFFFFF
-  else
-    link := link div 256;
-  Query.SQL.Text := 'INSERT INTO linkmap (src_id,src_link_offset,target_id) VALUES (' +
-    IntToStr(fileid) + ',' + IntToStr(offset) + ',' + IntToStr(link) + ');';
-  Query.ExecSQL;
-end;
-
-
-
-
-procedure AISA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  packages: Word;
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
-    if packages > 0 then
-    begin
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * $160 + $28);
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * $160 + $150);
-    end;
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure AKEV(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 16 do
-      InsertDatLinkToDB(fileid, $8 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure AKOT(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 4 do
-      InsertDatLinkToDB(fileid, $8 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure CBPI(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 56 do
-      InsertDatLinkToDB(fileid, $8 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure CBPM(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 18 do
-      InsertDatLinkToDB(fileid, $8 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure CONS(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 1 do
-      InsertDatLinkToDB(fileid, $24 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure CRSA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  packages: LongWord;
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $14, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 1100 + $A0);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure DOOR(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $08);
-    InsertDatLinkToDB(fileid, $10);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure DPGE(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $40);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure HPGE(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $0C);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure IGHH(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $24);
-    InsertDatLinkToDB(fileid, $28);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure IGPA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  links: LongWord;
-  i:     LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @links);
-    if links > 0 then
-      for i := 0 to links - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure IGPG(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 1 do
-      InsertDatLinkToDB(fileid, $1C + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure IGSA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  links: LongWord;
-  i:     LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @links);
-    if links > 0 then
-      for i := 0 to links - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure IMPT(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $10);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure IPGE(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $0C);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure KEYI(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 9 do
-      InsertDatLinkToDB(fileid, $08 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure M3GA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  links: LongWord;
-  i:     LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @links);
-    if links > 0 then
-      for i := 0 to links - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure M3GM(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 6 do
-      InsertDatLinkToDB(fileid, $0C + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure MTRL(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $10);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure OBDC(fileid: LongWord; dir_dat2db: Boolean);
-var
-  packages: Word;
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * $18 + $4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure OBOA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  packages: Word;
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-      begin
-        InsertDatLinkToDB(fileid, $20 + i * 240 + $0);
-        InsertDatLinkToDB(fileid, $20 + i * 240 + $4);
-        InsertDatLinkToDB(fileid, $20 + i * 240 + $8);
-      end;
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure OFGA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  packages: LongWord;
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 12 + $04);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure ONCC(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $28);
-    InsertDatLinkToDB(fileid, $434);
-    InsertDatLinkToDB(fileid, $438);
-    InsertDatLinkToDB(fileid, $43C);
-    InsertDatLinkToDB(fileid, $C3C);
-    InsertDatLinkToDB(fileid, $C40);
-    InsertDatLinkToDB(fileid, $C44);
-    InsertDatLinkToDB(fileid, $C48);
-    InsertDatLinkToDB(fileid, $C88);
-    InsertDatLinkToDB(fileid, $C8C);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure ONCV(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $08);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure ONLV(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 5 do
-      InsertDatLinkToDB(fileid, $48 + i * 4);
-    for i := 0 to 5 do
-      InsertDatLinkToDB(fileid, $64 + i * 4);
-    InsertDatLinkToDB(fileid, $300);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure ONOA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  packages: LongWord;
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 8 + $04);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure ONSK(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $08);
-    InsertDatLinkToDB(fileid, $0C);
-    InsertDatLinkToDB(fileid, $10);
-    InsertDatLinkToDB(fileid, $14);
-    InsertDatLinkToDB(fileid, $18);
-    InsertDatLinkToDB(fileid, $20);
-    InsertDatLinkToDB(fileid, $44);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure ONVL(fileid: LongWord; dir_dat2db: Boolean);
-var
-  packages: LongWord;
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure ONWC(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $28);
-    InsertDatLinkToDB(fileid, $34);
-    InsertDatLinkToDB(fileid, $40);
-    InsertDatLinkToDB(fileid, $54);
-    InsertDatLinkToDB(fileid, $58);
-    InsertDatLinkToDB(fileid, $5C);
-    InsertDatLinkToDB(fileid, $60);
-    InsertDatLinkToDB(fileid, $6FC);
-    InsertDatLinkToDB(fileid, $700);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure OPGE(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $0C);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure PSPC(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $50);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure PSPL(fileid: LongWord; dir_dat2db: Boolean);
-var
-  packages: LongWord;
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 8 + $4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure PSUI(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 43 do
-      InsertDatLinkToDB(fileid, $08 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure STNA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  packages: Word;
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TRAC(fileid: LongWord; dir_dat2db: Boolean);
-var
-  packages: Word;
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $18);
-    OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 12 + 8);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TRAM(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $40);
-    InsertDatLinkToDB(fileid, $44);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TRAS(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $08);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TRBS(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 4 do
-      InsertDatLinkToDB(fileid, $08 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TRCM(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    for i := 0 to 2 do
-      InsertDatLinkToDB(fileid, $5C + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TRGA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-  packages: Word;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TRGE(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $20);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TRIG(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $18);
-    InsertDatLinkToDB(fileid, $24);
-    InsertDatLinkToDB(fileid, $28);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TRMA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-  packages: Word;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TRSC(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-  packages: Word;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1E, 2, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TSFF(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-  packages: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TSFT(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $1C);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TURR(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $60);
-    InsertDatLinkToDB(fileid, $6C);
-    InsertDatLinkToDB(fileid, $74);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TXAN(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-  packages: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TXMA(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-  packages: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TXMB(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-  packages: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TXMP(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $94);
-    InsertDatLinkToDB(fileid, $98);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure TXTC(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $08);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure WMCL(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-  packages: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 8 + $4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure WMDD(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-  packages: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $11C, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $120 + i * $124 + $114);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure WMMB(fileid: LongWord; dir_dat2db: Boolean);
-var
-  i: LongWord;
-  packages: LongWord;
-begin
-  if dir_dat2db then
-  begin
-    OniDataConnection.LoadDatFilePart(fileid, $1C, 4, @packages);
-    if packages > 0 then
-      for i := 0 to packages - 1 do
-        InsertDatLinkToDB(fileid, $20 + i * 4);
-  end
-  else
-  begin
-  end;
-end;
-
-
-
-
-procedure WPGE(fileid: LongWord; dir_dat2db: Boolean);
-begin
-  if dir_dat2db then
-  begin
-    InsertDatLinkToDB(fileid, $08);
-    InsertDatLinkToDB(fileid, $0C);
-  end
-  else
-  begin
-  end;
-end;
-}
-
-
-{
-procedure InsertHandler(ext: String; needed: Boolean; handler: THandler);
-begin
-  SetLength(ConvertHandlers, Length(ConvertHandlers) + 1);
-  ConvertHandlers[High(ConvertHandlers)].Ext     := ext;
-  ConvertHandlers[High(ConvertHandlers)].needed  := needed;
-  ConvertHandlers[High(ConvertHandlers)].handler := handler;
-end;
-}
-begin
-{  InsertHandler('ABNA', False, nil);
-  //  InsertHandler('AGDB',True,AGDB);
-  InsertHandler('AGDB', False, nil);
-  InsertHandler('AGQC', False, nil);
-  InsertHandler('AGQG', False, nil);
-  InsertHandler('AGQR', False, nil);
-  InsertHandler('AISA', True, AISA);
-  InsertHandler('AITR', False, nil);
-  InsertHandler('AKAA', False, nil);
-  InsertHandler('AKBA', False, nil);
-  InsertHandler('AKBP', False, nil);
-  InsertHandler('AKDA', False, nil);
-  InsertHandler('AKEV', True, AKEV);
-  InsertHandler('AKOT', True, AKOT);
-  InsertHandler('AKVA', False, nil);
-  InsertHandler('BINA', False, nil);
-  InsertHandler('CBPI', True, CBPI);
-  InsertHandler('CBPM', True, CBPM);
-  InsertHandler('CONS', True, CONS);
-  InsertHandler('CRSA', True, CRSA);
-  InsertHandler('DOOR', True, DOOR);
-  InsertHandler('DPGE', True, DPGE);
-  InsertHandler('ENVP', False, nil);
-  InsertHandler('FILM', False, nil);
-  InsertHandler('HPGE', True, HPGE);
-  InsertHandler('IDXA', False, nil);
-  InsertHandler('IGHH', True, IGHH);
-  InsertHandler('IGPA', True, IGPA);
-  InsertHandler('IGPG', True, IGPG);
-  InsertHandler('IGSA', True, IGSA);
-  InsertHandler('IMPT', True, IMPT);
-  InsertHandler('IPGE', True, IPGE);
-  InsertHandler('KEYI', True, KEYI);
-  InsertHandler('M3GA', True, M3GA);
-  InsertHandler('M3GM', True, M3GM);
-  InsertHandler('MTRL', True, MTRL);
-  InsertHandler('OBAN', False, nil);
-  InsertHandler('OBDC', True, OBDC);
-  InsertHandler('OBOA', True, OBOA);
-  InsertHandler('OFGA', True, OFGA);
-  InsertHandler('ONCC', True, ONCC);
-  InsertHandler('ONCP', False, nil);
-  InsertHandler('ONCV', True, ONCV);
-  InsertHandler('ONFA', False, nil);
-  InsertHandler('ONGS', False, nil);
-  InsertHandler('ONIA', False, nil);
-  InsertHandler('ONLD', False, nil);
-  InsertHandler('ONLV', True, ONLV);
-  InsertHandler('ONMA', False, nil);
-  InsertHandler('ONOA', True, ONOA);
-  InsertHandler('ONSA', False, nil);
-  InsertHandler('ONSK', True, ONSK);
-  InsertHandler('ONTA', False, nil);
-  InsertHandler('ONVL', True, ONVL);
-  InsertHandler('ONWC', True, ONWC);
-  InsertHandler('OPGE', True, OPGE);
-  InsertHandler('OSBD', False, nil);
-  InsertHandler('OTIT', False, nil);
-  InsertHandler('OTLF', False, nil);
-  InsertHandler('PLEA', False, nil);
-  InsertHandler('PNTA', False, nil);
-  InsertHandler('PSPC', True, PSPC);
-  InsertHandler('PSPL', True, PSPL);
-  InsertHandler('PSUI', True, PSUI);
-  InsertHandler('QTNA', False, nil);
-  InsertHandler('SNDD', False, nil);
-  InsertHandler('STNA', True, STNA);
-  InsertHandler('SUBT', False, nil);
-  InsertHandler('TRAC', True, TRAC);
-  InsertHandler('TRAM', True, TRAM);
-  InsertHandler('TRAS', True, TRAS);
-  InsertHandler('TRBS', True, TRBS);
-  InsertHandler('TRCM', True, TRCM);
-  InsertHandler('TRGA', True, TRGA);
-  InsertHandler('TRGE', True, TRGE);
-  InsertHandler('TRIA', False, nil);
-  InsertHandler('TRIG', True, TRIG);
-  InsertHandler('TRMA', True, TRMA);
-  InsertHandler('TRSC', True, TRSC);
-  InsertHandler('TRTA', False, nil);
-  InsertHandler('TSFF', True, TSFF);
-  InsertHandler('TSFL', False, nil);
-  InsertHandler('TSFT', True, TSFT);
-  InsertHandler('TSGA', False, nil);
-  InsertHandler('TSTR', False, nil);
-  InsertHandler('TURR', True, TURR);
-  InsertHandler('TXAN', True, TXAN);
-  InsertHandler('TXCA', False, nil);
-  InsertHandler('TXMA', True, TXMA);
-  InsertHandler('TXMB', True, TXMB);
-  InsertHandler('TXMP', True, TXMP);
-  InsertHandler('TXTC', True, TXTC);
-  InsertHandler('VCRA', False, nil);
-  InsertHandler('WMCL', True, WMCL);
-  InsertHandler('WMDD', True, WMDD);
-  InsertHandler('WMM_', False, nil);
-  InsertHandler('WMMB', True, WMMB);
-  InsertHandler('WPGE', True, WPGE);
-}end.
+end.
