pax_global_header00006660000000000000000000000064114254151460014515gustar00rootroot0000000000000052 comment=16cb889993d2b8ca9ceaaadf3df9900559a07768 yydebug-1.1.0/000077500000000000000000000000001142541514600131645ustar00rootroot00000000000000yydebug-1.1.0/META-INF/000077500000000000000000000000001142541514600143245ustar00rootroot00000000000000yydebug-1.1.0/META-INF/MANIFEST.MF000066400000000000000000000001061142541514600157530ustar00rootroot00000000000000Manifest-Version: 1.0 Created-By: 1.4.2_09 (Apple Computer, Inc.) yydebug-1.1.0/jay/000077500000000000000000000000001142541514600137475ustar00rootroot00000000000000yydebug-1.1.0/jay/yydebug/000077500000000000000000000000001142541514600154175ustar00rootroot00000000000000yydebug-1.1.0/jay/yydebug/makefile000066400000000000000000000013211142541514600171140ustar00rootroot00000000000000# jay/yydebug [leaf] v4 = /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Commands JAR = $(v4)/jar JAVAC = $(v4)/javac -classpath ../.. d = jay/yydebug go = yyDebug.class yyDebugAdapter.class yyAnim.class \ yyAnimPanel.class yyInputStream.class yyPrintStream.class \ yyJInputStream.class all: yydebug.jar clean: ; rm -f *.class src.jar doc-files/*.jar dist: all src.jar ; cp yydebug.jar src.jar doc-files distclean: clean ; rm -f yydebug.jar test: all yydebug.jar: $(go) cd ../.. && $(JAR) cf $d/$@ $d/*.class src.jar: $(go:.class=.java) makefile package.html cd ../.. && $(JAR) cf $d/$@ $d/*.java $d/makefile $d/package.html .SUFFIXES: .SUFFIXES: .class .java .java.class: ; $(JAVAC) $*.java yydebug-1.1.0/jay/yydebug/package.html000066400000000000000000000037101142541514600177010ustar00rootroot00000000000000 jay/yydebug supports tracing and animation for a Java-based parser generated by {@link jay}.

Usage

An implementation of {@link jay.yydebug.yyDebug} is passed as an additional argument to yyparse() to trace a Java-based parser generated by {@link jay} with option -t set.

{@link jay.yydebug.yyDebugAdapter} produces one-line messages, by default to standard output. The messages are designed to be filtered by a program such as grep.

{@link jay.yydebug.yyAnim} provides an animation of the parsing process:

Terminal symbols are displayed in the token field as they are read by the parser, state/value stack activities are shown in the stack panel, and a running commentary appears in the comments area. The text area at the bottom simulates a terminal if the flags 1 for standard input and/or 2 for standard and diagnostic output are passed to {@link jay.yydebug.yyAnim}.

The parser is stopped if there is an activity in an area with an activated checkbutton. continue will continue the parsing activities.

Projects

Downloads

@author Axel T. Schreiner. @version 1.1.0, August 2004. yydebug-1.1.0/jay/yydebug/yyAnim$1.class000066400000000000000000000020351142541514600200410ustar00rootroot000000000000002? ! " #$% & '() * +,- ./03 val$systemLjava/lang/Class;this$0Ljay/yydebug/yyAnim;((Ljay/yydebug/yyAnim;Ljava/lang/Class;)VCodeLineNumberTableactionPerformed(Ljava/awt/event/ActionEvent;)V StackMapTable- SourceFile yyAnim.javaEnclosingMethod4 5   6exitjava/lang/Class 7 89java/lang/Objectjava/lang/Integer :; <=java/lang/Exception> $:jay/yydebug/yyAnim$1 InnerClassesjava/awt/event/ActionListenerjay/yydebug/yyAnim'(Ljava/lang/Class;Ljava/lang/String;I)V()VTYPE getMethod@(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;(I)Vjava/lang/reflect/Methodinvoke9(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;java/lang/System '*+*,*Fe0*YSY Y S WM '* I'K/Lj 2 yydebug-1.1.0/jay/yydebug/yyAnim$2.class000066400000000000000000000015101142541514600200370ustar00rootroot0000000000000025     ! "#&'this$0Ljay/yydebug/yyAnim;(Ljay/yydebug/yyAnim;)VCodeLineNumberTableitemStateChanged(Ljava/awt/event/ItemEvent;)V StackMapTable(#) SourceFile yyAnim.javaEnclosingMethod( * +, -. /0) 12 34jay/yydebug/yyAnim$2 InnerClassesjava/lang/Objectjava/awt/event/ItemListenerjay/yydebug/yyAnimjava/awt/event/ItemEvent'(Ljava/lang/Class;Ljava/lang/String;I)V()Vjava/lang/Thread currentThread()Ljava/lang/Thread; eventThreadLjava/lang/Thread;getStateChange()I outputBreakZ    " *+*^^!**++W` a b\% yydebug-1.1.0/jay/yydebug/yyAnim$3.class000066400000000000000000000026521142541514600200500ustar00rootroot000000000000002` . / 01 2 34 35 6 37 ,89 : ,; <= ,> ?@A BCFval$tLjava/awt/TextArea;this$0Ljay/yydebug/yyAnim;*(Ljay/yydebug/yyAnim;Ljava/awt/TextArea;)VCodeLineNumberTableclose()Vwrite([BII)V StackMapTableCG1HIA(I)V SourceFile yyAnim.javaEnclosingMethodJ K   java/lang/String  L MN OP QR S( TU VW XYZ [\ ]^H _java/lang/InterruptedException  jay/yydebug/yyAnim$3 InnerClassesjay/yydebug/yyPrintStream[Bjava/lang/Objectjava/lang/Throwablejay/yydebug/yyAnim'(Ljava/lang/Class;Ljava/lang/String;I)Vjava/awt/TextAreaappend(Ljava/lang/String;)VgetText()Ljava/lang/String;length()IsetCaretPosition outputBreakZindexOf(Ljava/lang/String;)I eventThreadLjava/lang/Thread;java/lang/Thread currentThread()Ljava/lang/Thread;panelLjay/yydebug/yyAnimPanel;wait '*+*,*tu zY+:*** * L B* 8* +*Y:*ç ::\illqlQtww x&yQ|t}y~!"l"#$%&B'(+*YT )*+,-E yydebug-1.1.0/jay/yydebug/yyAnim$4.class000066400000000000000000000021371142541514600200470ustar00rootroot000000000000002F # $ % !& !'() * +,- . /01 2347 val$systemLjava/lang/Class;this$0Ljay/yydebug/yyAnim;((Ljay/yydebug/yyAnim;Ljava/lang/Class;)VCodeLineNumberTable windowClosing(Ljava/awt/event/WindowEvent;)V StackMapTable1 SourceFile yyAnim.javaEnclosingMethod8 9   : ;: <=exitjava/lang/Class > ?@java/lang/Objectjava/lang/Integer AB CDjava/lang/ExceptionE (Ajay/yydebug/yyAnim$4 InnerClassesjava/awt/event/WindowAdapterjay/yydebug/yyAnim'(Ljava/lang/Class;Ljava/lang/String;I)V()VdisposenFramesITYPE getMethod@(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;(I)Vjava/lang/reflect/Methodinvoke9(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;java/lang/System '*+*,*C*dY2*YS  Y Y S WM:=:B} !"6 yydebug-1.1.0/jay/yydebug/yyAnim.class000066400000000000000000000114111142541514600177120ustar00rootroot000000000000002# [ \ [ [       [  [ [     ' ) ' , , , 1 , , 6   =   E [ [ [ [          nFramesIIN ConstantValueOUTpanelLjay/yydebug/yyAnimPanel; eventThreadLjava/lang/Thread; outputBreakZ(Ljava/lang/String;I)VCodeLineNumberTable'(Ljava/lang/Class;Ljava/lang/String;I)V StackMapTablesetStaggeredLocation(Ljava/awt/Component;)Vlex)(IILjava/lang/String;Ljava/lang/Object;)Vshift(III)Vdiscard(II)Vaccept(Ljava/lang/Object;)Verror(Ljava/lang/String;)Vreject()Vpush(ILjava/lang/Object;)Vpop(I)Vreduce(IIILjava/lang/String;I)V SourceFile yyAnim.javajava/lang/System ko k ^_ ij java/awt/Font Monospaced kjava/awt/MenuBar k java/awt/MenuyyAnimjava/awt/MenuItemQuitjay/yydebug/yyAnim$1 InnerClasses k jay/yydebug/yyAnimPanel k efCenter java/awt/Paneljava/awt/BorderLayout kjava/awt/Labelterminal inputNorth terminal i/oterminal outputjava/awt/Checkbox kjay/yydebug/yyAnim$2 k java/awt/TextArea k   jay/yydebug/yyInputStream     setInjava/lang/Classjava/io/InputStream  java/lang/Object java/lang/Exception jay/yydebug/yyAnim$3 ksetOutjava/io/PrintStream setErr Southjay/yydebug/yyAnim$4   }~       _ !_ " jay/yydebug/yyAnimjava/awt/Framejay/yydebug/yyDebugjava/lang/Stringjava/awt/Dimension(Ljava/lang/String;II)V((Ljay/yydebug/yyAnim;Ljava/lang/Class;)VaddActionListener"(Ljava/awt/event/ActionListener;)Vadd((Ljava/awt/MenuItem;)Ljava/awt/MenuItem; (Ljava/awt/Menu;)Ljava/awt/Menu; setMenuBar(Ljava/awt/MenuBar;)V(Ljava/awt/Font;)V)(Ljava/awt/Component;Ljava/lang/Object;)V(Ljava/awt/LayoutManager;)V(Ljava/lang/String;Z)V(Ljay/yydebug/yyAnim;)VaddItemListener (Ljava/awt/event/ItemListener;)Vjava/awt/ColorwhiteLjava/awt/Color; setBackground(Ljava/awt/Color;)VsetFontaddKeyListener(Ljava/awt/event/KeyListener;)V setEditable(Z)V getMethod@(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;java/lang/reflect/Methodinvoke9(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Ljava/io/InputStream;)V*(Ljay/yydebug/yyAnim;Ljava/awt/TextArea;)V(Ljava/io/PrintStream;)VaddWindowListener"(Ljava/awt/event/WindowListener;)Vpack setVisiblejava/awt/ToolkitgetDefaultToolkit()Ljava/awt/Toolkit; getScreenSize()Ljava/awt/Dimension;java/awt/ComponentgetPreferredSizewidthheight setLocation![\] ^_`_abc_adefghij klm" *+n9kom2 *,`*Y : Y : Y :Y:Y*+WW***YZ~FYY:`-- Y!"#$6~%&: 'Y *(Y: #$ )Y**+,Y 2-Y: $ ./ 0~A1Y2:   3 4+56Y7S89Y S:W :  <~_=Y* >: +?6Y@S89Y S:W :  A+B6Y@S89Y S:W :  C*D*EY*+FG*H*I*J.LO;h;;n'?% 5A C)D4E?FMNUO]PcRwT}UVXY\]^ghjk!l.nLpVs\thp qrstuvwx As%` qrstuvwxyz{2 qrstuvwxy|{`{ }~mKLL*MM+N,Ndld h`>  >+Nd +Nd>+O,Odld h`6  6+Od +Od6*Pn*  !-BXf}p-#!m) *-Qn  m' *Rn  m) *-Sn  m& *Tn  !m% *+Un m% *+Vn m$*Wn !m& *,Xn  !m% *Yn !m+*Zn ")=Eyydebug-1.1.0/jay/yydebug/yyAnim.java000066400000000000000000000143611142541514600175350ustar00rootroot00000000000000package jay.yydebug; import java.awt.BorderLayout; import java.awt.Checkbox; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.Label; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.Panel; import java.awt.TextArea; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.InputStream; import java.io.PrintStream; /** delegates messages to a {@link yyAnimPanel} and optionally intercepts standard i/o. This is not {@link java.io.Serializable}.

