Index: oup/current/DataAccess/Access_OUP_ADB.pas
===================================================================
--- oup/current/DataAccess/Access_OUP_ADB.pas	(revision 115)
+++ oup/current/DataAccess/Access_OUP_ADB.pas	(revision 116)
@@ -33,4 +33,5 @@
 
     function GetDatLinks(FileID: Integer): TDatLinkList; override;
+    function GetDatLink(FileID, DatOffset: Integer): TDatLink; override;
     function GetRawList(FileID: Integer): TRawDataList; override;
     function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; override;
@@ -47,5 +48,5 @@
 
 uses
-  SysUtils, Data, Functions, ABSDecUtil, DB;
+  SysUtils, Data, Functions, ABSDecUtil, DB, DatLinks;
 
 
@@ -445,4 +446,46 @@
 
 
+
+function TAccess_OUP_ADB.GetDatLink(FileID, DatOffset: Integer): TDatLink;
+begin
+  Result := DatLinksManager.GetDatLink(FConnectionID, FileID, DatOffset);
+  FQuery.SQL.Text := 'SELECT target_id FROM linkmap WHERE src_id = ' + IntToStr(FileID) + ' and src_link_offset = ' + IntToStr(DatOffset) + ';';
+  FQuery.Open;
+  if FQuery.RecordCount > 0 then
+    Result.DestID := FQuery.FieldByName('target_id').AsInteger;
+  FQuery.Close;
+end;
+
+
+function TAccess_OUP_ADB.GetDatLinks(FileID: Integer): TDatLinkList;
+var
+  i: Integer;
+  SrcOffset, DestID: Integer;
+begin
+  Result := DatLinksManager.GetDatLinks(FConnectionID, FileID);
+  if Length(Result) > 0 then
+  begin
+    FQuery.SQL.Text := 'SELECT src_link_offset, target_id FROM linkmap WHERE src_id = ' + IntToStr(FileID) + ' ORDER BY src_link_offset ASC;';
+    FQuery.Open;
+    if FQuery.RecordCount > 0 then
+    begin
+      repeat
+        SrcOffset := FQuery.FieldByName('src_link_offset').AsInteger;
+        DestID := FQuery.FieldByName('target_id').AsInteger;
+        for i := 0 to High(Result) do
+          if Result[i].SrcOffset = SrcOffset then
+            Break;
+        if i < Length(Result) then
+          Result[i].DestID := DestID
+        else
+          Result[i].DestID := -1;
+        FQuery.Next;
+      until FQuery.EOF;
+    end;
+    FQuery.Close;
+  end;
+end;
+
+
 function TAccess_OUP_ADB.GetRawList(FileID: Integer): TRawDataList;
 var
Index: oup/current/DataAccess/Access_OniArchive.pas
===================================================================
--- oup/current/DataAccess/Access_OniArchive.pas	(revision 115)
+++ oup/current/DataAccess/Access_OniArchive.pas	(revision 116)
@@ -35,4 +35,5 @@
 
     function GetDatLinks(FileID: Integer): TDatLinkList; override;
+    function GetDatLink(FileID, DatOffset: Integer): TDatLink; override;
     function GetRawList(FileID: Integer): TRawDataList; override;
     function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; override;
@@ -51,5 +52,5 @@
 
 uses
-  SysUtils, StrUtils, Data, Functions, RawList;
+  SysUtils, StrUtils, Data, Functions, RawList, DatLinks;
 
 
@@ -398,4 +399,37 @@
 
 
+function TAccess_OniArchive.GetDatLink(FileID, DatOffset: Integer): TDatLink;
+var
+  link: Integer;
+begin
+  Result := DatLinksManager.GetDatLink(FConnectionID, FileID, DatOffset);
+  LoadDatFilePart(fileid, Result.SrcOffset, 4, @link);
+  if link > 0 then
+    Result.DestID := link div 256
+  else
+    Result.DestID := -1;
+end;
+
+
+function TAccess_OniArchive.GetDatLinks(FileID: Integer): TDatLinkList;
+var
+  i: Integer;
+  link: Integer;
+begin
+  Result := DatLinksManager.GetDatLinks(FConnectionID, FileID);
+  if Length(Result) > 0 then
+  begin
+    for i := 0 to High(Result) do
+    begin
+      LoadDatFilePart(fileid, Result[i].SrcOffset, 4, @link);
+      if link > 0 then
+        Result[i].DestID := link div 256
+      else
+        Result[i].DestID := -1;
+    end;
+  end;
+end;
+
+
 function TAccess_OniArchive.GetRawList(FileID: Integer): TRawDataList;
 begin
Index: oup/current/DataAccess/DataAccess.pas
===================================================================
--- oup/current/DataAccess/DataAccess.pas	(revision 115)
+++ oup/current/DataAccess/DataAccess.pas	(revision 116)
@@ -45,4 +45,5 @@
 
     function GetDatLinks(FileID: Integer): TDatLinkList; virtual; abstract;
+    function GetDatLink(FileID, DatOffset: Integer): TDatLink; virtual; abstract;
     function GetRawList(FileID: Integer): TRawDataList; virtual; abstract;
     function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; virtual; abstract;
