*** empty log message ***

This commit is contained in:
hyung-hwan 2007-02-11 14:08:08 +00:00
parent aa0b2b0263
commit 5c871e4fe9
4 changed files with 93 additions and 66 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.h,v 1.188 2007-02-11 04:44:39 bacon Exp $ * $Id: awk.h,v 1.189 2007-02-11 14:07:28 bacon Exp $
* *
* {License} * {License}
*/ */
@ -13,6 +13,7 @@
typedef struct ase_awk_t ase_awk_t; typedef struct ase_awk_t ase_awk_t;
typedef struct ase_awk_run_t ase_awk_run_t; typedef struct ase_awk_run_t ase_awk_run_t;
typedef struct ase_awk_val_t ase_awk_val_t; typedef struct ase_awk_val_t ase_awk_val_t;
typedef struct ase_awk_map_t ase_awk_map_t;
typedef struct ase_awk_extio_t ase_awk_extio_t; typedef struct ase_awk_extio_t ase_awk_extio_t;
typedef struct ase_awk_prmfns_t ase_awk_prmfns_t; typedef struct ase_awk_prmfns_t ase_awk_prmfns_t;
@ -128,9 +129,14 @@ struct ase_awk_runios_t
struct ase_awk_runcbs_t struct ase_awk_runcbs_t
{ {
void (*on_start) ( void (*on_start) (
ase_awk_t* awk, ase_awk_run_t* run, void* custom_data); ase_awk_run_t* run, void* custom_data);
void (*on_return) (
ase_awk_run_t* run, ase_awk_val_t* ret, void* custom_data);
void (*on_end) ( void (*on_end) (
ase_awk_t* awk, ase_awk_run_t* run, int errnum, void* custom_data); ase_awk_run_t* run, int errnum, void* custom_data);
void* custom_data; void* custom_data;
}; };
@ -468,6 +474,7 @@ int ase_awk_setofilename (
ase_awk_t* ase_awk_getrunawk (ase_awk_run_t* awk); ase_awk_t* ase_awk_getrunawk (ase_awk_run_t* awk);
void* ase_awk_getruncustomdata (ase_awk_run_t* awk); void* ase_awk_getruncustomdata (ase_awk_run_t* awk);
ase_awk_map_t* ase_awk_getrunnamedvarmap (ase_awk_run_t* awk);
/* functions to manipulate the run-time error */ /* functions to manipulate the run-time error */
int ase_awk_getrunerrnum (ase_awk_run_t* run); int ase_awk_getrunerrnum (ase_awk_run_t* run);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: map.h,v 1.19 2007-02-03 10:47:41 bacon Exp $ * $Id: map.h,v 1.20 2007-02-11 14:07:28 bacon Exp $
* *
* {License} * {License}
*/ */
@ -8,10 +8,10 @@
#define _ASE_AWK_MAP_H_ #define _ASE_AWK_MAP_H_
#ifndef _ASE_AWK_AWK_H_ #ifndef _ASE_AWK_AWK_H_
#error Never include this file directly. Include <ase/awk/awk.h> instead #error Include <ase/awk/awk.h> first
#endif #endif
typedef struct ase_awk_map_t ase_awk_map_t; /*typedef struct ase_awk_map_t ase_awk_map_t;*/
typedef struct ase_awk_pair_t ase_awk_pair_t; typedef struct ase_awk_pair_t ase_awk_pair_t;
struct ase_awk_pair_t struct ase_awk_pair_t

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.325 2007-02-03 10:50:39 bacon Exp $ * $Id: run.c,v 1.326 2007-02-11 14:07:28 bacon Exp $
* *
* {License} * {License}
*/ */
@ -64,8 +64,10 @@ static int __build_runarg (
static void __cleanup_globals (ase_awk_run_t* run); static void __cleanup_globals (ase_awk_run_t* run);
static int __set_globals_to_default (ase_awk_run_t* run); static int __set_globals_to_default (ase_awk_run_t* run);
static int __run_main ( static int run_main (
ase_awk_run_t* run, const ase_char_t* main, ase_awk_runarg_t* runarg); ase_awk_run_t* run, const ase_char_t* main,
ase_awk_runcbs_t* runcbs, ase_awk_runarg_t* runarg);
static int __run_pattern_blocks (ase_awk_run_t* run); static int __run_pattern_blocks (ase_awk_run_t* run);
static int __run_pattern_block_chain ( static int __run_pattern_block_chain (
ase_awk_run_t* run, ase_awk_chain_t* chain); ase_awk_run_t* run, ase_awk_chain_t* chain);
@ -210,17 +212,6 @@ typedef ase_awk_val_t* (*binop_func_t) (
ase_awk_run_t* run, ase_awk_val_t* left, ase_awk_val_t* right); ase_awk_run_t* run, ase_awk_val_t* left, ase_awk_val_t* right);
typedef ase_awk_val_t* (*eval_expr_t) (ase_awk_run_t* run, ase_awk_nde_t* nde); typedef ase_awk_val_t* (*eval_expr_t) (ase_awk_run_t* run, ase_awk_nde_t* nde);
#ifdef _DEBUG
static int __printval (ase_awk_pair_t* pair, void* arg)
{
ase_awk_run_t* run = (ase_awk_run_t*)arg;
run->awk->prmfns.dprintf (ASE_T("%s = "), (const ase_char_t*)pair->key);
ase_awk_dprintval (run, (ase_awk_val_t*)pair->val);
run->awk->prmfns.dprintf (ASE_T("\n"));
return 0;
}
#endif
ase_size_t ase_awk_getnargs (ase_awk_run_t* run) ase_size_t ase_awk_getnargs (ase_awk_run_t* run)
{ {
return (ase_size_t) STACK_NARGS (run); return (ase_size_t) STACK_NARGS (run);
@ -569,6 +560,11 @@ void* ase_awk_getruncustomdata (ase_awk_run_t* run)
return run->custom_data; return run->custom_data;
} }
ase_awk_map_t* ase_awk_getrunnamedvarmap (ase_awk_run_t* awk)
{
return &awk->named;
}
int ase_awk_getrunerrnum (ase_awk_run_t* run) int ase_awk_getrunerrnum (ase_awk_run_t* run)
{ {
return run->errnum; return run->errnum;
@ -683,10 +679,12 @@ int ase_awk_run (ase_awk_t* awk,
/* execute the start callback if it exists */ /* execute the start callback if it exists */
if (runcbs != ASE_NULL && runcbs->on_start != ASE_NULL) if (runcbs != ASE_NULL && runcbs->on_start != ASE_NULL)
runcbs->on_start (awk, run, runcbs->custom_data); {
runcbs->on_start (run, runcbs->custom_data);
}
/* enter the main run loop */ /* enter the main run loop */
n = __run_main (run, main, runarg); n = run_main (run, main, runcbs, runarg);
if (n == -1) if (n == -1)
{ {
/* if no callback is specified, awk's error number /* if no callback is specified, awk's error number
@ -703,13 +701,11 @@ int ase_awk_run (ase_awk_t* awk,
} }
} }
/* uninitialize the run object */
__deinit_run (run);
/* the run loop ended. execute the end callback if it exists */ /* the run loop ended. execute the end callback if it exists */
if (runcbs != ASE_NULL && runcbs->on_end != ASE_NULL) if (runcbs != ASE_NULL && runcbs->on_end != ASE_NULL)
{ {
runcbs->on_end (awk, run, runcbs->on_end (run,
((n == -1)? run->errnum: ASE_AWK_ENOERR), ((n == -1)? run->errnum: ASE_AWK_ENOERR),
runcbs->custom_data); runcbs->custom_data);
@ -718,6 +714,9 @@ int ase_awk_run (ase_awk_t* awk,
n = 0; n = 0;
} }
/* uninitialize the run object */
__deinit_run (run);
/* unregister the run object */ /* unregister the run object */
__del_run (awk, run); __del_run (awk, run);
@ -730,6 +729,12 @@ int ase_awk_stop (ase_awk_t* awk, ase_awk_run_t* run)
ase_awk_run_t* r; ase_awk_run_t* r;
int n = 0; int n = 0;
if (ase_awk_getrunawk(run) != awk)
{
awk->errnum = ASE_AWK_EINVAL;
return -1;
}
ASE_AWK_LOCK (awk); ASE_AWK_LOCK (awk);
/* check if the run handle given is valid */ /* check if the run handle given is valid */
@ -1242,8 +1247,9 @@ static int __set_globals_to_default (ase_awk_run_t* run)
return 0; return 0;
} }
static int __run_main ( static int run_main (
ase_awk_run_t* run, const ase_char_t* main, ase_awk_runarg_t* runarg) ase_awk_run_t* run, const ase_char_t* main,
ase_awk_runcbs_t* runcbs, ase_awk_runarg_t* runarg)
{ {
ase_size_t nglobals, nargs, nrunargs, i; ase_size_t nglobals, nargs, nrunargs, i;
ase_size_t saved_stack_top; ase_size_t saved_stack_top;
@ -1383,13 +1389,13 @@ static int __run_main (
if (v == ASE_NULL) n = -1; if (v == ASE_NULL) n = -1;
else else
{ {
#ifdef _DEBUG
run->awk->prmfns.dprintf (ASE_T("[RETURN] - "));
ase_awk_dprintval (run, v);
run->awk->prmfns.dprintf (ASE_T("\n"));
#endif
/* destroy the return value if necessary */
ase_awk_refupval (run, v); ase_awk_refupval (run, v);
if (runcbs != ASE_NULL && runcbs->on_return != ASE_NULL)
{
runcbs->on_return (run, v, runcbs->custom_data);
}
ase_awk_refdownval (run, v); ase_awk_refdownval (run, v);
} }
@ -1502,15 +1508,13 @@ static int __run_main (
v = STACK_RETVAL(run); v = STACK_RETVAL(run);
#ifdef _DEBUG if (runcbs != ASE_NULL && runcbs->on_return != ASE_NULL)
run->awk->prmfns.dprintf (ASE_T("[RETURN] - ")); {
ase_awk_dprintval (run, v); runcbs->on_return (run, v, runcbs->custom_data);
run->awk->prmfns.dprintf (ASE_T("\n")); }
#endif
/* the life of the global return value is over here /* the life of the global return value is over here
* unlike the return value of each function */ * unlike the return value of each function */
/*ase_awk_refdownval_nofree (awk, v);*/
ase_awk_refdownval (run, v); ase_awk_refdownval (run, v);
run->stack_top = run->stack_top =
@ -1531,12 +1535,6 @@ static int __run_main (
/* just reset the exit level */ /* just reset the exit level */
run->exit_level = EXIT_NONE; run->exit_level = EXIT_NONE;
#ifdef _DEBUG
run->awk->prmfns.dprintf (ASE_T("[VARIABLES]\n"));
ase_awk_map_walk (&run->named, __printval, run);
run->awk->prmfns.dprintf (ASE_T("[END VARIABLES]\n"));
#endif
return n; return n;
} }

View File

@ -1,8 +1,10 @@
/* /*
* $Id: awk.c,v 1.164 2007-02-10 13:52:41 bacon Exp $ * $Id: awk.c,v 1.165 2007-02-11 14:08:08 bacon Exp $
*/ */
#include <ase/awk/awk.h> #include <ase/awk/awk.h>
#include <ase/awk/val.h>
#include <ase/awk/map.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <signal.h> #include <signal.h>
@ -609,52 +611,69 @@ ase_awk_t* app_awk = NULL;
ase_awk_run_t* app_run = NULL; ase_awk_run_t* app_run = NULL;
#ifdef _WIN32 #ifdef _WIN32
static BOOL WINAPI __stop_run (DWORD ctrl_type) static BOOL WINAPI stop_run (DWORD ctrl_type)
{ {
if (ctrl_type == CTRL_C_EVENT || if (ctrl_type == CTRL_C_EVENT ||
ctrl_type == CTRL_CLOSE_EVENT) ctrl_type == CTRL_CLOSE_EVENT)
{ {
ase_awk_stop (app_awk, app_run); ase_awk_stop (ase_awk_getrunawk(app_run), app_run);
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
#else #else
static void __stop_run (int sig) static void stop_run (int sig)
{ {
signal (SIGINT, SIG_IGN); signal (SIGINT, SIG_IGN);
ase_awk_stop (app_awk, app_run); ase_awk_stop (ase_awk_getrunawk(app_run), app_run);
/*ase_awk_stoprun (awk, handle);*/ /*ase_awk_stopall (app_awk); */
/*ase_awk_stopallruns (awk); */ /*ase_awk_stopall (ase_awk_getrunawk(app_run)); */
signal (SIGINT, __stop_run); signal (SIGINT, stop_run);
} }
#endif #endif
static void on_run_start ( static void on_run_start (ase_awk_run_t* run, void* custom_data)
ase_awk_t* awk, ase_awk_run_t* run, void* custom_data)
{ {
app_awk = awk;
app_run = run; app_run = run;
awk_dprintf (ASE_T("[AWK ABOUT TO START]\n"));
awk_dprintf (ASE_T("AWK ABOUT TO START...\n"));
} }
static void on_run_end ( static int __printval (ase_awk_pair_t* pair, void* arg)
ase_awk_t* awk, ase_awk_run_t* run, {
int errnum, void* custom_data) ase_awk_run_t* run = (ase_awk_run_t*)arg;
awk_dprintf (ASE_T("%s = "), (const ase_char_t*)pair->key);
ase_awk_dprintval (run, (ase_awk_val_t*)pair->val);
awk_dprintf (ASE_T("\n"));
return 0;
}
static void on_run_return (
ase_awk_run_t* run, ase_awk_val_t* ret, void* custom_data)
{
app_run = run;
awk_dprintf (ASE_T("[RETURN] - "));
ase_awk_dprintval (run, ret);
awk_dprintf (ASE_T("\n"));
awk_dprintf (ASE_T("[NAMED VARIABLES]\n"));
ase_awk_map_walk (ase_awk_getrunnamedvarmap(run), __printval, run);
awk_dprintf (ASE_T("[END NAMED VARIABLES]\n"));
}
static void on_run_end (ase_awk_run_t* run, int errnum, void* custom_data)
{ {
if (errnum != ASE_AWK_ENOERR) if (errnum != ASE_AWK_ENOERR)
{ {
awk_dprintf (ASE_T("AWK ENDED WITH AN ERROR\n")); awk_dprintf (ASE_T("[AWK ENDED WITH AN ERROR] - "));
awk_dprintf (ASE_T("CODE [%d] LINE [%u] %s\n"), awk_dprintf (ASE_T("CODE [%d] LINE [%u] %s\n"),
errnum, errnum,
(unsigned int)ase_awk_getrunerrlin(run), (unsigned int)ase_awk_getrunerrlin(run),
ase_awk_getrunerrmsg(run)); ase_awk_getrunerrmsg(run));
} }
else awk_dprintf (ASE_T("AWK ENDED SUCCESSFULLY\n")); else awk_dprintf (ASE_T("[AWK ENDED SUCCESSFULLY]\n"));
app_awk = NULL;
app_run = NULL; app_run = NULL;
} }
@ -934,6 +953,8 @@ static int awk_main (int argc, ase_char_t* argv[])
return -1; return -1;
} }
app_awk = awk;
ase_awk_setoption (awk, opt); ase_awk_setoption (awk, opt);
srcios.in = process_source; srcios.in = process_source;
@ -957,9 +978,9 @@ static int awk_main (int argc, ase_char_t* argv[])
} }
#ifdef _WIN32 #ifdef _WIN32
SetConsoleCtrlHandler (__stop_run, TRUE); SetConsoleCtrlHandler (stop_run, TRUE);
#else #else
signal (SIGINT, __stop_run); signal (SIGINT, stop_run);
#endif #endif
runios.pipe = process_extio_pipe; runios.pipe = process_extio_pipe;
@ -968,6 +989,7 @@ static int awk_main (int argc, ase_char_t* argv[])
runios.console = process_extio_console; runios.console = process_extio_console;
runcbs.on_start = on_run_start; runcbs.on_start = on_run_start;
runcbs.on_return = on_run_return;
runcbs.on_end = on_run_end; runcbs.on_end = on_run_end;
runcbs.custom_data = ASE_NULL; runcbs.custom_data = ASE_NULL;