76 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <hawk.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;
 | |
| }
 |