diff --git a/bin/Makefile.am b/bin/Makefile.am index a5d690fa..b5b8db7d 100644 --- a/bin/Makefile.am +++ b/bin/Makefile.am @@ -18,7 +18,7 @@ bin_PROGRAMS = hawk ################################################## # hawk ################################################## -hawk_SOURCES = hawk.c sed.c main.h +hawk_SOURCES = hawk.c sed.c main.c main.h hawk_CPPFLAGS = $(CPPFLAGS_COMMON) hawk_CFLAGS = $(CFLAGS_COMMON) hawk_LDFLAGS = $(LDFLAGS_COMMON) diff --git a/bin/Makefile.in b/bin/Makefile.in index 3bdec581..c8db8c66 100644 --- a/bin/Makefile.in +++ b/bin/Makefile.in @@ -111,7 +111,8 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) -am_hawk_OBJECTS = hawk-hawk.$(OBJEXT) hawk-sed.$(OBJEXT) +am_hawk_OBJECTS = hawk-hawk.$(OBJEXT) hawk-sed.$(OBJEXT) \ + hawk-main.$(OBJEXT) hawk_OBJECTS = $(am_hawk_OBJECTS) am__DEPENDENCIES_1 = hawk_DEPENDENCIES = $(LIBADD_COMMON) $(am__DEPENDENCIES_1) @@ -137,7 +138,8 @@ am__v_at_1 = DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/ac/depcomp am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/hawk-hawk.Po ./$(DEPDIR)/hawk-sed.Po +am__depfiles_remade = ./$(DEPDIR)/hawk-hawk.Po \ + ./$(DEPDIR)/hawk-main.Po ./$(DEPDIR)/hawk-sed.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -354,7 +356,7 @@ LIBADD_COMMON = ../lib/libhawk.la ################################################## # hawk ################################################## -hawk_SOURCES = hawk.c sed.c main.h +hawk_SOURCES = hawk.c sed.c main.c main.h hawk_CPPFLAGS = $(CPPFLAGS_COMMON) hawk_CFLAGS = $(CFLAGS_COMMON) hawk_LDFLAGS = $(LDFLAGS_COMMON) @@ -448,6 +450,7 @@ distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hawk-hawk.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hawk-main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hawk-sed.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @@ -508,6 +511,20 @@ hawk-sed.obj: sed.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hawk_CPPFLAGS) $(CPPFLAGS) $(hawk_CFLAGS) $(CFLAGS) -c -o hawk-sed.obj `if test -f 'sed.c'; then $(CYGPATH_W) 'sed.c'; else $(CYGPATH_W) '$(srcdir)/sed.c'; fi` +hawk-main.o: main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hawk_CPPFLAGS) $(CPPFLAGS) $(hawk_CFLAGS) $(CFLAGS) -MT hawk-main.o -MD -MP -MF $(DEPDIR)/hawk-main.Tpo -c -o hawk-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hawk-main.Tpo $(DEPDIR)/hawk-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='hawk-main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hawk_CPPFLAGS) $(CPPFLAGS) $(hawk_CFLAGS) $(CFLAGS) -c -o hawk-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c + +hawk-main.obj: main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hawk_CPPFLAGS) $(CPPFLAGS) $(hawk_CFLAGS) $(CFLAGS) -MT hawk-main.obj -MD -MP -MF $(DEPDIR)/hawk-main.Tpo -c -o hawk-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hawk-main.Tpo $(DEPDIR)/hawk-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='hawk-main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hawk_CPPFLAGS) $(CPPFLAGS) $(hawk_CFLAGS) $(CFLAGS) -c -o hawk-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` + mostlyclean-libtool: -rm -f *.lo @@ -641,6 +658,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/hawk-hawk.Po + -rm -f ./$(DEPDIR)/hawk-main.Po -rm -f ./$(DEPDIR)/hawk-sed.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ @@ -688,6 +706,7 @@ installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/hawk-hawk.Po + -rm -f ./$(DEPDIR)/hawk-main.Po -rm -f ./$(DEPDIR)/hawk-sed.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic diff --git a/bin/hawk.c b/bin/hawk.c index dbd2c389..4bc79cb1 100644 --- a/bin/hawk.c +++ b/bin/hawk.c @@ -529,13 +529,15 @@ struct opttab_t { HAWK_NULL, 0, HAWK_NULL } }; -static void print_usage (FILE* out, const hawk_bch_t* argv0) +static void print_usage (FILE* out, const hawk_bch_t* argv0, const hawk_bch_t* real_argv0) { int j; - const hawk_bch_t* b = hawk_get_base_name_bcstr(argv0); + const hawk_bch_t* b1 = hawk_get_base_name_bcstr(real_argv0? real_argv0: argv0); + const hawk_bch_t* b2 = (real_argv0? " ": ""); + const hawk_bch_t* b3 = (real_argv0? argv0: ""); - fprintf (out, "USAGE: %s [options] -f sourcefile [ -- ] [datafile]*\n", b); - fprintf (out, " %s [options] [ -- ] sourcestring [datafile]*\n", b); + fprintf (out, "USAGE: %s%s%s [options] -f sourcefile [ -- ] [datafile]*\n", b1, b2, b3); + fprintf (out, " %s%s%s [options] [ -- ] sourcestring [datafile]*\n", b1, b2, b3); fprintf (out, "Where options are:\n"); fprintf (out, " -h/--help print this message\n"); fprintf (out, " --version print version\n"); @@ -650,7 +652,7 @@ static int expand_wildcard (int argc, hawk_bch_t* argv[], int do_glob, xarg_t* x /* ---------------------------------------------------------------------- */ -static int process_argv (int argc, hawk_bch_t* argv[], struct arg_t* arg) +static int process_argv (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0, struct arg_t* arg) { static hawk_bcli_lng_t lng[] = { @@ -865,7 +867,7 @@ static int process_argv (int argc, hawk_bch_t* argv[], struct arg_t* arg) if (hawk_comp_bcstr(opt.lngopt, "version", 0) == 0) { - print_version (argv[0]); + print_version (real_argv0? real_argv0: argv[0]); oops_ret = 2; goto oops; } @@ -1123,7 +1125,7 @@ static hawk_mmgr_t debug_mmgr = }; #endif -static HAWK_INLINE int execute_hawk (int argc, hawk_bch_t* argv[]) +static HAWK_INLINE int execute_hawk (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0) { hawk_t* hawk = HAWK_NULL; hawk_rtx_t* rtx = HAWK_NULL; @@ -1146,10 +1148,10 @@ static HAWK_INLINE int execute_hawk (int argc, hawk_bch_t* argv[]) hawk_parsestd_t psout; hawk_mmgr_t* mmgr = hawk_get_sys_mmgr(); - i = process_argv(argc, argv, &arg); + i = process_argv(argc, argv, real_argv0, &arg); if (i <= 0) { - print_usage (((i == 0)? stdout: stderr), argv[0]); + print_usage (((i == 0)? stdout: stderr), argv[0], real_argv0); return i; } if (i == 2) return 0; @@ -1348,7 +1350,7 @@ oops: /* ---------------------------------------------------------------------- */ -static int main_hawk(int argc, hawk_bch_t* argv[]) +int main_hawk(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0) { int ret; @@ -1395,7 +1397,7 @@ static int main_hawk(int argc, hawk_bch_t* argv[]) else sock_inited = 1; #endif - ret = execute_hawk(argc, argv); + ret = execute_hawk(argc, argv, real_argv0); #if defined(_WIN32) if (sock_inited) WSACleanup (); @@ -1405,47 +1407,3 @@ static int main_hawk(int argc, hawk_bch_t* argv[]) return ret; } - -int main(int argc, hawk_bch_t* argv[]) -{ - const hawk_bch_t* base; - - base = hawk_get_base_name_bcstr(argv[0]); - if (hawk_comp_bcstr(base, "sed", 0) == 0 || hawk_comp_bcstr(base, "hawk-sed", 0) == 0) - { - /* sed ... */ - /* hawk-sed ... */ - return main_sed(argc, argv); - } - - if (argc >= 2 && hawk_comp_bcstr(argv[1], "sed", 0) == 0) - { - /* hawk sed ... */ - return main_sed(argc - 1, &argv[1]); - } - else if (argc >= 2 && hawk_comp_bcstr(argv[1], "awk", 0) == 0) - { - /* hawk awk ... */ - return main_hawk(argc - 1, &argv[1]); - } - - return main_hawk(argc, argv); -} - -/* ---------------------------------------------------------------------- */ - -#if defined(FAKE_SOCKET) -socket () {} -listen () {} -accept () {} -recvfrom () {} -connect () {} -getsockopt () {} -recv () {} -setsockopt () {} -send () {} -bind () {} -shutdown () {} - -void* memmove (void* x, void* y, size_t z) {} -#endif diff --git a/bin/main.c b/bin/main.c new file mode 100644 index 00000000..b2beffc4 --- /dev/null +++ b/bin/main.c @@ -0,0 +1,62 @@ +/* + * $Id$ + * + Copyright (c) 2006-2020 Chung, Hyung-Hwan. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "main.h" + +int main(int argc, hawk_bch_t* argv[]) +{ + if (argc >= 2 && hawk_comp_bcstr(argv[1], "--sed", 0) == 0) + { + /* hawk --sed ... */ + return main_sed(argc - 1, &argv[1], argv[0]); + } + else if (argc >= 2 && hawk_comp_bcstr(argv[1], "--awk", 0) == 0) + { + /* hawk --awk ... */ + /* in this mode, the value ARGV[0] inside a hawk script is "--awk" */ + return main_hawk(argc - 1, &argv[1], argv[0]); + } + + return main_hawk(argc, argv, HAWK_NULL); +} + +/* ---------------------------------------------------------------------- */ + +#if defined(FAKE_SOCKET) +socket () {} +listen () {} +accept () {} +recvfrom () {} +connect () {} +getsockopt () {} +recv () {} +setsockopt () {} +send () {} +bind () {} +shutdown () {} + +void* memmove (void* x, void* y, size_t z) {} +#endif diff --git a/bin/main.h b/bin/main.h index 8b042c83..96d79d9d 100644 --- a/bin/main.h +++ b/bin/main.h @@ -1,3 +1,28 @@ +/* + * $Id$ + * + Copyright (c) 2006-2020 Chung, Hyung-Hwan. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #ifndef _MAIN_H_ #define _MAIN_H_ @@ -8,7 +33,8 @@ extern "C" { #endif -int main_sed(int argc, hawk_bch_t* argv[]); +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); #if defined(__cplusplus) diff --git a/bin/sed.c b/bin/sed.c index 521d116e..230efe87 100644 --- a/bin/sed.c +++ b/bin/sed.c @@ -174,7 +174,7 @@ static hawk_mmgr_t debug_mmgr = static void print_version (const hawk_bch_t* argv0) { - fprintf (stdout, "%s (HAWK SED) %s\n", hawk_get_base_name_bcstr(argv0), HAWK_PACKAGE_VERSION); + fprintf (stdout, "%s %s\n", hawk_get_base_name_bcstr(argv0), HAWK_PACKAGE_VERSION); fprintf (stdout, "Copyright 2006-2022 Chung, Hyung-Hwan\n"); } @@ -196,13 +196,15 @@ static void print_warning (const hawk_bch_t* fmt, ...) va_end (va); } -static void print_usage (FILE* out, int argc, hawk_bch_t* argv[]) +static void print_usage (FILE* out, const hawk_bch_t* argv0, const hawk_bch_t* real_argv0) { - const hawk_bch_t* b = hawk_get_base_name_bcstr(argv[0]); + const hawk_bch_t* b1 = hawk_get_base_name_bcstr(real_argv0? real_argv0: argv0); + const hawk_bch_t* b2 = (real_argv0? " ": ""); + const hawk_bch_t* b3 = (real_argv0? argv0: ""); - fprintf (out, "USAGE: %s [options] script [file]\n", b); - fprintf (out, " %s [options] -f script-file [file]\n", b); - fprintf (out, " %s [options] -e script [file]\n", b); + fprintf (out, "USAGE: %s%s%s [options] script [file]\n", b1, b2, b3); + fprintf (out, " %s%s%s [options] -f script-file [file]\n", b1, b2, b3); + fprintf (out, " %s%s%s [options] -e script [file]\n", b1, b2, b3); fprintf (out, "options as follows:\n"); fprintf (out, " -h/--help show this message\n"); @@ -284,7 +286,7 @@ static void free_scripts (void) } } -static int handle_args (int argc, hawk_bch_t* argv[], struct arg_t* arg) +static int handle_args (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0, struct arg_t* arg) { static hawk_bcli_lng_t lng[] = { @@ -314,21 +316,21 @@ static int handle_args (int argc, hawk_bch_t* argv[], struct arg_t* arg) switch (c) { default: - print_usage (stderr, argc, argv); + print_usage (stderr, argv[0], real_argv0); goto oops; case '?': print_error ("bad option - %c\n", opt.opt); - print_usage (stderr, argc, argv); + print_usage (stderr, argv[0], real_argv0); goto oops; case ':': print_error ("bad parameter for %c\n", opt.opt); - print_usage (stderr, argc, argv); + print_usage (stderr, argv[0], real_argv0); goto oops; case 'h': - print_usage (stdout, argc, argv); + print_usage (stdout, argv[0], real_argv0); goto done; case 'n': @@ -384,7 +386,7 @@ static int handle_args (int argc, hawk_bch_t* argv[], struct arg_t* arg) arg->trace = 1; break; #else - print_usage (stderr, argc, argv); + print_usage (stderr, argv[0], real_argv0); goto oops; #endif @@ -406,7 +408,7 @@ static int handle_args (int argc, hawk_bch_t* argv[], struct arg_t* arg) { if (hawk_comp_bcstr(opt.lngopt, "version", 0) == 0) { - print_version (argv[0]); + print_version (real_argv0? real_argv0: argv[0]); goto done; } else if (hawk_comp_bcstr(opt.lngopt, "script-encoding", 0) == 0) @@ -450,7 +452,7 @@ static int handle_args (int argc, hawk_bch_t* argv[], struct arg_t* arg) if (g_script.size <= 0) { - print_usage (stderr, argc, argv); + print_usage (stderr, argv[0], real_argv0); goto oops; } @@ -791,7 +793,7 @@ static int expand_wildcards (int argc, hawk_bch_t* argv[], int glob, xarg_t* xar return 0; } -static HAWK_INLINE int execute_hawk_sed (int argc, hawk_bch_t* argv[]) +static HAWK_INLINE int execute_sed (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0) { hawk_sed_t* sed = HAWK_NULL; hawk_oow_t script_count; @@ -803,7 +805,7 @@ static HAWK_INLINE int execute_hawk_sed (int argc, hawk_bch_t* argv[]) hawk_cmgr_t* cmgr = hawk_get_cmgr_by_id(HAWK_CMGR_UTF8); memset (&arg, 0, HAWK_SIZEOF(arg)); - ret = handle_args(argc, argv, &arg); + ret = handle_args(argc, argv, real_argv0, &arg); if (ret <= -1) return -1; if (ret == 0) return 0; @@ -1114,7 +1116,7 @@ oops: return ret; } -int main_sed(int argc, hawk_bch_t* argv[]) +int main_sed(int argc, hawk_bch_t* argv[], const hawk_bch_t* real_argv0) { int ret; @@ -1161,7 +1163,7 @@ int main_sed(int argc, hawk_bch_t* argv[]) else sock_inited = 1; #endif - ret = execute_hawk_sed(argc, argv); + ret = execute_sed(argc, argv, real_argv0); #if defined(_WIN32) if (sock_inited) WSACleanup ();