// robert bradshaw 11/98public class TuringTape {    private int index;  private char blankChar;  private char[] data;    public TuringTape()         { this(' '); }  public TuringTape(String s) { this(s, 0); }  public TuringTape(String s, int i) {    blankChar=' ';    data=s.toCharArray();    index=i;  }  public TuringTape(char c) {    blankChar=c;    data=new char[25];    for(int i=0; i<data.length; i++) data[i]=blankChar;    index=data.length/2;  }  public TuringTape(String s, char c) {    this(s);    blankChar=c;  }    public char read() {    return data[index];  }    public void write(char c) {    data[index]=c;  }    public void move(char dir) {    if (dir=='l' || dir=='L') index--;    else if (dir=='r' || dir=='R') index++;    //else throw something?    if (index < 0) {      index+=data.length;      char[] newData=new char[2*data.length];      for(int i=0; i<data.length; i++) {        newData[i]=blankChar;        newData[i+data.length]=data[i];      }      data=newData;    }    else if (index >= data.length) {      char[] newData=new char[2*data.length];      for(int i=0; i<data.length; i++) {        newData[i]=data[i];        newData[i+data.length]=blankChar;      }      data=newData;    }  }    public String toString() {    return toString(20);  }  public String toString(int sidelen) {    return new String(getData(sidelen));  }    public char[] getData(int sidelen) { return getData(-sidelen, sidelen); }  public char[] getData(int back, int fwd) {    char[] dispChars=new char[-back+fwd+1];    for(int i=back; i<fwd; i++) {      if (0 <= index+i && index+i < data.length)        dispChars[i-back]=data[index+i];      else dispChars[i-back]=blankChar;    }    return dispChars;  }    }