X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FLog.cc;h=96c70955da1231d9d687260f75698ba5d9c74f74;hp=0639a601dba5f2edb4e64212eba3862425e8873e;hb=ca0f7bdfba63140dca0bd20586d31980f3938eb2;hpb=660e768e64c2c30928c7f157d5ff34195a4347fa diff --git a/src/Moof/Log.cc b/src/Moof/Log.cc index 0639a60..96c7095 100644 --- a/src/Moof/Log.cc +++ b/src/Moof/Log.cc @@ -31,6 +31,7 @@ #include // strcpy #include "Log.hh" +#include "Script.hh" namespace Mf { @@ -50,6 +51,9 @@ inline void printLog_(int logLevel, const char* fmt, va_list args) case LOG_WARNING: fprintf(stderr, "warning: "); break; + case LOG_SCRIPT: + fprintf(stderr, " script: "); + break; case LOG_INFO: fprintf(stderr, " info: "); break; @@ -112,6 +116,56 @@ void logDebug(const char* fmt, ...) va_end(args); } +static void logScript(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + + printLog_(LOG_SCRIPT, fmt, args); + + va_end(args); +} + +int logScript(Script& script) +{ + Script::Value param = script[1]; + + while (!param.isNone()) + { + if (param.isString()) + { + std::string str; + param.get(str); + logScript("%s", str.c_str()); + } + else if (param.isBoolean()) + { + if (param) logScript("true"); + else logScript("false"); + + } + else if (param.isNil()) + { + logScript("nil"); + } + else + { + logScript("%s (%X)", param.getTypeName().c_str(), + param.getIdentifier()); + } + + param.index++; + } + + return 0; +} + + +void importLogScript(Script& script) +{ + script.importFunction("print", (int (*)(Script&))logScript); +} + } // namespace Mf