www.pudn.com > z42.rar > Applet1.java


// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov. 
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html 
// Decompiler options: packimports(3) fieldsfirst ansi  
// Source File Name:   Applet1.java 
 
import java.applet.Applet; 
import java.awt.Adjustable; 
import java.awt.Button; 
import java.awt.Canvas; 
import java.awt.CheckboxGroup; 
import java.awt.Component; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.FontMetrics; 
import java.awt.Graphics; 
import java.awt.Label; 
import java.awt.Panel; 
import java.awt.ScrollPane; 
import java.awt.TextComponent; 
import java.awt.TextField; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Enumeration; 
import java.util.EventObject; 
import java.util.Stack; 
import java.util.Vector; 
 
public class Applet1 extends Applet 
    implements ActionListener 
{ 
 
    public ScrollPane lsp; 
    public ScrollPane rsp; 
    public Button begin; 
    public Button next; 
    public Button reset; 
    public TextField tf1; 
    public Adjustable rha; 
    public Adjustable rva; 
    public Adjustable lha; 
    public Adjustable lva; 
    public Label la1; 
    public Panel pa; 
    public int wsize; 
    public int hsize; 
    public Font f; 
    rcanvas4_3 ca2; 
    int height; 
    int width; 
    int sel; 
    int lpheight; 
    int lpwidth; 
    int pheight; 
    int pwidth; 
    String buffer; 
    StringBuffer bufshow; 
    char buf[]; 
    FontMetrics fm; 
    Stack st; 
    Vector vec; 
    int lrightl; 
    int lbottoml; 
    int rightl; 
    int bottoml; 
    int wid; 
    int heig; 
    boolean back; 
    boolean error; 
    boolean end; 
    boolean nowldev; 
    TextField tf2; 
    TextField tf3; 
    Label la2; 
    mycanvas4_3 mc; 
    String tokenseries; 
    TextField textField1; 
    Button my_description; 
    Panel panel1; 
    Panel left_panel; 
    Panel right_panel1; 
    CheckboxGroup Group1; 
    Label label1; 
    java.awt.List list1; 
    Label label2; 
    Label label3; 
    Canvas canvas1; 
 
    public void onclickdesc() 
    { 
        ca2.state = 1; 
        ca2.repaint(); 
    } 
 
    int getparam(String str, char ch2) 
        throws Exception 
    { 
        int j = tokenseries.indexOf(ch2); 
        int k; 
        for(k = 7; k < 12; k++) 
            if(str.equals(mc.strbuf[k])) 
                break; 
 
        if(k > 11 || j < 1) 
            throw new Exception(); 
        else 
            return (k - 6) * 10 + j; 
    } 
 
    public Applet1() 
    { 
        lsp = null; 
        rsp = null; 
        begin = null; 
        next = null; 
        reset = null; 
        tf1 = null; 
        la1 = null; 
        pa = null; 
        ca2 = new rcanvas4_3(this); 
        tf2 = null; 
        tf3 = null; 
        la2 = null; 
        mc = new mycanvas4_3(); 
        tokenseries = " d+*()$"; 
        vec = new Vector(); 
        buf = new char[1024]; 
        rightl = bottoml = 0; 
        lrightl = lbottoml = 0; 
    } 
 
    int drawconclude(Graphics g, int x, int y) 
    { 
        y -= height; 
        for(Enumeration e = vec.elements(); e.hasMoreElements(); g.drawString(e.nextElement().toString(), x, y += height)); 
        return y; 
    } 
 
    public void repaint() 
    { 
        mc.repaint(); 
        ca2.repaint(); 
    } 
 
    public void onclicknext() 
    { 
        ca2.state = 0; 
        try 
        { 
            deal(); 
        } 
        catch(Exception e) 
        { 
            vec.removeAllElements(); 
            error = true; 
        } 
        if(end) 
            next.setEnabled(false); 
        repaint(); 
    } 
 
    public void actionPerformed(ActionEvent ae) 
    { 
        if(ae.getSource() == begin) 
            onclickbegin(); 
        else 
        if(ae.getSource() == next) 
            onclicknext(); 
        else 
        if(ae.getSource() == reset) 
            onclickreset(); 
        else 
        if(ae.getSource() == my_description) 
            onclickdesc(); 
    } 
 
    public void init() 
    { 
        f = new Font("Helvetica", 1, 16); 
        Dimension d1 = getSize(); 
        int wsize = d1.width; 
        int hsize = d1.height; 
        setLayout(null); 
        setSize(800, 600); 
        left_panel = new Panel(); 
        left_panel.setLayout(null); 
        left_panel.setBounds(10, 10, wsize - 300 - (wsize * 2) / 100, (hsize * 99) / 100); 
        mc.setBounds(10, 10, wsize - 320 - (wsize * 2) / 100, 150); 
        add(left_panel); 
        left_panel.add(mc); 
        la2 = new Label("栈"); 
        la2.setBounds(10, 170, 15, 20); 
        left_panel.add(la2); 
        tf2 = new TextField(); 
        tf2.setEditable(false); 
        tf2.setBounds(35, 170, 200, 20); 
        left_panel.add(tf2); 
        la2 = new Label("请输入表达式"); 
        la2.setBounds(10, 200, 80, 20); 
        left_panel.add(la2); 
        tf3 = new TextField(); 
        tf3.setBounds(115, 200, 120, 20); 
        left_panel.add(tf3); 
        tf3.setText("id*(id+id)"); 
        tf2.setText("$E"); 
        tf2.setEditable(false); 
        lsp = new ScrollPane(0); 
        lsp.setBounds(wsize - 270, 0, 260, (hsize * 98) / 100); 
        add(lsp); 
        lsp.add(ca2); 
        Dimension d = lsp.getSize(); 
        sel = -2; 
        error = false; 
        pheight = d.height; 
        pwidth = d.width; 
        d = lsp.getSize(); 
        lpheight = d.height; 
        lpwidth = d.width; 
        end = false; 
        begin = new Button(); 
        begin.setActionCommand("button"); 
        begin.setLabel("开始"); 
        begin.setBounds(10, 230, 108, 24); 
        left_panel.add(begin); 
        begin.addActionListener(this); 
        next = new Button(); 
        next.setActionCommand("button"); 
        next.setLabel("下一步"); 
        next.setBounds(10, 260, 108, 24); 
        next.setEnabled(false); 
        left_panel.add(next); 
        next.addActionListener(this); 
        reset = new Button(); 
        reset.setActionCommand("button"); 
        reset.setLabel("重新开始"); 
        reset.setBounds(10, 290, 108, 24); 
        reset.setEnabled(false); 
        left_panel.add(reset); 
        reset.addActionListener(this); 
        my_description = new Button(); 
        my_description.setActionCommand("button"); 
        my_description.setLabel("使用说明"); 
        my_description.setBounds(10, 320, 108, 24); 
        my_description.addActionListener(this); 
        left_panel.add(my_description); 
    } 
 
    public void onclickbegin() 
    { 
        ca2.state = 0; 
        reset.setEnabled(true); 
        next.setEnabled(true); 
        begin.setEnabled(false); 
        tf3.setEditable(false); 
        buffer = tf3.getText(); 
        buffer.getChars(0, sel = buffer.length(), buf, 0); 
        int j = 0; 
        for(int i = 0; i < sel;) 
            switch(buf[i]) 
            { 
            default: 
                buf[j] = buf[i]; 
                j++; 
                // fall through 
 
            case 9: // '\t' 
            case 10: // '\n' 
            case 13: // '\r' 
            case 32: // ' ' 
                i++; 
                break; 
            } 
 
        if(j == 0 || buf[j - 1] != '$') 
            buf[j++] = '$'; 
        sel = -2; 
        buffer = new String(buf, 0, j); 
        tf3.setText(buffer); 
        try 
        { 
            deal(); 
        } 
        catch(Exception e) 
        { 
            vec.removeAllElements(); 
            error = true; 
        } 
        repaint(); 
    } 
 
    public void onclickreset() 
    { 
        ca2.state = 0; 
        reset.setEnabled(false); 
        begin.setEnabled(true); 
        next.setEnabled(false); 
        tf3.setEditable(true); 
        tf2.setText("$E"); 
        end = false; 
        sel = -2; 
        vec.removeAllElements(); 
        mc.setParam(-1); 
        error = false; 
        repaint(); 
    } 
 
    public void rupdate() 
    { 
        Graphics gg = ca2.getGraphics(); 
        gg.setFont(f); 
        fm = gg.getFontMetrics(); 
        height = fm.getHeight(); 
        width = fm.charWidth('E'); 
        wid = width + 15; 
        heig = height + 23; 
        ca2.setSize(Math.max(rightl, pwidth), Math.max(bottoml, pheight)); 
        Graphics tg = ca2.getGraphics(); 
        tg.setFont(f); 
        tg.clearRect(0, 0, rightl, bottoml); 
        rightl = bottoml = 0; 
        int k1 = height; 
        if(error) 
        { 
            tg.drawString("输入串错误", 10, 20); 
            rightl = fm.stringWidth("输入串错误") + 10; 
            bottoml = 21; 
            next.setEnabled(false); 
            return; 
        } 
        for(Enumeration e = vec.elements(); e.hasMoreElements();) 
        { 
            tg.drawString((String)e.nextElement(), width * 2, k1); 
            k1 += height; 
        } 
 
        bottoml = k1; 
        rightl = width * 50; 
    } 
 
    void deal() 
        throws Exception 
    { 
        String str = tf2.getText(); 
        char chl = str.charAt(str.length() - 1); 
        char ch = buffer.charAt(0); 
        if(ch == 'i') 
        { 
            ch = buffer.charAt(1); 
            if(ch != 'd') 
                throw new Exception(); 
        } 
        int k; 
        if(tokenseries.indexOf(chl) > 0) 
        { 
            if(chl == ch) 
                if(chl == 'd') 
                { 
                    str = str.substring(0, str.length() - 2); 
                    buffer = buffer.substring(2); 
                } else 
                { 
                    if(chl == '$') 
                    { 
                        mc.setParam(-1); 
                        end = true; 
                        return; 
                    } 
                    str = str.substring(0, str.length() - 1); 
                    buffer = buffer.substring(1); 
                } 
        } else 
        { 
            String str1 = null; 
            if(chl == '\'') 
                str1 = str.substring(str.length() - 2); 
            else 
                str1 = "" + chl; 
            k = getparam(str1, ch); 
            if(sel == -2) 
            { 
                mc.setParam(k); 
                sel = -1; 
                return; 
            } 
            switch(mc.buf[k / 10][k % 10]) 
            { 
            case 0: // '\0' 
                if(ch == 'd') 
                    buffer = buffer.substring(2); 
                else 
                    buffer = buffer.substring(1); 
                break; 
 
            case 12: // '\f' 
                str = str.substring(0, str.length() - 1) + "E'T"; 
                break; 
 
            case 13: // '\r' 
                str = str.substring(0, str.length() - 1); 
                break; 
 
            case 14: // '\016' 
                str = str + "T+"; 
                break; 
 
            case 15: // '\017' 
            case 17: // '\021' 
                str = str.substring(0, str.length() - 2); 
                break; 
 
            case 16: // '\020' 
                str = str.substring(0, str.length() - 1) + "T'F"; 
                break; 
 
            case 18: // '\022' 
                str = str + "F*"; 
                break; 
 
            case 19: // '\023' 
                str = str.substring(0, str.length() - 1) + "id"; 
                break; 
 
            case 20: // '\024' 
                str = str.substring(0, str.length() - 1) + ")E("; 
                break; 
 
            default: 
                throw new Exception(); 
            } 
            k = mc.buf[k / 10][k % 10]; 
            if(k == 13) 
                k = 22; 
            else 
            if(k == 0) 
                k = 21; 
            vec.addElement(mc.strbuf[k]); 
        } 
        tf3.setText(buffer); 
        tf2.setText(str); 
        chl = str.charAt(str.length() - 1); 
        ch = buffer.charAt(0); 
        if(ch == 'i') 
        { 
            ch = buffer.charAt(1); 
            if(ch != 'd') 
                throw new Exception(); 
        } 
        if(tokenseries.indexOf(chl) > 0) 
            k = -1; 
        else 
        if(chl == '\'') 
            k = getparam(str.substring(str.length() - 2), ch); 
        else 
            k = getparam(str.substring(str.length() - 1), ch); 
        mc.setParam(k); 
    } 
}