Exemple #1
0
        public string List()
        {
            basicTokens = new BasicTokens(BasicTokens.ROMVersion.V1_1);

            byte highByte;
            byte lowByte;

            bool bREMFlag;
            bool bDATAFlag;
            bool bStringFlag;
            bool bKeyword;
            bool bMCFlag;

            ushort ui16Index = 0;

            StringBuilder stbListing = new StringBuilder();
            StringBuilder stbBasic   = new StringBuilder();

            stbBasic.EnsureCapacity(255);

            bool bEndOfProg = false;

            stbListing.Append("{\\rtf\\ansi\\deff0{\\fonttbl{\\f0\\fnil\\fcharset0 Consolas;}}");
            stbListing.Append(BuildColourTable());
            stbListing.Append("{\\*\\generator Msftedit 5.41.15.1507;}\\viewkind4\\uc1\\pard\\lang2057\\f0\\fs18 ");

            if (ProgramName == null)
            {
                ProgramName = "";
            }

            while (!bEndOfProg)
            {
                stbBasic.Length = 0;

                // Get the address of the next line
                highByte = ProgramData[ui16Index];
                lowByte  = ProgramData[ui16Index + 1];

                ushort ui16NextAddress = Convert.ToUInt16(highByte + (lowByte * 256));

                if (ui16NextAddress == 0)
                {
                    bEndOfProg = true;
                }
                else
                {
                    bREMFlag    = false;
                    bDATAFlag   = false;
                    bStringFlag = false;
                    bMCFlag     = false;
                    bKeyword    = false;

                    ui16Index += 2;

                    // Get the current line number
                    highByte = ProgramData[ui16Index];
                    lowByte  = ProgramData[ui16Index + 1];

                    ushort uiLineNo = Convert.ToUInt16(highByte + (lowByte * 256));

                    stbBasic.Append("\\cf1 ");
                    stbBasic.AppendFormat("{0} ", uiLineNo);

                    ui16Index += 2;

                    do
                    {
                        byte bByte = ProgramData[ui16Index];

                        if (bByte >= 0x80 && bByte <= 0xF6)
                        {
                            if (bByte == 0x9D || bByte == '\'')
                            {
                                if (!bREMFlag)
                                {
                                    bREMFlag = true;
                                    stbBasic.Append("\\cf2 ");
                                }
                            }
                            else if (bByte == 0x91)
                            {
                                if (!bDATAFlag)
                                {
                                    bDATAFlag = true;
                                    stbBasic.Append("\\cf2 ");
                                }
                            }
                            else if (bByte == 0xC0)
                            {
                                if (!bMCFlag)
                                {
                                    bMCFlag = true;
                                    stbBasic.Append("\\cf0 ");
                                }
                            }
                            else
                            {
                                if (!bREMFlag && !bDATAFlag && !bMCFlag)
                                {
                                    stbBasic.Append("\\cf2 ");
                                }
                            }

                            if (!bKeyword)
                            {
                                bKeyword = true;
                            }

                            // We have a BASIC token
                            stbBasic.Append(basicTokens.GetBasicToken(Convert.ToByte(bByte - 0x80)));

                            if (bREMFlag)
                            {
                                stbBasic.Append("\\cf5 ");
                            }

                            if (bDATAFlag)
                            {
                                stbBasic.Append("\\cf4 ");
                            }
                        }
                        else
                        {
                            if (bKeyword)
                            {
                                if (!bREMFlag && !bDATAFlag && !bMCFlag)
                                {
                                    stbBasic.Append("\\cf0 ");
                                }

                                bKeyword = false;
                            }

                            if (bByte >= 0x20)
                            {
                                if (bMCFlag)
                                {
                                    if (!Char.IsLetter((Char)bByte))
                                    {
                                        bMCFlag = false;
                                        stbBasic.Append("\\cf0 ");
                                    }
                                }

                                if (bByte == '\'')
                                {
                                    if (!bREMFlag && !bStringFlag && !bDATAFlag && !bMCFlag)
                                    {
                                        bREMFlag = true;
                                        stbBasic.Append("\'\\cf5 ");
                                    }
                                    else
                                    {
                                        stbBasic.Append("\'");
                                    }
                                }
                                else if (bByte == '\"')
                                {
                                    if (!bREMFlag && !bDATAFlag && !bMCFlag)
                                    {
                                        if (!bStringFlag)
                                        {
                                            bStringFlag = true;
                                            stbBasic.Append("\"\\cf3 ");
                                        }
                                        else
                                        {
                                            bStringFlag = false;
                                            stbBasic.Append("\\cf0 \"");
                                        }
                                    }
                                    else
                                    {
                                        stbBasic.Append("\"");
                                    }
                                }
                                else if (bByte == ':')
                                {
                                    if (!bREMFlag && !bStringFlag)
                                    {
                                        if (bMCFlag)
                                        {
                                            bMCFlag = false;
                                            stbBasic.Append("\\cf0 :");
                                        }
                                        else
                                        {
                                            stbBasic.Append(":");
                                        }
                                    }
                                    else
                                    {
                                        stbBasic.Append(":");
                                    }
                                }
                                else if (bByte == 0x60)
                                {
                                    stbBasic.Append("\\'a9");
                                }
                                else if (Convert.ToChar(bByte) == '\\')
                                {
                                    stbBasic.Append("\\\\");
                                }
                                else if (Convert.ToChar(bByte) == '{')
                                {
                                    stbBasic.Append("\\{");
                                }
                                else if (Convert.ToChar(bByte) == '}')
                                {
                                    stbBasic.Append("\\}");
                                }
                                else
                                {
                                    stbBasic.Append(Convert.ToChar(bByte));
                                }
                            }
                        }

                        ui16Index++;
                    } while (ProgramData[ui16Index] != 0);

                    stbListing.Append(stbBasic.ToString());
                    stbListing.Append("\\i0\\par\n");

                    ui16Index++;
                }
            }

            stbListing.Append("}");

            return(stbListing.ToString().Replace('`', '©'));
        }
