Example #1
0
        private void loadCLPSData()
        {
            clps_addr          = _owner.m_Overlay.ReadPointer(0x60);
            clps_num           = _owner.m_Overlay.Read16(clps_addr + 0x06);
            clps_size          = (uint)(8 + (clps_num * 8));
            txtNumEntries.Text = "" + clps_num;
            entries            = new byte[clps_num][];

            gridCLPSData.ColumnCount      = 8;
            gridCLPSData.RowCount         = clps_num;
            gridCLPSData.Columns[0].Width = 32;
            uint entry = clps_addr + 0x08;

            // Set column widths
            for (int i = 0; i < 8; i++)
            {
                gridCLPSData.Columns[i].Width = 32;
            }

            DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();

            cmb.HeaderText = "Type/Description";
            cmb.Items.Add("Other/Unknown");
            cmb.Width = 160;
            foreach (string name in GLOBAL_CLPS_TYPES.GetFirstToSecond().Keys)
            {
                cmb.Items.Add(name);
            }
            gridCLPSData.Columns.Add(cmb);

            for (int i = 0; i < clps_num; i++)
            {
                gridCLPSData.Rows[i].HeaderCell.Value = "" + i;
                entries[i] = new byte[8];
                for (int j = 0; j < 8; j++)
                {
                    entries[i][j] = _owner.m_Overlay.Read8((uint)(entry + (j)));
                    gridCLPSData.Rows[i].Cells[j].Value = entries[i][j];
                }

                // Fill in Type/Description column
                if (GLOBAL_CLPS_TYPES.GetSecondToFirst().ContainsKey(entries[i]))
                {
                    gridCLPSData.Rows[i].Cells[8].Value = GLOBAL_CLPS_TYPES.GetSecondToFirst()[entries[i]];
                }
                else
                {
                    gridCLPSData.Rows[i].Cells[8].Value = cmb.Items[0];// Other/Unknown
                }
                entry += 8;
            }
        }
Example #2
0
        public void ReadStrings(String fileName)
        {
            file = Program.m_ROM.GetFileFromName(fileName);

            inf1size = file.Read32(0x24);
            ushort numentries = file.Read16(0x28);

            m_MsgData          = new string[numentries];
            m_StringLengths    = new int[numentries];
            m_ShortVersions    = new string[numentries];
            m_FileSize         = file.Read32(0x08);
            m_StringHeaderAddr = new uint[numentries];
            m_StringHeaderData = new uint[numentries];
            m_DAT1Start        = 0x20 + inf1size + 0x08;

            for (int i = 0; i < numentries; i++)
            {
                m_StringHeaderAddr[i] = (uint)(0x20 + 0x10 + (i * 8));
                m_StringHeaderData[i] = file.Read32(m_StringHeaderAddr[i]);
            }

            lbxMsgList.Items.Clear(); //Reset list of messages
            lbxMsgList.BeginUpdate(); // Only draw when EndUpdate is called, much faster, expecially for Mono

            for (int i = 0; i < m_MsgData.Length; i++)
            {
                uint straddr = file.Read32((uint)(0x30 + i * 8));
                straddr += 0x20 + inf1size + 0x8;

                int length = 0;

                string thetext = "";
                for (; ;)
                {
                    byte cur;
                    try
                    {
                        cur = file.Read8(straddr);
                    }
                    catch
                    {
                        break;
                    }
                    straddr++;
                    length++;
                    char thechar = '\0';

                    /*if ((cur >= 0x00) && (cur <= 0x09))
                     *  thechar = (char)('0' + cur);
                     * else if ((cur >= 0x0A) && (cur <= 0x23))
                     *  thechar = (char)('A' + cur - 0x0A);
                     * else if ((cur >= 0x2D) && (cur <= 0x46))
                     *  thechar = (char)('a' + cur - 0x2D);
                     * else if ((cur >= 0x50) && (cur <= 0xCF))//Extended ASCII Characters
                     *  thechar = (char)(0x30 + cur);*/
                    // Some characters are two bytes long, can skip the second

                    if (langNames[langIndex] == "jpn")
                    {
                        if (JAP_CHARS.GetFirstToSecond().ContainsKey(cur))
                        {
                            thetext += JAP_CHARS.GetByFirst(cur);
                            straddr += (JAP_SIZES[JAP_CHARS.GetByFirst(cur)] - 1);
                            length  += (int)(JAP_SIZES[JAP_CHARS.GetByFirst(cur)] - 1);
                        }
                    }
                    else
                    {
                        if ((cur >= 0x00 && cur <= 0x4F) || (cur >= 0xEE && cur <= 0xFB))
                        {
                            thetext += BASIC_EUR_US_CHARS.GetByFirst(cur);
                            straddr += (BASIC_EUR_US_SIZES[BASIC_EUR_US_CHARS.GetByFirst(cur)] - 1);
                            length  += (int)(BASIC_EUR_US_SIZES[BASIC_EUR_US_CHARS.GetByFirst(cur)] - 1);
                        }
                        else if (cur >= 0x50 && cur <= 0xCF)
                        {
                            thetext += EXTENDED_ASCII_CHARS.GetByFirst(cur);
                            straddr += (EXTENDED_ASCII_SIZES[EXTENDED_ASCII_CHARS.GetByFirst(cur)] - 1);
                            length  += (int)(EXTENDED_ASCII_SIZES[EXTENDED_ASCII_CHARS.GetByFirst(cur)] - 1);
                        }
                    }

                    if (thechar != '\0')
                    {
                        thetext += thechar;
                    }
                    else if (cur == 0xFD)
                    {
                        thetext += "\r\n";
                    }
                    else if (cur == 0xFF)
                    {
                        break;
                    }
                    else if (cur == 0xFE)// Special Character
                    {
                        int len = file.Read8(straddr);
                        thetext += "[\\r]";
                        thetext += String.Format("{0:X2}", cur);
                        for (int spec = 0; spec < len - 1; spec++)
                        {
                            thetext += String.Format("{0:X2}", file.Read8((uint)(straddr + spec)));
                        }
                        length  += (len - 1);// Already increased by 1 at start
                        straddr += (uint)(len - 1);
                    }
                }

                m_MsgData[i]       = thetext;
                m_StringLengths[i] = length;
                m_ShortVersions[i] = ShortVersion(m_MsgData[i], i);

                lbxMsgList.Items.Add(m_ShortVersions[i]);

                btnImport.Enabled = true; btnExport.Enabled = true;
            }
            lbxMsgList.EndUpdate();
        }