Debugger pseudo-registers are now available in prompt tab completion.

git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2005 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2010-04-12 22:26:41 +00:00
parent af8c5a5133
commit 132b947ee2
2 changed files with 48 additions and 25 deletions

View File

@ -58,7 +58,7 @@
Debugger* Debugger::myStaticDebugger;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
static const string builtin_functions[][3] = {
static const char* builtin_functions[][3] = {
// { "name", "definition", "help text" }
// left joystick:
@ -86,9 +86,25 @@ static const string builtin_functions[][3] = {
{ "_diff1a", "*SWCHB & $80", "Right difficulty set to A (hard)" },
// empty string marks end of list, do not remove
{ "", "", "" }
{ 0, 0, 0 }
};
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Names are defined here, but processed in YaccParser
static const char* pseudo_registers[][2] = {
// { "name", "help text" }
{ "_bank", "Currently selected bank" },
{ "_rwport", "Address at which a read from a write port occurred" },
{ "_scan", "Current scanline count" },
{ "_fcount", "Number of frames since emulation started" },
{ "_cclocks", "Color clocks on current scanline" },
{ "_vsync", "Whether vertical sync is enabled (1 or 0)" },
{ "_vblank", "Whether vertical blank is enabled (1 or 0)" },
// empty string marks end of list, do not remove
{ 0, 0 }
};
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Debugger::Debugger(OSystem* osystem)
@ -255,10 +271,10 @@ string Debugger::autoExec()
buf << myParser->exec(romname) << endl;
// Init builtins
for(int i = 0; builtin_functions[i][0] != ""; i++)
for(int i = 0; builtin_functions[i][0] != 0; i++)
{
// TODO - check this for memory leaks
int res = YaccParser::parse(builtin_functions[i][1].c_str());
int res = YaccParser::parse(builtin_functions[i][1]);
if(res != 0) cerr << "ERROR in builtin function!" << endl;
Expression* exp = YaccParser::getResult();
addFunction(builtin_functions[i][0], builtin_functions[i][1], exp, true);
@ -674,7 +690,6 @@ GUI::Rect Debugger::getTabBounds() const
bool Debugger::addFunction(const string& name, const string& definition,
Expression* exp, bool builtin)
{
cerr << "adding function: " << name << endl;
functions.insert(make_pair(name, exp));
if(!builtin)
functionDefs.insert(make_pair(name, definition));
@ -732,16 +747,17 @@ string Debugger::builtinHelp() const
ostringstream buf;
uInt16 len, c_maxlen = 0, i_maxlen = 0;
// Get column widths for aligned output
for(int i = 0; builtin_functions[i][0] != ""; ++i)
// Get column widths for aligned output (functions)
for(int i = 0; builtin_functions[i][0] != 0; ++i)
{
len = builtin_functions[i][0].length();
len = strlen(builtin_functions[i][0]);
if(len > c_maxlen) c_maxlen = len;
len = builtin_functions[i][1].length();
len = strlen(builtin_functions[i][1]);
if(len > i_maxlen) i_maxlen = len;
}
for(int i = 0; builtin_functions[i][0] != ""; ++i)
buf << endl << "Built-in functions:" << endl;
for(int i = 0; builtin_functions[i][0] != 0; ++i)
{
buf << setw(c_maxlen) << left << builtin_functions[i][0]
<< setw(2) << right << "{"
@ -750,6 +766,24 @@ string Debugger::builtinHelp() const
<< builtin_functions[i][2]
<< endl;
}
// Get column widths for aligned output (pseudo-registers)
c_maxlen = 0;
for(int i = 0; pseudo_registers[i][0] != 0; ++i)
{
len = strlen(pseudo_registers[i][0]);
if(len > c_maxlen) c_maxlen = len;
}
buf << endl << "Pseudo-registers:" << endl;
for(int i = 0; pseudo_registers[i][0] != 0; ++i)
{
buf << setw(c_maxlen) << left << pseudo_registers[i][0]
<< setw(2) << " "
<< setw(i_maxlen) << left << pseudo_registers[i][1]
<< endl;
}
return buf.str();
}
@ -764,9 +798,9 @@ void Debugger::getCompletions(const char* in, StringList& list) const
list.push_back(l);
}
for(uInt32 i = 0; i < list.size(); ++i)
cerr << list[i] << endl;
for(int i = 0; pseudo_registers[i][0] != 0; ++i)
if(BSPF_strncasecmp(pseudo_registers[i][0], in, strlen(in)) == 0)
list.push_back(pseudo_registers[i][0]);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -881,18 +881,7 @@ void DebuggerParser::executeHelp()
commandResult << setw(clen) << right << commands[i].cmdString
<< " - " << commands[i].description << endl;
commandResult
<< "\nPseudo-registers:" << endl
<< "_bank Currently selected bank" << endl
<< "_rwport Address at which a read from a write port occurred" << endl
<< "_scan Current scanline count" << endl
<< "_fcount Number of frames since emulation started" << endl
<< "_cclocks Color clocks on current scanline" << endl
<< "_vsync Whether vertical sync is enabled (1 or 0)" << endl
<< "_vblank Whether vertical blank is enabled (1 or 0)" << endl
<< endl
<< "Built-in functions:" << endl
<< debugger->builtinHelp();
commandResult << debugger->builtinHelp();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -