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('`', '©')); }
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('`', '©')); }
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()); }