summaryrefslogtreecommitdiff
path: root/command_line/CmdLine/Src/Clients
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--command_line/CmdLine/Src/Clients/CLStaticMain.c45
-rw-r--r--command_line/CmdLine/Src/Clients/ClientGlue.c57
2 files changed, 102 insertions, 0 deletions
diff --git a/command_line/CmdLine/Src/Clients/CLStaticMain.c b/command_line/CmdLine/Src/Clients/CLStaticMain.c
new file mode 100644
index 0000000..cecab30
--- /dev/null
+++ b/command_line/CmdLine/Src/Clients/CLStaticMain.c
@@ -0,0 +1,45 @@
+#include "mwcc_decomp.h"
+
+int main(int argc, const char **argv) {
+ OSType cpu;
+ OSType os;
+ OSType lang;
+ OSType type;
+ OSType style;
+ int ret;
+
+ if (CmdLine_Initialize(argc, argv, CMDLINE_BUILD_DATE, CMDLINE_BUILD_TIME))
+ exit(1);
+
+ if (!RegisterStaticParserResources() || !RegisterStaticTargetResources()) {
+ fprintf(stderr, "\nFATAL ERROR: Could not initialize resource strings\n");
+ exit(1);
+ }
+
+ if (!RegisterStaticParserPlugins() || !RegisterStaticTargetPlugins()) {
+ fprintf(stderr, "\nFATAL ERROR: Could not initialize built-in plugins\n");
+ exit(1);
+ }
+
+ if (!RegisterStaticParserToolInfo()) {
+ fprintf(stderr, "\nFATAL ERROR: Could not initialize options\n");
+ exit(1);
+ }
+
+ GetStaticTarget(&cpu, &os);
+ SetBuildTarget(cpu, os);
+ GetStaticPluginType(&lang, &type);
+ SetPluginType(lang, type);
+ GetStaticParserPluginType(&style);
+ SetParserType(style);
+
+ ret = CmdLine_Driver();
+ if (ret) {
+ if (ret == 2)
+ fprintf(stderr, "\nUser break, cancelled...\n");
+ else
+ fprintf(stderr, "\nErrors caused tool to abort.\n");
+ }
+ CmdLine_Terminate(ret);
+ return ret;
+}
diff --git a/command_line/CmdLine/Src/Clients/ClientGlue.c b/command_line/CmdLine/Src/Clients/ClientGlue.c
new file mode 100644
index 0000000..9573f51
--- /dev/null
+++ b/command_line/CmdLine/Src/Clients/ClientGlue.c
@@ -0,0 +1,57 @@
+#include "mwcc_decomp.h"
+
+int RegisterResource(const char *name, SInt16 rsrcid, Handle list) {
+ Handle h;
+
+ if (list == 0) {
+ h = GetResource('STR#', rsrcid);
+ if (h == 0) {
+ CLFatalError("Resource ('STR#',%d) '%s' not found in executable\n", rsrcid, name);
+ return 0;
+ }
+ ReleaseResource(h);
+ return 1;
+ } else {
+ return Res_AddResource(name, rsrcid, list);
+ }
+}
+
+int RegisterStaticPlugin(const BasePluginCallbacks *callbacks) {
+ return Plugins_Add(Plugin_New(callbacks, 0, 0));
+}
+
+int RegisterStaticCompilerLinkerPlugin(const BasePluginCallbacks *callbacks, const CompilerLinkerPluginCallbacks *cl_callbacks) {
+ return Plugins_Add(Plugin_New(callbacks, cl_callbacks, 0));
+}
+
+int RegisterStaticParserPlugin(const BasePluginCallbacks *callbacks, const ParserPluginCallbacks *pr_callbacks) {
+ return Plugins_Add(Plugin_New(callbacks, 0, pr_callbacks));
+}
+
+void SetBuildTarget(OSType cpu, OSType os) {
+ clState.cpu = cpu;
+ clState.os = os;
+}
+
+void SetParserType(OSType plang) {
+ clState.parserstyle = plang;
+}
+
+void SetPluginType(OSType lang, OSType type) {
+ clState.language = lang;
+ clState.plugintype = type;
+}
+
+int CmdLine_Initialize(int argc, const char **argv, const char *builddate, const char *buildtime) {
+ strncpy(cmdline_build_date, builddate, sizeof(cmdline_build_date));
+ strncpy(cmdline_build_time, buildtime, sizeof(cmdline_build_time));
+ return Main_Initialize(argc, argv);
+}
+
+int CmdLine_Driver() {
+ return Main_Driver();
+}
+
+int CmdLine_Terminate(int exitcode) {
+ return Main_Terminate(exitcode);
+}