%-- try.tex -- \documentclass{article} \usepackage{tex4ht} \begin{document} \input ProTex.sty \AlProTex{java,<<<>>>,list,title,`} \HCode{<APPLET CODE="turtle.class" WIDTH="300" HEIGHT="300" > </APPLET>} \HPage{literate code} A mini-turtle program. \<turtle\><<< import java.applet.*; import java.awt.*; public class turtle extends Applet { Graphics g; `<vars`> `<turtle functions`> public void init() { `<initial state`> `<draw interface`> } public void paint(Graphics g) { this.g = g; `<execute commands`> } public boolean action(Event e,Object o) { `<get command`> repaint(); return true; } } >>> The turtle can move forward without trace, move forward while tracing its path, and rotate. \<turtle functions\><<< void Move(int x, int y){ this.x += x; this.y -= y; } void Move(int r){ x += (int) (r * Math.cos(d)); y -= (int) (r * Math.sin(d)); } void Line(int x, int y){ g.drawLine( this.x, this.y, this.x+x, this.y-y ); Move(x,y); } void Line(int r){ Line( (new Double(r * Math.cos(d))).intValue(), (new Double( r * Math.sin(d) )).intValue() ); } void Rotate(int d){ this.d += d * 3.14 / 180; while( 6.28 < this.d ){ this.d -= 6.28; } while( this.d < 0 ){ this.d += 6.28; } } >>> The text field may be modified by the users. \<vars\><<< Button moveButton, lineButton, clearButton, rotateButton; TextField in; >>> \<draw interface\><<< clearButton = new Button("Clear"); add(clearButton); moveButton = new Button("Move"); add(moveButton); lineButton = new Button("Line"); add(lineButton); rotateButton = new Button("Rotate"); add(rotateButton); in = new TextField(3); add(in); in.setText( "50" ); >>> \<execute commands\><<< int i; x = 150; y = 150; d = 0; for( i=0; i<N; i+=2 ){ switch( command[i] ) { case `<Line op`>:{ Line( command[i+1] ); break; } case `<Move op`>:{ Move( command[i+1] ); break; } case `<Rotate op`>:{ Rotate( command[i+1] ); break; } } } >>> \<get command\><<< if("Clear".equals(o)) { `<initial state`> } else{ if( "Line".equals(o)){ command[N]=`<Line op`>; } if( "Move".equals(o)){ command[N]=`<Move op`>; } if("Rotate".equals(o)){ command[N]=`<Rotate op`>; } String s = new String( in.getText() ); Integer i = new Integer( s ); command[N+1]= i.intValue(); N+=2; } >>> \<vars\><<< int command[] = new int[300]; >>> \<Line op\><<< 1 >>> \<Move op\><<< 2 >>> \<Rotate op\><<< 3 >>> \<initial state\><<< N = 0; >>> \<vars\><<< int N; int x, y; double d; >>> \OutputCode\<turtle\> \csname SysNeeds\endcsname{"javac turtle.java"} \EndHPage{} \end{document}