added qse_awk_rtx_openstdwithmbs(), qse_awk_rtx_openstdwithwcs().

added QSE_AWK_PARSESTD_MBS, QSE_AWK_PARSESTD_WCS
This commit is contained in:
2019-08-29 08:42:17 +00:00
parent d5320cfd30
commit 74ff72564e
3 changed files with 439 additions and 46 deletions

View File

@ -27,6 +27,8 @@
#include <qse/awk/awk.h>
#include <qse/awk/stdawk.h>
#include <qse/cmn/mem.h>
#include <qse/cmn/path.h>
#include <qse/cmn/str.h>
#include <qse/si/sio.h>
static const qse_char_t* src = QSE_T(
@ -40,7 +42,7 @@ static const qse_char_t* src = QSE_T(
"}"
);
int main ()
int main (int argc, char* argv[])
{
qse_awk_t* awk = QSE_NULL;
qse_awk_rtx_t* rtx = QSE_NULL;
@ -49,11 +51,23 @@ int main ()
qse_awk_parsestd_t psin[2];
qse_awk_parsestd_t psout;
int ret;
int ret, omode = 0;
qse_open_stdsios ();
awk = qse_awk_openstd (0, QSE_NULL);
if (argc >= 2)
{
if (argc == 2 && qse_mbscmp(argv[1], "-m") == 0) omode = 1;
else if (argc == 2 && qse_mbscmp(argv[1], "-w") == 0) omode = 2;
else
{
qse_fprintf (QSE_STDERR, QSE_T("USAGE: %hs [-m | -w]\n"), qse_basenameasmbs(argv[0]));
ret = -1; goto oops;
}
}
awk = qse_awk_openstd(0, QSE_NULL);
if (awk == QSE_NULL)
{
qse_fprintf (QSE_STDERR, QSE_T("ERROR: cannot open awk\n"));
@ -65,44 +79,68 @@ int main ()
psin[0].u.str.len = qse_strlen(src);
psin[1].type = QSE_AWK_PARSESTD_NULL;
psout.type = QSE_AWK_PARSESTD_STR;
switch (omode)
{
case 1:
psout.type = QSE_AWK_PARSESTD_MBS;
break;
case 2:
psout.type = QSE_AWK_PARSESTD_WCS;
break;
default:
psout.type = QSE_AWK_PARSESTD_STR;
break;
/* ps.out.u.str.ptr and ps.out.u.str.len are set when qse_awk_parsestd()
* returns success */
}
ret = qse_awk_parsestd (awk, psin, &psout);
ret = qse_awk_parsestd(awk, psin, &psout);
if (ret <= -1)
{
qse_fprintf (QSE_STDERR, QSE_T("ERROR: %s\n"),
qse_awk_geterrmsg(awk));
qse_fprintf (QSE_STDERR, QSE_T("ERROR: %s\n"), qse_awk_geterrmsg(awk));
ret = -1; goto oops;
}
qse_printf (QSE_T("DEPARSED SOURCE:\n%s\n"), psout.u.str.ptr);
qse_printf (QSE_T("DEPARSED SOURCE:\n"));
switch (omode)
{
case 1:
qse_printf (QSE_T("%hs\n"), psout.u.mbs.ptr);
qse_awk_freemem (awk, psout.u.mbs.ptr);
break;
case 2:
qse_printf (QSE_T("%ls\n"), psout.u.wcs.ptr);
qse_awk_freemem (awk, psout.u.wcs.ptr);
break;
default:
qse_printf (QSE_T("%js\n"), psout.u.str.ptr);
qse_awk_freemem (awk, psout.u.str.ptr);
break;
}
qse_printf (QSE_T("=================================\n"));
qse_fflush (QSE_STDOUT);
QSE_MMGR_FREE (qse_awk_getmmgr(awk), psout.u.str.ptr);
rtx = qse_awk_rtx_openstd (
awk,
0,
QSE_T("awk02"),
QSE_T("awk15"),
QSE_NULL, /* stdin */
QSE_NULL, /* stdout */
QSE_NULL /* default cmgr */
);
if (rtx == QSE_NULL)
{
qse_fprintf (QSE_STDERR, QSE_T("ERROR: %s\n"),
qse_awk_geterrmsg(awk));
qse_fprintf (QSE_STDERR, QSE_T("ERROR: %s\n"), qse_awk_geterrmsg(awk));
ret = -1; goto oops;
}
retv = qse_awk_rtx_loop (rtx);
retv = qse_awk_rtx_loop(rtx);
if (retv == QSE_NULL)
{
qse_fprintf (QSE_STDERR, QSE_T("ERROR: %s\n"),
qse_awk_rtx_geterrmsg(rtx));
qse_fprintf (QSE_STDERR, QSE_T("ERROR: %s\n"), qse_awk_rtx_geterrmsg(rtx));
ret = -1; goto oops;
}