anchor.diff:    while ignorable do
       if inp <= length(src) then inc(inp)
       else begin refill; inp := 0; end;
  -  token := '';
  -  repeat token := token + src[inp]; inc(inp)
  +  result := '';
  +  repeat result := result + src[inp]; inc(inp)
     until ignorable or (inp > length(src));
   end;
   
   procedure TImpShellApp.Refill;
  -begin
  -  repeat write('> '); readln(src)
  -  until length(src) > 0;
  -end;
  +  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
  +    if imp.msg <> '' then writeln(imp.msg);
  +    imp.msg := '';
  +  end;
   
   begin
   end.
  
positive.code: interface uses gqueue, classes, custapp;
  
  const
    tokLen = 15;
  type
    TTokStr   = string[toklen];
    address   = 0..65535;
    cardinal  = address;
    integer   = int32;
    thunk	    = procedure of object;
  
    TCmdQueue = TQueue<integer>;
  
    TImpForth = class (TComponent)
      protected
        msg : string[ 255 ]; // input and output buffers
        refill,       { repopulates 'src' }
        respond : thunk;
      public
  
        constructor Create(aOwner : TComponent); override;
  
        {-- main public inteface --}
        procedure AddOp( const iden : TTokStr; code : thunk );
        procedure Send( s : string );
        procedure Eval;
  
        {-- these might wind up hidden... --}
        procedure pushdat( x:integer );
        procedure pushret( x:integer );
        procedure pass;
        procedure gosub;
        procedure step;
        procedure execute;
        procedure interpret;
        function lookup : boolean;
        procedure notfound;
  
        function IsNumber : boolean;
      end;
  
    TImpShellApp = class (TCustomApplication)
      public
        src  : string[255];
        imp  : TImpForth;
        procedure Initialize; override;
        procedure AddOp( const iden : TTokStr; code : thunk );
        procedure DoRun; override;
        procedure Welcome; virtual;
        procedure GetNext; virtual;
        procedure Refill; virtual;
        procedure Respond; virtual;
      end;
  
  
  const
    prim	 = 0;
    quit	 : integer = -1;
  
  type
    TWord	 = record
      // prev : address;
      word : TTokStr;
  
negative.code: {-- TImpShellApp ----------------------------------------------}
  
  procedure TImpShellApp.Initialize;
    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
        imp.Eval(NextToken);
        Respond
      until terminated;
    end;
  
  procedure TImpShellApp.Welcome;
    begin
      writeln(brand, ' ', verMaj, '.', verMin);
    end;
  
  function TImpShellApp.NextToken : TTokStr;
    function ignorable : boolean;
    begin
      ignorable := (inp > length(src)) or (src[inp] <= ' ')
  