anchor.diff:    end;
     IMorph = interface (IGroup)
     end;
  -var
  -  world , focus : IMorph;
  -
  -implementation
  --
  -{-- fixed-size data blocks --------}
  -type
  -  Block = array[ 0 .. 1023 ] of byte;
  -  Drive = file of block;
  -
  -{-- variable-sized buffers --------}
  -type
  -  TBytes = GArray<Byte>;
  -
  --
  -{-- display -----------------------}
  -type
  -  Point = object
  -    x, y : integer;
  -  end;
  -
  -  Quad = object( Point )
  -    w, h : integer;
  -    function x2 : integer;
  -    function y2 : integer;
  -  end;
  -
  -function Quad.x2 : integer;
  -  begin
  -    x2 := x + w
  -  end;
  -
  -function Quad.y2 : integer;
  -  begin
  -    y2 := y + h
  -  end;
  --
  -{-- tagged data types -------------}
  -type
  -  TTagged = class(TInterfacedObject, IMessage)
  -    protected
  -      _tag : integer;
  -    public
  -      function GetTag : integer;
  -    end;
  -
  -  TSymbol = class(TTagged)
  -    public
  -      name : string[32];
  -    end;
  -
  -  TToken = class(TTagged)
  -    public
  -      sym : TSymbol;
  -      line, column, span : longint;
  -    end;
  -
  -function TTagged.GetTag : integer;
  -  begin
  -    result := _tag
  -  end;
  -
  --
  -{-- Tuples ---------------------------}
  -type
  -  TypeKind = ( tkSimple, tkTkUnion, tkFunction, tkSchema );
  -  TFieldDef = class;
  -
  -  TTypeDef  = class
  -    public
  -      size : Word;
  -      kind : TypeKind;
  -      numFields : byte;
  -      first : TFieldDef;
  -    end;
  -
  -  TFieldDef = class
  -    public
  -      next : TFieldDef;
  -      name : TSymbol;
  -    end;
  -
  -  TTuple = class
  -    public
  -      meta : TTypeDef;
  -      data : TBytes;
  -    end;
  --
  -{-- tasks ------------------------}
  +
   const
     cmd_quit  =  -1;
     cmd_step  =  -2;
  
positive.code: function TActor.GetActive;  begin  result := _active end;
  function TActor.GetAlive;   begin  result := _alive end;
  
    
  
  constructor TGroup.Create;
  
negative.code:     procedure Add( a : IActor );
      function Handle( msg : IMessage ):boolean; override;
    end;
  
  type
    Point = object
      x, y : integer;
    end;
  
    Quad = object( Point )
      w, h : integer;
      function x2 : integer;
      function y2 : integer;
    end;
  
    TMorph = class (TGroup, IMorph)
      bounds : Quad;
  