diff --git a/ase/test/awk/awk.c b/ase/test/awk/awk.c index 167c72d9..569b5d41 100644 --- a/ase/test/awk/awk.c +++ b/ase/test/awk/awk.c @@ -1,5 +1,5 @@ /* - * $Id: awk.c,v 1.64 2006-08-04 16:33:50 bacon Exp $ + * $Id: awk.c,v 1.65 2006-08-04 17:02:02 bacon Exp $ */ #include @@ -516,7 +516,7 @@ static int __main (int argc, xp_char_t* argv[]) xp_awk_t* awk; xp_awk_runcb_t runcb; struct src_io src_io = { NULL, NULL }; - + int opt; if ((awk = xp_awk_open()) == XP_NULL) { @@ -550,10 +550,10 @@ static int __main (int argc, xp_char_t* argv[]) return -1; } - xp_awk_setparseopt (awk, - XP_AWK_EXPLICIT | XP_AWK_UNIQUE | XP_AWK_DBLSLASHES | + + opt = XP_AWK_EXPLICIT | XP_AWK_UNIQUE | XP_AWK_DBLSLASHES | XP_AWK_SHADING | XP_AWK_IMPLICIT | XP_AWK_SHIFT | - XP_AWK_EXTIO | XP_AWK_BLOCKLESS); + XP_AWK_EXTIO | XP_AWK_BLOCKLESS; if (argc == 2) { @@ -578,7 +578,7 @@ static int __main (int argc, xp_char_t* argv[]) if (xp_strcmp(argv[1], XP_T("-m")) == 0) #endif { - xp_awk_setrunopt (awk, XP_AWK_RUNMAIN); + opt |= XP_AWK_RUNMAIN; } else { @@ -596,6 +596,8 @@ static int __main (int argc, xp_char_t* argv[]) return -1; } + xp_awk_setopt (awk, opt); + if (xp_awk_attsrc(awk, process_source, (void*)&src_io) == -1) { xp_awk_close (awk); diff --git a/ase/test/awk/rex2.c b/ase/test/awk/rex2.c new file mode 100644 index 00000000..8e824316 --- /dev/null +++ b/ase/test/awk/rex2.c @@ -0,0 +1,56 @@ +#include + +#ifdef __STAND_ALONE + #define xp_printf xp_awk_printf + extern int xp_awk_printf (const xp_char_t* fmt, ...); + #define xp_strcmp xp_awk_strcmp + extern int xp_awk_strcmp (const xp_char_t* s1, const xp_char_t* s2); + #define xp_strlen xp_awk_strlen + extern int xp_awk_strlen (const xp_char_t* s); +#endif + +int xp_main (int argc, const xp_char_t* argv[]) +{ + void* rex; + const xp_char_t* ptn; + int errnum; + + //ptn = XP_T("|"); + //ptn = XP_T("^he.llo(jo(in|kk)s|com)+h*e{1,40}abc|[^abc][de-f]|^he.llo(jo(in|kk)s|com)+h*e{1,40}abc|[^abc][de-f]"); + //ptn = XP_T("^he.llo(jo(in|kk)s|com)+h*e{1,40}abc|[^abc][de-f]"); + //ptn = XP_T("^he.llo(jo(in|kk)s|com)|[^x[:space:][:alpha:]j][^abc][de-f]|^he.llo(jo(in|kk)s|com)|[^x[:space:][:alpha:]j][^abc][de-f]"); + ptn = XP_T("^.{0,2}.z[^[:space:]]+(abc|zzz){1,2}khg"); + + rex = xp_awk_buildrex (ptn, xp_strlen(ptn), &errnum); + if (rex == XP_NULL) + { + xp_printf (XP_T("cannot compile pattern\n")); + return -1; + } + + xp_printf (XP_T("NA: %u\n"), (unsigned int)XP_AWK_REX_NA(rex)); + xp_printf (XP_T("LEN: %u\n"), (unsigned int)XP_AWK_REX_LEN(rex)); + xp_awk_printrex (rex); + + { + int n; + const xp_char_t* match_ptr; + xp_size_t match_len; + + //if (xp_awk_matchrex (rex, XP_T("azhabc"), 6, &match_ptr, &match_len) == 0) + n = xp_awk_matchrex (rex, XP_T("azhzzzabckhgi"), 13, &match_ptr, &match_len, &errnum); + if (n == 1) + { + xp_printf (XP_T("match = %s, match length = %u\n"), match_ptr, match_len); + } + else if (n == 0) + { + xp_printf (XP_T("go to hell\n")); + } + else /* if (n == -1) */ + { + xp_printf (XP_T("ERROR: in match\n")); + } + } + return 0; +}