added a new global variable SCRIPTNAME which intends to store the first script name loaded
This commit is contained in:
parent
83d47bb64a
commit
015ed09c5a
@ -373,6 +373,8 @@ static int add_gvs_to_awk (hawk_t* awk, arg_t* arg)
|
|||||||
|
|
||||||
static int apply_fs_and_gvs_to_rtx (hawk_rtx_t* rtx, arg_t* arg)
|
static int apply_fs_and_gvs_to_rtx (hawk_rtx_t* rtx, arg_t* arg)
|
||||||
{
|
{
|
||||||
|
hawk_oow_t i;
|
||||||
|
|
||||||
if (arg->fs)
|
if (arg->fs)
|
||||||
{
|
{
|
||||||
hawk_val_t* fs;
|
hawk_val_t* fs;
|
||||||
@ -407,6 +409,25 @@ static int apply_fs_and_gvs_to_rtx (hawk_rtx_t* rtx, arg_t* arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0; arg->psin[i].type != HAWK_PARSESTD_NULL; i++)
|
||||||
|
{
|
||||||
|
if (arg->psin[i].type == HAWK_PARSESTD_FILE)
|
||||||
|
{
|
||||||
|
if (hawk_rtx_setscriptnamewithoochars(rtx, arg->psin[i].u.file.path, hawk_count_oocstr(arg->psin[i].u.file.path)) <= -1) return -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (arg->psin[i].type == HAWK_PARSESTD_FILEB)
|
||||||
|
{
|
||||||
|
if (hawk_rtx_setscriptnamewithbchars(rtx, arg->psin[i].u.fileb.path, hawk_count_bcstr(arg->psin[i].u.fileb.path)) <= -1) return -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (arg->psin[i].type == HAWK_PARSESTD_FILEU)
|
||||||
|
{
|
||||||
|
if (hawk_rtx_setscriptnamewithuchars(rtx, arg->psin[i].u.fileu.path, hawk_count_ucstr(arg->psin[i].u.fileu.path)) <= -1) return -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1180,7 +1201,7 @@ static HAWK_INLINE int execute_hawk (int argc, hawk_bch_t* argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
rtx = hawk_rtx_openstdwithbcstr(
|
rtx = hawk_rtx_openstdwithbcstr(
|
||||||
awk, 0, "hawk",
|
awk, 0, argv[0],
|
||||||
(arg.call? HAWK_NULL: arg.icf.ptr), /* console input */
|
(arg.call? HAWK_NULL: arg.icf.ptr), /* console input */
|
||||||
arg.ocf.ptr, /* console output */
|
arg.ocf.ptr, /* console output */
|
||||||
arg.console_cmgr
|
arg.console_cmgr
|
||||||
|
@ -1295,11 +1295,24 @@ int Hawk::Run::setGlobal (int id, hawk_flt_t v)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Hawk::Run::setGlobal (int id, const hawk_ooch_t* ptr, hawk_oow_t len)
|
int Hawk::Run::setGlobal (int id, const hawk_uch_t* ptr, hawk_oow_t len)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
|
|
||||||
hawk_val_t* tmp = hawk_rtx_makestrvalwithoochars(this->rtx, ptr, len);
|
hawk_val_t* tmp = hawk_rtx_makestrvalwithuchars(this->rtx, ptr, len);
|
||||||
|
if (tmp == HAWK_NULL) return -1;
|
||||||
|
|
||||||
|
hawk_rtx_refupval (this->rtx, tmp);
|
||||||
|
int n = hawk_rtx_setgbl (this->rtx, id, tmp);
|
||||||
|
hawk_rtx_refdownval (this->rtx, tmp);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Hawk::Run::setGlobal (int id, const hawk_bch_t* ptr, hawk_oow_t len)
|
||||||
|
{
|
||||||
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
|
|
||||||
|
hawk_val_t* tmp = hawk_rtx_makestrvalwithbchars(this->rtx, ptr, len);
|
||||||
if (tmp == HAWK_NULL) return -1;
|
if (tmp == HAWK_NULL) return -1;
|
||||||
|
|
||||||
hawk_rtx_refupval (this->rtx, tmp);
|
hawk_rtx_refupval (this->rtx, tmp);
|
||||||
|
@ -1238,7 +1238,8 @@ public:
|
|||||||
/// \a ptr.
|
/// \a ptr.
|
||||||
/// \return 0 on success, -1 on failure
|
/// \return 0 on success, -1 on failure
|
||||||
///
|
///
|
||||||
int setGlobal (int id, const hawk_ooch_t* ptr, hawk_oow_t len);
|
int setGlobal (int id, const hawk_uch_t* ptr, hawk_oow_t len);
|
||||||
|
int setGlobal (int id, const hawk_bch_t* ptr, hawk_oow_t len);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// The setGlobal() function sets a global variable
|
/// The setGlobal() function sets a global variable
|
||||||
|
@ -245,10 +245,7 @@ int HawkStd::build_argcv (Run* run)
|
|||||||
|
|
||||||
for (hawk_oow_t i = 0; i < this->runarg.len; i++)
|
for (hawk_oow_t i = 0; i < this->runarg.len; i++)
|
||||||
{
|
{
|
||||||
if (argv.setIndexedStr (
|
if (argv.setIndexedStr(Value::IntIndex(i), this->runarg.ptr[i].ptr, this->runarg.ptr[i].len, true) <= -1) return -1;
|
||||||
Value::IntIndex(i),
|
|
||||||
this->runarg.ptr[i].ptr,
|
|
||||||
this->runarg.ptr[i].len, true) <= -1) return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
run->setGlobal (this->gbl_argc, (hawk_int_t)this->runarg.len);
|
run->setGlobal (this->gbl_argc, (hawk_int_t)this->runarg.len);
|
||||||
@ -344,8 +341,7 @@ int HawkStd::make_additional_globals (Run* run)
|
|||||||
{
|
{
|
||||||
/* TODO: use wenviron where it's available */
|
/* TODO: use wenviron where it's available */
|
||||||
|
|
||||||
if (build_argcv(run) <= -1 ||
|
if (this->build_argcv(run) <= -1 || this->build_environ(run, ::environ) <= -1) return -1;
|
||||||
build_environ(run, ::environ) <= -1) return -1;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -57,12 +57,11 @@
|
|||||||
* hawk_sio_cbs_t sio; // need to initialize it with callback functions
|
* hawk_sio_cbs_t sio; // need to initialize it with callback functions
|
||||||
* hawk_rio_cbs_t rio; // need to initialize it with callback functions
|
* hawk_rio_cbs_t rio; // need to initialize it with callback functions
|
||||||
*
|
*
|
||||||
* awk = hawk_open (mmgr, 0, prm); // create an interpreter
|
* awk = hawk_open(mmgr, 0, prm); // create an interpreter
|
||||||
* hawk_parse (awk, &sio); // parse a script
|
* hawk_parse (awk, &sio); // parse a script
|
||||||
* rtx = hawk_rtx_open (awk, 0, &rio); // create a runtime context
|
* rtx = hawk_rtx_open (awk, 0, &rio); // create a runtime context
|
||||||
* retv = hawk_rtx_loop (rtx); // run a standard AWK loop
|
* retv = hawk_rtx_loop (rtx); // run a standard AWK loop
|
||||||
* if (retv != HAWK_NULL)
|
* if (retv) hawk_rtx_refdownval (rtx, retv); // free return value
|
||||||
* hawk_rtx_refdownval (rtx, retv); // free return value
|
|
||||||
* hawk_rtx_close (rtx); // destroy the runtime context
|
* hawk_rtx_close (rtx); // destroy the runtime context
|
||||||
* hawk_close (awk); // destroy the interpreter
|
* hawk_close (awk); // destroy the interpreter
|
||||||
* \endcode
|
* \endcode
|
||||||
@ -1315,6 +1314,7 @@ enum hawk_gbl_id_t
|
|||||||
HAWK_GBL_RLENGTH,
|
HAWK_GBL_RLENGTH,
|
||||||
HAWK_GBL_RS,
|
HAWK_GBL_RS,
|
||||||
HAWK_GBL_RSTART,
|
HAWK_GBL_RSTART,
|
||||||
|
HAWK_GBL_SCRIPTNAME,
|
||||||
HAWK_GBL_STRIPRECSPC,
|
HAWK_GBL_STRIPRECSPC,
|
||||||
HAWK_GBL_SUBSEP,
|
HAWK_GBL_SUBSEP,
|
||||||
|
|
||||||
@ -2072,7 +2072,7 @@ static HAWK_INLINE void hawk_rtx_setcmgr (hawk_rtx_t* rtx, hawk_cmgr_t* cmgr) {
|
|||||||
*
|
*
|
||||||
* The example shows typical usage of the function.
|
* The example shows typical usage of the function.
|
||||||
* \code
|
* \code
|
||||||
* rtx = hawk_rtx_open (awk, 0, rio);
|
* rtx = hawk_rtx_open(awk, 0, rio);
|
||||||
* if (rtx)
|
* if (rtx)
|
||||||
* {
|
* {
|
||||||
* retv = hawk_rtx_loop (rtx);
|
* retv = hawk_rtx_loop (rtx);
|
||||||
@ -2133,7 +2133,7 @@ HAWK_EXPORT hawk_val_t* hawk_rtx_callfun (
|
|||||||
*
|
*
|
||||||
* The example shows typical usage of the function.
|
* The example shows typical usage of the function.
|
||||||
* \code
|
* \code
|
||||||
* rtx = hawk_rtx_open (awk, 0, rio);
|
* rtx = hawk_rtx_open(awk, 0, rio);
|
||||||
* if (rtx)
|
* if (rtx)
|
||||||
* {
|
* {
|
||||||
* v = hawk_rtx_callwithucstr (rtx, HAWK_UT("init"), HAWK_NULL, 0);
|
* v = hawk_rtx_callwithucstr (rtx, HAWK_UT("init"), HAWK_NULL, 0);
|
||||||
@ -2161,7 +2161,7 @@ HAWK_EXPORT hawk_val_t* hawk_rtx_callwithucstr (
|
|||||||
*
|
*
|
||||||
* The example shows typical usage of the function.
|
* The example shows typical usage of the function.
|
||||||
* \code
|
* \code
|
||||||
* rtx = hawk_rtx_open (awk, 0, rio);
|
* rtx = hawk_rtx_open(awk, 0, rio);
|
||||||
* if (rtx)
|
* if (rtx)
|
||||||
* {
|
* {
|
||||||
* v = hawk_rtx_callwithbcstr (rtx, HAWK_BT("init"), HAWK_NULL, 0);
|
* v = hawk_rtx_callwithbcstr (rtx, HAWK_BT("init"), HAWK_NULL, 0);
|
||||||
@ -2381,6 +2381,24 @@ HAWK_EXPORT int hawk_rtx_setofilename (
|
|||||||
hawk_oow_t len /**< name length */
|
hawk_oow_t len /**< name length */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
HAWK_EXPORT int hawk_rtx_setscriptnamewithuchars (
|
||||||
|
hawk_rtx_t* rtx, /**< runtime context */
|
||||||
|
const hawk_uch_t* str, /**< name pointer */
|
||||||
|
hawk_oow_t len /**< name length */
|
||||||
|
);
|
||||||
|
|
||||||
|
HAWK_EXPORT int hawk_rtx_setscriptnamewithbchars (
|
||||||
|
hawk_rtx_t* rtx, /**< runtime context */
|
||||||
|
const hawk_bch_t* str, /**< name pointer */
|
||||||
|
hawk_oow_t len /**< name length */
|
||||||
|
);
|
||||||
|
|
||||||
|
#if defined(HAWK_OOCH_IS_UCH)
|
||||||
|
# define hawk_rtx_setscriptnamewithoochars hawk_rtx_setscriptnamewithuchars
|
||||||
|
#else
|
||||||
|
# define hawk_rtx_setscriptnamewithoochars hawk_rtx_setscriptnamewithbchars
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The hawk_rtx_getnvmap() gets the map of named variables
|
* The hawk_rtx_getnvmap() gets the map of named variables
|
||||||
*/
|
*/
|
||||||
|
@ -367,6 +367,7 @@ static global_t gtab[] =
|
|||||||
|
|
||||||
{ HAWK_T("RSTART"), 6, 0 },
|
{ HAWK_T("RSTART"), 6, 0 },
|
||||||
|
|
||||||
|
{ HAWK_T("SCRIPTNAME"), 10, 0 },
|
||||||
/* it decides the field construction behavior when FS is a regular expression and
|
/* it decides the field construction behavior when FS is a regular expression and
|
||||||
* the field splitter is composed of whitespaces only. e.g) FS="[ \t]*";
|
* the field splitter is composed of whitespaces only. e.g) FS="[ \t]*";
|
||||||
* if set to a non-zero value, remove leading spaces and trailing spaces off a record
|
* if set to a non-zero value, remove leading spaces and trailing spaces off a record
|
||||||
|
@ -633,6 +633,36 @@ HAWK_INLINE int hawk_rtx_setgbl (hawk_rtx_t* rtx, int id, hawk_val_t* val)
|
|||||||
return set_global(rtx, id, HAWK_NULL, val, 0);
|
return set_global(rtx, id, HAWK_NULL, val, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int hawk_rtx_setscriptnamewithuchars (hawk_rtx_t* rtx, const hawk_uch_t* name, hawk_oow_t len)
|
||||||
|
{
|
||||||
|
hawk_val_t* tmp;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
tmp = hawk_rtx_makestrvalwithuchars(rtx, name, len);
|
||||||
|
if (tmp == HAWK_NULL) return -1;
|
||||||
|
|
||||||
|
hawk_rtx_refupval (rtx, tmp);
|
||||||
|
n = hawk_rtx_setgbl (rtx, HAWK_GBL_SCRIPTNAME, tmp);
|
||||||
|
hawk_rtx_refdownval (rtx, tmp);
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int hawk_rtx_setscriptnamewithbchars (hawk_rtx_t* rtx, const hawk_bch_t* name, hawk_oow_t len)
|
||||||
|
{
|
||||||
|
hawk_val_t* tmp;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
tmp = hawk_rtx_makestrvalwithbchars(rtx, name, len);
|
||||||
|
if (tmp == HAWK_NULL) return -1;
|
||||||
|
|
||||||
|
hawk_rtx_refupval (rtx, tmp);
|
||||||
|
n = hawk_rtx_setgbl (rtx, HAWK_GBL_SCRIPTNAME, tmp);
|
||||||
|
hawk_rtx_refdownval (rtx, tmp);
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
int hawk_rtx_setfilename (hawk_rtx_t* rtx, const hawk_ooch_t* name, hawk_oow_t len)
|
int hawk_rtx_setfilename (hawk_rtx_t* rtx, const hawk_ooch_t* name, hawk_oow_t len)
|
||||||
{
|
{
|
||||||
hawk_val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
@ -1205,7 +1235,7 @@ static int defaultify_globals (hawk_rtx_t* rtx)
|
|||||||
int idx;
|
int idx;
|
||||||
const hawk_ooch_t* str[2];
|
const hawk_ooch_t* str[2];
|
||||||
};
|
};
|
||||||
static struct gtab_t gtab[7] =
|
static struct gtab_t gtab[8] =
|
||||||
{
|
{
|
||||||
{ HAWK_GBL_CONVFMT, { DEFAULT_CONVFMT, DEFAULT_CONVFMT } },
|
{ HAWK_GBL_CONVFMT, { DEFAULT_CONVFMT, DEFAULT_CONVFMT } },
|
||||||
{ HAWK_GBL_FILENAME, { HAWK_NULL, HAWK_NULL } },
|
{ HAWK_GBL_FILENAME, { HAWK_NULL, HAWK_NULL } },
|
||||||
@ -1213,7 +1243,8 @@ static int defaultify_globals (hawk_rtx_t* rtx)
|
|||||||
{ HAWK_GBL_OFMT, { DEFAULT_OFMT, DEFAULT_OFMT } },
|
{ HAWK_GBL_OFMT, { DEFAULT_OFMT, DEFAULT_OFMT } },
|
||||||
{ HAWK_GBL_OFS, { DEFAULT_OFS, DEFAULT_OFS } },
|
{ HAWK_GBL_OFS, { DEFAULT_OFS, DEFAULT_OFS } },
|
||||||
{ HAWK_GBL_ORS, { DEFAULT_ORS, DEFAULT_ORS_CRLF } },
|
{ HAWK_GBL_ORS, { DEFAULT_ORS, DEFAULT_ORS_CRLF } },
|
||||||
{ HAWK_GBL_SUBSEP, { DEFAULT_SUBSEP, DEFAULT_SUBSEP } },
|
{ HAWK_GBL_SCRIPTNAME, { HAWK_NULL, HAWK_NULL } },
|
||||||
|
{ HAWK_GBL_SUBSEP, { DEFAULT_SUBSEP, DEFAULT_SUBSEP } }
|
||||||
};
|
};
|
||||||
|
|
||||||
hawk_val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
|
@ -2109,8 +2109,8 @@ static int open_rio_console (hawk_rtx_t* rtx, hawk_rio_arg_t* riod)
|
|||||||
file = as.ptr;
|
file = as.ptr;
|
||||||
|
|
||||||
sio = (file[0] == HAWK_T('-') && file[1] == HAWK_T('\0'))?
|
sio = (file[0] == HAWK_T('-') && file[1] == HAWK_T('\0'))?
|
||||||
open_sio_std_rtx (rtx, HAWK_SIO_STDIN, HAWK_SIO_READ | HAWK_SIO_IGNOREECERR):
|
open_sio_std_rtx(rtx, HAWK_SIO_STDIN, HAWK_SIO_READ | HAWK_SIO_IGNOREECERR):
|
||||||
open_sio_rtx (rtx, file, HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
open_sio_rtx(rtx, file, HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
||||||
if (sio == HAWK_NULL)
|
if (sio == HAWK_NULL)
|
||||||
{
|
{
|
||||||
hawk_rtx_freevaloocstr (rtx, v, as.ptr);
|
hawk_rtx_freevaloocstr (rtx, v, as.ptr);
|
||||||
@ -2332,7 +2332,7 @@ static int build_argcv (hawk_rtx_t* rtx, int argc_id, int argv_id, const hawk_oo
|
|||||||
hawk_ooch_t key[HAWK_SIZEOF(hawk_int_t)*8+2];
|
hawk_ooch_t key[HAWK_SIZEOF(hawk_int_t)*8+2];
|
||||||
hawk_oow_t key_len;
|
hawk_oow_t key_len;
|
||||||
|
|
||||||
v_argv = hawk_rtx_makemapval (rtx);
|
v_argv = hawk_rtx_makemapval(rtx);
|
||||||
if (v_argv == HAWK_NULL) return -1;
|
if (v_argv == HAWK_NULL) return -1;
|
||||||
|
|
||||||
hawk_rtx_refupval (rtx, v_argv);
|
hawk_rtx_refupval (rtx, v_argv);
|
||||||
@ -2350,7 +2350,7 @@ static int build_argcv (hawk_rtx_t* rtx, int argc_id, int argv_id, const hawk_oo
|
|||||||
hawk_rtx_refupval (rtx, v_tmp);
|
hawk_rtx_refupval (rtx, v_tmp);
|
||||||
|
|
||||||
key_len = hawk_copy_oocstr(key, HAWK_COUNTOF(key), HAWK_T("0"));
|
key_len = hawk_copy_oocstr(key, HAWK_COUNTOF(key), HAWK_T("0"));
|
||||||
if (hawk_htb_upsert (((hawk_val_map_t*)v_argv)->map, key, key_len, v_tmp, 0) == HAWK_NULL)
|
if (hawk_htb_upsert(((hawk_val_map_t*)v_argv)->map, key, key_len, v_tmp, 0) == HAWK_NULL)
|
||||||
{
|
{
|
||||||
/* if the assignment operation fails, decrements
|
/* if the assignment operation fails, decrements
|
||||||
* the reference of v_tmp to free it */
|
* the reference of v_tmp to free it */
|
||||||
@ -2377,12 +2377,12 @@ static int build_argcv (hawk_rtx_t* rtx, int argc_id, int argv_id, const hawk_oo
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
key_len = hawk_int_to_oocstr (argc, 10, HAWK_NULL, key, HAWK_COUNTOF(key));
|
key_len = hawk_int_to_oocstr(argc, 10, HAWK_NULL, key, HAWK_COUNTOF(key));
|
||||||
HAWK_ASSERT (key_len != (hawk_oow_t)-1);
|
HAWK_ASSERT (key_len != (hawk_oow_t)-1);
|
||||||
|
|
||||||
hawk_rtx_refupval (rtx, v_tmp);
|
hawk_rtx_refupval (rtx, v_tmp);
|
||||||
|
|
||||||
if (hawk_htb_upsert (((hawk_val_map_t*)v_argv)->map, key, key_len, v_tmp, 0) == HAWK_NULL)
|
if (hawk_htb_upsert(((hawk_val_map_t*)v_argv)->map, key, key_len, v_tmp, 0) == HAWK_NULL)
|
||||||
{
|
{
|
||||||
hawk_rtx_refdownval (rtx, v_tmp);
|
hawk_rtx_refdownval (rtx, v_tmp);
|
||||||
hawk_rtx_refdownval (rtx, v_argv);
|
hawk_rtx_refdownval (rtx, v_argv);
|
||||||
|
@ -418,7 +418,13 @@ static int hawk_main (MyHawk& hawk, int argc, hawk_bch_t* argv[])
|
|||||||
in = (cmdline.ins)? (MyHawk::Source*)&in_str: (MyHawk::Source*)&in_file;
|
in = (cmdline.ins)? (MyHawk::Source*)&in_str: (MyHawk::Source*)&in_file;
|
||||||
out = (cmdline.outf)? (MyHawk::Source*)&out_file: &MyHawk::Source::NONE;
|
out = (cmdline.outf)? (MyHawk::Source*)&out_file: &MyHawk::Source::NONE;
|
||||||
run = hawk.parse(*in, *out);
|
run = hawk.parse(*in, *out);
|
||||||
if (run == HAWK_NULL)
|
if (!run)
|
||||||
|
{
|
||||||
|
print_error (hawk);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmdline.inf && run->setGlobal(HAWK_GBL_SCRIPTNAME, cmdline.inf, hawk_count_bcstr(cmdline.inf)) <= -1)
|
||||||
{
|
{
|
||||||
print_error (hawk);
|
print_error (hawk);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -278,7 +278,8 @@ function main (localaddr, remoteaddr, c)
|
|||||||
|
|
||||||
if (ARGC != 3)
|
if (ARGC != 3)
|
||||||
{
|
{
|
||||||
printf ("Usage: %s local-address remote-address\n", ARGV[0]); ## TODO: add SCRIPTNAME to hawk interpreter
|
###printf ("Usage: %s -f %s local-address remote-address\n", ARGV[0], SCRIPTNAME);
|
||||||
|
printf ("Usage: %s local-address remote-address\n", SCRIPTNAME);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user