anchor.diff:      for i := 0 to self.length -1 do writeln(txt, self[i]);
       close( txt );
     end;
  ++
  +{ TStrings conversion routines (.strings property) }
  +
  +procedure TBuffer.LoadFromStrings( strings : TStrings );
  +  var line: string;
  +  begin
  +    for line in strings do self.AddLine(line);
  +  end;
  +
  +function TBuffer.ToStrings : TStrings;
  +  var i : cardinal;
  +  begin
  +    result := TStringList.Create;
  +    for i := 0 to self.length -1 do result.Add(self[i]);
  +  end;
  ++
  +function TBuffer.ToString : string;
  +  var i, len : cardinal;
  +  begin
  +    len := self.length;
  +    if len > 0 then result := self[0] else result := '';
  +    if len > 1 then
  +      for i := 1 to self.length -1 do appendstr(result, self[i]);
  +  end;
  +
  +procedure TBuffer.Clear;
  +  begin
  +    while self.length > 0 do self.DelLine(0)
  +  end;
  + 
   { ITextTile implementation for TBuffer }
   function TBuffer.GetLength : cardinal;
  
positive.code: {$mode delphi}{$i xpc.inc}{$H+}
  unit mnbuf;
  interface uses xpc, rings, tiles, sysutils, fs;
  type
    token = string;
    anchor = TObject;
  
negative.code:   begin
      if fs.exists( path ) then
        begin
          //  need to check for io errors in here
          assign( txt, path );
          reset( txt );
          while not eof( txt ) do begin
            readln( txt, line );
            self.AddLine( line );
          end;
          close( txt );
        end
      else raise EFileNotFound(path)
    end;
  
  procedure TBuffer.SaveToFile( path : string );
    var txt: text; i : cardinal;
    begin
  