Exemple #2
0
        public string ListBasicSourceAsText()
        {
            basicTokens = new BasicTokens(BasicTokens.ROMVersion.V1_1);

            byte highByte;
            byte lowByte;

            bool bREMFlag;
            bool bDATAFlag;
            bool bStringFlag;
            bool bKeyword;

            ushort ui16Index = 0;

            StringBuilder stbListing = new StringBuilder();
            StringBuilder stbLine    = new StringBuilder();

            stbLine.EnsureCapacity(255);

            bool bEndOfProg = false;

            if (ProgramName == null)
            {
                ProgramName = "";
            }

            while (!bEndOfProg)
            {
                stbLine.Length = 0;

                // Get the address of the next line
                highByte = ProgramData[ui16Index];
                lowByte  = ProgramData[ui16Index + 1];

                ushort ui16NextAddress = Convert.ToUInt16(highByte + (lowByte * 256));

                if (ui16NextAddress == 0)
                {
                    bEndOfProg = true;
                }
                else
                {
                    bREMFlag    = false;
                    bDATAFlag   = false;
                    bStringFlag = false;
                    bKeyword    = false;

                    ui16Index += 2;

                    // Get the current line number
                    highByte = ProgramData[ui16Index];
                    lowByte  = ProgramData[ui16Index + 1];

                    ushort uiLineNo = Convert.ToUInt16(highByte + (lowByte * 256));
                    stbLine.AppendFormat("{0} ", uiLineNo);

                    ui16Index += 2;

                    if (ui16Index >= ProgramData.Length)
                    {
                        bEndOfProg = true;
                    }
                    else
                    {
                        do
                        {
                            byte bByte = ProgramData[ui16Index];

                            if (bByte >= 0x80 && bByte <= 0xF6)
                            {
                                if (bByte == 0x9D || bByte == '\'')
                                {
                                    if (!bREMFlag)
                                    {
                                        bREMFlag = true;
                                    }
                                }
                                else if (bByte == 0x91)
                                {
                                    if (!bDATAFlag)
                                    {
                                        bDATAFlag = true;
                                    }
                                }

                                if (!bKeyword)
                                {
                                    bKeyword = true;
                                }

                                // We have a BASIC token
                                stbLine.Append(basicTokens.GetBasicToken(Convert.ToByte(bByte - 0x80)));
                            }
                            else
                            {
                                if (bKeyword)
                                {
                                    bKeyword = false;
                                }

                                if (bByte >= 0x20)
                                {
                                    if (bByte == '\'')
                                    {
                                        if (!bREMFlag && !bStringFlag && !bDATAFlag)
                                        {
                                            bREMFlag = true;
                                            stbLine.Append("\'");
                                        }
                                        else
                                        {
                                            stbLine.Append("\'");
                                        }
                                    }
                                    else if (bByte == '\"')
                                    {
                                        if (!bREMFlag && !bDATAFlag)
                                        {
                                            if (!bStringFlag)
                                            {
                                                bStringFlag = true;
                                                stbLine.Append("\"");
                                            }
                                            else
                                            {
                                                bStringFlag = false;
                                                stbLine.Append("\"");
                                            }
                                        }
                                    }
                                    else
                                    {
                                        stbLine.Append(Convert.ToChar(bByte));
                                    }
                                }
                            }

                            ui16Index++;

                            if (ui16Index >= ProgramData.Length)
                            {
                                bEndOfProg = true;
                            }
                        } while (!bEndOfProg && ProgramData[ui16Index] != 0 && ui16Index < ProgramData.Length);
                    }

                    stbListing.Append(stbLine.ToString());
                    stbListing.Append("\n");

                    ui16Index++;
                }
            }

            return(stbListing.ToString().Replace('`', '©'));
        }
