moved initialization of the sub programs to the main program
This commit is contained in:
98
bin/main.c
98
bin/main.c
@ -28,14 +28,51 @@
|
||||
#include <hawk.h>
|
||||
#include <hawk-xma.h>
|
||||
#include <stdio.h>
|
||||
#include <locale.h>
|
||||
|
||||
void main_xma_dumper_without_hawk (void* ctx, const hawk_bch_t* fmt, ...)
|
||||
#if defined(_WIN32)
|
||||
# include <windows.h>
|
||||
#elif defined(__OS2__)
|
||||
# define INCL_ERRORS
|
||||
# include <os2.h>
|
||||
# include <signal.h>
|
||||
#elif defined(__DOS__)
|
||||
# include <dos.h>
|
||||
# include <signal.h>
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# include <errno.h>
|
||||
# include <signal.h>
|
||||
#endif
|
||||
|
||||
/* -------------------------------------------------------- */
|
||||
|
||||
void hawk_main_print_xma (void* ctx, const hawk_bch_t* fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start (ap, fmt);
|
||||
vfprintf (stderr, fmt, ap);
|
||||
va_end (ap);
|
||||
}
|
||||
/* -------------------------------------------------------- */
|
||||
|
||||
void hawk_main_print_error (const hawk_bch_t* fmt, ...)
|
||||
{
|
||||
va_list va;
|
||||
fprintf (stderr, "ERROR: ");
|
||||
va_start (va, fmt);
|
||||
vfprintf (stderr, fmt, va);
|
||||
va_end (va);
|
||||
}
|
||||
|
||||
void hawk_main_print_warning (const hawk_bch_t* fmt, ...)
|
||||
{
|
||||
va_list va;
|
||||
fprintf (stderr, "WARNING: ");
|
||||
va_start (va, fmt);
|
||||
vfprintf (stderr, fmt, va);
|
||||
va_end (va);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------- */
|
||||
|
||||
@ -77,6 +114,51 @@ static struct {
|
||||
|
||||
int main(int argc, hawk_bch_t* argv[])
|
||||
{
|
||||
int ret;
|
||||
|
||||
#if defined(_WIN32)
|
||||
char locale[100];
|
||||
UINT codepage;
|
||||
WSADATA wsadata;
|
||||
int sock_inited = 0;
|
||||
#elif defined(__DOS__)
|
||||
extern BOOL _watt_do_exit;
|
||||
int sock_inited = 0;
|
||||
#else
|
||||
/* nothing special */
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32)
|
||||
codepage = GetConsoleOutputCP();
|
||||
if (codepage == CP_UTF8)
|
||||
{
|
||||
/*SetConsoleOUtputCP(CP_UTF8);*/
|
||||
/*hawk_setdflcmgrbyid(HAWK_CMGR_UTF8);*/
|
||||
}
|
||||
else
|
||||
{
|
||||
/* .codepage */
|
||||
hawk_fmt_uintmax_to_bcstr(locale, HAWK_COUNTOF(locale), codepage, 10, -1, '\0', ".");
|
||||
setlocale(LC_ALL, locale);
|
||||
/* hawk_setdflcmgrbyid(HAWK_CMGR_SLMB); */
|
||||
}
|
||||
|
||||
#else
|
||||
setlocale(LC_ALL, "");
|
||||
/* hawk_setdflcmgrbyid(HAWK_CMGR_SLMB); */
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32)
|
||||
if (WSAStartup(MAKEWORD(2,0), &wsadata) != 0)
|
||||
print_warning("Failed to start up winsock\n");
|
||||
else sock_inited = 1;
|
||||
#elif defined(__DOS__)
|
||||
/* TODO: add an option to skip watt-32 */
|
||||
_watt_do_exit = 0; /* prevent sock_init from exiting upon failure */
|
||||
if (sock_init() != 0) print_warning("Failed to initialize watt-32\n");
|
||||
else sock_inited = 1;
|
||||
#endif
|
||||
|
||||
if (argc >= 2)
|
||||
{
|
||||
hawk_oow_t i;
|
||||
@ -86,12 +168,22 @@ int main(int argc, hawk_bch_t* argv[])
|
||||
/* [NOTE]
|
||||
* if hawk is invoked via 'hawk --awk' or 'hawk --hawk',
|
||||
* the value ARGV[0] inside a hawk script is "--awk" or "--hawk" */
|
||||
return entry_funcs[i].main(argc -1, &argv[1], argv[0]);
|
||||
ret = entry_funcs[i].main(argc -1, &argv[1], argv[0]);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return main_hawk(argc, argv, HAWK_NULL);
|
||||
ret = main_hawk(argc, argv, HAWK_NULL);
|
||||
|
||||
done:
|
||||
#if defined(_WIN32)
|
||||
if (sock_inited) WSACleanup();
|
||||
#elif defined(__DOS__)
|
||||
if (sock_inited) sock_exit();
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
Reference in New Issue
Block a user