From 12468e6d64e6d38a46ec9a2320b135b2ea04280a Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Mon, 27 Nov 2006 15:11:14 +0000 Subject: [PATCH] *** empty log message *** --- ase/awk/Awk.java | 22 ++++-- ase/awk/awk.c | 4 +- ase/awk/func.c | 160 +++++++++++++++--------------------------- ase/awk/func.h | 21 ++++-- ase/awk/jni.c | 9 ++- ase/awk/jni.h | 19 +++-- ase/awk/parse.c | 16 ++--- ase/awk/run.c | 18 ++--- ase/awk/tree.c | 8 +-- ase/awk/tree.h | 27 ++++--- ase/test/awk/Awk.java | 4 +- ase/test/awk/awk.c | 12 +++- 12 files changed, 162 insertions(+), 158 deletions(-) diff --git a/ase/awk/Awk.java b/ase/awk/Awk.java index a85428a2..0dde93ae 100644 --- a/ase/awk/Awk.java +++ b/ase/awk/Awk.java @@ -1,5 +1,5 @@ /* - * $Id: Awk.java,v 1.12 2006-11-27 04:33:21 bacon Exp $ + * $Id: Awk.java,v 1.13 2006-11-27 15:10:34 bacon Exp $ */ package ase.awk; @@ -39,15 +39,25 @@ public abstract class Awk if (handle != 0) close (); } - /* == methods to provide major functionalities */ - public native void close (); - public native void parse () throws Exception; - public native void run () throws Exception; - + /* == native methods == */ private native void open () throws Exception; + public native void close (); + public native void parse () throws Exception; + public native void run () throws Exception; + + private native void addbfn (String name, int min_args, int max_args); + //private native int delbfn (String name); + private native int setfilename (long run_id, String name); private native int setofilename (long run_id, String name); + /* == builtin functions == */ + public void addBuiltinFunction ( + String name, int min_args, int max_args) throws Exception + { + addbfn (name, min_args, max_args); + } + /* == console name setters == */ public void setInputConsoleName (Extio extio, String name) //throws Exception { diff --git a/ase/awk/awk.c b/ase/awk/awk.c index 3eb0f15e..bf0f78ef 100644 --- a/ase/awk/awk.c +++ b/ase/awk/awk.c @@ -1,5 +1,5 @@ /* - * $Id: awk.c,v 1.91 2006-11-25 15:51:30 bacon Exp $ + * $Id: awk.c,v 1.92 2006-11-27 15:10:34 bacon Exp $ */ #if defined(__BORLANDC__) @@ -227,6 +227,8 @@ int ase_awk_clear (ase_awk_t* awk) awk->tree.chain_tail = ASE_NULL; awk->tree.chain_size = 0; + + ase_awk_clrbfn (awk); return 0; } diff --git a/ase/awk/func.c b/ase/awk/func.c index bd80c053..4af1c74a 100644 --- a/ase/awk/func.c +++ b/ase/awk/func.c @@ -1,5 +1,5 @@ /* - * $Id: func.c,v 1.77 2006-11-18 15:36:57 bacon Exp $ + * $Id: func.c,v 1.78 2006-11-27 15:10:34 bacon Exp $ */ #include @@ -24,22 +24,22 @@ static int __bfn_sprintf (ase_awk_run_t* run); static ase_awk_bfn_t __sys_bfn[] = { /* io functions */ - {ASE_T("close"), 5, ASE_AWK_EXTIO, 1, 1, ASE_NULL, __bfn_close}, - {ASE_T("fflush"), 6, ASE_AWK_EXTIO, 0, 1, ASE_NULL, __bfn_fflush}, + { {ASE_T("close"), 5}, ASE_AWK_EXTIO, 1, 1, ASE_NULL, __bfn_close}, + { {ASE_T("fflush"), 6}, ASE_AWK_EXTIO, 0, 1, ASE_NULL, __bfn_fflush}, /* string functions */ - {ASE_T("index"), 5, 0, 2, 2, ASE_NULL, __bfn_index}, - {ASE_T("substr"), 6, 0, 2, 3, ASE_NULL, __bfn_substr}, - {ASE_T("length"), 6, 0, 1, 1, ASE_NULL, __bfn_length}, - {ASE_T("split"), 5, 0, 2, 3, ASE_T("vrv"), __bfn_split}, - {ASE_T("tolower"), 7, 0, 1, 1, ASE_NULL, __bfn_tolower}, - {ASE_T("toupper"), 7, 0, 1, 1, ASE_NULL, __bfn_toupper}, - {ASE_T("gsub"), 4, 0, 2, 3, ASE_T("xvr"), __bfn_gsub}, - {ASE_T("sub"), 3, 0, 2, 3, ASE_T("xvr"), __bfn_sub}, - {ASE_T("match"), 5, 0, 2, 2, ASE_T("vx"), __bfn_match}, - {ASE_T("sprintf"), 7, 0, 1, MAX, ASE_NULL, __bfn_sprintf}, + { {ASE_T("index"), 5}, 0, 2, 2, ASE_NULL, __bfn_index}, + { {ASE_T("substr"), 6}, 0, 2, 3, ASE_NULL, __bfn_substr}, + { {ASE_T("length"), 6}, 0, 1, 1, ASE_NULL, __bfn_length}, + { {ASE_T("split"), 5}, 0, 2, 3, ASE_T("vrv"), __bfn_split}, + { {ASE_T("tolower"), 7}, 0, 1, 1, ASE_NULL, __bfn_tolower}, + { {ASE_T("toupper"), 7}, 0, 1, 1, ASE_NULL, __bfn_toupper}, + { {ASE_T("gsub"), 4}, 0, 2, 3, ASE_T("xvr"), __bfn_gsub}, + { {ASE_T("sub"), 3}, 0, 2, 3, ASE_T("xvr"), __bfn_sub}, + { {ASE_T("match"), 5}, 0, 2, 2, ASE_T("vx"), __bfn_match}, + { {ASE_T("sprintf"), 7}, 0, 1, MAX, ASE_NULL, __bfn_sprintf}, - {ASE_NULL, 0, 0, 0, 0, ASE_NULL, ASE_NULL} + { {ASE_NULL, 0}, 0, 0, 0, ASE_NULL, ASE_NULL} }; ase_awk_bfn_t* ase_awk_addbfn ( @@ -49,18 +49,36 @@ ase_awk_bfn_t* ase_awk_addbfn ( { ase_awk_bfn_t* p; -/* TODO: complete this function??? */ - p = (ase_awk_bfn_t*) ASE_AWK_MALLOC (awk, ase_sizeof(ase_awk_bfn_t)); - if (p == ASE_NULL) return ASE_NULL; + if (p == ASE_NULL) + { + awk->errnum = ASE_AWK_ENOMEM; + return ASE_NULL; + } - /* NOTE: make sure that name is a constant string */ - p->name = name; - p->name_len = name_len; + p->name.ptr = ase_awk_strxdup (awk, name, name_len); + if (p->name.ptr == ASE_NULL) + { + ASE_AWK_FREE (awk, p); + awk->errnum = ASE_AWK_ENOMEM; + return ASE_NULL; + } + p->name.len = name_len; p->valid = when_valid; - p->min_args = min_args; - p->max_args = max_args; - p->arg_spec = arg_spec; + p->arg.min = min_args; + p->arg.max = max_args; + if (arg_spec == ASE_NULL) p->arg.spec = ASE_NULL; + else + { + p->arg.spec = ase_awk_strdup (awk, arg_spec); + if (p->arg.spec == ASE_NULL) + { + ASE_AWK_FREE (awk, p->name.ptr); + ASE_AWK_FREE (awk, p); + awk->errnum = ASE_AWK_ENOMEM; + return ASE_NULL; + } + } p->handler = handler; p->next = awk->bfn.user; @@ -75,12 +93,16 @@ int ase_awk_delbfn (ase_awk_t* awk, const ase_char_t* name, ase_size_t name_len) for (p = awk->bfn.user; p != ASE_NULL; p++) { - if (ase_awk_strxncmp(p->name, p->name_len, name, name_len) == 0) + if (ase_awk_strxncmp ( + p->name.ptr, p->name.len, name, name_len) == 0) { if (pp == ASE_NULL) awk->bfn.user = p->next; else pp->next = p->next; + if (p->arg.spec != ASE_NULL) + ASE_AWK_FREE (awk, p->arg.spec); + ASE_AWK_FREE (awk, p->name.ptr); ASE_AWK_FREE (awk, p); return 0; } @@ -98,7 +120,10 @@ void ase_awk_clrbfn (ase_awk_t* awk) p = awk->bfn.user; while (p != ASE_NULL) { - np = p; + np = p->next; + if (p->arg.spec != ASE_NULL) + ASE_AWK_FREE (awk, p->arg.spec); + ASE_AWK_FREE (awk, p->name.ptr); ASE_AWK_FREE (awk, p); p = np; } @@ -111,23 +136,24 @@ ase_awk_bfn_t* ase_awk_getbfn ( { ase_awk_bfn_t* p; - for (p = __sys_bfn; p->name != ASE_NULL; p++) + for (p = __sys_bfn; p->name.ptr != ASE_NULL; p++) { if (p->valid != 0 && (awk->option & p->valid) == 0) continue; if (ase_awk_strxncmp ( - p->name, p->name_len, name, name_len) == 0) return p; + p->name.ptr, p->name.len, + name, name_len) == 0) return p; } -/* TODO: user-added builtin functions... */ for (p = awk->bfn.user; p != ASE_NULL; p = p->next) { if (p->valid != 0 && (awk->option & p->valid) == 0) continue; if (ase_awk_strxncmp ( - p->name, p->name_len, name, name_len) == 0) return p; + p->name.ptr, p->name.len, + name, name_len) == 0) return p; } return ASE_NULL; @@ -1307,79 +1333,3 @@ static int __bfn_sprintf (ase_awk_run_t* run) ase_awk_setretval (run, a0); return 0; } - -#if 0 -static int __bfn_system (ase_awk_run_t* run) -{ - ase_size_t nargs; - ase_char_t* cmd; - ase_awk_val_t* v; - int n; - - nargs = ase_awk_getnargs (run); - ASE_AWK_ASSERT (run->awk, nargs == 1); - - cmd = ase_awk_valtostr ( - run, ase_awk_getarg(run, 0), - ASE_AWK_VALTOSTR_CLEAR, ASE_NULL, ASE_NULL); - if (cmd == ASE_NULL) return -1; - -#ifdef _WIN32 - n = _tsystem (cmd); -#else - /* TODO: support system on other platforms that win32 */ - n = -1; -#endif - - ASE_AWK_FREE (run->awk, cmd); - - v = ase_awk_makeintval (run, n); - if (v == ASE_NULL) - { - ase_awk_setrunerrnum (run, ASE_AWK_ENOMEM); - return -1; - } - - ase_awk_setretval (run, v); - return 0; -} - -/* math functions */ -static int __bfn_sin (ase_awk_run_t* run) -{ - ase_size_t nargs; - ase_awk_val_t* v; - int n; - ase_long_t lv; - ase_real_t rv; - - nargs = ase_awk_getnargs (run); - ASE_AWK_ASSERT (run->awk, nargs == 1); - - n = ase_awk_valtonum (run, ase_awk_getarg(run, 0), &lv, &rv); - if (n == -1) - { - /* wrong value */ - return -1; - } - - if (n == 0) rv = (ase_real_t)lv; - -#if (ASE_SIZEOF_REAL == ASE_SIZEOF_LONG_DOUBLE) - v = ase_awk_makerealval (run, (ase_real_t)sinl(rv)); -#elif (ASE_SIZEOF_REAL == ASE_SIZEOF_DOUBLE) - v = ase_awk_makerealval (run, (ase_real_t)sin(rv)); -#else - #error unsupported floating-point data type -#endif - - if (v == ASE_NULL) - { - ase_awk_setrunerrnum (run, ASE_AWK_ENOMEM); - return -1; - } - - ase_awk_setretval (run, v); - return 0; -} -#endif diff --git a/ase/awk/func.h b/ase/awk/func.h index 84f406e8..6e5fbeb7 100644 --- a/ase/awk/func.h +++ b/ase/awk/func.h @@ -1,5 +1,5 @@ /* - * $Id: func.h,v 1.15 2006-11-13 09:37:00 bacon Exp $ + * $Id: func.h,v 1.16 2006-11-27 15:10:34 bacon Exp $ */ #ifndef _ASE_AWK_FUNC_H_ @@ -13,13 +13,26 @@ typedef struct ase_awk_bfn_t ase_awk_bfn_t; struct ase_awk_bfn_t { - const ase_char_t* name; - ase_size_t name_len; + struct + { + ase_char_t* ptr; + ase_size_t len; + } name; + int valid; /* the entry is valid when this option is set */ + struct + { + ase_size_t min; + ase_size_t max; + ase_char_t* spec; + } arg; + /* ase_size_t min_args; ase_size_t max_args; - const ase_char_t* arg_spec; + ase_char_t* arg_spec; + */ + int (*handler) (ase_awk_run_t* run); ase_awk_bfn_t* next; diff --git a/ase/awk/jni.c b/ase/awk/jni.c index 1b69078b..0d7bdcfc 100644 --- a/ase/awk/jni.c +++ b/ase/awk/jni.c @@ -1,5 +1,5 @@ /* - * $Id: jni.c,v 1.27 2006-11-27 04:33:22 bacon Exp $ + * $Id: jni.c,v 1.28 2006-11-27 15:10:34 bacon Exp $ */ #include @@ -882,7 +882,8 @@ static ase_ssize_t __process_extio ( return -1; } -JNIEXPORT jint JNICALL Java_ase_awk_Awk_setfilename (JNIEnv* env, jobject obj, jlong run_id, jstring name) +JNIEXPORT jint JNICALL Java_ase_awk_Awk_setfilename ( + JNIEnv* env, jobject obj, jlong run_id, jstring name) { ase_awk_run_t* run = (ase_awk_run_t*)run_id; const jchar* str; @@ -895,7 +896,8 @@ JNIEXPORT jint JNICALL Java_ase_awk_Awk_setfilename (JNIEnv* env, jobject obj, j return n; } -JNIEXPORT jint JNICALL Java_ase_awk_Awk_setofilename (JNIEnv* env, jobject obj, jlong run_id, jstring name) +JNIEXPORT jint JNICALL Java_ase_awk_Awk_setofilename ( + JNIEnv* env, jobject obj, jlong run_id, jstring name) { ase_awk_run_t* run = (ase_awk_run_t*)run_id; const jchar* str; @@ -913,6 +915,7 @@ static int __handle_bfn (ase_awk_run_t* run) jclass class; jmethodID mid; +printf ("BFN CALLED.....\n"); /* class = (*env)->GetObjectClass(env, obj); diff --git a/ase/awk/jni.h b/ase/awk/jni.h index a09cdba6..4419a64e 100644 --- a/ase/awk/jni.h +++ b/ase/awk/jni.h @@ -1,5 +1,5 @@ /* - * $Id: jni.h,v 1.10 2006-11-27 04:33:22 bacon Exp $ + * $Id: jni.h,v 1.11 2006-11-27 15:10:34 bacon Exp $ */ #ifndef _ASE_AWK_JNI_H_ @@ -11,12 +11,17 @@ extern "C" { #endif -JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv*, jobject); -JNIEXPORT void JNICALL Java_ase_awk_Awk_close (JNIEnv*, jobject); -JNIEXPORT void JNICALL Java_ase_awk_Awk_parse (JNIEnv*, jobject); -JNIEXPORT void JNICALL Java_ase_awk_Awk_run (JNIEnv*, jobject); -JNIEXPORT jint JNICALL Java_ase_awk_Awk_setfilename (JNIEnv*, jobject, jlong, jstring); -JNIEXPORT jint JNICALL Java_ase_awk_Awk_setofilename (JNIEnv*, jobject, jlong, jstring); +JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj); +JNIEXPORT void JNICALL Java_ase_awk_Awk_close (JNIEnv* env, jobject obj); +JNIEXPORT void JNICALL Java_ase_awk_Awk_parse (JNIEnv* env, jobject obj); +JNIEXPORT void JNICALL Java_ase_awk_Awk_run (JNIEnv* env, jobject obj); + +JNIEXPORT void JNICALL Java_ase_awk_Awk_addbfn ( + JNIEnv* env, jobject obj, jstring name, jint min_args, jint max_args); +JNIEXPORT jint JNICALL Java_ase_awk_Awk_setfilename ( + JNIEnv* env, jobject obj, jlong run_id, jstring name); +JNIEXPORT jint JNICALL Java_ase_awk_Awk_setofilename ( + JNIEnv* env, jobject obj, jlong run_id, jstring name); #ifdef __cplusplus } diff --git a/ase/awk/parse.c b/ase/awk/parse.c index b42c092a..0cb8a7c2 100644 --- a/ase/awk/parse.c +++ b/ase/awk/parse.c @@ -1,5 +1,5 @@ /* - * $Id: parse.c,v 1.211 2006-11-27 04:33:22 bacon Exp $ + * $Id: parse.c,v 1.212 2006-11-27 15:10:34 bacon Exp $ */ #include @@ -2801,11 +2801,11 @@ static ase_awk_nde_t* __parse_fncall ( call->next = ASE_NULL; /*call->what.bfn = bfn; */ - call->what.bfn.name = bfn->name; - call->what.bfn.name_len = bfn->name_len; - call->what.bfn.min_args = bfn->min_args; - call->what.bfn.max_args = bfn->max_args; - call->what.bfn.arg_spec = bfn->arg_spec; + call->what.bfn.name.ptr = bfn->name.ptr; + call->what.bfn.name.len = bfn->name.len; + call->what.bfn.arg.min = bfn->arg.min; + call->what.bfn.arg.max = bfn->arg.max; + call->what.bfn.arg.spec = bfn->arg.spec; call->what.bfn.handler = bfn->handler; call->args = head; @@ -2815,8 +2815,8 @@ static ase_awk_nde_t* __parse_fncall ( { call->type = ASE_AWK_NDE_AFN; call->next = ASE_NULL; - call->what.afn.name = name; - call->what.afn.name_len = name_len; + call->what.afn.name.ptr = name; + call->what.afn.name.len = name_len; call->args = head; call->nargs = nargs; } diff --git a/ase/awk/run.c b/ase/awk/run.c index e8038840..3d7518ce 100644 --- a/ase/awk/run.c +++ b/ase/awk/run.c @@ -1,5 +1,5 @@ /* - * $Id: run.c,v 1.284 2006-11-24 13:20:49 bacon Exp $ + * $Id: run.c,v 1.285 2006-11-27 15:10:35 bacon Exp $ */ #include @@ -1147,8 +1147,8 @@ static int __run_main ( nde.type = ASE_AWK_NDE_AFN; nde.next = ASE_NULL; - nde.what.afn.name = (ase_char_t*)main; - nde.what.afn.name_len = ase_awk_strlen(main); + nde.what.afn.name.ptr = (ase_char_t*)main; + nde.what.afn.name.len = ase_awk_strlen(main); nde.args = ASE_NULL; nde.nargs = 0; @@ -4573,17 +4573,17 @@ static ase_awk_val_t* __eval_bfn (ase_awk_run_t* run, ase_awk_nde_t* nde) ase_awk_nde_call_t* call = (ase_awk_nde_call_t*)nde; /* built-in function */ - if (call->nargs < call->what.bfn.min_args) + if (call->nargs < call->what.bfn.arg.min) { PANIC (run, ASE_AWK_ETOOFEWARGS); } - if (call->nargs > call->what.bfn.max_args) + if (call->nargs > call->what.bfn.arg.max) { PANIC (run, ASE_AWK_ETOOMANYARGS); } - return __eval_call (run, nde, call->what.bfn.arg_spec, ASE_NULL); + return __eval_call (run, nde, call->what.bfn.arg.spec, ASE_NULL); } static ase_awk_val_t* __eval_afn (ase_awk_run_t* run, ase_awk_nde_t* nde) @@ -4593,7 +4593,7 @@ static ase_awk_val_t* __eval_afn (ase_awk_run_t* run, ase_awk_nde_t* nde) ase_awk_pair_t* pair; pair = ase_awk_map_get (&run->awk->tree.afns, - call->what.afn.name, call->what.afn.name_len); + call->what.afn.name.ptr, call->what.afn.name.len); if (pair == ASE_NULL) PANIC (run, ASE_AWK_ENOSUCHFUNC); afn = (ase_awk_afn_t*)pair->val; @@ -4844,8 +4844,8 @@ static ase_awk_val_t* __eval_call ( n = 0; /* built-in function */ - ASE_AWK_ASSERT (run->awk, call->nargs >= call->what.bfn.min_args && - call->nargs <= call->what.bfn.max_args); + ASE_AWK_ASSERT (run->awk, call->nargs >= call->what.bfn.arg.min && + call->nargs <= call->what.bfn.arg.max); if (call->what.bfn.handler != ASE_NULL) n = call->what.bfn.handler (run); diff --git a/ase/awk/tree.c b/ase/awk/tree.c index 50d902cf..9aca20e4 100644 --- a/ase/awk/tree.c +++ b/ase/awk/tree.c @@ -1,5 +1,5 @@ /* - * $Id: tree.c,v 1.90 2006-11-21 15:06:15 bacon Exp $ + * $Id: tree.c,v 1.91 2006-11-27 15:10:35 bacon Exp $ */ #include @@ -479,7 +479,7 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde) { ase_awk_nde_call_t* px = (ase_awk_nde_call_t*)nde; PUT_SRCSTRX (awk, - px->what.bfn.name, px->what.bfn.name_len); + px->what.bfn.name.ptr, px->what.bfn.name.len); PUT_SRCSTR (awk, ASE_T(" (")); PRINT_EXPRESSION_LIST (awk, px->args); PUT_SRCSTR (awk, ASE_T(")")); @@ -490,7 +490,7 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde) { ase_awk_nde_call_t* px = (ase_awk_nde_call_t*)nde; PUT_SRCSTRX (awk, - px->what.afn.name, px->what.afn.name_len); + px->what.afn.name.ptr, px->what.afn.name.len); PUT_SRCSTR (awk, ASE_T(" (")); PRINT_EXPRESSION_LIST (awk, px->args); PUT_SRCSTR (awk, ASE_T(")")); @@ -1110,7 +1110,7 @@ void ase_awk_clrpt (ase_awk_t* awk, ase_awk_nde_t* tree) case ASE_AWK_NDE_AFN: { ase_awk_nde_call_t* px = (ase_awk_nde_call_t*)p; - ASE_AWK_FREE (awk, px->what.afn.name); + ASE_AWK_FREE (awk, px->what.afn.name.ptr); ase_awk_clrpt (awk, px->args); ASE_AWK_FREE (awk, p); break; diff --git a/ase/awk/tree.h b/ase/awk/tree.h index 4a9f0b02..bf301ee3 100644 --- a/ase/awk/tree.h +++ b/ase/awk/tree.h @@ -1,5 +1,5 @@ /* - * $Id: tree.h,v 1.81 2006-11-23 03:31:36 bacon Exp $ + * $Id: tree.h,v 1.82 2006-11-27 15:10:35 bacon Exp $ */ #ifndef _ASE_AWK_TREE_H_ @@ -246,19 +246,30 @@ struct ase_awk_nde_call_t { struct { - ase_char_t* name; - ase_size_t name_len; + struct + { + ase_char_t* ptr; + ase_size_t len; + } name; } afn; /* minimum information of a built-in function * needed during run-time. */ struct { - const ase_char_t* name; - ase_size_t name_len; - ase_size_t min_args; - ase_size_t max_args; - const ase_char_t* arg_spec; + struct + { + const ase_char_t* ptr; + ase_size_t len; + } name; + + struct + { + ase_size_t min; + ase_size_t max; + const ase_char_t* spec; + } arg; + int (*handler) (ase_awk_run_t* awk); } bfn; /* ase_awk_bfn_t* bfn; */ diff --git a/ase/test/awk/Awk.java b/ase/test/awk/Awk.java index 555318a8..37902372 100644 --- a/ase/test/awk/Awk.java +++ b/ase/test/awk/Awk.java @@ -1,5 +1,5 @@ /* - * $Id: Awk.java,v 1.12 2006-11-27 04:33:22 bacon Exp $ + * $Id: Awk.java,v 1.13 2006-11-27 15:11:14 bacon Exp $ */ package ase.test.awk; @@ -16,7 +16,7 @@ public class Awk extends ase.awk.StdAwk { super (); - addbfn (bfn_sin, 1, 3); + addBuiltinFunction ("sin", 1, 1); } public void bfn_sin () diff --git a/ase/test/awk/awk.c b/ase/test/awk/awk.c index 8beb5f97..8021b5ce 100644 --- a/ase/test/awk/awk.c +++ b/ase/test/awk/awk.c @@ -1,5 +1,5 @@ /* - * $Id: awk.c,v 1.127 2006-11-27 04:33:22 bacon Exp $ + * $Id: awk.c,v 1.128 2006-11-27 15:11:14 bacon Exp $ */ #include @@ -734,6 +734,11 @@ static void __awk_free (void* ptr, void* custom_data) #define __awk_tolower towlower #endif +static int __handle_bfn (ase_awk_run_t* run) +{ + xp_printf (ASE_T("__handle_bfn\n")); +} + static int __main (int argc, ase_char_t* argv[]) { ase_awk_t* awk; @@ -848,6 +853,11 @@ static int __main (int argc, ase_char_t* argv[]) srcios.out = dump_source; srcios.custom_data = &src_io; + +ase_awk_addbfn (awk, ASE_T("bufa"), 4, 0, + 1, 1, ASE_NULL, __handle_bfn); + + ase_awk_setmaxparsedepth ( awk, ASE_AWK_DEPTH_BLOCK | ASE_AWK_DEPTH_EXPR, 20);