protected boolean interpretCommand(int inputCharacter) {
        if (state != WAIT_PLAYING)
            return true;
        try {
            // Hehe, macros.. I rock...
            if (inputstate == INPUT_NORMAL && inputstatenext == INPUT_NORMAL) {
                String theMacro = getMacro(inputCharacter);
                if (!theMacro.equals("")) {
                    char[] commands = theMacro.toCharArray();
                    TrekLog.logDebug(this.shipName + ": Running macro: " + new String(commands));
                    for (char command : commands) {
                        // If there is a backslash, then process the octal
                        // code.
                        if (Character.toString(command).equals("\\")) {
                            octalCode = true;
                        }
                        if (octalCode) {
                            if (!Character.toString(command).equals("\\")) {
                                if (command >= 48 && command <= 57 || command == 114) {
                                    this.actualOctalCode += Character.toString(command);
                                    this.octalCount++;
                                } else {
                                    actualOctalCode = "";
                                    octalCount = 4;
                                }
                            }
                            if (actualOctalCode.equals("r")) {
                                actualOctalCode = "015";
                                octalCount = 4;
                            }
                            if (octalCount >= 3) {
                                if (!actualOctalCode.equals("")) {
                                    // Convert the octal to a decimal.
                                    int decimalCommand = TrekMath.getDecimalFromOctal(actualOctalCode);
                                    doCommand(decimalCommand);
                                }
                                this.octalCount = 0;
                                this.octalCode = false;
                                actualOctalCode = "";
                            }
                        } else {
                            TrekLog.logDebug("Not an octal. Command: " + command);
                            if (command != 0) {
                                doCommand(command);
                                actualOctalCode = "";
                                this.octalCount = 0;
                                this.octalCode = false;
                            }
                        }
                    }
                } else {
                    TrekLog.logDebug(shipName + ": Couldn't find macro. Executing command " + Character.toString((char) inputCharacter));
                    doCommand(inputCharacter);
                }
            } else {
                TrekLog.logDebug(shipName + ": Failed macro check.  Running command: " + Character.toString((char) inputCharacter));
                doCommand(inputCharacter);
            }
            return true;
        } catch (Exception e) {
            TrekLog.logError("interpretCommand Error!");
            TrekLog.logException(e);
            return false;
        }
    }