Added 'script' command to load DFHack scripts from file. Syntax is the same as dfhack.init / interactive.

develop
Clayton Hughes 2012-03-11 23:31:29 -07:00
parent 47bbe1a3ff
commit 445b580ad1
1 changed files with 26 additions and 5 deletions

@ -68,6 +68,10 @@ using namespace tthread;
using namespace df::enums; using namespace df::enums;
using df::global::init; using df::global::init;
static void loadScriptFile(Core *core, PluginManager *plug_mgr, string fname);
static void runInteractiveCommand(Core *core, PluginManager *plug_mgr, int &clueless_counter, const string &command);
static bool parseKeySpec(std::string keyspec, int *psym, int *pmod);
struct Core::Cond struct Core::Cond
{ {
Cond() Cond()
@ -372,6 +376,7 @@ static void runInteractiveCommand(Core *core, PluginManager *plug_mgr, int &clue
" die - Force DF to close immediately\n" " die - Force DF to close immediately\n"
" keybinding - Modify bindings of commands to keys\n" " keybinding - Modify bindings of commands to keys\n"
" belongs COMMAND - Tell which plugin a command belongs to.\n" " belongs COMMAND - Tell which plugin a command belongs to.\n"
" script FILENAME - Run the commands specified in a file.\n"
" plug [PLUGIN|v] - List plugin state and detailed description.\n" " plug [PLUGIN|v] - List plugin state and detailed description.\n"
" load PLUGIN|all - Load a plugin by name or load all possible plugins.\n" " load PLUGIN|all - Load a plugin by name or load all possible plugins.\n"
" unload PLUGIN|all - Unload a plugin or all loaded plugins.\n" " unload PLUGIN|all - Unload a plugin or all loaded plugins.\n"
@ -467,6 +472,18 @@ static void runInteractiveCommand(Core *core, PluginManager *plug_mgr, int &clue
{ {
_exit(666); _exit(666);
} }
else if(first == "script")
{
if(parts.size() == 1)
{
loadScriptFile(core, plug_mgr, parts[0]);
}
else
{
con << "Usage:" << endl
<< " script <filename>" << endl;
}
}
else else
{ {
command_result res = plug_mgr->InvokeCommand(first, parts); command_result res = plug_mgr->InvokeCommand(first, parts);
@ -479,15 +496,19 @@ static void runInteractiveCommand(Core *core, PluginManager *plug_mgr, int &clue
} }
} }
static void loadInitFile(Core *core, PluginManager *plug_mgr, string fname) static void loadScriptFile(Core *core, PluginManager *plug_mgr, string fname)
{ {
ifstream init(fname); core->con << "Loading script at " << fname << std::endl;
if (init.bad()) ifstream script(fname);
if (script.bad())
{
core->con.printerr("Error loading script\n");
return; return;
}
int tmp = 0; int tmp = 0;
string command; string command;
while (getline(init, command)) while (getline(script, command))
{ {
if (!command.empty()) if (!command.empty())
runInteractiveCommand(core, plug_mgr, tmp, command); runInteractiveCommand(core, plug_mgr, tmp, command);
@ -511,7 +532,7 @@ void fIOthread(void * iodata)
return; return;
} }
loadInitFile(core, plug_mgr, "dfhack.init"); loadScriptFile(core, plug_mgr, "dfhack.init");
con.print("DFHack is ready. Have a nice day!\n" con.print("DFHack is ready. Have a nice day!\n"
"Type in '?' or 'help' for general help, 'ls' to see all commands.\n"); "Type in '?' or 'help' for general help, 'ls' to see all commands.\n");