home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 27 / CDROM27.iso / share / wnt / jig / data1.cab / Program_Executable_Files / lib / jig.jar / DebugGUI.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-08-19  |  9.7 KB  |  532 lines

  1. import java.awt.Button;
  2. import java.awt.Container;
  3. import java.awt.Event;
  4. import java.awt.Frame;
  5. import java.awt.GridBagConstraints;
  6. import java.awt.GridBagLayout;
  7. import java.awt.GridLayout;
  8. import java.awt.Label;
  9. import java.awt.List;
  10. import java.awt.Panel;
  11. import java.awt.TextArea;
  12. import java.awt.TextField;
  13. import java.awt.Window;
  14. import java.io.DataInputStream;
  15. import java.io.DataOutputStream;
  16. import java.io.IOException;
  17. import java.io.StringReader;
  18.  
  19. class DebugGUI extends Frame {
  20.    TextField field;
  21.    Button setButton;
  22.    String result;
  23.    DataOutputStream dos;
  24.    DataInputStream dis;
  25.    DebugProcessThread debugThread;
  26.    Process jdbProcess;
  27.    TextArea textArea;
  28.    TextArea cmdArea;
  29.    TextArea varArea;
  30.    List breakList;
  31.    String command;
  32.    String className;
  33.    int sourceLine;
  34.    String arguments;
  35.    private String[] breakPoints = new String[0];
  36.    private int breakPointCount;
  37.    private boolean standAlone = false;
  38.    private boolean debuggerActive = true;
  39.    private boolean appletInUse = false;
  40.  
  41.    public boolean isDebuggerActive() {
  42.       return this.debuggerActive;
  43.    }
  44.  
  45.    public void makeStandAlone() {
  46.       this.standAlone = true;
  47.    }
  48.  
  49.    void updateBreakList() {
  50.       this.breakList.removeAll();
  51.  
  52.       for(int var1 = 0; var1 < this.breakPointCount; ++var1) {
  53.          this.breakList.add(this.breakPoints[var1]);
  54.       }
  55.  
  56.    }
  57.  
  58.    void addBreakPoint(String var1) {
  59.       String[] var2 = new String[this.breakPointCount];
  60.  
  61.       for(int var3 = 0; var3 < this.breakPointCount; ++var3) {
  62.          var2[var3] = this.breakPoints[var3];
  63.       }
  64.  
  65.       this.breakPoints = new String[++this.breakPointCount];
  66.  
  67.       int var4;
  68.       for(var4 = 0; var4 < this.breakPointCount - 1; ++var4) {
  69.          this.breakPoints[var4] = var2[var4];
  70.       }
  71.  
  72.       this.breakPoints[var4] = var1;
  73.    }
  74.  
  75.    private void deleteBreakPoint(String var1) {
  76.       if (this.breakPointCount != 0) {
  77.          String[] var2 = new String[this.breakPointCount];
  78.  
  79.          for(int var3 = 0; var3 < this.breakPointCount; ++var3) {
  80.             var2[var3] = this.breakPoints[var3];
  81.          }
  82.  
  83.          this.breakPoints = new String[--this.breakPointCount];
  84.          int var5 = 0;
  85.  
  86.          for(int var4 = 0; var5 < this.breakPointCount + 1; ++var5) {
  87.             if (var1 != var2[var5]) {
  88.                this.breakPoints[var4++] = var2[var5];
  89.             }
  90.          }
  91.  
  92.       }
  93.    }
  94.  
  95.    public void setClassName(String var1) {
  96.       this.className = var1;
  97.    }
  98.  
  99.    String getText() {
  100.       return this.result;
  101.    }
  102.  
  103.    public void sourceStart(int var1) {
  104.       this.sourceLine = var1;
  105.    }
  106.  
  107.    DebugGUI(String var1, String var2, String var3, boolean var4) {
  108.       super(var1);
  109.       this.init(var2, var3, var4);
  110.       this.initProcess();
  111.       ((Window)this).pack();
  112.       ((Window)this).show();
  113.    }
  114.  
  115.    public void output(String var1) {
  116.       String var2 = this.textArea.getText();
  117.       int var3 = var2.length();
  118.       if (var3 > 25000) {
  119.          this.textArea.setText(var2.substring(var3 - 20000));
  120.       }
  121.  
  122.       this.textArea.appendText(var1);
  123.    }
  124.  
  125.    public void listing(String var1) {
  126.       this.cmdArea.appendText(var1);
  127.    }
  128.  
  129.    public void varList(String var1) {
  130.       this.varArea.appendText(var1);
  131.       this.varArea.setCaretPosition(0);
  132.    }
  133.  
  134.    public void write(String var1) {
  135.       boolean var2 = this.testProcess(var1);
  136.       if (!var1.equals(BrowserOptions.messages.getString("Quit")) || !var2) {
  137.          StringReader var3 = new StringReader(var1);
  138.  
  139.          try {
  140.             int var4;
  141.             while((var4 = var3.read()) != -1) {
  142.                this.dos.write(var4);
  143.             }
  144.  
  145.             this.dos.write(10);
  146.             this.dos.flush();
  147.          } catch (IOException var5) {
  148.             System.out.println(BrowserOptions.messages.getString("IOExceptionO"));
  149.          }
  150.       }
  151.    }
  152.  
  153.    public void doList() {
  154.       this.cmdArea.setText("");
  155.       this.write("list");
  156.    }
  157.  
  158.    public void doVariables() {
  159.       this.varArea.setText("");
  160.       this.write("locals");
  161.    }
  162.  
  163.    public void quit() {
  164.       this.write(BrowserOptions.messages.getString("Quit"));
  165.       this.destroy();
  166.    }
  167.  
  168.    private void destroy() {
  169.       try {
  170.          this.jdbProcess.waitFor();
  171.       } catch (InterruptedException var1) {
  172.          this.jdbProcess.destroy();
  173.       }
  174.  
  175.       this.debugThread.stop();
  176.       ((Frame)this).dispose();
  177.       this.debuggerActive = false;
  178.       if (this.standAlone) {
  179.          System.exit(0);
  180.       }
  181.  
  182.    }
  183.  
  184.    public boolean action(Event var1, Object var2) {
  185.       boolean var3 = false;
  186.       String var4 = this.getSelectedText();
  187.       if (!var4.equals("")) {
  188.          var3 = true;
  189.       }
  190.  
  191.       if (var1.target == this.field) {
  192.          var3 = true;
  193.       } else if (var1.arg == BrowserOptions.messages.getString("Quit")) {
  194.          this.write((String)var1.arg);
  195.          this.destroy();
  196.       } else if (var1.arg == BrowserOptions.messages.getString("Up")) {
  197.          this.write((String)var1.arg);
  198.          this.doList();
  199.          this.doVariables();
  200.       } else if (var1.arg == BrowserOptions.messages.getString("Down")) {
  201.          this.write((String)var1.arg);
  202.          this.doList();
  203.          this.doVariables();
  204.       } else if (var1.arg == BrowserOptions.messages.getString("ScrollUp")) {
  205.          if (this.sourceLine > 6) {
  206.             this.cmdArea.setText("");
  207.             this.write("list " + (new Integer(this.sourceLine -= 11)).toString());
  208.          }
  209.       } else if (var1.arg == BrowserOptions.messages.getString("ScrollDn")) {
  210.          if (this.sourceLine < 10000) {
  211.             this.cmdArea.setText("");
  212.             this.write("list " + (new Integer(this.sourceLine += 3)).toString());
  213.          }
  214.       } else if (var1.arg == BrowserOptions.messages.getString("Run")) {
  215.          this.field.setText((String)var1.arg + " " + this.className + " " + this.arguments);
  216.          this.field.setCaretPosition(this.field.getText().length());
  217.          this.field.requestFocus();
  218.       } else if (var1.arg == BrowserOptions.messages.getString("StopAt")) {
  219.          this.field.setText((String)var1.arg + " " + this.className + ":" + var4);
  220.          this.field.setCaretPosition(this.field.getText().length());
  221.          this.field.requestFocus();
  222.       } else if (var1.arg == BrowserOptions.messages.getString("StopIn")) {
  223.          this.field.setText((String)var1.arg + " " + this.className.trim() + "." + var4);
  224.          this.field.setCaretPosition(this.field.getText().length());
  225.          this.field.requestFocus();
  226.       } else if (var1.arg == BrowserOptions.messages.getString("Print")) {
  227.          this.field.setText((String)var1.arg + " " + var4);
  228.          this.field.setCaretPosition(this.field.getText().length());
  229.          this.field.requestFocus();
  230.       } else if (var1.arg == BrowserOptions.messages.getString("Methods")) {
  231.          this.field.setText((String)var1.arg + " " + this.className);
  232.          this.field.setCaretPosition(this.field.getText().length());
  233.          this.field.requestFocus();
  234.       } else if (var1.arg == BrowserOptions.messages.getString("Clear")) {
  235.          if (this.breakList.getSelectedItem() != null) {
  236.             this.deleteBreakPoint(this.breakList.getSelectedItem());
  237.             this.write((String)var1.arg + " " + this.breakList.getSelectedItem());
  238.             this.updateBreakList();
  239.          }
  240.       } else {
  241.          this.write((String)var1.arg);
  242.       }
  243.  
  244.       if (var3) {
  245.          this.result = this.field.getText();
  246.          this.write(this.result);
  247.          this.field.setText("");
  248.          this.output("\n");
  249.       }
  250.  
  251.       return true;
  252.    }
  253.  
  254.    public static void main(String[] var0) {
  255.       if (var0.length < 1) {
  256.          System.out.println("Usage: java ProcessThread <cmd> [<args>]");
  257.          System.exit(0);
  258.       }
  259.  
  260.       String var2 = new String(BrowserOptions.debugger + " ");
  261.  
  262.       for(int var1 = 1; var1 < var0.length; ++var1) {
  263.          var2 = var2 + " " + var0[var1];
  264.       }
  265.  
  266.       DebugGUI var3 = new DebugGUI("JDB " + var0[0], var2, var0[0], false);
  267.       var3.makeStandAlone();
  268.    }
  269.  
  270.    public boolean handleEvent(Event var1) {
  271.       switch (var1.id) {
  272.          case 201:
  273.             ((Frame)this).dispose();
  274.          default:
  275.             return super.handleEvent(var1);
  276.       }
  277.    }
  278.  
  279.    void initProcess() {
  280.       boolean var1 = false;
  281.       if (this.jdbProcess == null) {
  282.          var1 = true;
  283.       }
  284.  
  285.       Runtime var2 = Runtime.getRuntime();
  286.  
  287.       try {
  288.          this.jdbProcess = var2.exec(this.command);
  289.       } catch (IOException var3) {
  290.          System.out.println(BrowserOptions.messages.getString("Initializi"));
  291.       }
  292.  
  293.       this.dis = new DataInputStream(this.jdbProcess.getInputStream());
  294.       new DataInputStream(this.jdbProcess.getErrorStream());
  295.       this.dos = new DataOutputStream(this.jdbProcess.getOutputStream());
  296.       this.debugThread = new DebugProcessThread(this.command, this, this.dis);
  297.       this.debugThread.start();
  298.       if (this.appletInUse && this.className != null) {
  299.          this.write("load " + this.className);
  300.          this.write(BrowserOptions.messages.getString("StopIn") + " " + this.className + ".init");
  301.          if (var1) {
  302.             this.write(BrowserOptions.messages.getString("Run"));
  303.             return;
  304.          }
  305.       } else if (this.className != null) {
  306.          this.write(BrowserOptions.messages.getString("StopIn") + " " + this.className + ".main");
  307.          if (var1) {
  308.             this.write(BrowserOptions.messages.getString("Run"));
  309.          }
  310.       }
  311.  
  312.    }
  313.  
  314.    boolean testProcess(String var1) {
  315.       try {
  316.          this.jdbProcess.exitValue();
  317.       } catch (IllegalThreadStateException var3) {
  318.          return false;
  319.       }
  320.  
  321.       if (var1.equals(BrowserOptions.messages.getString("Quit"))) {
  322.          return true;
  323.       } else if (var1.equals("")) {
  324.          return true;
  325.       } else if (var1.startsWith(BrowserOptions.messages.getString("Run"))) {
  326.          this.initProcess();
  327.          return true;
  328.       } else {
  329.          SimpleDialog var2 = new SimpleDialog(this, BrowserOptions.messages.getString("Attempting") + var1 + BrowserOptions.messages.getString("CommandJDB"));
  330.          if (var2.result) {
  331.             this.initProcess();
  332.          } else {
  333.             this.destroy();
  334.          }
  335.  
  336.          return true;
  337.       }
  338.    }
  339.  
  340.    private String getSelectedText() {
  341.       String var1 = this.cmdArea.getSelectedText();
  342.       if (!var1.equals("")) {
  343.          return var1;
  344.       } else {
  345.          var1 = this.varArea.getSelectedText();
  346.          if (!var1.equals("")) {
  347.             return var1;
  348.          } else {
  349.             var1 = this.textArea.getSelectedText();
  350.             return !var1.equals("") ? var1 : "";
  351.          }
  352.       }
  353.    }
  354.  
  355.    void clearAllBreakpoints(boolean var1) {
  356.       if (var1) {
  357.          for(int var2 = 0; var2 < this.breakPointCount; ++var2) {
  358.             this.write(BrowserOptions.messages.getString("Clear") + " " + this.breakPoints[var2]);
  359.          }
  360.       }
  361.  
  362.       this.breakPointCount = 0;
  363.       this.updateBreakList();
  364.    }
  365.  
  366.    void init(String var1, String var2, boolean var3) {
  367.       if (var3) {
  368.          this.command = var1;
  369.          this.className = var2;
  370.          this.arguments = "";
  371.          this.appletInUse = true;
  372.       } else {
  373.          try {
  374.             this.className = var2.substring(0, var2.indexOf(" "));
  375.          } catch (StringIndexOutOfBoundsException var14) {
  376.             this.className = var2;
  377.          }
  378.  
  379.          try {
  380.             this.arguments = var2.substring(var2.indexOf(" "));
  381.          } catch (StringIndexOutOfBoundsException var13) {
  382.             this.arguments = "";
  383.          }
  384.  
  385.          this.command = var1 + this.className + this.arguments;
  386.       }
  387.  
  388.       GridBagLayout var4 = new GridBagLayout();
  389.       GridBagConstraints var5 = new GridBagConstraints();
  390.       ((Container)this).setLayout(var4);
  391.       var5.fill = 1;
  392.       var5.ipadx = 0;
  393.       var5.ipady = 0;
  394.       var5.anchor = 10;
  395.       var5.gridx = -1;
  396.       var5.gridy = -1;
  397.       this.cmdArea = new TextArea("", 10, 40, 2);
  398.       this.cmdArea.setEditable(false);
  399.       var5.gridwidth = 0;
  400.       var5.gridheight = 1;
  401.       var5.weightx = (double)1.0F;
  402.       var5.weighty = (double)0.0F;
  403.       var4.setConstraints(this.cmdArea, var5);
  404.       ((Container)this).add("North", this.cmdArea);
  405.       Panel var6 = new Panel();
  406.       GridBagLayout var7 = new GridBagLayout();
  407.       ((Container)var6).setLayout(var7);
  408.       var5.fill = 1;
  409.       var5.ipadx = 0;
  410.       var5.ipady = 0;
  411.       var5.anchor = 10;
  412.       var5.gridx = -1;
  413.       var5.gridy = -1;
  414.       Label var8 = new Label(BrowserOptions.messages.getString("LocalsCmd"), 1);
  415.       var5.gridwidth = -1;
  416.       var5.gridheight = 1;
  417.       var5.weightx = (double)0.0F;
  418.       var5.weighty = (double)0.0F;
  419.       var7.setConstraints(var8, var5);
  420.       ((Container)var6).add("West", var8);
  421.       this.field = new TextField(28);
  422.       var5.gridwidth = 0;
  423.       var5.gridheight = 1;
  424.       var5.weightx = (double)1.0F;
  425.       var5.weighty = (double)0.0F;
  426.       var7.setConstraints(this.field, var5);
  427.       ((Container)var6).add("East", this.field);
  428.       this.varArea = new TextArea(5, 25);
  429.       this.varArea.setEditable(false);
  430.       var5.gridwidth = 0;
  431.       var5.gridheight = 0;
  432.       var5.weightx = (double)1.0F;
  433.       var5.weighty = (double)0.0F;
  434.       var7.setConstraints(this.varArea, var5);
  435.       ((Container)var6).add("South", this.varArea);
  436.       var5.gridwidth = -1;
  437.       var5.gridheight = 1;
  438.       var5.weightx = (double)1.0F;
  439.       var5.weighty = (double)0.0F;
  440.       var4.setConstraints(var6, var5);
  441.       ((Container)this).add("West", var6);
  442.       Panel var9 = new Panel();
  443.       ((Container)var9).setLayout(new GridLayout(0, 5, 4, 4));
  444.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Next")));
  445.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Cont")));
  446.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Step")));
  447.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("StepUp")));
  448.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Print")));
  449.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("ScrollUp")));
  450.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Up")));
  451.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Clear")));
  452.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("StopAt")));
  453.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("StopIn")));
  454.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("ScrollDn")));
  455.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Down")));
  456.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Threads")));
  457.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Suspend")));
  458.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Resume")));
  459.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Run")));
  460.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Where")));
  461.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Methods")));
  462.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Memory")));
  463.       ((Container)var9).add(new Button(BrowserOptions.messages.getString("Quit")));
  464.       var5.gridwidth = 0;
  465.       var5.gridheight = 1;
  466.       var5.weightx = (double)1.0F;
  467.       var5.weighty = (double)0.0F;
  468.       var4.setConstraints(var9, var5);
  469.       ((Container)this).add("East", var9);
  470.       Panel var10 = new Panel();
  471.       GridBagLayout var11 = new GridBagLayout();
  472.       ((Container)var10).setLayout(var11);
  473.       var5.fill = 1;
  474.       var5.ipadx = 0;
  475.       var5.ipady = 0;
  476.       var5.anchor = 10;
  477.       var5.gridx = -1;
  478.       var5.gridy = -1;
  479.       this.textArea = new TextArea();
  480.       this.textArea.setEditable(false);
  481.       var5.gridwidth = 1;
  482.       var5.gridheight = 2;
  483.       var5.weightx = 0.6;
  484.       var5.weighty = (double)1.0F;
  485.       var11.setConstraints(this.textArea, var5);
  486.       ((Container)var10).add(this.textArea);
  487.       Label var12 = new Label(BrowserOptions.messages.getString("Breaks"), 0);
  488.       var5.gridwidth = 0;
  489.       var5.gridheight = 1;
  490.       var5.weightx = (double)0.0F;
  491.       var5.weighty = (double)0.0F;
  492.       var11.setConstraints(var12, var5);
  493.       ((Container)var10).add(var12);
  494.       this.breakList = new List();
  495.       var5.gridwidth = 0;
  496.       var5.gridheight = 1;
  497.       var5.weightx = 0.4;
  498.       var5.weighty = (double)1.0F;
  499.       var11.setConstraints(this.breakList, var5);
  500.       ((Container)var10).add(this.breakList);
  501.       var5.gridwidth = 0;
  502.       var5.gridheight = 0;
  503.       var5.weightx = (double)1.0F;
  504.       var5.weighty = (double)1.0F;
  505.       var4.setConstraints(var10, var5);
  506.       ((Container)this).add("South", var10);
  507.       ((Frame)this).setIconImage(BrowserOptions.iconImage);
  508.    }
  509.  
  510.    DebugGUI(String var1, String var2, String var3, int var4) {
  511.       super(var1);
  512.       this.init(var2, var3, false);
  513.       ((Window)this).pack();
  514.       this.initProcess();
  515.       this.evaluateInit(var3, var4);
  516.       ((Window)this).show();
  517.    }
  518.  
  519.    void evaluateReinit(String var1) {
  520.       this.clearAllBreakpoints(true);
  521.       this.write("use .");
  522.       this.setClassName(var1);
  523.       this.write("load " + var1);
  524.       this.write(BrowserOptions.messages.getString("StopIn") + " " + var1 + ".main");
  525.       this.write(BrowserOptions.messages.getString("Run") + " " + var1);
  526.    }
  527.  
  528.    void evaluateInit(String var1, int var2) {
  529.       this.write(BrowserOptions.messages.getString("StopAt") + " " + var1 + ":" + (new Integer(4 + var2)).toString());
  530.    }
  531. }
  532.