moved initialization of the sub programs to the main program

This commit is contained in:
hyung-hwan 2025-06-03 22:18:22 +09:00
parent 715085c778
commit cbbc06179a
4 changed files with 145 additions and 167 deletions

View File

@ -1013,7 +1013,7 @@ static void print_hawk_rtx_error (hawk_rtx_t* rtx)
); );
} }
static HAWK_INLINE int execute_hawk (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0) int main_hawk(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0)
{ {
hawk_t* hawk = HAWK_NULL; hawk_t* hawk = HAWK_NULL;
hawk_rtx_t* rtx = HAWK_NULL; hawk_rtx_t* rtx = HAWK_NULL;
@ -1206,7 +1206,7 @@ oops:
if (arg.memlimit > 0) if (arg.memlimit > 0)
{ {
if (arg.debug) hawk_xma_dump (xma_mmgr.ctx, main_xma_dumper_without_hawk, HAWK_NULL); if (arg.debug) hawk_xma_dump (xma_mmgr.ctx, hawk_main_print_xma, HAWK_NULL);
hawk_fini_xma_mmgr (&xma_mmgr); hawk_fini_xma_mmgr (&xma_mmgr);
} }
freearg (&arg); freearg (&arg);
@ -1214,62 +1214,3 @@ oops:
return ret; return ret;
} }
/* ---------------------------------------------------------------------- */
int main_hawk(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0)
{
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
ret = execute_hawk(argc, argv, real_argv0);
#if defined(_WIN32)
if (sock_inited) WSACleanup ();
#elif defined(__DOS__)
if (sock_inited) sock_exit ();
#endif
return ret;
}

View File

@ -28,14 +28,51 @@
#include <hawk.h> #include <hawk.h>
#include <hawk-xma.h> #include <hawk-xma.h>
#include <stdio.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_list ap;
va_start (ap, fmt); va_start (ap, fmt);
vfprintf (stderr, fmt, ap); vfprintf (stderr, fmt, ap);
va_end (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 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) if (argc >= 2)
{ {
hawk_oow_t i; hawk_oow_t i;
@ -86,12 +168,22 @@ int main(int argc, hawk_bch_t* argv[])
/* [NOTE] /* [NOTE]
* if hawk is invoked via 'hawk --awk' or 'hawk --hawk', * if hawk is invoked via 'hawk --awk' or 'hawk --hawk',
* the value ARGV[0] inside a hawk script is "--awk" or "--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;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */

View File

@ -33,11 +33,13 @@
extern "C" { extern "C" {
#endif #endif
int main_cut(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0);
int main_hawk(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0); int main_hawk(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0);
int main_sed(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0); int main_sed(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0);
void main_xma_dumper_without_hawk (void* ctx, const hawk_bch_t* fmt, ...); void hawk_main_print_xma (void* ctx, const hawk_bch_t* fmt, ...);
void hawk_main_print_error (const hawk_bch_t* fmt, ...);
void hawk_main_print_warning (const hawk_bch_t* fmt, ...);
#if defined(__cplusplus) #if defined(__cplusplus)
} }

View File

@ -698,7 +698,7 @@ static int expand_wildcards (int argc, hawk_bch_t* argv[], int glob, xarg_t* xar
return 0; return 0;
} }
static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0) int main_sed(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0)
{ {
hawk_sed_t* sed = HAWK_NULL; hawk_sed_t* sed = HAWK_NULL;
hawk_oow_t script_count; hawk_oow_t script_count;
@ -997,7 +997,7 @@ oops:
if (sed) hawk_sed_close(sed); if (sed) hawk_sed_close(sed);
if (arg.memlimit > 0) if (arg.memlimit > 0)
{ {
if (arg.debug) hawk_xma_dump (xma_mmgr.ctx, main_xma_dumper_without_hawk, HAWK_NULL); if (arg.debug) hawk_xma_dump(xma_mmgr.ctx, hawk_main_print_xma, HAWK_NULL);
hawk_fini_xma_mmgr(&xma_mmgr); hawk_fini_xma_mmgr(&xma_mmgr);
} }
free_scripts(); free_scripts();
@ -1005,60 +1005,3 @@ oops:
return ret; return ret;
} }
int main_sed(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0)
{
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
ret = execute_sed(argc, argv, real_argv0);
#if defined(_WIN32)
if (sock_inited) WSACleanup ();
#elif defined(__DOS__)
if (sock_inited) sock_exit ();
#endif
return ret;
}