diff --git a/qse/cmd/awk/awk.c b/qse/cmd/awk/awk.c index 9bb90e7f..65b35892 100644 --- a/qse/cmd/awk/awk.c +++ b/qse/cmd/awk/awk.c @@ -232,7 +232,6 @@ static struct { QSE_T("rio"), QSE_AWK_RIO }, { QSE_T("rwpipe"), QSE_AWK_RWPIPE }, { QSE_T("newline"), QSE_AWK_NEWLINE }, - { QSE_T("baseone"), QSE_AWK_BASEONE }, { QSE_T("stripspaces"), QSE_AWK_STRIPSPACES }, { QSE_T("nextofile"), QSE_AWK_NEXTOFILE }, { QSE_T("crfl"), QSE_AWK_CRLF }, diff --git a/qse/include/qse/awk/Awk.hpp b/qse/include/qse/awk/Awk.hpp index 8964b536..c7290865 100644 --- a/qse/include/qse/awk/Awk.hpp +++ b/qse/include/qse/awk/Awk.hpp @@ -574,7 +574,6 @@ public: /** Can terminate a statement with a new line */ OPT_NEWLINE = QSE_AWK_NEWLINE, - OPT_BASEONE = QSE_AWK_BASEONE, OPT_STRIPSPACES = QSE_AWK_STRIPSPACES, /** Support the nextofile statement */ diff --git a/qse/include/qse/awk/awk.h b/qse/include/qse/awk/awk.h index 4eaba1af..43b31bcd 100644 --- a/qse/include/qse/awk/awk.h +++ b/qse/include/qse/awk/awk.h @@ -261,9 +261,6 @@ enum qse_awk_option_t /* can terminate a statement with a new line */ QSE_AWK_NEWLINE = (1 << 9), - /* use 1 as the start index for string operations and ARGV */ - QSE_AWK_BASEONE = (1 << 10), - /* strip off leading and trailing spaces when splitting a record * into fields with a regular expression. * @@ -292,7 +289,11 @@ enum qse_awk_option_t QSE_AWK_MAPTOVAR = (1 << 15), /* allows BEGIN, END, pattern-action blocks */ - QSE_AWK_PABLOCK = (1 << 16) + QSE_AWK_PABLOCK = (1 << 16), + + /* option aggregtes */ + QSE_AWK_CLASSIC = QSE_AWK_IMPLICIT | QSE_AWK_RIO | + QSE_AWK_NEWLINE | QSE_AWK_PABLOCK }; /* error code */ diff --git a/qse/lib/awk/Awk.cpp b/qse/lib/awk/Awk.cpp index f51d4b06..40d1dcc7 100644 --- a/qse/lib/awk/Awk.cpp +++ b/qse/lib/awk/Awk.cpp @@ -1225,14 +1225,6 @@ int Awk::open () qse_map_setfreeer (functionMap, QSE_MAP_VAL, freeFunctionMapValue); qse_map_setscale (functionMap, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t)); - int opt = - OPT_IMPLICIT | - OPT_RIO | - OPT_NEWLINE | - OPT_BASEONE | - OPT_PABLOCK; - qse_awk_setoption (awk, opt); - runCallback = false; return 0; } diff --git a/qse/lib/awk/awk.c b/qse/lib/awk/awk.c index 3c1237ae..b734a5c4 100644 --- a/qse/lib/awk/awk.c +++ b/qse/lib/awk/awk.c @@ -150,7 +150,7 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_awk_prm_t* prm) qse_lda_setcopier (awk->parse.params, QSE_LDA_COPIER_INLINE); qse_lda_setscale (awk->parse.params, QSE_SIZEOF(qse_char_t)); - awk->option = 0; + awk->option = QSE_AWK_CLASSIC; awk->errnum = QSE_AWK_ENOERR; awk->errlin = 0; awk->stopall = QSE_FALSE; @@ -364,7 +364,6 @@ void qse_awk_setoption (qse_awk_t* awk, int opt) awk->option = opt; } - void qse_awk_stopall (qse_awk_t* awk) { awk->stopall = QSE_TRUE; diff --git a/qse/lib/awk/fnc.c b/qse/lib/awk/fnc.c index dc54e5bf..da8d521b 100644 --- a/qse/lib/awk/fnc.c +++ b/qse/lib/awk/fnc.c @@ -459,9 +459,7 @@ static int fnc_index ( } ptr = qse_strxnstr (str0, len0, str1, len1); - idx = (ptr == QSE_NULL)? -1: (qse_long_t)(ptr - str0); - - if (qse_awk_getoption(run->awk) & QSE_AWK_BASEONE) idx = idx + 1; + idx = (ptr == QSE_NULL)? 0: ((qse_long_t)(ptr-str0) + 1); if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str0); if (a1->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str1); @@ -563,7 +561,7 @@ static int fnc_substr ( if (n == 1) lcount = (qse_long_t)rcount; } - if (qse_awk_getoption(run->awk) & QSE_AWK_BASEONE) lindex = lindex - 1; + lindex = lindex - 1; if (lindex >= (qse_long_t)len) lindex = (qse_long_t)len; else if (lindex < 0) lindex = 0; @@ -593,7 +591,7 @@ static int fnc_split ( qse_awk_val_t* a0, * a1, * a2, * t1, * t2, ** a1_ref; qse_char_t* str, * str_free, * p, * tok; qse_size_t str_len, str_left, tok_len; - qse_long_t sta, num; + qse_long_t num; qse_char_t key[QSE_SIZEOF(qse_long_t)*8+2]; qse_size_t key_len; qse_char_t* fs_ptr, * fs_free; @@ -740,8 +738,7 @@ static int fnc_split ( qse_awk_rtx_refupval (run, *a1_ref); p = str; str_left = str_len; - sta = (qse_awk_getoption(run->awk) & QSE_AWK_BASEONE)? 1: 0; - num = sta; + num = 1; while (p != QSE_NULL) { @@ -830,7 +827,7 @@ static int fnc_split ( if (fs_free != QSE_NULL) QSE_AWK_FREE (run->awk, fs_free); if (fs_rex_free != QSE_NULL) QSE_AWK_FREEREX (run->awk, fs_rex_free); - if (sta == 1) num--; + num--; t1 = qse_awk_rtx_makeintval (run, num); if (t1 == QSE_NULL) @@ -1301,8 +1298,7 @@ static int fnc_match ( if (n == -1) return -1; - idx = (n == 0)? -1: (qse_long_t)(mat_ptr - str0); - if (qse_awk_getoption(run->awk) & QSE_AWK_BASEONE) idx = idx + 1; + idx = (n == 0)? 0: ((qse_long_t)(mat_ptr-str0) + 1); a0 = qse_awk_rtx_makeintval (run, idx); if (a0 == QSE_NULL) diff --git a/qse/lib/awk/run.c b/qse/lib/awk/run.c index abff5657..1302ff0e 100644 --- a/qse/lib/awk/run.c +++ b/qse/lib/awk/run.c @@ -1005,16 +1005,8 @@ static int build_runarg ( return -1; } - if (qse_awk_getoption(run->awk) & QSE_AWK_BASEONE) - { - key_len = qse_awk_longtostr (argc+1, - 10, QSE_NULL, key, QSE_COUNTOF(key)); - } - else - { - key_len = qse_awk_longtostr (argc, - 10, QSE_NULL, key, QSE_COUNTOF(key)); - } + key_len = qse_awk_longtostr (argc+1, + 10, QSE_NULL, key, QSE_COUNTOF(key)); QSE_ASSERT (key_len != (qse_size_t)-1); /* increment reference count of v_tmp in advance as if diff --git a/qse/lib/awk/std.c b/qse/lib/awk/std.c index da0c8a41..9183837e 100644 --- a/qse/lib/awk/std.c +++ b/qse/lib/awk/std.c @@ -38,7 +38,7 @@ typedef struct xtn_t { const qse_char_t*const* files; const qse_char_t* str; - } p; + } u; qse_size_t index; /* current file index */ qse_sio_t* handle; /* the handle to an open file */ } in; @@ -60,13 +60,13 @@ typedef struct rxtn_t struct { struct { - const qse_char_t** files; + const qse_char_t*const* files; qse_size_t index; } in; struct { - const qse_char_t** files; + const qse_char_t*const* files; qse_size_t index; } out; } c; /* console */ @@ -142,9 +142,7 @@ qse_awk_t* qse_awk_opensimple (void) QSE_MEMSET (xtn, 0, QSE_SIZEOF(xtn_t)); /* set default options */ - qse_awk_setoption (awk, - QSE_AWK_IMPLICIT | QSE_AWK_RIO | QSE_AWK_NEWLINE | - QSE_AWK_BASEONE | QSE_AWK_PABLOCK); + qse_awk_setoption (awk, QSE_AWK_CLASSIC); /* add intrinsic functions */ if (add_functions (awk) == -1) @@ -168,9 +166,10 @@ static qse_ssize_t sf_in ( { if (xtn->s.in.type == QSE_AWK_SOURCE_FILES) { - if (xtn->s.in.p.files[xtn->s.in.index] == QSE_NULL) return 0; + if (xtn->s.in.u.files == QSE_NULL) return -1; + if (xtn->s.in.u.files[xtn->s.in.index] == QSE_NULL) return 0; - if (xtn->s.in.p.files[xtn->s.in.index][0] == QSE_T('\0')) + if (xtn->s.in.u.files[xtn->s.in.index][0] == QSE_T('\0')) { xtn->s.in.handle = qse_sio_in; } @@ -179,15 +178,13 @@ static qse_ssize_t sf_in ( xtn->s.in.handle = qse_sio_open ( awk->mmgr, 0, - xtn->s.in.p.files[xtn->s.in.index], + xtn->s.in.u.files[xtn->s.in.index], QSE_SIO_READ ); if (xtn->s.in.handle == QSE_NULL) return -1; } - /* - qse_awk_setsinname (); - */ + //qse_awk_setsource (awk, xtn->s.in.u.files[xtn->s.in.index]); } return 1; @@ -216,10 +213,10 @@ static qse_ssize_t sf_in ( sio = xtn->s.in.handle; n = qse_sio_getsn (sio, data, size); - if (n == 0 && xtn->s.in.p.files[++xtn->s.in.index] != QSE_NULL) + if (n == 0 && xtn->s.in.u.files[++xtn->s.in.index] != QSE_NULL) { if (sio != qse_sio_in) qse_sio_close (sio); - if (xtn->s.in.p.files[xtn->s.in.index][0] == QSE_T('\0')) + if (xtn->s.in.u.files[xtn->s.in.index][0] == QSE_T('\0')) { xtn->s.in.handle = qse_sio_in; } @@ -228,7 +225,7 @@ static qse_ssize_t sf_in ( xtn->s.in.handle = qse_sio_open ( awk->mmgr, 0, - xtn->s.in.p.files[xtn->s.in.index], + xtn->s.in.u.files[xtn->s.in.index], QSE_SIO_READ ); if (xtn->s.in.handle == QSE_NULL) return -1; @@ -244,9 +241,9 @@ static qse_ssize_t sf_in ( } else { - while (n < size && xtn->s.in.p.str[xtn->s.in.index] != QSE_T('\0')) + while (n < size && xtn->s.in.u.str[xtn->s.in.index] != QSE_T('\0')) { - data[n++] = xtn->s.in.p.str[xtn->s.in.index++]; + data[n++] = xtn->s.in.u.str[xtn->s.in.index++]; } } @@ -318,11 +315,11 @@ int qse_awk_parsesimple ( if (ist == QSE_AWK_SOURCE_FILES) { - xtn->s.in.p.files = (const qse_char_t* const*)isp; + xtn->s.in.u.files = (const qse_char_t*const*)isp; } else if (ist == QSE_AWK_SOURCE_STRING) { - xtn->s.in.p.str = (const qse_char_t*)isp; + xtn->s.in.u.str = (const qse_char_t*)isp; } else {