if (activeNode.level == 0 && activeNode.value == 0x02)
if (activeNode.menu_lower)
    public StrInfo readString(int address)    {        // Reads a string fHackModule.rom ROM at address.        // Returns a struct containing a pointer to the string and        // the string's length. This function does not do any formatting        // or decompression. If the string is greater than 8192 characters        // long, it will be truncated at that point.        char[] buffer = new char[8192];        char[] headBuff = new char[100];        int pos = 0, hpos = 0;        int len = 0;        int offset = address;        CCNode activeNode = ccTable, prevNode = null;        boolean opcode = false, endcc = false;        int curcode = 0;        int arglevel = 0;        int menulevel = 0;        int ch;        for (int i = 0; i < 8192; i++)        {            ch = rom.readChar(offset++);            len++;            if (arglevel > 0)            {                buffer[pos++] = (char) ch;                arglevel--;                continue;            }            if (endcc)            {                break;            }            if (!opcode)            {                if (isCC(ch))                {                    opcode = true;                    curcode = ch;                }            }            if (opcode)            {                int n = searchNode(activeNode, ch);                if (n == -1)                {                    opcode = false;                    activeNode = ccTable;                    prevNode = null;                    buffer[pos++] = (char) ch;                    continue;                }                else                {                    prevNode = activeNode;                    activeNode = (CCNode) activeNode.nodes.get(n);                }                if (activeNode.type == TYPE_ARGLIST)                {                    arglevel = activeNode.num_arg - 1;                    //if arg multipler, multiply arguments                    if (activeNode.arg_multiplier && ch < MAX_ARG_MULT)                    {                        CCNode t = prevNode;                        while (!t.isTerminator)                            t = (CCNode) t.nodes.get(0);                        arglevel = ((t.num_arg - 1) * ch);                        //if(ch > 20) System.out.println(ch + " offset: " +                        // Integer.toHexString(address));                    }                    if (hpos < headBuff.length - 1                        && (curcode == 0x15 || curcode == 0x16 || curcode == 0x17))                    {                        int c = ((curcode - 0x15) * 256) + ch;                        for (int p = 0; p < comprTable[c].length                            && hpos < headBuff.length - 1;)                        {                            headBuff[hpos++] = comprTable[c][p++];                        }                    }                    buffer[pos++] = (char) ch;                }                else if (activeNode.type == TYPE_CODE)                {                    buffer[pos++] = (char) ch;                }                if (activeNode.level == 0 && activeNode.value == 0x02)                {                    if (menulevel > 0)                        menulevel--;                    else                        break;                }                if (activeNode.toString().equalsIgnoreCase("[0a xx xx xx xx]"))                {                    endcc = true;                }                //                else if (                //                    activeNode.isTerminator                //                        && activeNode.toString().equals("[0A XX XX XX XX]"))                //                {                //                    System.out.println("0x" + Integer.toHexString(address));                //                    break;                //                }                if (activeNode.isTerminator)                {                    opcode = false;                    if (activeNode.toString().equals("[19 02]"))                        menulevel++;                    activeNode = ccTable;                }            }            else            {                //buffer[pos++] = (char) ((((int) ch) & 0xFF) - 0x30);                buffer[pos++] = (char) ch;                if (hpos < headBuff.length - 1)                    headBuff[hpos++] = (char) ((ch & 0xFF) - 0x30);            }        }        StrInfo s = new StrInfo();        s.address = address;        s.str = new String(buffer, 0, pos);        s.header = hpos == 0 ? " " : new String(headBuff, 0, hpos);        return s;    }