If the panel is to simulate standard input it must be instantiated before standard input is accessed. Otherwise the reader might be waiting for a different stream. @see java.lang.System#setIn */ public class yyAnim extends Frame implements yyDebug { /** counts instances to exit on last close. */ protected static int nFrames; { ++ nFrames; // new instance } /** trap {@link java.lang.System#in}. */ public static final int IN = 1; /** trap {@link java.lang.System#out}. */ public static final int OUT = 2; /** input, stack, and comments. */ protected yyAnimPanel panel; /** set by the checkbox listener. */ protected Thread eventThread; /** breakpoint, only(!) set in GUI. */ protected boolean outputBreak = false; /** creates and displays the frame. @param io flags to trap standard input, and/or standard and diagnostic output. */ public yyAnim (String title, int io) { this(System.class, title, io); } /** creates and displays the frame. @param system hook to spoof {@link java.lang.System}. @param io flags to trap standard input, and/or standard and diagnostic output. */ public yyAnim (final Class system, String title, int io) { super(title); Font font = new Font("Monospaced", Font.PLAIN, 12); MenuBar mb = new MenuBar(); Menu m = new Menu("yyAnim"); MenuItem mi = new MenuItem("Quit"); mi.addActionListener(new ActionListener() { public void actionPerformed (ActionEvent ae) { try { system.getMethod("exit", new Class[]{ int.class }) .invoke(null, new Object[]{ new Integer(0) }); } catch (Exception e) { System.exit(0); } } }); m.add(mi); mb.add(m); setMenuBar(mb); add(panel = new yyAnimPanel(font), "Center"); if ((io & (IN|OUT)) != 0) { Panel p = new Panel(new BorderLayout()); switch (io) { case IN: p.add(new Label("terminal input"), "North"); break; case OUT: case IN|OUT: Checkbox c; String ct = (io&IN) != 0 ? "terminal i/o" : "terminal output"; p.add(c = new Checkbox(ct, outputBreak), "North"); c.addItemListener(new ItemListener() { public void itemStateChanged (ItemEvent ie) { eventThread = Thread.currentThread(); outputBreak = ie.getStateChange() == ie.SELECTED; } }); } final TextArea t; p.add(t = new TextArea(10, 50), "Center"); t.setBackground(Color.white); t.setFont(font); if ((io&IN) != 0) { yyInputStream in = new yyInputStream(); t.addKeyListener(in); t.setEditable(true); try { system.getMethod("setIn", new Class[]{ InputStream.class }) .invoke(null, new Object[]{ in }); } catch (Exception e) { System.setIn(in); } } if ((io&OUT) != 0) { PrintStream out = new yyPrintStream() { // PrintStream into TextArea public void close () { } public void write (byte b[], int off, int len) { String s = new String(b, off, len); t.append(s); t.setCaretPosition(t.getText().length()); if (outputBreak && s.indexOf("\n") >= 0 && eventThread != null && Thread.currentThread() != eventThread) try { synchronized (panel) { panel.wait(); } } catch (InterruptedException ie) { } } public void write (int b) { write(new byte[] { (byte)b }, 0, 1); } }; try { system.getMethod("setOut", new Class[]{ PrintStream.class }) .invoke(null, new Object[]{ out }); } catch (Exception e) { System.setOut(out); } try { system.getMethod("setErr", new Class[]{ PrintStream.class }) .invoke(null, new Object[]{ out }); } catch (Exception e) { System.setErr(out); } } add(p, "South"); } addWindowListener(new WindowAdapter() { public void windowClosing (WindowEvent we) { dispose(); if (-- nFrames <= 0) try { system.getMethod("exit", new Class[]{ int.class }).invoke(null, new Object[]{ new Integer(0) }); } catch (Exception e) { System.exit(0); } } }); pack(); setStaggeredLocation(this); setVisible(true); } /** try to cascade multiple instances of components. */ public static void setStaggeredLocation (Component c) { Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); Dimension d = c.getPreferredSize(); int x = (screen.width - d.width)/2 + (nFrames-1)*32; if (x < 32) x = 32; else if (x > screen.width-128) x = screen.width-128; int y = (screen.height - d.height)/2 + (nFrames-1)*32; if (y < 32) y = 32; else if (y > screen.height-128) y = screen.height-128; c.setLocation(x, y); } public synchronized void lex (int state, int token, String name, Object value) { panel.lex(state, token, name, value); } public void shift (int from, int to, int errorFlag) { panel.shift(from, to, errorFlag); } public void discard (int state, int token, String name, Object value) { panel.discard(state, token, name, value); } public void shift (int from, int to) { panel.shift(from, to); } public synchronized void accept (Object value) { panel.accept(value); } public void error (String message) { panel.error(message); } public void reject () { panel.reject(); } public synchronized void push (int state, Object value) { panel.push(state, value); } public synchronized void pop (int state) { panel.pop(state); } public synchronized void reduce (int from, int to, int rule, String text, int len) { panel.reduce(from, to, rule, text, len); } } yydebug-1.1.0/jay/yydebug/yyAnimPanel$1.class000066400000000000000000000013111142541514600210150ustar00rootroot000000000000002+    !"this$0Ljay/yydebug/yyAnimPanel;(Ljay/yydebug/yyAnimPanel;)VCodeLineNumberTableitemStateChanged(Ljava/awt/event/ItemEvent;)V StackMapTable#$ SourceFileyyAnimPanel.javaEnclosingMethod# %  &$ '( )*jay/yydebug/yyAnimPanel$1 InnerClassesjava/lang/Objectjava/awt/event/ItemListenerjay/yydebug/yyAnimPaneljava/awt/event/ItemEvent(Ljava/awt/Font;)V()VgetStateChange()I tokenBreakZ    " *+* + P*++W -.R yydebug-1.1.0/jay/yydebug/yyAnimPanel$2.class000066400000000000000000000013261142541514600210240ustar00rootroot000000000000002'    this$0Ljay/yydebug/yyAnimPanel;(Ljay/yydebug/yyAnimPanel;)VCodeLineNumberTableactionPerformed(Ljava/awt/event/ActionEvent;)V StackMapTable!" SourceFileyyAnimPanel.javaEnclosingMethod# $  % &%jay/yydebug/yyAnimPanel$2 InnerClassesjava/lang/Objectjava/awt/event/ActionListenerjava/awt/event/ActionEventjava/lang/Throwablejay/yydebug/yyAnimPanel(Ljava/awt/Font;)V()Vnotify   " *+* 9  k*YM*,çN,- ;<=> yydebug-1.1.0/jay/yydebug/yyAnimPanel$3.class000066400000000000000000000013111142541514600210170ustar00rootroot000000000000002+    !"this$0Ljay/yydebug/yyAnimPanel;(Ljay/yydebug/yyAnimPanel;)VCodeLineNumberTableitemStateChanged(Ljava/awt/event/ItemEvent;)V StackMapTable#$ SourceFileyyAnimPanel.javaEnclosingMethod# %  &$ '( )*jay/yydebug/yyAnimPanel$3 InnerClassesjava/lang/Objectjava/awt/event/ItemListenerjay/yydebug/yyAnimPaneljava/awt/event/ItemEvent(Ljava/awt/Font;)V()VgetStateChange()I stackBreakZ    " *+* E P*++W GHR yydebug-1.1.0/jay/yydebug/yyAnimPanel$4.class000066400000000000000000000013141142541514600210230ustar00rootroot000000000000002+    !"this$0Ljay/yydebug/yyAnimPanel;(Ljay/yydebug/yyAnimPanel;)VCodeLineNumberTableitemStateChanged(Ljava/awt/event/ItemEvent;)V StackMapTable#$ SourceFileyyAnimPanel.javaEnclosingMethod# %  &$ '( )*jay/yydebug/yyAnimPanel$4 InnerClassesjava/lang/Objectjava/awt/event/ItemListenerjay/yydebug/yyAnimPaneljava/awt/event/ItemEvent(Ljava/awt/Font;)V()VgetStateChange()I commentsBreakZ    " *+* N P*++W PQR yydebug-1.1.0/jay/yydebug/yyAnimPanel$Stack.class000066400000000000000000000043001142541514600217230ustar00rootroot000000000000002 ,F +G +HIJ K L +M +NO KPQ KR S T U VW X Y Z[ \ ] ^U _` +a b +c d ef "K "g "h "i "j "k "l "morlevelLjava/awt/GridBagConstraints;fontLjava/awt/Font;panelLjava/awt/Panel;(Ljava/awt/Font;)VCodeLineNumberTablepush(ILjava/lang/Object;)V StackMapTableosIPItpop(I)V()V SourceFileyyAnimPanel.java 3A /0 uvjava/awt/Paneljava/awt/GridBagLayout 3B 3w 12 xyjava/awt/BorderLayoutjava/awt/TextFieldjava/lang/StringBuilder z{ z| }~ 3West x  4s 3Center -. x B A Bjava/awt/GridBagConstraints jay/yydebug/yyAnimPanel$StackStack InnerClassesjava/awt/ScrollPanejava/lang/Objectjava/lang/StringsetSize(II)V(Ljava/awt/LayoutManager;)Vadd*(Ljava/awt/Component;)Ljava/awt/Component;append-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;toString()Ljava/lang/String;(Ljava/lang/String;I)V)(Ljava/awt/Component;Ljava/lang/Object;)V setEditable(Z)Vjava/awt/ColorwhiteLjava/awt/Color; setBackground(Ljava/awt/Color;)VsetFont(Ljava/lang/String;)V*(Ljava/awt/Component;Ljava/lang/Object;I)Vvalidateremove removeAllanchorIfill gridheight gridwidthgridxgridyweightxDjay/yydebug/yyAnimPanel1+,-./012345S+**+*2d**YYZ W6no pq*r785Y Y N- Y YY:*- Y, ,Y:**-*6uw3xJygz~{|9?Z:;<=>KK:;<=>KK?@A5Q=* *69 @B5( *!*6  CB5}M"Y#W $W%&W'(W)*6^ `a!b3cEdLeDEq +npyydebug-1.1.0/jay/yydebug/yyAnimPanel.class000066400000000000000000000104001142541514600206670ustar00rootroot000000000000002   T     T    T    T] T " $ T[ T ) + T + + + +  +    : : : T : : $x $ $Stack InnerClassestokenLjava/awt/TextField;valuecommentsLjava/awt/TextArea;stackLjay/yydebug/yyAnimPanel$Stack; tokenBreakZ stackBreak commentsBreak(Ljava/awt/Font;)VCodeLineNumberTableexplain(Ljava/lang/String;)V StackMapTablelex)(IILjava/lang/String;Ljava/lang/Object;)Vshift(III)Vdiscard(II)Vaccept(Ljava/lang/Object;)Verrorreject()Vpush(ILjava/lang/Object;)Vpop(I)Vreduce(IIILjava/lang/String;I)V SourceFileyyAnimPanel.javajava/awt/BorderLayout cy c _`java/awt/Paneljava/awt/Checkboxtoken cWest jay/yydebug/yyAnimPanel$1 c java/awt/TextField c} XY  d ZYCenterjava/awt/Button continue chEastjay/yydebug/yyAnimPanel$2 North a`jay/yydebug/yyAnimPanel$3jay/yydebug/yyAnimPanel$Stack cd ]^ b`jay/yydebug/yyAnimPanel$4java/awt/TextArea ct [\   h yjava/lang/InterruptedException h java/lang/StringBuilderread gh shift to ,  left to recover on errordiscard token , value go to accept, value |y error message z{pop |}reduce ( ), uncover  () jay/yydebug/yyAnimPaneljay/yydebug/yyDebugjava/lang/Stringjava/lang/Object(Ljava/awt/LayoutManager;)V(Ljava/lang/String;Z)Vadd)(Ljava/awt/Component;Ljava/lang/Object;)V(Ljay/yydebug/yyAnimPanel;)VaddItemListener (Ljava/awt/event/ItemListener;)V setEditable(Z)Vjava/awt/ColorwhiteLjava/awt/Color; setBackground(Ljava/awt/Color;)VsetFontaddActionListener"(Ljava/awt/event/ActionListener;)VgetText()Ljava/lang/String;length()IappendwaitsetTexttoString-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;-(Ljava/lang/Object;)Ljava/lang/StringBuilder;!TUXYZY[\]^_`a`b` cdeC*Y*YY:Y*YN - Y* YY:*Y Z ***+*YZ ***+ YYM ,Y**YY:YY:Y *!YN -"Y*# *$Y+%Z&  YY:Y'*(YN -)Y** *+Y (,Z- *-.*-/*-+0 *f~# ) *6+B0R1g2y3456789@BCDE!J5K>LNMdNpSTUVWX$ghep.*-12 *-34*-+4*( *5M%),6f%)-iUj!kleM*-7*897*:Y;<=-=>?**( *5:CGJ6f5CGLi#Vmnopmonjqre999a*:Y;@=A>?G*:Y;@=AB=AC=>?*:Y;@=AD=>?f 7:_b~i 'sle>"*:Y;E=-=F=G>?f !qte4*:Y;H=A>?f !uveo.*:Y;I=+G>?*&J*! *5M%),6f%)-iljwhe#*K?f xye^*L?*&J*! *5L6f i[j!z{eV*&,M*! *5N6f iWj!|}eu4*:Y;N=AD=>?*&O*! *5M+/26f$+/3irj!~eM*:Y;P=AQ=AR=AS==>?*&O*! *5:CGJ6f3<CGLi JjW*$TV ")yydebug-1.1.0/jay/yydebug/yyAnimPanel.java000066400000000000000000000146451142541514600205220ustar00rootroot00000000000000package jay.yydebug; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Checkbox; import java.awt.Color; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Panel; import java.awt.ScrollPane; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; /** animates messages with a graphical interface. This is not {@link java.io.Serializable}. */ public class yyAnimPanel extends Panel implements yyDebug { /** current token and value. */ protected transient TextField token, value; /** running explanations. */ protected transient TextArea comments; /** state/value stack. */ protected transient Stack stack; /** breakpoints, set in GUI. */ protected transient boolean tokenBreak = true, stackBreak, commentsBreak; public yyAnimPanel (Font font) { super(new BorderLayout()); Button b; Checkbox c; Panel p, q; p = new Panel(new BorderLayout()); p.add(c = new Checkbox("token ", tokenBreak), "West"); c.addItemListener(new ItemListener() { public void itemStateChanged (ItemEvent ie) { tokenBreak = ie.getStateChange() == ie.SELECTED; } }); q = new Panel(new BorderLayout()); q.add(token = new TextField(12), "West"); token.setEditable(false); token.setBackground(Color.white); token.setFont(font); q.add(value = new TextField(24), "Center"); value.setEditable(false); value.setBackground(Color.white); value.setFont(font); p.add(q, "Center"); p.add(b = new Button(" continue "), "East"); b.addActionListener(new ActionListener() { public void actionPerformed (ActionEvent ae) { synchronized (yyAnimPanel.this) { yyAnimPanel.this.notify(); } } }); add(p, "North"); p = new Panel(new BorderLayout()); q = new Panel(new BorderLayout()); q.add(c = new Checkbox("stack", stackBreak), "North"); c.addItemListener(new ItemListener() { public void itemStateChanged (ItemEvent ie) { stackBreak = ie.getStateChange() == ie.SELECTED; } }); q.add(stack = new Stack(font), "Center"); p.add(q, "Center"); q = new Panel(new BorderLayout()); q.add(c = new Checkbox("comments", commentsBreak), "North"); c.addItemListener(new ItemListener() { public void itemStateChanged (ItemEvent ie) { commentsBreak = ie.getStateChange() == ie.SELECTED; } }); q.add(comments = new TextArea(10, 40), "Center"); comments.setEditable(false); comments.setBackground(Color.white); comments.setFont(font); p.add(q, "East"); add(p, "Center"); } /** animates state/value stack. */ protected final static class Stack extends ScrollPane { /** describes one level. */ protected static final GridBagConstraints level = new GridBagConstraints(); static { level.anchor = level.NORTH; level.fill = level.HORIZONTAL; level.gridheight = 1; level.gridwidth = level.REMAINDER; level.gridx = 0; level.gridy = level.RELATIVE; level.weightx = 1.0; } /** font for the entries. */ protected final Font font; /** real display area. */ protected final Panel panel; public Stack (Font font) { super(SCROLLBARS_AS_NEEDED); this.font = font; setSize(50, 100); add(panel = new Panel(new GridBagLayout())); } public void push (int state, Object value) { Panel q = new Panel(new BorderLayout()); TextField t; q.add(t = new TextField(""+state, 5), "West"); t.setEditable(false); t.setBackground(Color.white); t.setFont(font); q.add(t = new TextField(value != null ? value.toString() : ""), "Center"); t.setEditable(false); t.setBackground(Color.white); t.setFont(font); panel.add(q, level, 0); validate(); } public void pop (int len) { for (int n = 0; n < len; ++ n) { panel.remove(0); validate(); // Rhapsody DR2 java crashes if this is outside loop } } public void pop () { panel.removeAll(); validate(); } } /** post a comment. */ protected synchronized void explain (String what) { if (comments.getText().length() > 0) comments.append("\n"); comments.append(what); if (commentsBreak) try { wait(); } catch (InterruptedException ie) { } } public synchronized void lex (int state, int token, String name, Object value) { this.token.setText(name); this.value.setText(value == null ? "" : value.toString()); explain("read "+name); if (tokenBreak && !commentsBreak) try { wait(); } catch (InterruptedException ie) { } } public void shift (int from, int to, int errorFlag) { switch (errorFlag) { default: // normally explain("shift to "+to); break; case 0: case 1: case 2: // in error recovery explain("shift to "+to+", "+errorFlag+" left to recover"); break; case 3: // normally explain("shift to "+to+" on error"); } } public void discard (int state, int token, String name, Object value) { explain("discard token "+name+", value "+value); } public void shift (int from, int to) { explain("go to "+to); } public synchronized void accept (Object value) { explain("accept, value "+value); stack.pop(); if (stackBreak) try { wait(); } catch (InterruptedException ie) { } } public void error (String message) { explain("error message"); } public void reject () { explain("reject"); stack.pop(); if (stackBreak) try { wait(); } catch (InterruptedException ie) { } } public synchronized void push (int state, Object value) { stack.push(state, value); if (stackBreak) try { wait(); } catch (InterruptedException ie) { } } public synchronized void pop (int state) { explain("pop "+state+" on error"); stack.pop(1); if (stackBreak) try { wait(); } catch (InterruptedException ie) { } } public synchronized void reduce (int from, int to, int rule, String text, int len) { explain("reduce ("+rule+"), uncover "+to+"\n("+rule+") "+ text); stack.pop(len); if (stackBreak) try { wait(); } catch (InterruptedException ie) { } } } yydebug-1.1.0/jay/yydebug/yyDebug.class000066400000000000000000000006621142541514600200620ustar00rootroot000000000000002push(ILjava/lang/Object;)Vlex)(IILjava/lang/String;Ljava/lang/Object;)Vshift(III)Vpop(I)Vreject()Vdiscardreduce(IIILjava/lang/String;I)V(II)Vaccept(Ljava/lang/Object;)Verror(Ljava/lang/String;)V SourceFile yyDebug.javajay/yydebug/yyDebugjava/lang/Object    yydebug-1.1.0/jay/yydebug/yyDebug.java000066400000000000000000000036521142541514600177000ustar00rootroot00000000000000package jay.yydebug; /** debugging interface for parsers generated by {@link jay}. For details consult the skeleton files. The interface expects that the scanner can be queried more then once for a value corresponding to a token. */ public interface yyDebug { /** just pushed the state/value stack. @param state current state. @param value current value. */ void push (int state, Object value); /** just called the scanner. @param state current state. @param token just obtained from scanner. @param name of token in grammar. @param value will be obtained from scanner. */ void lex (int state, int token, String name, Object value); /** moving to a new state because of input or error. @param from current state. @param to next state. @param errorFlag value in next state. */ void shift (int from, int to, int errorFlag); /** discarding a state during error recovery. @param state discarded. */ void pop (int state); /** error recovery failed, about to throw yyException. */ void reject (); /** discarding token during error recovery. @param state current state. @param token discarded. @param name of token in grammar. @param value will be obtained from scanner. */ void discard (int state, int token, String name, Object value); /** rule completed, calling action. @param from current state. @param to state to be uncovered. @param rule number of completed right-hand side. @param text text of rule. @param len number of symbols in rule. */ void reduce (int from, int to, int rule, String text, int len); /** moving to a new state following an action. @param from current state. @param to next state. */ void shift (int from, int to); /** parse is successful. @param value to be returned by yyparse(). */ void accept (Object value); /** syntax error. */ void error (String message); } yydebug-1.1.0/jay/yydebug/yyDebugAdapter.class000066400000000000000000000042161142541514600213620ustar00rootroot000000000000002h !> ? @? AB >C D EF G H IJKLMNOPQRSTUVWXYZ[;\]^outLjava/io/PrintStream;(Ljava/io/PrintStream;)VCodeLineNumberTable()Vpush(ILjava/lang/Object;)Vlex)(IILjava/lang/String;Ljava/lang/Object;)Vshift(III)V StackMapTablepop(I)Vdiscardreduce(IIILjava/lang/String;I)V(II)Vaccept(Ljava/lang/Object;)Verror(Ljava/lang/String;)Vreject SourceFileyyDebugAdapter.java %) #$_ %&java/lang/StringBuilder push state `a `b value `c def g: lex state  reading shift from state  to   left to recover on error pop state discard state  token  reduce state  uncover  rule () goto from state  accept value error jay/yydebug/yyDebugAdapterjava/lang/Objectjay/yydebug/yyDebugjava/lang/Systemappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;-(Ljava/lang/Object;)Ljava/lang/StringBuilder;toString()Ljava/lang/String;java/io/PrintStreamprintln! !"#$ %&'* **+(  %)'$*( *+'@$*Y  , ( #,-'J.*Y -  ( -./'EEEy*Y  _*Y    +*Y   ( CF w"z$'0 %3'12'< *Y  ( *+3-'J.*Y -  ( .-/45'S7*Y    ( 264.6'@$*Y  ( 7#878'7*Y+ ( ;<9:'7*Y+ ( ?@;)'& * ( C D<=yydebug-1.1.0/jay/yydebug/yyDebugAdapter.java000066400000000000000000000034061142541514600211760ustar00rootroot00000000000000package jay.yydebug; import java.io.PrintStream; /** writes one-line messages to standard output or a stream. */ public class yyDebugAdapter implements yyDebug { /** message stream. */ protected final PrintStream out; public yyDebugAdapter (PrintStream out) { this.out = out; } public yyDebugAdapter () { this(System.out); } public void push (int state, Object value) { out.println("push\tstate "+state+"\tvalue "+value); } public void lex (int state, int token, String name, Object value) { out.println("lex\tstate "+state+"\treading "+name+"\tvalue "+value); } public void shift (int from, int to, int errorFlag) { switch (errorFlag) { default: // normally out.println("shift\tfrom state "+from+" to "+to); break; case 0: case 1: case 2: // in error recovery out.println("shift\tfrom state "+from+" to "+to +"\t"+errorFlag+" left to recover"); break; case 3: // normally out.println("shift\tfrom state "+from+" to "+to+"\ton error"); break; } } public void pop (int state) { out.println("pop\tstate "+state+"\ton error"); } public void discard (int state, int token, String name, Object value) { out.println("discard\tstate "+state+"\ttoken "+name+"\tvalue "+value); } public void reduce (int from, int to, int rule, String text, int len) { out.println("reduce\tstate "+from+"\tuncover "+to +"\trule ("+rule+") "+text); } public void shift (int from, int to) { out.println("goto\tfrom state "+from+" to "+to); } public void accept (Object value) { out.println("accept\tvalue "+value); } public void error (String message) { out.println("error\t"+message); } public void reject () { out.println("reject"); } } yydebug-1.1.0/jay/yydebug/yyInputStream.class000066400000000000000000000054451142541514600213130ustar00rootroot000000000000002 &EF E %GH E %IJK L M NO PQRS T UV W PX YZ[ \ ]^ _ ` Ya bc d ^ ef g ]h ijkllineLjava/lang/StringBuffer;queueLjava/util/ArrayList;()VCodeLineNumberTable available()I StackMapTable ExceptionsclosereadR([BII)Iskip(J)J keyPressed(Ljava/awt/event/KeyEvent;)VkeyTyped[jmno keyReleased SourceFileyyInputStream.java ,-java/lang/StringBuffer ()java/util/ArrayList *+java/io/IOExceptionclosed ,p qr st[Bn u-java/lang/InterruptedException interrupted vtw xy z{ |-m }~java/awt/TextArea  1 ^D p ^U jay/yydebug/yyInputStreamjava/io/InputStreamjava/awt/event/KeyListenerjava/awt/event/KeyEventjava/lang/Objectjava/lang/Throwable(Ljava/lang/String;)VisEmpty()Zget(I)Ljava/lang/Object;waitremovejava/lang/System arraycopy*(Ljava/lang/Object;ILjava/lang/Object;II)Vset'(ILjava/lang/Object;)Ljava/lang/Object; notifyAll getComponent()Ljava/awt/Component;getText()Ljava/lang/String;java/lang/Stringlengthselect(II)VsetCaretPosition(I)V getKeyChar()Cappend(C)Ljava/lang/StringBuffer; setLengthtoStringgetBytes()[Badd(Ljava/lang/Object;)Z!%&'()*+ ,-.;**Y*Y/!01.W/* Y * * / 2 N3!4-.@* Y */!"#23!51.* Y * *LY * L+(*W!+dM+,,*,W*+3~"/>&'),"*#+-/<0X2Z4c5f7m8v9;2P6 *  3!57. * Y * *:Y * :+*W+d:*W*"/F?@BE"C$D.H>IFKMLXMaNeQnRwSTU2P6  389. /Z:;.D+M,>,,/`abcd<;.}+M+>?S 2 2m* WU,,,A*6*d * ,!,,*W*Y:**"#$W*ç :* /Vjk m@oJpMs^tawjxzy{|}~2. @=  >?=@AB;./CDyydebug-1.1.0/jay/yydebug/yyInputStream.java000066400000000000000000000075721142541514600211320ustar00rootroot00000000000000package jay.yydebug; import java.awt.TextArea; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.InputStream; import java.io.IOException; import java.util.ArrayList; /** used to reroute standard input from a {@link java.awt.TextArea}. Feeds all read methods from listening to typed keys. Should not deadlock because one should generally not read from within the event thread.

