import java.awt.Button; import java.awt.BorderLayout; import java.applet.Applet; import java.awt.Color; import java.awt.Event; import java.lang.Thread; import logo.ui.TurtleGraphicsPanel; import logo.lang.Interpreter; import logo.lang.LogoSub; import java.net.URL; import java.net.URLConnection; import java.io.DataInputStream; import java.io.InputStream; public class rLogoRuntime extends Applet { TurtleGraphicsPanel t; RuntimeInterpreter i; String rLogoFile; boolean appIsPaused; public void init() { resize(600,600); t = new TurtleGraphicsPanel(); setLayout(new BorderLayout()); add("Center",t); rLogoFile=readFile(getParameter("SRC")); } public void start() { t.clearScreen(); t.repaint(); if (i!=null) { i.stop(); } i=new RuntimeInterpreter(t); i.start(); i.load(rLogoFile); appIsPaused=false; } public void stop() { i.stop(); i=null; appIsPaused=true; } public boolean mouseDown(Event e, int x, int y) { //originally, the thread suspend() & resume() methods //were used instead of start() & stop(); however, //repeated use of these methods seems to cause problems //on some platforms. if (appIsPaused) { start(); } else { stop(); } return true; } public String readFile(String fileName) { String result=new String(); DataInputStream dat; try { dat = new DataInputStream( new URL(getDocumentBase(),fileName).openStream() ); } catch (java.net.MalformedURLException e) { result="write (couldn't open remote file)"; return result; } catch (java.io.IOException e) { result="write (io error)"; return result; } try { String nextLine = dat.readLine(); while ( nextLine!=null ) { result=result+nextLine+"\n"; nextLine=dat.readLine(); } } catch (java.io.IOException e) { result="write (io error)"; } return result; } } final class RuntimeInterpreter extends Interpreter { TurtleGraphicsPanel tg; public RuntimeInterpreter(TurtleGraphicsPanel t) { tg=t; } public void wrapString(String s) { } public void forward(int i) { tg.forward(i); } public void backward(int i) { tg.backward(i); } public void turnLeft(int i) { tg.turnLeft(i); } public void turnRight(int i) { tg.turnRight(i); } public void penUp() { tg.penUp(); } public void penDown() { tg.penDown(); } public void showTurtle() { tg.showTurtle(); } public void hideTurtle() { tg.hideTurtle(); } public void clearScreen() { tg.clearScreen(); } public void home() { tg.home(); } public void setColor(Color c) { tg.setColor(c); } public void setBackColor(Color c) { tg.setBackColor(c); } public void edit(LogoSub s) { } public void drawString(String s) { tg.drawString(s); } public void setRepaint(boolean b) { tg.setRepaint(b); } public void paint() { tg.repaint(); } public void resetMode() {;} }