added QSE_AWK_STRIPSTRSPC
This commit is contained in:
parent
6b31c85427
commit
602a14a54e
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: awk.c 236 2009-07-16 08:27:53Z hyunghwan.chung $
|
||||
* $Id: awk.c 237 2009-07-16 12:43:47Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -261,11 +261,13 @@ static void dprint_return (qse_awk_rtx_t* rtx, qse_awk_val_t* ret)
|
||||
dprint (QSE_T("[END NAMED VARIABLES]\n"));
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void on_statement (
|
||||
qse_awk_rtx_t* run, qse_size_t line, void* data)
|
||||
{
|
||||
/*dprint (L"running %d\n", (int)line);*/
|
||||
}
|
||||
#endif
|
||||
|
||||
static int fnc_sleep (qse_awk_rtx_t* run, const qse_cstr_t* fnm)
|
||||
{
|
||||
@ -329,7 +331,8 @@ struct opttab_t
|
||||
{ QSE_T("rio"), QSE_AWK_RIO, QSE_T("enable builtin I/O including getline & print") },
|
||||
{ QSE_T("rwpipe"), QSE_AWK_RWPIPE, QSE_T("allow a dual-directional pipe") },
|
||||
{ QSE_T("newline"), QSE_AWK_NEWLINE, QSE_T("enable a newline to terminate a statement") },
|
||||
{ QSE_T("stripspaces"), QSE_AWK_STRIPSPACES, QSE_T("strip leading and trailing space of a record") },
|
||||
{ QSE_T("striprecspc"), QSE_AWK_STRIPRECSPC, QSE_T("strip spaces in splitting a record") },
|
||||
{ QSE_T("stripstrspc"), QSE_AWK_STRIPSTRSPC, QSE_T("strip spaces in converting a string to a number") },
|
||||
{ QSE_T("nextofile"), QSE_AWK_NEXTOFILE, QSE_T("enable 'nextofile'") },
|
||||
{ QSE_T("reset"), QSE_AWK_RESET, QSE_T("enable 'reset'") },
|
||||
{ QSE_T("crlf"), QSE_AWK_CRLF, QSE_T("use CRLF for a newline") },
|
||||
@ -674,7 +677,9 @@ static int awk_main (int argc, qse_char_t* argv[])
|
||||
qse_awk_t* awk = QSE_NULL;
|
||||
qse_awk_rtx_t* rtx = QSE_NULL;
|
||||
qse_awk_val_t* retv;
|
||||
#if 0
|
||||
qse_awk_rcb_t rcb;
|
||||
#endif
|
||||
|
||||
int i;
|
||||
struct arg_t arg;
|
||||
@ -744,8 +749,10 @@ static int awk_main (int argc, qse_char_t* argv[])
|
||||
goto oops;
|
||||
}
|
||||
|
||||
#if 0
|
||||
rcb.on_statement = on_statement;
|
||||
rcb.udd = &arg;
|
||||
#endif
|
||||
|
||||
rtx = qse_awk_rtx_openstd (awk, 0, QSE_T("qseawk"), arg.icf, QSE_NULL);
|
||||
if (rtx == QSE_NULL)
|
||||
@ -761,7 +768,9 @@ static int awk_main (int argc, qse_char_t* argv[])
|
||||
}
|
||||
|
||||
app_rtx = rtx;
|
||||
#if 0
|
||||
qse_awk_rtx_setrcb (rtx, &rcb);
|
||||
#endif
|
||||
|
||||
set_intr_run ();
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: Awk.hpp 236 2009-07-16 08:27:53Z hyunghwan.chung $
|
||||
* $Id: Awk.hpp 237 2009-07-16 12:43:47Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -852,7 +852,8 @@ public:
|
||||
/** Can terminate a statement with a new line */
|
||||
OPT_NEWLINE = QSE_AWK_NEWLINE,
|
||||
|
||||
OPT_STRIPSPACES = QSE_AWK_STRIPSPACES,
|
||||
OPT_STRIPRECSPC = QSE_AWK_STRIPRECSPC,
|
||||
OPT_STRIPSTRSPC = QSE_AWK_STRIPSTRSPC,
|
||||
|
||||
/** Support the nextofile statement */
|
||||
OPT_NEXTOFILE = QSE_AWK_NEXTOFILE,
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: awk.h 236 2009-07-16 08:27:53Z hyunghwan.chung $
|
||||
* $Id: awk.h 237 2009-07-16 12:43:47Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -519,7 +519,7 @@ enum qse_awk_option_t
|
||||
|
||||
/**
|
||||
* strips off leading and trailing spaces when splitting a record
|
||||
* into fields with a regular expression.
|
||||
* into fields with a regular expression.
|
||||
*
|
||||
* @code
|
||||
* BEGIN { FS="[:[:space:]]+"; }
|
||||
@ -528,28 +528,33 @@ enum qse_awk_option_t
|
||||
* for (i = 0; i < NF; i++) print i " [" $(i+1) "]";
|
||||
* }
|
||||
* @endcode
|
||||
* " a b c " is split to [a], [b], [c] if #QSE_AWK_STRIPSPACES is on.
|
||||
* " a b c " is split to [a], [b], [c] if #QSE_AWK_STRIPRSPC is on.
|
||||
* Otherwise, it is split to [], [a], [b], [c], [].
|
||||
*/
|
||||
QSE_AWK_STRIPSPACES = (1 << 10),
|
||||
QSE_AWK_STRIPRECSPC = (1 << 10),
|
||||
|
||||
/**
|
||||
* strips off leading spaces when converting a string to a number.
|
||||
*/
|
||||
QSE_AWK_STRIPSTRSPC = (1 << 11),
|
||||
|
||||
/** enables @b nextofile */
|
||||
QSE_AWK_NEXTOFILE = (1 << 11),
|
||||
QSE_AWK_NEXTOFILE = (1 << 12),
|
||||
|
||||
/** enables @b reset */
|
||||
QSE_AWK_RESET = (1 << 12),
|
||||
QSE_AWK_RESET = (1 << 13),
|
||||
|
||||
/** CR + LF by default */
|
||||
QSE_AWK_CRLF = (1 << 13),
|
||||
QSE_AWK_CRLF = (1 << 14),
|
||||
|
||||
/** allows the assignment of a map value to a variable */
|
||||
QSE_AWK_MAPTOVAR = (1 << 14),
|
||||
QSE_AWK_MAPTOVAR = (1 << 15),
|
||||
|
||||
/** allows @b BEGIN, @b END, pattern-action blocks */
|
||||
QSE_AWK_PABLOCK = (1 << 15),
|
||||
QSE_AWK_PABLOCK = (1 << 16),
|
||||
|
||||
/** allows {n,m} in a regular expression. */
|
||||
QSE_AWK_REXBOUND = (1 << 16),
|
||||
QSE_AWK_REXBOUND = (1 << 17),
|
||||
|
||||
/**
|
||||
* performs numeric comparison when a string convertable
|
||||
@ -559,14 +564,14 @@ enum qse_awk_option_t
|
||||
* - 9 is greater if #QSE_AWK_NCMPONSTR is off;
|
||||
* - "10.9" is greater if #QSE_AWK_NCMPONSTR is on
|
||||
*/
|
||||
QSE_AWK_NCMPONSTR = (1 << 17),
|
||||
QSE_AWK_NCMPONSTR = (1 << 18),
|
||||
|
||||
/**
|
||||
* enables the strict naming rule.
|
||||
* - a parameter can not be the same as the owning function name.
|
||||
* - a local variable can not be the same as the owning function name.
|
||||
*/
|
||||
QSE_AWK_STRICTNAMING = (1 << 18),
|
||||
QSE_AWK_STRICTNAMING = (1 << 19),
|
||||
|
||||
/**
|
||||
* makes #qse_awk_t to behave as compatibly as classical AWK
|
||||
@ -574,7 +579,7 @@ enum qse_awk_option_t
|
||||
*/
|
||||
QSE_AWK_CLASSIC = QSE_AWK_IMPLICIT | QSE_AWK_RIO |
|
||||
QSE_AWK_NEWLINE | QSE_AWK_PABLOCK |
|
||||
QSE_AWK_STRICTNAMING
|
||||
QSE_AWK_STRIPSTRSPC | QSE_AWK_STRICTNAMING
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: misc.c 230 2009-07-13 08:51:23Z hyunghwan.chung $
|
||||
* $Id: misc.c 237 2009-07-16 12:43:47Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -58,8 +58,11 @@ qse_long_t qse_awk_strxtolong (
|
||||
p = str;
|
||||
end = str + len;
|
||||
|
||||
/* strip off leading spaces */
|
||||
/*while (QSE_AWK_ISSPACE(awk,*p)) p++;*/
|
||||
if (awk->option & QSE_AWK_STRIPSTRSPC)
|
||||
{
|
||||
/* strip off leading spaces */
|
||||
while (QSE_AWK_ISSPACE(awk,*p)) p++;
|
||||
}
|
||||
|
||||
/* check for a sign */
|
||||
while (p < end)
|
||||
@ -182,8 +185,11 @@ qse_real_t qse_awk_strtoreal (qse_awk_t* awk, const qse_char_t* str)
|
||||
|
||||
p = str;
|
||||
|
||||
/* strip off leading blanks */
|
||||
/*while (QSE_AWK_ISSPACE(awk,*p)) p++;*/
|
||||
if (awk->option & QSE_AWK_STRIPSTRSPC)
|
||||
{
|
||||
/* strip off leading spaces */
|
||||
while (QSE_AWK_ISSPACE(awk,*p)) p++;
|
||||
}
|
||||
|
||||
/* check for a sign */
|
||||
while (*p != QSE_T('\0'))
|
||||
@ -871,7 +877,7 @@ qse_char_t* qse_awk_rtx_strxntokbyrex (
|
||||
ptr++;
|
||||
left--;
|
||||
}
|
||||
else if (rtx->awk->option & QSE_AWK_STRIPSPACES)
|
||||
else if (rtx->awk->option & QSE_AWK_STRIPRECSPC)
|
||||
{
|
||||
/* match at the beginning of the input string */
|
||||
if (match.ptr == substr)
|
||||
@ -917,7 +923,7 @@ exit_loop:
|
||||
|
||||
*errnum = QSE_AWK_ENOERR;
|
||||
|
||||
if (rtx->awk->option & QSE_AWK_STRIPSPACES)
|
||||
if (rtx->awk->option & QSE_AWK_STRIPRECSPC)
|
||||
{
|
||||
return (match.ptr+match.len >= substr+sublen)?
|
||||
QSE_NULL: ((qse_char_t*)match.ptr+match.len);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: std.c 235 2009-07-15 10:43:31Z hyunghwan.chung $
|
||||
* $Id: std.c 237 2009-07-16 12:43:47Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
@ -1316,8 +1316,8 @@ static int fnc_srand (qse_awk_rtx_t* run, const qse_cstr_t* fnm)
|
||||
a0 = qse_awk_rtx_getarg (run, 0);
|
||||
|
||||
n = qse_awk_rtx_valtonum (run, a0, &lv, &rv);
|
||||
if (n == -1) return -1;
|
||||
if (n == 1) lv = (qse_long_t)rv;
|
||||
if (n <= -1) return -1;
|
||||
if (n >= 1) lv = (qse_long_t)rv;
|
||||
|
||||
rxtn->seed = lv;
|
||||
}
|
||||
@ -1325,7 +1325,7 @@ static int fnc_srand (qse_awk_rtx_t* run, const qse_cstr_t* fnm)
|
||||
{
|
||||
qse_ntime_t now;
|
||||
|
||||
if (qse_gettime(&now) == -1) rxtn->seed >>= 1;
|
||||
if (qse_gettime(&now) <= -1) rxtn->seed >>= 1;
|
||||
else rxtn->seed = (unsigned int)now;
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@ static int run_awk (QSE::StdAwk& awk)
|
||||
"function pa (x) {\n"
|
||||
" reset ret;\n"
|
||||
" for (i in x) { print i, \"=>\", x[i]; ret += x[i]; }\n"
|
||||
" return ret + DAMN++;\n"
|
||||
" return ret + FOO++;\n"
|
||||
"}\n"
|
||||
"function pb (x) {\n"
|
||||
" reset ret;\n"
|
||||
@ -46,43 +46,43 @@ static int run_awk (QSE::StdAwk& awk)
|
||||
"}"
|
||||
));
|
||||
|
||||
// add a global variable 'DAMN'
|
||||
int damn = awk.addGlobal (QSE_T("DAMN"));
|
||||
if (damn <= -1) return -1;
|
||||
// add a global variable 'FOO'
|
||||
int foo = awk.addGlobal (QSE_T("FOO"));
|
||||
if (foo <= -1) return -1;
|
||||
|
||||
// parse the script and perform no deparsing
|
||||
run = awk.parse (in, QSE::StdAwk::Source::NONE);
|
||||
if (run == QSE_NULL) return -1;
|
||||
|
||||
// set 'FOO' to 100000
|
||||
QSE::StdAwk::Value foov (run);
|
||||
if (foov.setInt (100000) <= -1) return -1;
|
||||
if (awk.setGlobal (foo, foov) <= -1) return -1;
|
||||
|
||||
// prepare an indexed parameter
|
||||
QSE::StdAwk::Value arg[1];
|
||||
|
||||
for (int i = 1; i <= 5; i++)
|
||||
{
|
||||
if (arg[0].setIndexedInt (
|
||||
run, QSE::StdAwk::Value::IntIndex(i), i*20) <= -1) return -1;
|
||||
if (arg[0].setIndexedInt (run,
|
||||
QSE::StdAwk::Value::IntIndex(i), i*20) <= -1) return -1;
|
||||
}
|
||||
|
||||
// set 'DAMN' to 100000
|
||||
QSE::StdAwk::Value damnv (run);
|
||||
if (damnv.setInt (100000) <= -1) return -1;
|
||||
if (awk.setGlobal (damn, damnv) <= -1) return -1;
|
||||
|
||||
// prepare a variable to hold the return value
|
||||
QSE::StdAwk::Value r;
|
||||
|
||||
// call the 'pa' function
|
||||
if (awk.call (QSE_T("pa"), &r, arg, QSE_COUNTOF(arg)) <= -1) return -1;
|
||||
if (awk.call (QSE_T("pa"), &r, arg, 1) <= -1) return -1;
|
||||
|
||||
// output the result in various types
|
||||
qse_printf (QSE_T("RESULT: (int) [%lld]\n"), (long long)r.toInt());
|
||||
qse_printf (QSE_T(" (real) [%Lf]\n"), (long double)r.toReal());
|
||||
qse_printf (QSE_T(" (real)[%Lf]\n"), (long double)r.toReal());
|
||||
qse_printf (QSE_T(" (str) [%s]\n"), r.toStr(QSE_NULL));
|
||||
|
||||
// get the value of 'DAMN'
|
||||
if (awk.getGlobal (damn, damnv) <= -1) return -1;
|
||||
qse_printf (QSE_T("DAMN: (int) [%lld]\n"), (long long)damnv.toInt());
|
||||
qse_printf (QSE_T(" (real) [%Lf]\n"), (long double)damnv.toReal());
|
||||
qse_printf (QSE_T(" (str) [%s]\n"), damnv.toStr(QSE_NULL));
|
||||
// get the value of 'FOO'
|
||||
if (awk.getGlobal (foo, foov) <= -1) return -1;
|
||||
qse_printf (QSE_T("FOO: (int) [%lld]\n"), (long long)foov.toInt());
|
||||
qse_printf (QSE_T(" (real)[%Lf]\n"), (long double)foov.toReal());
|
||||
qse_printf (QSE_T(" (str) [%s]\n"), foov.toStr(QSE_NULL));
|
||||
|
||||
// call the 'pb' function
|
||||
if (awk.call (QSE_T("pb"), &r, arg, QSE_COUNTOF(arg)) <= -1) return -1;
|
||||
|
Loading…
Reference in New Issue
Block a user