X-Git-Url: http://git.tdb.fi/?p=gldbg.git;a=blobdiff_plain;f=source%2Fcommandinterpreter.cpp;fp=source%2Fcommandinterpreter.cpp;h=301535048bd6e8bcfe6084344b7aef248860ec65;hp=fe0c3f1bc5df51334de7b2c00233c659d05fb511;hb=81f1ddee977603293d0c5710f2db69130dac6a96;hpb=a51c2557622ea93944e24f58845609526eb46ec1 diff --git a/source/commandinterpreter.cpp b/source/commandinterpreter.cpp index fe0c3f1..3015350 100644 --- a/source/commandinterpreter.cpp +++ b/source/commandinterpreter.cpp @@ -1,16 +1,14 @@ /* $Id$ This file is part of gldbg -Copyright © 2009-2010 Mikko Rasa, Mikkosoft Productions +Copyright © 2009-2011 Mikko Rasa, Mikkosoft Productions Distributed under the GPL */ +#include +#include #include #include -#include -#include -#include -#include #include "breakpoint.h" #include "commandinterpreter.h" #include "enums.h" @@ -19,7 +17,6 @@ Distributed under the GPL #include "tracer.h" using namespace std; -using namespace Msp; CommandInterpreter::CommandInterpreter(GlDbg &d): gldbg(d) @@ -69,12 +66,12 @@ void CommandInterpreter::execute(const string &cmd) string name = cmd.substr(0, space); CommandMap::const_iterator i = commands.lower_bound(name); if(i==commands.end() || i->first.compare(0, name.size(), name)) - throw KeyError("Unknown command", name); + throw runtime_error("Unknown command "+name); if(i->first!=name) { CommandMap::const_iterator j = i; if((++j)!=commands.end() && !j->first.compare(0, name.size(), name)) - throw KeyError("Ambiguous command", name); + throw runtime_error("Ambiguous command "+name); } string args; @@ -90,21 +87,21 @@ void CommandInterpreter::cmd_help(const string &args) { for(CommandMap::const_iterator i=commands.begin(); i!=commands.end(); ++i) if(!dynamic_cast(i->second)) - IO::print("%-10s : %s\n", i->first, i->second->get_description()); + printf("%-10s : %s\n", i->first.c_str(), i->second->get_description().c_str()); } else { CommandMap::const_iterator i = commands.find(args); if(i==commands.end()) - throw KeyError("Unknown command", args); + throw runtime_error("Unknown command "+args); const Command *cmd = i->second; while(const CommandAlias *alias = dynamic_cast(cmd)) cmd = alias->get_target(); - IO::print("%s : %s\n", i->first, cmd->get_description()); + printf("%s : %s\n", i->first.c_str(), cmd->get_description().c_str()); if(!cmd->get_help().empty()) - IO::print("\n%s", cmd->get_help()); + printf("\n%s", cmd->get_help().c_str()); } } @@ -117,7 +114,7 @@ void CommandInterpreter::cmd_break(const string &args) { unsigned short func = get_function(args.c_str()); if(!func) - throw InvalidParameterValue("Unknown function"); + throw runtime_error("Unknown function"); gldbg.set_breakpoint(func, BREAK_CALL, 0); } @@ -126,7 +123,7 @@ void CommandInterpreter::cmd_unbreak(const string &args) { unsigned short func = get_function(args.c_str()); if(!func) - throw InvalidParameterValue("Unknown function"); + throw runtime_error("Unknown function"); gldbg.clear_breakpoint(func, BREAK_CALL, 0); } @@ -145,7 +142,7 @@ void CommandInterpreter::cmd_finish(const string &) void CommandInterpreter::cmd_continue(const string &) { - IO::print("Continuing.\n"); + printf("Continuing.\n"); gldbg.get_process().resume(); } @@ -162,10 +159,13 @@ void CommandInterpreter::cmd_signal(const string &args) sig = SIGSEGV; else if(args=="TERM" || args=="SIGTERM") sig = SIGTERM; - else if(isnumrc(args)) - sig = lexical_cast(args); else - throw InvalidParameterValue("Invalid signal specification"); + { + char *end; + sig = strtoul(args.c_str(), &end, 0); + if(end && *end) + throw runtime_error("Invalid signal specification"); + } gldbg.get_process().resume(sig); } @@ -178,7 +178,7 @@ void CommandInterpreter::cmd_exit(const string &) { if(gldbg.get_process().get_state()!=Process::INACTIVE) { - IO::print("Program is still running. Kill it?\n"); + printf("Program is still running. Kill it?\n"); char *answer = readline("[y/n] "); if(answer[0]=='y') { @@ -186,7 +186,7 @@ void CommandInterpreter::cmd_exit(const string &) gldbg.quit(true); } else - IO::print("Not confirmed.\n"); + printf("Not confirmed.\n"); } else gldbg.quit(false);