updated the main function

This commit is contained in:
hyung-hwan 2025-05-23 23:28:45 +09:00
parent a5f7e9d43c
commit d8b3e8ef9e
6 changed files with 145 additions and 78 deletions

View File

@ -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)

View File

@ -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

View File

@ -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

62
bin/main.c Normal file
View File

@ -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

View File

@ -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)

View File

@ -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 ();