anchor.diff:  function TActor.GetActive;  begin  result := _active end;
   function TActor.GetAlive;   begin  result := _alive end;
   
  -  
  +
    
   constructor TGroup.Create;
  
positive.code:   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;
  
negative.code:     procedure Draw; override;
    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 -----------------------}
  
  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 ------------------------}
    TMessage = class (TTagged, IMessage)
      sym : TSymbol;
      sender: IActor;
  