int main(int argc, char** argv) { #ifdef WIN32 const Vector<String>& arguments = ParseArguments(GetCommandLineW()); #else const Vector<String>& arguments = ParseArguments(argc, argv); #endif bool dumpApiMode = false; String outputFile; if (arguments.Size() < 1) ErrorExit("Usage: ScriptCompiler <input file> [resource path for includes]\n" " ScriptCompiler -dumpapi [output file]"); else { if (arguments[0] != "-dumpapi") outputFile = arguments[0]; else { dumpApiMode = true; if (arguments.Size() > 1) outputFile = arguments[1]; } } SharedPtr<Context> context(new Context()); // Note: creating the Engine registers most subsystems which don't require engine initialization SharedPtr<Engine> engine(new Engine(context)); context->RegisterSubsystem(new Script(context)); Log* log = context->GetSubsystem<Log>(); // Register Log subsystem manually if compiled without logging support if (!log) { context->RegisterSubsystem(new Log(context)); log = context->GetSubsystem<Log>(); } log->SetLevel(LOG_WARNING); log->SetTimeStamp(false); if (!dumpApiMode) { String path, file, extension; SplitPath(outputFile, path, file, extension); ResourceCache* cache = context->GetSubsystem<ResourceCache>(); // Add resource path to be able to resolve includes if (arguments.Size() > 1) cache->AddResourceDir(arguments[1]); else cache->AddResourceDir(cache->GetPreferredResourceDir(path)); if (!file.StartsWith("*")) CompileScript(context, outputFile); else { Vector<String> scriptFiles; context->GetSubsystem<FileSystem>()->ScanDir(scriptFiles, path, file + extension, SCAN_FILES, false); for (unsigned i = 0; i < scriptFiles.Size(); ++i) CompileScript(context, path + scriptFiles[i]); } } else { if (!outputFile.Empty()) { log->SetQuiet(true); log->Open(outputFile); } // If without output file, dump to stdout instead context->GetSubsystem<Script>()->DumpAPI(); } return EXIT_SUCCESS; }