docs: public void actionPerformed(ActionEvent e) {
          String cmd = e.getActionCommand();
          int returnValue = -1;
          if (cmd.equals("Cut") || cmd.equals("Copy") || cmd.equals("Paste")) {
              JInternalFrame f = getSelectedFrame();
              if (f != null && f instanceof ActionListener) {
                  ((ActionListener)f).actionPerformed(e);
              }
          } else if (cmd.equals("Step Over")) {
              returnValue = Dim.STEP_OVER;
          } else if (cmd.equals("Step Into")) {
              returnValue = Dim.STEP_INTO;
          } else if (cmd.equals("Step Out")) {
              returnValue = Dim.STEP_OUT;
          } else if (cmd.equals("Go")) {
              returnValue = Dim.GO;
          } else if (cmd.equals("Break")) {
              dim.setBreak();
          } else if (cmd.equals("Exit")) {
              exit();
          } else if (cmd.equals("Open")) {
              String fileName = chooseFile("Select a file to compile");
              if (fileName != null) {
                  String text = readFile(fileName);
                  if (text != null) {
                      RunProxy proxy = new RunProxy(this, RunProxy.OPEN_FILE);
                      proxy.fileName = fileName;
                      proxy.text = text;
                      new Thread(proxy).start();
                  }
              }
          } else if (cmd.equals("Load")) {
              String fileName = chooseFile("Select a file to execute");
              if (fileName != null) {
                  String text = readFile(fileName);
                  if (text != null) {
                      RunProxy proxy = new RunProxy(this, RunProxy.LOAD_FILE);
                      proxy.fileName = fileName;
                      proxy.text = text;
                      new Thread(proxy).start();
                  }
              }
          } else if (cmd.equals("More Windows...")) {
              MoreWindows dlg = new MoreWindows(this, fileWindows,
                                                "Window", "Files");
              dlg.showDialog(this);
          } else if (cmd.equals("Console")) {
              if (console.isIcon()) {
                  desk.getDesktopManager().deiconifyFrame(console);
              }
              console.show();
              desk.getDesktopManager().activateFrame(console);
              console.consoleTextArea.requestFocus();
          } else if (cmd.equals("Cut")) {
          } else if (cmd.equals("Copy")) {
          } else if (cmd.equals("Paste")) {
          } else if (cmd.equals("Go to function...")) {
              FindFunction dlg = new FindFunction(this, "Go to function",
                                                  "Function");
              dlg.showDialog(this);
          } else if (cmd.equals("Go to line...")) {
              final String s = (String) JOptionPane.showInputDialog(
                      this,
                      "Line number",
                      "Go to line...",
                      JOptionPane.QUESTION_MESSAGE,
                      null,
                      null,
                      null);
              if (s == null || s.trim().length() == 0) {
                  return;
              }
              try {
                  final int line = Integer.parseInt(s);
                  showFileWindow(null, line);
              }
              catch (final NumberFormatException nfe) {
                  // ignore
              }
          } else if (cmd.equals("Tile")) {
              JInternalFrame[] frames = desk.getAllFrames();
              int count = frames.length;
              int rows, cols;
              rows = cols = (int)Math.sqrt(count);
              if (rows*cols < count) {
                  cols++;
                  if (rows * cols < count) {
                      rows++;
                  }
              }
              Dimension size = desk.getSize();
              int w = size.width/cols;
              int h = size.height/rows;
              int x = 0;
              int y = 0;
              for (int i = 0; i < rows; i++) {
                  for (int j = 0; j < cols; j++) {
                      int index = (i*cols) + j;
                      if (index >= frames.length) {
                          break;
                      }
                      JInternalFrame f = frames[index];
                      try {
                          f.setIcon(false);
                          f.setMaximum(false);
                      } catch (Exception exc) {
                      }
                      desk.getDesktopManager().setBoundsForFrame(f, x, y,
                                                                 w, h);
                      x += w;
                  }
                  y += h;
                  x = 0;
              }
          } else if (cmd.equals("Cascade")) {
              JInternalFrame[] frames = desk.getAllFrames();
              int count = frames.length;
              int x, y, w, h;
              x = y = 0;
              h = desk.getHeight();
              int d = h / count;
              if (d > 30) d = 30;
              for (int i = count -1; i >= 0; i--, x += d, y += d) {
                  JInternalFrame f = frames[i];
                  try {
                      f.setIcon(false);
                      f.setMaximum(false);
                  } catch (Exception exc) {
                  }
                  Dimension dimen = f.getPreferredSize();
                  w = dimen.width;
                  h = dimen.height;
                  desk.getDesktopManager().setBoundsForFrame(f, x, y, w, h);
              }
          } else {
              Object obj = getFileWindow(cmd);
              if (obj != null) {
                  FileWindow w = (FileWindow)obj;
                  try {
                      if (w.isIcon()) {
                          w.setIcon(false);
                      }
                      w.setVisible(true);
                      w.moveToFront();
                      w.setSelected(true);
                  } catch (Exception exc) {
                  }
              }
          }
          if (returnValue != -1) {
              updateEnabled(false);
              dim.setReturnValue(returnValue);
          }
      }