anchor.diff:  
   type
     TEdgeMenu = class (utv.TView)
  -    protected _base : IBase; _node : INode; _index : cardinal;
  -      _edges : TEdges;
  +    protected _base : IBase; _node : INode; _igx, _igy : cardinal;
  +      _edges : TEdges; _cellw : TBytes; _gw, _gh : byte;
       public
         constructor Create( aOwner : TComponent ); override;
         procedure Render; override;
  +      procedure RestoreCursor; override;
         procedure LoadData; virtual; abstract;
         function RenderCell(gx,gy :integer) : TStr; virtual; abstract;
         function count : word;
  
positive.code: function TEdgeMenuO.RenderCell(gx,gy:integer) : TStr;
    begin result := boolstr(gx=0, _edges[gy].rel.s, _edges[gy].obj.s)
    end;
  
  function prepstr(s : string; len : byte) : TStr;
    begin result := rfit(replace(replace(s, ^M, ''), ^J, ''), len)
    end;
  
  procedure TEdgeMenu.Render;
    var gx,gy : word; bar : byte; gh : word = 0;
    begin bg(0); fg('w'); clrscr;
      if _focused then bar := udv.hibar else bar := udv.lobar;
      if assigned( node ) then begin
        LoadData; gh := self.count; _index := xpc.min(_index, gh-1);
        if gh > 0 then for gy := 0 to gh-1 do begin
  	gotoxy(0,gy); if gy = _index then bg(bar) else bg(0);
  	write(prepstr(RenderCell(0,gy), 16));
  	fg('k'); emit('│'); fg('w');
  	write(prepstr(RenderCell(1,gy), 15));
        end;
      end;
      if gh = 0 then begin bg(bar); clreol; end;
    end;
  
  type
  
negative.code:     end;
  
  constructor TEdgeMenu.Create( aOwner : TComponent );
    begin inherited; _w := 32; _h := 8; _igx := 0; _igy := 0;
       _gw := 2;
    end;
  
  function TEdgeMenu.Count : word;
  