package rpn.basic;

import java.util.Hashtable;
import rpn.StringInput;
import rpn.ItemInput;
import rpn.Calculator;

public class LoadItem extends Item {
	
	public LoadItem(Calculator ca) {
		super(ca);
		ca.systemInstall(this);
	}
	
	public void exec() {
		if (ca.check(1)) {
			Item a = (Item) ca.pop();
			if (a instanceof StringItem) {
				String s = ((StringItem) a).s;
				s = ca.load(s);
				if (s != null) {
					// make s the new input
					ItemInput ip = new ItemInput(ca.it);
					ip.setCalculator(ca);
					StringInput in = new StringInput(s);
					ip.setInput(in);
					ca.pushExec(ip);
				} else {
					ca.error(this, CalcErr.FileNotFound);
				}
			} else if (a instanceof LiteralItem) {
				String s = ((LiteralItem) a).s;
				Item x = ca.lookup(s);
				if (x != null) {
					ca.push(x);
				} else {
					ca.error(this, CalcErr.Type);
				}
			} else {
				ca.error(this, CalcErr.Type);
			}
		} else {
			ca.error(this, CalcErr.Underflow);
		}
	}
	
	public String toString() {
		return("load");
	}
}