diff --git a/ase/awk/awk.h b/ase/awk/awk.h index 98ff1242..d6b4ca47 100644 --- a/ase/awk/awk.h +++ b/ase/awk/awk.h @@ -1,5 +1,5 @@ /* - * $Id: awk.h,v 1.195 2007-03-02 11:47:52 bacon Exp $ + * $Id: awk.h,v 1.196 2007-03-02 14:41:30 bacon Exp $ * * {License} */ @@ -102,6 +102,9 @@ struct ase_awk_runcbs_t void (*on_start) ( ase_awk_run_t* run, void* custom_data); + void (*on_statement) ( + ase_awk_run_t* run, ase_size_t line, void* custom_data); + void (*on_return) ( ase_awk_run_t* run, ase_awk_val_t* ret, void* custom_data); diff --git a/ase/awk/awk_i.h b/ase/awk/awk_i.h index 0ba922aa..2fa91a5f 100644 --- a/ase/awk/awk_i.h +++ b/ase/awk/awk_i.h @@ -1,5 +1,5 @@ /* - * $Id: awk_i.h,v 1.106 2007-03-02 11:14:33 bacon Exp $ + * $Id: awk_i.h,v 1.107 2007-03-02 14:41:30 bacon Exp $ * * {License} */ @@ -317,17 +317,14 @@ struct ase_awk_run_t } max; } depth; - ase_size_t runlin; /* line no. of the node being executed currently */ - int errnum; ase_size_t errlin; ase_char_t errmsg[256]; void* custom_data; - ase_awk_t* awk; - ase_awk_run_t* prev; - ase_awk_run_t* next; + ase_awk_t* awk; + ase_awk_runcbs_t* cbs; }; #endif diff --git a/ase/awk/makefile.msw.bcc b/ase/awk/makefile.msw.bcc index 7e710d04..d6b74775 100644 --- a/ase/awk/makefile.msw.bcc +++ b/ase/awk/makefile.msw.bcc @@ -32,7 +32,7 @@ LIBS = import32.lib cw32mt.lib JNI_LDFLAGS = $(LDFLAGS) -L..\cmn -L..\utl JNI_LIBS = $(LIBS) $(OUT).lib asecmn.lib aseutl.lib -all: lib jni +all: lib lib: $(C_OBJS) $(AR) $(OUT).lib @&&! diff --git a/ase/awk/makefile.msw.cl b/ase/awk/makefile.msw.cl index 7698ddaf..56cc0545 100644 --- a/ase/awk/makefile.msw.cl +++ b/ase/awk/makefile.msw.cl @@ -21,7 +21,7 @@ JAVAC = javac CFLAGS = /nologo /O2 /MT /W3 /GR- -I../.. $(JNI_INC) JAVACFLAGS = -classpath ../.. -Xlint:unchecked -all: lib jni +all: lib lib: $(C_OBJS) $(LD) /lib @<< diff --git a/ase/awk/run.c b/ase/awk/run.c index d07da24a..739bf161 100644 --- a/ase/awk/run.c +++ b/ase/awk/run.c @@ -1,5 +1,5 @@ /* - * $Id: run.c,v 1.335 2007-03-02 11:47:52 bacon Exp $ + * $Id: run.c,v 1.336 2007-03-02 14:41:30 bacon Exp $ * * {License} */ @@ -67,7 +67,7 @@ static int __set_globals_to_default (ase_awk_run_t* run); static int run_main ( ase_awk_run_t* run, const ase_char_t* main, - ase_awk_runcbs_t* runcbs, ase_awk_runarg_t* runarg); + ase_awk_runarg_t* runarg); static int __run_pattern_blocks (ase_awk_run_t* run); static int __run_pattern_block_chain ( @@ -628,6 +628,8 @@ int ase_awk_run (ase_awk_t* awk, run->errlin = 0; run->errmsg[0] = ASE_T('\0'); + run->cbs = runcbs; + /* execute the start callback if it exists */ if (runcbs != ASE_NULL && runcbs->on_start != ASE_NULL) { @@ -635,7 +637,7 @@ int ase_awk_run (ase_awk_t* awk, } /* enter the main run loop */ - n = run_main (run, main, runcbs, runarg); + n = run_main (run, main, runarg); if (n == -1) { /* if no callback is specified, awk's error number @@ -1119,7 +1121,7 @@ static int __set_globals_to_default (ase_awk_run_t* run) static int run_main ( ase_awk_run_t* run, const ase_char_t* main, - ase_awk_runcbs_t* runcbs, ase_awk_runarg_t* runarg) + ase_awk_runarg_t* runarg) { ase_size_t nglobals, nargs, nrunargs, i; ase_size_t saved_stack_top; @@ -1262,9 +1264,9 @@ static int run_main ( { ase_awk_refupval (run, v); - if (runcbs != ASE_NULL && runcbs->on_return != ASE_NULL) + if (run->cbs != ASE_NULL && run->cbs->on_return != ASE_NULL) { - runcbs->on_return (run, v, runcbs->custom_data); + run->cbs->on_return (run, v, run->cbs->custom_data); } ase_awk_refdownval (run, v); @@ -1380,9 +1382,9 @@ static int run_main ( v = STACK_RETVAL(run); if (n == 0) { - if (runcbs != ASE_NULL && runcbs->on_return != ASE_NULL) + if (run->cbs != ASE_NULL && run->cbs->on_return != ASE_NULL) { - runcbs->on_return (run, v, runcbs->custom_data); + run->cbs->on_return (run, v, run->cbs->custom_data); } } /* end the life of the global return value */ @@ -1652,11 +1654,6 @@ static int __run_block0 (ase_awk_run_t* run, ase_awk_nde_blk_t* nde) while (p != ASE_NULL && run->exit_level == EXIT_NONE) { -#ifdef DEBUG_RUN - ase_dprintf (ASE_T("running a statement of type %d at line %d\n"), - (int)p->type, (int)p->line); -#endif - if (__run_statement (run, p) == -1) { n = -1; @@ -1682,6 +1679,11 @@ static int __run_block0 (ase_awk_run_t* run, ase_awk_nde_blk_t* nde) static int __run_statement (ase_awk_run_t* run, ase_awk_nde_t* nde) { + if (run->cbs != ASE_NULL && run->cbs->on_statement != ASE_NULL) + { + run->cbs->on_statement (run, nde->line, run->custom_data); + } + switch (nde->type) { case ASE_AWK_NDE_NULL: diff --git a/ase/test/awk/awk.c b/ase/test/awk/awk.c index 19dba57a..fea6c9ea 100644 --- a/ase/test/awk/awk.c +++ b/ase/test/awk/awk.c @@ -1,5 +1,5 @@ /* - * $Id: awk.c,v 1.180 2007-03-02 11:14:35 bacon Exp $ + * $Id: awk.c,v 1.181 2007-03-02 14:42:04 bacon Exp $ */ #include @@ -636,7 +636,7 @@ static BOOL WINAPI stop_run (DWORD ctrl_type) if (ctrl_type == CTRL_C_EVENT || ctrl_type == CTRL_CLOSE_EVENT) { - ase_awk_stop (ase_awk_getrunawk(app_run), app_run); + ase_awk_stop (app_run); return TRUE; } @@ -666,11 +666,15 @@ static int print_awk_value (ase_awk_pair_t* pair, void* arg) return 0; } +static void on_run_statement ( + ase_awk_run_t* run, ase_size_t line, void* custom) +{ + dprintf (L"running %d\n", (int)line); +} + static void on_run_return ( ase_awk_run_t* run, ase_awk_val_t* ret, void* custom) { - app_run = run; - dprintf (ASE_T("[RETURN] - ")); ase_awk_dprintval (run, ret); dprintf (ASE_T("\n")); @@ -908,6 +912,7 @@ static int awk_main (int argc, ase_char_t* argv[]) runios.console = awk_extio_console; runcbs.on_start = on_run_start; + runcbs.on_statement = on_run_statement; runcbs.on_return = on_run_return; runcbs.on_end = on_run_end; runcbs.custom_data = ASE_NULL;