anchor.diff:  {-- TImpShellApp ----------------------------------------------}
   
   procedure TImpShellApp.Initialize;
  -begin
  -  imp := TImpForth.Create(self);
  -end;
  -
  -procedure TImpShellApp.AddOp( const iden : TTokStr; code : thunk );
  -begin
  -  imp.AddOp(iden, code);
  -end;
  +  begin
  +    imp := TImpForth.Create(self);
  +  end;
  +
  +procedure TImpShellApp.AddOp( const iden : TTokStr; thunk : TThunk );
  +  begin
  +    imp.AddOp(iden, thunk);
  +  end;
   
   procedure TImpShellApp.DoRun;
  -begin
  -  Welcome;
  -  repeat
  -    GetNext;
  -    imp.Eval;
  -    Respond
  -  until terminated;
  -end;
  +  begin
  +    Welcome;
  +    repeat
  +      imp.Eval(NextToken);
  +      Respond
  +    until terminated;
  +  end;
   
   procedure TImpShellApp.Welcome;
  -begin
  -  writeln(brand, ' ', verMaj, '.', verMin);
  -end;
  -
  -procedure TImpShellApp.GetNext;
  +  begin
  +    writeln(brand, ' ', verMaj, '.', verMin);
  +  end;
  +
  +function TImpShellApp.NextToken : TTokStr;
     function ignorable : boolean;
     begin
       ignorable := (inp > length(src)) or (src[inp] <= ' ')
  
positive.code:   while ignorable do
      if inp <= length(src) then inc(inp)
      else begin refill; inp := 0; end;
    token := '';
    repeat token := token + src[inp]; inc(inp)
    until ignorable or (inp > length(src));
  end;
  
  procedure TImpShellApp.Refill;
  begin
    repeat write('> '); readln(src)
    until length(src) > 0;
  end;
  
  procedure TImpShellApp.Respond;
  begin
    if imp.msg <> '' then writeln(imp.msg);
    imp.msg := '';
  end;
  
  begin
  end.
  
negative.code: interface uses gqueue, classes, custapp;
  
  const
    kTokLen = 15;
  type
    address   = 0..65535;
    cardinal  = address;
    integer   = int32;
    TThunk    = procedure of object;
  
    TCmdQueue = TQueue<integer>;
  
    TInnerVM = class  (TComponent)
      protected
        sp, rp : integer;
        ip  : cardinal;
        ram : array[ address  ] of integer;
        ops : array[ 0 .. 255 ] of TThunk;
        numops : cardinal;
      public
        constructor Create(aOwner : TComponent); override;
        function AddOp( thunk : TThunk ): integer;
        procedure PushDat( x:integer );
        procedure PushRet( x:integer );
        procedure Pass;
        procedure GoSub;
        procedure Step;
        procedure Execute;
      end;
  
    TTokStr   = string[kToklen];
  
    TWord	 = record
      // prev : address;
      word : TTokStr;
  