package tarau.jinni;
import java.io.Reader;
import java.io.StringReader;
import java.io.IOException;

/**
  Builds Jinni Fluents from Java
  Streams
*/
class CharReader extends Source {
  protected Reader reader;
  CharReader(Reader reader,Prog p) {
    super(p);
    this.reader=reader;
  }   
  CharReader(String f,Prog p) {
    super(p);
    makeReader(f);
  }
  
  CharReader(Term t,Prog p) {
    super(p);
    this.reader=new StringReader(t.toUnquoted());
  }
   
  CharReader(Prog p) {
    this(IO.input,p);
  }
  
  protected void makeReader(String f) {
    this.reader=IO.url_or_file(f);
  }
    
  public Term getElement() {    if(IO.input==reader) {
      String s=IO.promptln(">:");
      if(null==s||s.length()==0) return null;
      return new Const(s);    }    
    if(null==reader) return null;
    int c=-1;
    try {
      c=reader.read();
    }
    catch(IOException e) {
    }
    if(-1==c) {
      stop();
      return null;
    }
    else
      return new Int(c);
  }

  public void stop() {
    if(null!=reader && IO.input!=reader) {
      try {
       reader.close();
      }
      catch(IOException e) {}
      reader=null;
    }
  }
}
