(type*)((uintptr_t)obj - offsetof(type, member))
#endif
-/*
- Basic Runtime Facilities
-*/
-
-/* rename user's main routine so GC is auto-initialized and options parsed */
-extern int user_main(int argc, char** argv);
-#define main user_main
-
-extern void opts_setoption(int sname, char* lname, char* arg);
-
-
/*
Garbage Collector Interface
*/
int forkexec(char** cmd);
char* strmcat(char* first, ...);
+/*
+ Basic Runtime Facilities
+*/
+
+/* rename user's main routine so GC is auto-initialized and options parsed */
+#define main usermain
+
+extern int usermain(int argc, char** argv);
+extern void set_option(int sname, char* lname, char* arg);
+
extern char* ARGV0;
extern char* Usage;
extern Option_T Options[];
#include <liba.h>
-extern void opts_setoption(int sname, char* lname, char* arg)
+static void handle_option(int sname, char* lname, char* arg)
{
if (sname == 'h')
{
}
else
{
- printf(" --%s=%s\n", lname, arg);
+ set_option(sname, lname, arg);
}
}
-
static OptionDescriptor_T* lookup_opt(int optc, OptionDescriptor_T* optv, char* flag)
{
OptionDescriptor_T* opt = NULL;
}
}
printf("handled option: '--%s=%s'\n", flag, arg);
- opts_setoption(od->sname, od->lname, arg);
+ handle_option(od->sname, od->lname, arg);
}
/* now repair the split if we made one */
if (*arg != '\0')
{
arg += (*arg == '=' ? 1 : 0);
- opts_setoption(od->sname, od->lname, arg);
+ handle_option(od->sname, od->lname, arg);
break;
}
else if (!*arg)
{
fatal("expected argument for option: '%s'", flag);
}
- opts_setoption(od->sname, od->lname, arg);
+ handle_option(od->sname, od->lname, arg);
*currp += 1;
break;
}
}
else
{
- opts_setoption(od->sname, od->lname, NULL);
+ handle_option(od->sname, od->lname, NULL);
}
}
*currp += 1;