summaryrefslogtreecommitdiff
path: root/unsorted/ParserFace.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--unsorted/ParserFace.c (renamed from ParserFace.c)156
1 files changed, 114 insertions, 42 deletions
diff --git a/ParserFace.c b/unsorted/ParserFace.c
index 7ce84e5..24f3213 100644
--- a/ParserFace.c
+++ b/unsorted/ParserFace.c
@@ -1,31 +1,14 @@
-#include "UCWInterface.h"
+#include "mwcc_decomp.h"
+const char *failedCallback;
+jmp_buf exit_plugin;
struct ParseOptsType parseopts;
-// TODO move me imports
-extern CWResult CWSecretGetNamedPreferences(CWPluginContext context, const char *name, Handle *pHandle);
-extern CWResult CWParserSetNamedPreferences(CWPluginContext context, const char *name, Handle pHandle);
-extern CWResult CWParserGetCommandLine(CWPluginContext context, CWCommandLineArgs **pArgs);
-extern CWResult CWParserGetToolInfo(CWPluginContext context, struct ToolVersionInfo **pToolVersion);
-extern CWResult CWParserGetTargetInfo(CWPluginContext context, unsigned long *pCpu, unsigned long *pOs);
-extern CWResult CWParserGetPanels(CWPluginContext context, int *pNumPanels, char ***pPanelNames);
-extern CWResult CWParserGetPlugins(CWPluginContext context, int *pNumPlugins, struct CLPluginInfo **pPlugins);
-extern void/*?*/ CWGetPluginRequest(CWPluginContext context, long *request);
-extern void/*?*/ CWDonePluginRequest(CWPluginContext context, CWResult result);
-extern void *pTool;
-extern void SetupParserToolOptions();
-extern void CLPReportError(short code, ...);
-extern unsigned char ParserToolMatchesPlugin(unsigned long plugintype, unsigned long language, unsigned long cpu, unsigned long os);
-extern unsigned char ParserToolHandlesPanels(int numPanels, char **panelNames);
-// TODO move me imports
-
-char *failedCallback;
-
static CWResult SetupParamBlock(CWPluginContext context) {
- struct PCmdLineEnvir cle;
- Handle h;
- int x;
CWResult result;
+ int x;
+ Handle h;
+ PCmdLineEnvir cle;
memset(&parseopts, 0, sizeof(parseopts));
parseopts.context = context;
@@ -34,7 +17,7 @@ static CWResult SetupParamBlock(CWPluginContext context) {
if (result)
return result;
- cle = **((struct PCmdLineEnvir **) h);
+ cle = **((PCmdLineEnvir **) h);
parseopts.underIDE = cle.underIDE;
parseopts.ioRows = cle.rows;
parseopts.ioCols = cle.cols;
@@ -80,28 +63,80 @@ static CWResult SetupOptions(CWPluginContext context) {
static CWResult Parse(CWPluginContext context) {
CWResult result;
- // TODO
- return result;
+ parseopts.success = 1;
+ parseopts.currentSegment = 1;
+ parseopts.currentOverlayGroup = 0;
+ parseopts.currentOverlay = 0;
+
+ Arg_InitToolArgs(&linkargs);
+ Arg_InitToolArgs(&prelinkargs);
+ Arg_InitToolArgs(&postlinkargs);
+
+ if (pTool->PreParse)
+ parseopts.success &= pTool->PreParse();
+
+ Arg_Init(parseopts.args->argc, parseopts.args->argv);
+ parseopts.noOptions = Arg_IsEmpty();
+ parseopts.success &= Options_Parse(Options_GetOptions(), OFLAGS_1) && !parseopts.hadErrors;
+ Arg_Reset();
+
+ result = Parser_StorePanels(context);
+ if (result)
+ return result;
+
+ if (pTool->MidParse && parseopts.success)
+ parseopts.success &= pTool->MidParse();
+
+ result = Parser_StorePanels(context);
+ if (result)
+ return result;
+
+ if (parseopts.showHelp && parseopts.success)
+ parseopts.success &= Options_DisplayHelp();
+
+ Arg_Reset();
+ if (parseopts.success)
+ parseopts.success &= Options_Parse(Options_GetOptions(), 0) && !parseopts.hadErrors;
+
+ if (pTool->PostParse && parseopts.success)
+ parseopts.success &= pTool->PostParse();
+
+ Arg_Terminate();
+
+ return (parseopts.success && !parseopts.hadErrors) ? cwNoErr : cwErrRequestFailed;
}
-Handle Parser_FindPrefPanel(char *name) {
- Handle h;
+Handle Parser_FindPrefPanel(const char *name) {
int idx;
+ Handle h;
+
+ for (idx = 0; idx < pTool->numPrefDataPanels; idx++) {
+ if (!ustrcmp(name, pTool->prefDataPanels[idx].name)) {
+ h = NewHandle(pTool->prefDataPanels[idx].size);
+ if (!h)
+ return NULL;
+
+ HLock(h);
+ memcpy(*h, pTool->prefDataPanels[idx].ptr, pTool->prefDataPanels[idx].size);
+ HUnlock(h);
+ return h;
+ }
+ }
- // TODO pTool
+ return NULL;
}
CWResult Parser_StorePanels(CWPluginContext context) {
int idx;
CWResult result;
- char *name;
+ const char *name;
Handle h;
for (idx = 0; idx < parseopts.numPanels; idx++) {
name = parseopts.panelNames[idx];
h = Parser_FindPrefPanel(name);
if (h) {
- result = CWParserSetNamedPreferences(parseopts.context, name, h);
+ result = CWParserSetNamedPreferences(parseopts.context, name, (CWMemHandle) h);
if (result) {
CLPReportError(68, name);
return result;
@@ -109,14 +144,53 @@ CWResult Parser_StorePanels(CWPluginContext context) {
}
}
- return 0;
+ return cwNoErr;
}
static CWResult StoreResults(CWPluginContext context) {
- // TODO Arg
+ int idx; // r25
+ CWResult result;
+ CWCommandLineArgs args;
+ UInt32 id; // r8
+ UInt32 lg; // r10
+
+ result = Parser_StorePanels(context);
+ if (result)
+ return result;
+
+ for (idx = 0; idx < parseopts.numPlugins; idx++) {
+ if (parseopts.plugins[idx].plugintype == CWDROPINLINKERTYPE && parseopts.plugins[idx].storeCommandLine) {
+ if (parseopts.plugins[idx].dropinflags & isPreLinker) {
+ Arg_ToolArgsForPlugin(&prelinkargs, &args);
+ } else if (parseopts.plugins[idx].dropinflags & isPostLinker) {
+ Arg_ToolArgsForPlugin(&postlinkargs, &args);
+ } else {
+ Arg_ToolArgsForPlugin(&linkargs, &args);
+ }
+ result = CWParserStoreCommandLineForPlugin(parseopts.context, idx, &args);
+ if (result)
+ return result;
+ } else if (parseopts.plugins[idx].storeCommandLine) {
+ id = parseopts.plugins[idx].plugintype;
+ lg = parseopts.plugins[idx].language;
+ fprintf(stderr,
+ "*** No support for %c%c%c%c/%c%c%c%c tool\n",
+ (id & 0xFF000000) >> 24,
+ (id & 0x00FF0000) >> 16,
+ (id & 0x0000FF00) >> 8,
+ (id & 0x000000FF),
+ (lg & 0xFF000000) >> 24,
+ (lg & 0x00FF0000) >> 16,
+ (lg & 0x0000FF00) >> 8,
+ (lg & 0x000000FF)
+ );
+ }
+ }
+
+ return cwNoErr;
}
-short CWParser_GetDropInFlags(const DropInFlags **flags, long *flagsSize) {
+short CWParser_GetDropInFlags(const DropInFlags **flags, SInt32 *flagsSize) {
static const DropInFlags sFlags = {
kCurrentDropInFlagsVersion,
CWFOURCHAR('P','a','r','s'),
@@ -143,7 +217,7 @@ short CWParser_GetDisplayName(const char **displayName) {
}
short CWParser_GetPanelList(const CWPanelList **panelList) {
- static const CWPanelList sPanelList = {
+ static CWPanelList sPanelList = {
kCurrentCWFamilyListVersion,
0,
0
@@ -153,9 +227,9 @@ short CWParser_GetPanelList(const CWPanelList **panelList) {
}
short CWParser_GetTargetList(const CWTargetList **targetList) {
- static const unsigned long sCPU = '****';
- static const unsigned long sOS = '****';
- static const CWTargetList sTargetList = {
+ static CWDataType sCPU = '****';
+ static CWDataType sOS = '****';
+ static CWTargetList sTargetList = {
kCurrentCWTargetListVersion,
1,
&sCPU,
@@ -179,16 +253,14 @@ short Parser_SupportsPlugin(struct CLPluginInfo *pluginfo, CWDataType cpu, CWDat
return 0;
}
-short Parser_SupportsPanels(int numPanels, char **panelNames, Boolean *isSupported) {
+short Parser_SupportsPanels(int numPanels, const char **panelNames, Boolean *isSupported) {
*isSupported = ParserToolHandlesPanels(numPanels, panelNames);
return 0;
}
-jmp_buf exit_plugin;
-
short parser_main(CWPluginContext context) {
- long request;
CWResult result;
+ SInt32 request;
CWGetPluginRequest(context, &request);
result = setjmp(exit_plugin);