76 lines
1.8 KiB
C
76 lines
1.8 KiB
C
#include <hawk-std.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
static const hawk_bch_t* src =
|
|
"BEGIN {"
|
|
" for (i=2;i<=9;i++)"
|
|
" {"
|
|
" for (j=1;j<=9;j++)"
|
|
" print i \"*\" j \"=\" i * j;"
|
|
" print \"---------------------\";"
|
|
" }"
|
|
"}";
|
|
|
|
int main ()
|
|
{
|
|
hawk_t* hawk = HAWK_NULL;
|
|
hawk_rtx_t* rtx = HAWK_NULL;
|
|
hawk_val_t* retv;
|
|
hawk_parsestd_t psin[2];
|
|
int ret;
|
|
|
|
hawk = hawk_openstd(0, HAWK_NULL); /* create a hawk instance */
|
|
if (!hawk)
|
|
{
|
|
fprintf (stderr, "ERROR: cannot open hawk\n");
|
|
ret = -1; goto oops;
|
|
}
|
|
|
|
/* set up source script file to read in */
|
|
memset (&psin, 0, HAWK_SIZEOF(psin));
|
|
psin[0].type = HAWK_PARSESTD_BCS; /* specify the first script path */
|
|
psin[0].u.bcs.ptr = (hawk_bch_t*)src;
|
|
psin[0].u.bcs.len = hawk_count_bcstr(src);
|
|
psin[1].type = HAWK_PARSESTD_NULL; /* indicate the no more script to read */
|
|
|
|
ret = hawk_parsestd(hawk, psin, HAWK_NULL); /* parse the script */
|
|
if (ret <= -1)
|
|
{
|
|
hawk_logbfmt (hawk, HAWK_LOG_STDERR, "ERROR(parse): %js\n", hawk_geterrmsg(hawk));
|
|
ret = -1; goto oops;
|
|
}
|
|
|
|
/* create a runtime context needed for execution */
|
|
rtx = hawk_rtx_openstd (
|
|
hawk,
|
|
0,
|
|
HAWK_T("hawk02"),
|
|
HAWK_NULL, /* stdin */
|
|
HAWK_NULL, /* stdout */
|
|
HAWK_NULL /* default cmgr */
|
|
);
|
|
if (!rtx)
|
|
{
|
|
hawk_logbfmt (hawk, HAWK_LOG_STDERR, "ERROR(rtx_open): %js\n", hawk_geterrmsg(hawk));
|
|
ret = -1; goto oops;
|
|
}
|
|
|
|
/* execute the BEGIN/pattern-action/END blocks */
|
|
retv = hawk_rtx_loop(rtx);
|
|
if (!retv)
|
|
{
|
|
hawk_logbfmt (hawk, HAWK_LOG_STDERR, "ERROR(rtx_loop): %js\n", hawk_geterrmsg(hawk));
|
|
ret = -1; goto oops;
|
|
}
|
|
|
|
/* lowered the reference count of the returned value */
|
|
hawk_rtx_refdownval (rtx, retv);
|
|
ret = 0;
|
|
|
|
oops:
|
|
if (rtx) hawk_rtx_close (rtx); /* destroy the runtime context */
|
|
if (hawk) hawk_close (hawk); /* destroy the hawk instance */
|
|
return -1;
|
|
}
|