Exemple #3
0
        public String ListAsText()
        {
            basicTokens = new BasicTokens(BasicTokens.ROMVersion.V1_1);

            Byte HighByte = 0;
            Byte LowByte  = 0;

            Boolean bREMFlag    = false;
            Boolean bDATAFlag   = false;
            Boolean bStringFlag = false;
            Boolean bKeyword    = false;

            UInt16 ui16Index = 0;

            StringBuilder strListing = new StringBuilder();
            StringBuilder strBasic   = new StringBuilder();

            strBasic.EnsureCapacity(255);

            Boolean bEndOfProg = false;

            if (ProgramName == null)
            {
                ProgramName = "";
            }

            while (!bEndOfProg)
            {
                strBasic.Length = 0;

                // Get the address of the next line
                HighByte = m_programData[ui16Index];
                LowByte  = m_programData[ui16Index + 1];

                UInt16 ui16NextAddress = Convert.ToUInt16(HighByte + (LowByte * 256));

                if (ui16NextAddress == 0)
                {
                    bEndOfProg = true;
                }
                else
                {
                    bREMFlag    = false;
                    bDATAFlag   = false;
                    bStringFlag = false;
                    bKeyword    = false;

                    ui16Index += 2;

                    // Get the current line number
                    HighByte = m_programData[ui16Index];
                    LowByte  = m_programData[ui16Index + 1];

                    UInt16 uiLineNo = Convert.ToUInt16(HighByte + (LowByte * 256));
                    strBasic.AppendFormat("{0} ", uiLineNo);

                    ui16Index += 2;

                    if (ui16Index >= m_programData.Length)
                    {
                        bEndOfProg = true;
                    }
                    else
                    {
                        do
                        {
                            Byte bByte = m_programData[ui16Index];

                            if (bByte >= 0x80 && bByte <= 0xF6)
                            {
                                if (bByte == 0x9D || bByte == '\'')
                                {
                                    if (!bREMFlag)
                                    {
                                        bREMFlag = true;
                                    }
                                }
                                else if (bByte == 0x91)
                                {
                                    if (!bDATAFlag)
                                    {
                                        bDATAFlag = true;
                                    }
                                }

                                if (!bKeyword)
                                {
                                    bKeyword = true;
                                }

                                // We have a BASIC token
                                strBasic.Append(basicTokens.GetBasicToken(Convert.ToByte(bByte - 0x80)));
                            }
                            else
                            {
                                if (bKeyword)
                                {
                                    bKeyword = false;
                                }

                                if (bByte >= 0x20)
                                {
                                    if (bByte == '\'')
                                    {
                                        if (!bREMFlag && !bStringFlag && !bDATAFlag)
                                        {
                                            bREMFlag = true;
                                            strBasic.Append("\'");
                                        }
                                        else
                                        {
                                            strBasic.Append("\'");
                                        }
                                    }
                                    else if (bByte == '\"')
                                    {
                                        if (!bREMFlag && !bDATAFlag)
                                        {
                                            if (!bStringFlag)
                                            {
                                                bStringFlag = true;
                                                strBasic.Append("\"");
                                            }
                                            else
                                            {
                                                bStringFlag = false;
                                                strBasic.Append("\"");
                                            }
                                        }
                                    }
                                    else if (bByte == 0x60)
                                    {
                                        strBasic.Append("©");
                                    }
                                    else
                                    {
                                        strBasic.Append(Convert.ToChar(bByte));
                                    }
                                }
                            }

                            ui16Index++;

                            if (ui16Index >= m_programData.Length)
                            {
                                bEndOfProg = true;
                            }
                        } while (!bEndOfProg && m_programData[ui16Index] != 0 && ui16Index < m_programData.Length);
                    }

                    strListing.Append(strBasic.ToString());
                    strListing.Append("\n");

                    ui16Index++;
                }
            }

            return(strListing.ToString());
        }