While this implementation uses Java generics, code for a non-generic version has simply been commented out. */ public class yyInputStream extends InputStream implements KeyListener { /** line edit buffer. */ protected final StringBuffer line = new StringBuffer(); /** completed lines, ready to be read. Invariant: null after {@link #close}. */ /// protected ArrayList queue = new ArrayList(); protected ArrayList queue = new ArrayList(); public synchronized int available () throws IOException { if (queue == null) throw new IOException("closed"); /// return queue.isEmpty() ? 0 : queue.get(0).length; return queue.isEmpty() ? 0 : ((byte[])queue.get(0)).length; } public synchronized void close () throws IOException { if (queue == null) throw new IOException("closed"); queue = null; } public synchronized int read () throws IOException { if (queue == null) throw new IOException("closed"); while (queue.isEmpty()) try { wait(); } catch (InterruptedException ie) { throw new IOException("interrupted"); } /// byte[] buf = queue.get(0); byte[] buf = (byte[])queue.get(0); switch (buf.length) { case 0: return -1; case 1: queue.remove(0); break; default: byte[] nbuf = new byte[buf.length-1]; System.arraycopy(buf, 1, nbuf, 0, nbuf.length); queue.set(0, nbuf); notifyAll(); // others could be waiting... } return buf[0] & 255; } public synchronized int read(byte[] b, int off, int len) throws IOException { if (queue == null) throw new IOException("closed"); while (queue.isEmpty()) try { wait(); } catch (InterruptedException ie) { throw new IOException("interrupted"); } /// byte[] buf = queue.get(0); byte[] buf = (byte[])queue.get(0); if (buf.length == 0) return -1; if (buf.length <= len) { System.arraycopy(buf, 0, b, off, buf.length); queue.remove(0); return buf.length; } System.arraycopy(buf, 0, b, off, len); byte[] nbuf = new byte[buf.length-len]; System.arraycopy(buf, len, nbuf, 0, nbuf.length); queue.set(0, nbuf); notifyAll(); // others could be waiting... return len; } /** returns 0: cannot skip on a terminal. */ public long skip (long len) { return 0; } /** this one ensures that you can only type at the end. This is executed within the event thread. */ public void keyPressed (KeyEvent ke) { TextArea ta = (TextArea)ke.getComponent(); int pos = ta.getText().length(); ta.select(pos, pos); ta.setCaretPosition(pos); } // BUG: Rhapsody DR2 seems to not send some keys to keyTyped() // e.g. German keyboard + is dropped, but numeric pad + is processed public void keyTyped (KeyEvent ke) { TextArea ta = (TextArea)ke.getComponent(); char ch = ke.getKeyChar(); switch (ch) { case '\n': case '\r': // \n|\r -> \n, release line line.append('\n'); break; case 'D'&31: // ^D: release line ta.append("^D"); ta.setCaretPosition(ta.getText().length()); break; case '\b': // \b: erase char, if any int len = line.length(); if (len > 0) line.setLength(len-1); return; case 'U'&31: // ^U: erase line, if any line.setLength(0); ta.append("^U\n"); ta.setCaretPosition(ta.getText().length()); return; default: line.append(ch); return; } synchronized (this) { queue.add(line.toString().getBytes()); notifyAll(); // there could be several reading threads } line.setLength(0); } public void keyReleased (KeyEvent ke) { } } yydebug-1.1.0/jay/yydebug/yyJInputStream$1.class000066400000000000000000000011661142541514600215460ustar00rootroot000000000000002  this$0Ljay/yydebug/yyJInputStream;(Ljay/yydebug/yyJInputStream;)VCodeLineNumberTable lostOwnershipH(Ljava/awt/datatransfer/Clipboard;Ljava/awt/datatransfer/Transferable;)V SourceFileyyJInputStream.javaEnclosingMethod   jay/yydebug/yyJInputStream$1 InnerClassesjava/lang/Object$java/awt/datatransfer/ClipboardOwnerjay/yydebug/yyJInputStream keyPressed(Ljava/awt/event/KeyEvent;)V()V   " *+* s   t yydebug-1.1.0/jay/yydebug/yyJInputStream.class000066400000000000000000000103501142541514600214140ustar00rootroot000000000000002 ?ab a >cd a >efg h i jk lmno p qr s lt uvw ux uy z {|} ~ h  u  % % >   u     5a 5 5 5  % lineLjava/lang/StringBuffer;queueLjava/util/ArrayList;()VCodeLineNumberTable available()I StackMapTable Exceptionsclosereadn([BII)Iskip(J)J keyPressed(Ljava/awt/event/KeyEvent;)VwkeyTypeddoKey(Ljavax/swing/JTextArea;CZ)V keyReleased SourceFileyyJInputStream.java EFjava/lang/StringBuffer ABjava/util/ArrayList CDjava/io/IOExceptionclosed E [B Fjava/lang/InterruptedException interrupted  F javax/swing/JTextArea J  %java/awt/datatransfer/StringSelection jay/yydebug/yyJInputStream$1 InnerClasses E F   java/lang/String J YZjava/lang/Exception  ^D ^U java/lang/StringBuilder jay/yydebug/yyJInputStreamjava/io/InputStreamjava/awt/event/KeyListenerjava/lang/Objectjava/lang/Throwable(Ljava/lang/String;)VisEmpty()Zget(I)Ljava/lang/Object;waitremovejava/lang/System arraycopy*(Ljava/lang/Object;ILjava/lang/Object;II)Vset'(ILjava/lang/Object;)Ljava/lang/Object; notifyAlljava/awt/event/KeyEvent getComponent()Ljava/awt/Component; getKeyCode isControlDown getToolkit()Ljava/awt/Toolkit;java/awt/ToolkitgetSystemClipboard#()Ljava/awt/datatransfer/Clipboard;getSelectedText()Ljava/lang/String;(Ljay/yydebug/yyJInputStream;)Vjava/awt/datatransfer/Clipboard setContentsM(Ljava/awt/datatransfer/Transferable;Ljava/awt/datatransfer/ClipboardOwner;)Vconsume getContents8(Ljava/lang/Object;)Ljava/awt/datatransfer/Transferable; java/awt/datatransfer/DataFlavor stringFlavor"Ljava/awt/datatransfer/DataFlavor;"java/awt/datatransfer/TransferablegetTransferData6(Ljava/awt/datatransfer/DataFlavor;)Ljava/lang/Object;lengthcharAt(I)CgetTextsetCaretPosition(I)V getKeyChar()Cappend(C)Ljava/lang/StringBuffer; setLength-(Ljava/lang/String;)Ljava/lang/StringBuilder;(C)Ljava/lang/StringBuilder;toStringgetBytes()[Badd(Ljava/lang/Object;)Z!>?@ABCD EFG;**Y*YH!IJGW/* Y * * H  "K NL!MFG@* Y *H&'(KL!NJG* Y * *LY * L+(*W!+dM+,,*,W*+3~"H>+,.1"/#0-4<5X7Z9c:f<m=v>@KPO *  L!NPG * Y * *:Y * :+*W+d:*W*"HFDEGJ"H$I.M>NFPMQXRaSeVnWwXYZKPO  LQRG H_STGA+M+>+~CV?,Y,Y* +!O,*"#$%:6&*,'(+!A Z:,*&6,+)HNjk mo0qMwQxT{l}y~}K 0U#V BWXTG3+M*,+,(HYZG v__* -W+./z+0/++*&+f*16*d2 +3/*2+4/++*&+*-W+5Y6789:/*Y:**;<=W*ç :*2 HV`jw K+ ` # [U\]^TGH_` yydebug-1.1.0/jay/yydebug/yyJInputStream.java000066400000000000000000000134211142541514600212320ustar00rootroot00000000000000package jay.yydebug; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.ClipboardOwner; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.InputStream; import java.io.IOException; import java.util.ArrayList; import javax.swing.JTextArea; /** used to reroute standard input from a {@link javax.swing.JTextArea}. Feeds all read methods from listening to typed keys. Should not deadlock because one should generally not read from within the event thread.

While this implementation avoids Java generics, code for a generic version has simply been commented out. */ public class yyJInputStream extends InputStream implements KeyListener { /** line edit buffer. */ protected final StringBuffer line = new StringBuffer(); /** completed lines, ready to be read. Invariant: null after {@link #close}. */ /// protected ArrayList queue = new ArrayList(); protected ArrayList queue = new ArrayList(); public synchronized int available () throws IOException { if (queue == null) throw new IOException("closed"); /// return queue.isEmpty() ? 0 : queue.get(0).length; return queue.isEmpty() ? 0 : ((byte[])queue.get(0)).length; } public synchronized void close () throws IOException { if (queue == null) throw new IOException("closed"); queue = null; } public synchronized int read () throws IOException { if (queue == null) throw new IOException("closed"); while (queue.isEmpty()) try { wait(); } catch (InterruptedException ie) { throw new IOException("interrupted"); } /// byte[] buf = queue.get(0); byte[] buf = (byte[])queue.get(0); switch (buf.length) { case 0: return -1; case 1: queue.remove(0); break; default: byte[] nbuf = new byte[buf.length-1]; System.arraycopy(buf, 1, nbuf, 0, nbuf.length); queue.set(0, nbuf); notifyAll(); // others could be waiting... } return buf[0] & 255; } public synchronized int read(byte[] b, int off, int len) throws IOException { if (queue == null) throw new IOException("closed"); while (queue.isEmpty()) try { wait(); } catch (InterruptedException ie) { throw new IOException("interrupted"); } /// byte[] buf = queue.get(0); byte[] buf = (byte[])queue.get(0); if (buf.length == 0) return -1; if (buf.length <= len) { System.arraycopy(buf, 0, b, off, buf.length); queue.remove(0); return buf.length; } System.arraycopy(buf, 0, b, off, len); byte[] nbuf = new byte[buf.length-len]; System.arraycopy(buf, len, nbuf, 0, nbuf.length); queue.set(0, nbuf); notifyAll(); // others could be waiting... return len; } /** returns 0: cannot skip on a terminal. */ public long skip (long len) { return 0; } /** this one ensures that you can only type at the end and implements control-C as copy and control-V as paste key if AWTPermission(accessClipboard) is granted. This is executed within the event thread.

BUG: paste should be based on the platform paste key; however, Safari does not send that one to an applet. */ public void keyPressed (KeyEvent ke) { JTextArea ta = (JTextArea)ke.getComponent(); int key = ke.getKeyCode(); if (ke.isControlDown()) try { switch (key) { case KeyEvent.VK_C: // ^C to copy ta.getToolkit().getSystemClipboard() .setContents(new StringSelection(ta.getSelectedText()), new ClipboardOwner() { public void lostOwnership (Clipboard c, Transferable t) { } } ); ke.consume(); break; case KeyEvent.VK_V: // ^V to paste String string = (String)ta.getToolkit().getSystemClipboard() .getContents(this).getTransferData(DataFlavor.stringFlavor); for (int n = 0; n < string.length(); ++ n) doKey(ta, string.charAt(n), true); ke.consume(); break; default: // do not clear selection on control alone if (key < KeyEvent.VK_A || key > KeyEvent.VK_Z) return; } } catch (Exception e) { } // no selection, no access to clipboard, etc. int pos = ta.getText().length(); ta.setCaretPosition(pos); } // BUG: Rhapsody DR2 seems to not send some keys to keyTyped() // e.g. German keyboard + is dropped, but numeric pad + is processed public void keyTyped (KeyEvent ke) { JTextArea ta = (JTextArea)ke.getComponent(); doKey(ta, ke.getKeyChar(), false); } /** process one typed or pasted character. The caret position is not updated for pasting. */ protected void doKey (JTextArea ta, char ch, boolean paste) { switch (ch) { case '\n': case '\r': // \n|\r -> \n, release line line.append('\n'); if (paste) ta.append("\n"); break; case 'D'&31: // ^D: release line ta.append("^D\n"); ta.setCaretPosition(ta.getText().length()); break; case '\b': // \b: erase char, if any int len = line.length(); if (len > 0) line.setLength(len-1); if (paste) ta.append("\b"); return; case 'U'&31: // ^U: erase line, if any line.setLength(0); ta.append("^U\n"); ta.setCaretPosition(ta.getText().length()); // fall through case 'C'&31: // ^C: ignore (used as copy key) case 'V'&31: // ^V: ignore (used as paste key) return; default: line.append(ch); if (paste) ta.append(""+ch); return; } synchronized (this) { queue.add(line.toString().getBytes()); notifyAll(); // there could be several reading threads } line.setLength(0); } public void keyReleased (KeyEvent ke) { } } yydebug-1.1.0/jay/yydebug/yyPrintStream.class000066400000000000000000000054211142541514600213020ustar00rootroot000000000000002h9 : ;< => ? @ A B C D E F G H IJ K LMN OPQRnlLjava/lang/String;()VCodeLineNumberTable checkError()Zcloseflushprint(Z)V(C)V([C)V StackMapTableQQST(D)V(F)V(I)V(J)V(Ljava/lang/Object;)V(Ljava/lang/String;)VUprintlnwrite([BII)V SourceFileyyPrintStream.javajava/io/FilterOutputStream V Wjava/lang/StringBuilder  XY XZ [\ #1 X] X^ X_ X` Xa XbT cd 45 line.separator e fgjay/yydebug/yyPrintStreamjava/io/PrintStream[Cjava/lang/String[B(Ljava/io/OutputStream;)V(Ljava/io/OutputStream;Z)Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(Z)Ljava/lang/StringBuilder;toString()Ljava/lang/String;(C)Ljava/lang/StringBuilder;-(Ljava/lang/Object;)Ljava/lang/StringBuilder;(D)Ljava/lang/StringBuilder;(F)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;(J)Ljava/lang/StringBuilder;getBytes()[Bjava/lang/System getProperty8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;!**Y   !"#$0*Y #%0*Y #&i2*+Y+ Y '[()*(+#,0*Y' #-0*Y# #.0*Y #/0*Y #00*Y+ #1`-++Y M, *,, ,!' R+23 * "3$6*Y #3%6*Y  $3&k4*+Y+  Y  %'\()*(+3,6*Y'  &3-6*Y# '3.6*Y (3/6*Y )306*Y+  *31k4*+Y+ Y  +'\()+(+454.6#  78yydebug-1.1.0/jay/yydebug/yyPrintStream.java000066400000000000000000000042321142541514600211150ustar00rootroot00000000000000package jay.yydebug; import java.io.FilterOutputStream; import java.io.PrintStream; /** used to reroute standard and diagnostic output, auto-flushes. All print methods delegate to the write-buffer method; subclass must implement the write and close methods to route the actual output. */ public abstract class yyPrintStream extends PrintStream { /** line.separator property. */ protected static final String nl = System.getProperty("line.separator", "\n"); /** layered on top of a {@link java.io.FilterOutputStream} which is itself layered on null. Any access would cause a NullPointerException. */ public yyPrintStream () { super(new FilterOutputStream(null), true); // null results in NullPointerException... } public boolean checkError () { return false; } // fake public abstract void close (); public void flush() { } // nothing to do, avoid NullPointerException public void print (boolean b) { print(""+b); } public void print (char c) { print(""+(char)c); } public void print (char[] s) { print(s != null ? ""+s : ""+null); } public void print (double d) { print(""+d); } public void print (float f) { print(""+f); } public void print (int i) { print(""+i); } public void print (long l) { print(""+l); } public void print (Object obj) { print(""+obj); } public void print (String s) { byte[] buf = (s != null ? s : ""+null).getBytes(); if (buf.length > 0) write(buf, 0, buf.length); } public void println () { print(nl); } public void println (boolean b) { print(""+b+nl); } public void println (char c) { print(""+(char)c+nl); } public void println (char[] s) { print(s != null ? s+nl : null+nl); } public void println (double d) { print(""+d+nl); } public void println (float f) { print(""+f+nl); } public void println (int i) { print(""+i+nl); } public void println (long l) { print(""+l+nl); } public void println (Object obj) { print(""+obj+nl); } public void println (String s) { print(s != null ? s+nl : null+nl); } // inherited, not supported public void setError () public abstract void write (byte[] buf, int off, int len); public abstract void write (int b); } yydebug-1.1.0/jay/yydebug/yydebug.jar000066400000000000000000000470011142541514600175670ustar00rootroot00000000000000PK@bw< META-INF/PKPK@bw<META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMu Z(h)f&W+x%irrPKGGPK=bw<jay/yydebug/yyAnim$1.classuSkOP~ZV lc*^/u+ABF)ɈfSFakIM0({:⒝y0pW,Tq? $Pr ty*xb' jlgCkLm:-cmpc"C}oFEvͱ;"l;v Du+v; mV`&]Û ǝX KJbګ!ݏ.Us7l92dNPc]vZUMO5dLCH 9_ Q ɳܻ.FW޾^A$133,} #ۚ TD:zJ^g FRx~EDv/WkQt9}*̓RP$QzN[Ɛ+uh5]oտ"u =Z3d=ZtCW!}K{/xc}>hHiI^PAJ cq9.kHI`E5>yPK|}HPK=bw<jay/yydebug/yyAnim$3.classuTkSW~NAP/Je XE56꒜enN8?:33ھgI=y䯿=p ыHZI-8e4>ǧZLscgpVkƴp5wcܢHi *mgI:5u5H'S+ne$C7\-Um?ws:1Q*H˫ee4f+UFm 3kHb:њ9L9pq#CQh;Zsj]c:,_jT"Wb?CwX Y)\ƌ,-5f \ o0ϱ %o(pS jYz^[c: `ߗT*oPʕ*Cd1m׻VVRmk=)68Lʾ?T8-/0[/J԰= j%j"ՄH5C햪\UiJx@A] קCI_QҡzM ]il: xǯ䷞fGEha* C' J4}qu nDv%F%F#x&}8Hg(J'ݱ5Lpw1?rcF"qfWv#X=u_u3O!-k~|`莛c,F4{񐒙\xTB:K԰uA:c?'YbG911!NuC,nF}gPhw$&3ss|`KQpS8nQ2CQt ccJ19DpcZ7+ _0Q17[^b (VƔmUֲ-A ha~Π`ZldZYҹm%g;]q<.3\՛muaZ30H9g-%K2v441c+_wJ5aJC/kF\NkfsTر|94GX`6DPEY8ű! =csd4H֭J&&em[A c\ i6D0]ɑ}>BCw!gl;qhkDMW({hSJ/h BO|xVj>!4:>#]4p*jk#;',# ⸬P+QA7pf*PKK#`_PK=bw<jay/yydebug/yyAnim.classW x/ٝLB`h@d Ғ A 2C63>VEE-]*Zb}meOڧld͗=w{y;:r"q؄ɸ{y&7JM2|Ydp[MF)Jݏ/(2*e~'X. w˘{XW3HWeT3qP!?Q~Ϭ~]cdnVr@Q۰"hJ-kH&ZiiEiOg/PZMSOع'y+_77PS 9@2CO0#s*jJDD6H rKi=,]N S&}HQS UȫSin?H_8Y ht !&]T3,#wJDUOHeh]l#e+" dE ]OR M,([I6ǰF!D rTQ!*Q\#T ;77CftkFV]G<* q~Ri]*1ESq EL$TEL31STK EI#^WD 弘d6v*U1|\Uv u^|7(؃OQ_k;_no-hׯ.\efrTUv9aԢǤ͠ʧi0Zi@̯TPMuEx5b$"Scك^4LDm6+&AbA$Xj[|"WB(9g}J7_8(T(Y=9Yȍ. Wˡ<EEJ9TCY3T)TˠjCHf0%ajXd1mP3QbXpմY课 %3~s ge1;xVgaI} i,Q+w@~\Npx<+jx0Rlq'T]E^wndSy阮%*;wRE` K'pBYGmQQ3fTgiY-u/qrͥn䡱ԁUgpq!ӮYZY{y9 ٰ 1G(r969c3X_9 ?&MǁtB%cġlr6 `C! ӓd]{e^b^" ݒ6#p!2YН:qb>&035g>w9d|4/*щyMl,D|$xτNtMRM 2*=>aRX}616q[0{6s\FꓣЉl:~$Z>{i'zpf5DG!lB !v ,՟@Z󤕪<\&:թwϸg1IrG-'-Zaun;J lVmYFNXtK"Uֺ\nXSm˷4KP +m'I\E5(F'WxKxn@ō]Tm G>VZU7"q5( pMt[PKPK=bw<jay/yydebug/yyAnimPanel$2.classuR]OA=ӖE 嫈P HB$&-@L|nv`;cv"I47D&{9gf}`sȠ]x111ǐmT2k'zM(ok9ZFTZ-72;)kJn!#ш\GV} cwda1@@Immu':"<ݨܠDS0u'X8F8G7ZOKb=PKPK=bw<jay/yydebug/yyAnimPanel$3.classuRNA=];tB `6q >jL)ڤ(# ovlgMw3hGw&o+\\(;J_nZ2c% t{ ,_egC7)vW+PrpK]'⸈k!_5#8 @_\%?` oQv  ,uUw.rM  \gݎXPKW;ZPK=bw<jay/yydebug/yyAnimPanel$4.classuRMo@},1NEPB"$nglkQ)ʿƹ?̮zȁXxޛy/Oѩ CTp;6h`K=mBŎu|BXY< `:١4*}ΠhZyOPڨi6Pwrrʎ;f-'u&cL2Ucxr/?y ~&!<ΧDi/<7cwM6}eB馊[Pmw𑊻cҰ'Ԍ!a:VуϘJh{U|57 2|=~#тV-"Kn+g4-U5MaZ6+7%l0؇zSr$Ydo6nzOh;>^-Il3)x.RLF&᳻kN#u6h 6K[ع'/L-Uh8;gm/A>;bEv5ĢDo)q61{iaEM0zRcJ5Xh,o b&L\IgM =&AI?++]K9D:޻=q|oh/1+xhxW!ED%x#5[E*"%g!s /P0$#>@6i_+$i~9Bj)dT}JxP`s}[}ZZ}+_㭾ov կ}CKg<) N&q2aS]qٺ+\ū} u{8.1 2NqlR62KxhoLh=ɴxo+WQIo /h/vb#:05Ju֝: {M{}{D^9Wo~9e00p@A0 }(uDG}=:<<& l{:|>4I!}e,x>Q3uan7}PY')C~d9 Xh?1؋~jO/xY3~fxE/tDwh%f5d ɶLjھ=3e7o4q3[NH"kj0Vo1e䪴cٕ*.4JQ\JRu yGd^!J6kZ1O.31ҕ E7RHUzHy'jI) ފ٧.6^eڮfTTv_d'~Moz,F1B$){ = 鴕`!TlGCUmb┕Tq6c(sP-@G|l:jK*F\|'B[tLGGҏ&Ĕ 3bBKԅEWDxW+ 4@x?8}B؏w[Ώ"Lﭬ&9<Rֶ-/e!œYSc=k"|{vIyiynyn낦LmD܆O!α#Įg, 56F:ؚ>Ƹ`49 LK6It -*U%-E )0jڌZ;E4h%nmOr"gKcPMe䟼nK)0K53H+n=! eulR"IEuAytY-;CQ$5ԌQNtDĘVMZ5 ڪ7VnzSVu;0#t)ؓi6{LJ#;iy$_)eL{M,n;R&22Gs8iEݝI4%4VF EJf=媨09ppLtZ9e%dݣgLTD]@p _gDq$]4р?&<_vpʗ'!Q(/SM\oA-׹| Ac|l 8pc r ĕxK\ϫJfch+ѮuCSKav6jI;alю ɘw ) 9,|~Xb7CPL,(/!F"+R1],eP1 {K=h½cj`S@4}^T_!R9#pjOK:e9\ErXǥ $fͻ+Z f b(q2)s_G#i:,]C"IbC>D< '\:?R@5W9n'L9@x(a9b<8S`=,'X}Y C.a%!{)Y9\ºa_N TRlbڒL/ĨZ8oNׂZ_F  KsX/q?},S*:5*t\* ,>phӤ=]kpS1ߤ=Er_"e/ n@V-@+̄3hypNa+E^u}6l^Ϝ}3*s{{PKRtPK;bw<jay/yydebug/yyDebug.classuOAN0-@P "!quL(j"'AkxBM;ڝ;#\G!Mn3>U$ӺT[. z#,x_u˿a)^:[4ucoVnNkhЙ'^*~yuȿ-R5sҺ{xUZccպo*aZ Q2P~#Fp/C0=!xǓ?ٰ7x S\ZG{#vPKsPK ??82,Xt>=zϟ^ú$6tlb#FNwcc]`Kj'a / |,@NO>\_ d*FCj8.fle媓slie5Dղaiz!eѽrU>lW vQ?p*fy?uVRn>RG~Pg*p1 /vUc`݌iiobix>k6<̈Y(Ț蓅m\[*[ հ rRo6eQS4kWkW ,D\-iƼ(Wz1[jȳNج4<]!"dqp)cEuEBRRQJ:'M0}GmYUx]Iy>y>UDuz!=;2hT]8nTdHq9Vl>^'HLYT|fJg sͺ#Tk5YYs*5.s0S utSWhmO. {Z[{}?1|vtkAxk8A\Ha40^pą~)(ՠ4 {Ј=x #rNJ!ݍpaLr) gj0!@I`md8mFrbf-wIjW4#`W*F"3`)qs/iVPo^#]teYSY Ռ0b$E F5;i9z{mRgD6+b aSVHI+tPbEہ|Zqf!!!#". ӟeb)t"1H:ءqytЬ`2hAkYeBCIsLuea)d:ry%2\(5XiXtA^ǫxMu  xoix[;xT9..踈K:gd\1p9qo(MP>"fPni$c")2 < 84:!V ʤǫ!gB3݉qaIps~hwu0ΈDX?hjGSiBe$p`ecq'S9uFݕJSI@|#TܣNZ@RB'd˘l\$ǭS\d!agq#22:ʚl~XSF&tZ$]M+C*"`gYyF,v_Yl a3o V~լ즜q'vrJ:qPtrY}, BW#*Zy҅,ZjD笘eKĀ=RI]7]؆} z!E0LW>pRaA |CZ*V=ı|Jg[he= rX7l8I_[nQ&vwQy497wN;^I' vr y XCy4XH6K1itH6>6WB~5jMrm o^%lˉ6Y"̖.O=Y>eYRz ?_XcvLg)$Xzf%E=>ܟSg9U_M/'I{. ث9E_uk;}Юahȡ4R\_ٕe]rPK_ɆZ% PK@bw<"jay/yydebug/yyJInputStream$1.classQMK@}kcccjU`zUoMѸ)ɦA8zP7~|r T-61cbVdAdױ>6&Rg";In޸*AFG'5U-h+ +F ӿHH=yZ ST+p(f55+}PK`svPK@bw< jay/yydebug/yyJInputStream.classWk\SrIA& ֶ`ł:0t!Lvn[[2f8 Z-Ͷu}XY;ON @)}> )B4'VC{r+tvb@4;r!n!‚qa7b+ =U'=P'\x_Su;< |݅}/!F9MD݄/Vc HڲT9cĦ/dhOiZr#do⌂*Ἂ4(⧸ȈKX"!v0 xW%_34#bru=wN-.h. /ңAq \Wq?STB/qK*>ƢWboTcs ^cŻ*~T 45\o ͟UEh+N{:d|rT (g7lI|Gyײ#KB^+ήqn_eX`i3fpvPu;DeߡE q* aF=OFp,,u$a)i]ekb@KevwRgeyaAԬk̨90I긡Ď+³i~B fgk#|L$p ٻH PZ5*aC;ٗ @\_d;@!UMdӌhB(jy.Bܫp8. bGPo R$T.XLc6(ͽk⾓MoNT>v3>(J`R6ky=CoRI+1AʲZmMV=tB:)m42c[{ReJ"-s qVe*fmFKOIO[f.7S{g_+ULJòA_Ōv؊fR~V?6X! N,c(SRpVUsTLr-YQj1̲7L7KX&[z-Z;`[h[ ]Z9ϕ¶#)XOx s$& ,Y.0I eٟRJ:=(0 rJes//x I}(SF~OV$yGfzJ9dihem8D8c@a)goA!"m|F$;,34\*pLϰhL+g~+"DRm( yQl!i$ [mxֺ g$PKEG i PK=bw<jay/yydebug/yyPrintStream.classVmSU~nt^@mJټC[k `(j 4l6:3~Tg3|QϹlbH8ws}s,ׯX{*W1EK*|G~#2?pXO8|b|+6㉊m(\SO(<ѿ3EZf__* #𭔏 BxR{uh"eܱ;}leS=U{YUiEځVxӲrص^R*xGW/kŲˈ&{Y]y؞/)X˿7 ITd/vnf挵wEL*yC3an׬J>$8|)0)dV(&oO ,7ᐺDGA;AL "0Htըn%'z=S|R)fpr/\-y˞z^#xRvȇSdmUn u+n)'Yu^s^wp-6oXu˨ hSj41ô_Iqz#*=E虌K:}9#67EcvZ,=۴si鰃,tߑ)8$GW84ɑqM:-oKT0L4Iopk}O%4 Q)F~w*R|WPKǡ  PK@bw< META-INF/PK@bw<GG=META-INF/MANIFEST.MFPK=bw<^jay/yydebug/yyAnim$1.classPK=bw<|}Hljay/yydebug/yyAnim$2.classPK=bw<bjay/yydebug/yyAnim$3.classPK=bw