Skip to content

Commit

Permalink
qtscript: Add dump() that dumps a variadic text lines to a file with …
Browse files Browse the repository at this point in the history
…path

and name equal to "logs/" + script name + ".log".
  • Loading branch information
perim committed Nov 23, 2012
1 parent 376c8c6 commit 500c153
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 5 deletions.
4 changes: 2 additions & 2 deletions src/qtscript.cpp
Expand Up @@ -431,7 +431,8 @@ bool loadPlayerScript(QString path, int player, int difficulty)
engine->globalObject().setProperty("scavengerPlayer", scavengerPlayer(), QScriptValue::ReadOnly | QScriptValue::Undeletable);

// Regular functions
registerFunctions(engine);
QFileInfo basename(path);
registerFunctions(engine, basename.baseName());

// Remember internal, reserved names
QScriptValueIterator it(engine->globalObject());
Expand All @@ -449,7 +450,6 @@ bool loadPlayerScript(QString path, int player, int difficulty)

// We also need to save the special 'scriptName' variable.
//== \item[scriptName] Base name of the script that is running.
QFileInfo basename(path);
engine->globalObject().setProperty("scriptName", basename.baseName(), QScriptValue::ReadOnly | QScriptValue::Undeletable);

// Register script
Expand Down
35 changes: 33 additions & 2 deletions src/qtscriptfuncs.cpp
Expand Up @@ -72,7 +72,7 @@ extern Vector2i positions[MAX_PLAYERS];
extern std::vector<Vector2i> derricks;
typedef QMap<DROID *, int> GROUPMAP;
typedef QMap<QScriptEngine *, GROUPMAP *> ENGINEMAP;
ENGINEMAP groups;
static ENGINEMAP groups;

#define SCRIPT_ASSERT_PLAYER(_context, _player) \
SCRIPT_ASSERT(_context, _player >= 0 && _player < MAX_PLAYERS, "Invalid player index %d", _player);
Expand Down Expand Up @@ -1538,6 +1538,33 @@ static QScriptValue js_enumDroid(QScriptContext *context, QScriptEngine *engine)
return result;
}

//-- \subsection{dump(string...)}
//-- Output text to a debug file.
static QScriptValue js_dump(QScriptContext *context, QScriptEngine *engine)
{
QString result;
for (int i = 0; i < context->argumentCount(); ++i)
{
if (i != 0)
{
result.append(QLatin1String(" "));
}
QString s = context->argument(i).toString();
if (context->state() == QScriptContext::ExceptionState)
{
break;
}
result.append(s);
}
result += "\n";
QString scriptName = engine->globalObject().property("scriptName").toString();
QString path = "logs/" + scriptName +".log";
PHYSFS_file *fp = PHYSFS_openAppend(path.toUtf8().constData());
PHYSFS_write(fp, result.toUtf8().constData(), 1, strlen(result.toUtf8().constData()));
PHYSFS_close(fp);
return QScriptValue();
}

//-- \subsection{debug(string...)}
//-- Output text to the command line.
static QScriptValue js_debug(QScriptContext *context, QScriptEngine *engine)
Expand Down Expand Up @@ -2951,14 +2978,15 @@ bool unregisterFunctions(QScriptEngine *engine)
return true;
}

bool registerFunctions(QScriptEngine *engine)
bool registerFunctions(QScriptEngine *engine, QString scriptName)
{
// Create group map
GROUPMAP *psMap = new GROUPMAP;
groups.insert(engine, psMap);

// Register functions to the script engine here
engine->globalObject().setProperty("_", engine->newFunction(js_translate));
engine->globalObject().setProperty("dump", engine->newFunction(js_dump));
engine->globalObject().setProperty("label", engine->newFunction(js_label));
engine->globalObject().setProperty("addLabel", engine->newFunction(js_addLabel));
engine->globalObject().setProperty("enumLabels", engine->newFunction(js_enumLabels));
Expand Down Expand Up @@ -3185,5 +3213,8 @@ bool registerFunctions(QScriptEngine *engine)
engine->globalObject().setProperty("derrickPositions", derrickPositions, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("startPositions", startPositions, QScriptValue::ReadOnly | QScriptValue::Undeletable);

// Clear previous log file
PHYSFS_delete(QString("logs/" + scriptName +".log").toUtf8().constData());

return true;
}
2 changes: 1 addition & 1 deletion src/qtscriptfuncs.h
Expand Up @@ -42,7 +42,7 @@ enum SCRIPT_TYPES
void groupRemoveObject(const BASE_OBJECT *psObj);

/// Register functions to engine context
bool registerFunctions(QScriptEngine *engine);
bool registerFunctions(QScriptEngine *engine, QString scriptName);
bool unregisterFunctions(QScriptEngine *engine);

bool saveGroups(WzConfig &ini, QScriptEngine *engine);
Expand Down

0 comments on commit 500c153

Please sign in to comment.