package application.basic; import java.awt.Color; import java.util.Hashtable; import javax.swing.JTextArea; import language.ALisp; import language.CQueue; import language.LispObject; import language.MyNumber; import language.MyString; import application.draw.ALine; import application.draw.DrawFrame; import controlledparts.ControlledFrame; import controlledparts.FrameWithLanguageProcessor; public class Basic extends language.ABasic { Hashtable waitingTable; public LispObject evaluatingList; String results=""; String waitingFunction=""; public void setWaitingFunction(String s){ this.waitingFunction=s; } public void run() { while(!Null(evaluatingList)){ LispObject s=car(evaluatingList); try{ LispObject r=preEval(s,environment); //eval the S expression // this.results=print.print(r); // System.out.println("results="+results); } catch(Exception e){ if(this.gui.stopFlagIsOn()){ this.gui.resetStopFlag(); printArea.append("STOP\n"); break; } } evaluatingList=cdr(evaluatingList); } printArea.append("OK\n"); printArea.setCaretPosition(printArea.getText().length()); me=null; } public synchronized void evalList(LispObject x) { this.evaluatingList=x; start(); } public String getResult(){ return results; } public void setResult(String x){ this.results=x; synchronized(waitingTable){ this.waitingTable.put(waitingFunction,results); } this.waitingFunction=""; // System.out.println("results="+results); } public LispObject applyMiscOperation(LispObject proc, LispObject argl) { LispObject x=super.applyMiscOperation(proc,argl); if(x!=null) return x; if(eq(proc,recSymbol("ex"))){ String appliname=print.print(car(argl)); String command=print.print(second(argl)); ControlledFrame appli=this.basicFrame.lookUp(appliname); String rtn=appli.parseCommand(command); MyString val=new MyString(rtn); return val; } return null; } FrameWithLanguageProcessor basicFrame; public Basic(JTextArea inputArea, JTextArea outputArea, CQueue q, FrameWithLanguageProcessor bf) { super(inputArea, outputArea, q, bf); basicFrame=bf; this.waitingTable=new Hashtable(); } int maxwait=100; public String waitForResult(String x) { System.out.println("...waiting "+x); for(int i=0;i