diff --git a/ase/awk/awk.c b/ase/awk/awk.c index ed29d5d3..ddb71a6f 100644 --- a/ase/awk/awk.c +++ b/ase/awk/awk.c @@ -1,5 +1,5 @@ /* - * $Id: awk.c,v 1.100 2006-12-16 14:43:49 bacon Exp $ + * $Id: awk.c,v 1.101 2006-12-16 16:12:07 bacon Exp $ */ #if defined(__BORLANDC__) @@ -157,6 +157,17 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns, int* errnum) return awk; } +static void __free_afn (void* owner, void* afn) +{ + ase_awk_afn_t* f = (ase_awk_afn_t*)afn; + + /* f->name doesn't have to be freed */ + /*ASE_AWK_FREE ((ase_awk_t*)owner, f->name);*/ + + ase_awk_clrpt ((ase_awk_t*)owner, f->body); + ASE_AWK_FREE ((ase_awk_t*)owner, f); +} + int ase_awk_close (ase_awk_t* awk) { if (ase_awk_clear (awk) == -1) return -1; @@ -179,7 +190,6 @@ int ase_awk_close (ase_awk_t* awk) int ase_awk_clear (ase_awk_t* awk) { /* you should stop all running instances beforehand */ -/* TODO: can i stop all instances??? */ if (awk->run.ptr != ASE_NULL) { awk->errnum = ASE_AWK_ERUNNING; @@ -250,17 +260,6 @@ void ase_awk_setopt (ase_awk_t* awk, int opt) awk->option = opt; } -static void __free_afn (void* owner, void* afn) -{ - ase_awk_afn_t* f = (ase_awk_afn_t*)afn; - - /* f->name doesn't have to be freed */ - /*ASE_AWK_FREE ((ase_awk_t*)owner, f->name);*/ - - ase_awk_clrpt ((ase_awk_t*)owner, f->body); - ASE_AWK_FREE ((ase_awk_t*)owner, f); -} - ase_size_t ase_awk_getsrcline (ase_awk_t* awk) { return awk->token.line; diff --git a/ase/awk/awk.h b/ase/awk/awk.h index 4ba15535..c0588193 100644 --- a/ase/awk/awk.h +++ b/ase/awk/awk.h @@ -1,5 +1,5 @@ /* - * $Id: awk.h,v 1.167 2006-12-16 14:43:50 bacon Exp $ + * $Id: awk.h,v 1.168 2006-12-16 16:12:07 bacon Exp $ */ #ifndef _ASE_AWK_AWK_H_ @@ -33,8 +33,8 @@ typedef int (*ase_awk_sprintf_t) ( ase_char_t* buf, ase_size_t size, const ase_char_t* fmt, ...); typedef void (*ase_awk_aprintf_t) (const ase_char_t* fmt, ...); typedef void (*ase_awk_dprintf_t) (const ase_char_t* fmt, ...); -typedef void (*ase_awk_abort_t) (void); -typedef void (*ase_awk_lock_t) (ase_awk_t* awk, void* custom_data); +typedef void (*ase_awk_abort_t) (void* custom_data); +typedef void (*ase_awk_lock_t) (void* custom_data); typedef ase_ssize_t (*ase_awk_io_t) ( int cmd, void* arg, ase_char_t* data, ase_size_t count); @@ -208,21 +208,30 @@ enum ASE_AWK_STRIPSPACES = (1 << 12), /* enable the nextoutfile keyword */ - ASE_AWK_NEXTOFILE = (1 << 13), - - /* a newline terminates a statement */ - ASE_AWK_NEWLINE = (1 << 14) + ASE_AWK_NEXTOFILE = (1 << 13) }; /* error code */ enum { ASE_AWK_ENOERR, /* no error */ - ASE_AWK_ENOMEM, /* out of memory */ + ASE_AWK_EINVAL, /* invalid parameter */ - ASE_AWK_EEXIST, /* existing data found */ - ASE_AWK_ENOENT, /* no such data entry found */ - ASE_AWK_EACCES, /* access denied */ + ASE_AWK_ENOMEM, /* out of memory */ + ASE_AWK_ENOSUP, /* not supported */ + ASE_AWK_ENOPER, /* operation not allowed */ + ASE_AWK_ENODEV, /* no such device */ + ASE_AWK_ENOSPC, /* no space left on device */ + ASE_AWK_ENOENT, /* no such file, directory, or data */ + ASE_AWK_EMFILE, /* too many open files */ + ASE_AWK_EMLINK, /* too many links */ + ASE_AWK_EAGAIN, /* resource temporarily unavailable */ + ASE_AWK_EEXIST, /* file or data exists */ + ASE_AWK_EFTBIG, /* file or data too big */ + ASE_AWK_EINTER, /* operation interrupted */ + ASE_AWK_ETBUSY, /* system too busy */ + ASE_AWK_EISDIR, /* is a directory */ + ASE_AWK_EIOERR, /* i/o error */ ASE_AWK_ERUNTIME, /* run-time error */ ASE_AWK_ERUNNING, /* there are running instances */ diff --git a/ase/awk/awk_i.h b/ase/awk/awk_i.h index 14df196b..a3c2eadd 100644 --- a/ase/awk/awk_i.h +++ b/ase/awk/awk_i.h @@ -1,5 +1,5 @@ /* - * $Id: awk_i.h,v 1.91 2006-12-16 14:43:50 bacon Exp $ + * $Id: awk_i.h,v 1.92 2006-12-16 16:12:07 bacon Exp $ */ #ifndef _ASE_AWK_AWKI_H_ @@ -55,13 +55,13 @@ typedef struct ase_awk_tree_t ase_awk_tree_t; #define ASE_AWK_LOCK(awk) \ do { \ if ((awk)->sysfns.lock != ASE_NULL) \ - (awk)->sysfns.lock (awk, (awk)->sysfns.custom_data); \ + (awk)->sysfns.lock ((awk)->sysfns.custom_data); \ } while (0) #define ASE_AWK_UNLOCK(awk) \ do { \ if ((awk)->sysfns.unlock != ASE_NULL) \ - (awk)->sysfns.unlock (awk, (awk)->sysfns.custom_data); \ + (awk)->sysfns.unlock ((awk)->sysfns.custom_data); \ } while (0) #define ASE_AWK_ISUPPER(awk,c) (awk)->sysfns.is_upper(c) diff --git a/ase/awk/err.c b/ase/awk/err.c index f0d81200..5c3f9ca1 100644 --- a/ase/awk/err.c +++ b/ase/awk/err.c @@ -1,5 +1,5 @@ /* - * $Id: err.c,v 1.59 2006-12-15 14:58:14 bacon Exp $ + * $Id: err.c,v 1.60 2006-12-16 16:12:07 bacon Exp $ */ #include @@ -14,11 +14,24 @@ const ase_char_t* ase_awk_geterrstr (int errnum) static const ase_char_t* __errstr[] = { ASE_T("no error"), - ASE_T("out of memory"), + ASE_T("invalid parameter"), - ASE_T("existing data found"), - ASE_T("no such data entry found"), - ASE_T("permission denied"), + ASE_T("out of memory"), + ASE_T("not supported"), + ASE_T("operation not allowed"), + ASE_T("no such device"), + ASE_T("no space left on device"), + ASE_T("no such file, directory, or data"), + ASE_T("too many open files"), + ASE_T("too many links"), + ASE_T("resource temporarily unavailable"), + ASE_T("file or data exists"), + ASE_T("file or data too big"), + ASE_T("operation interrupted"), + ASE_T("system too busy"), + ASE_T("is a directory"), + ASE_T("i/o error"), + ASE_T("general run-time error"), ASE_T("one or more running instances"), ASE_T("too many running instances"), diff --git a/ase/awk/misc.c b/ase/awk/misc.c index ebb0dcdc..12639afa 100644 --- a/ase/awk/misc.c +++ b/ase/awk/misc.c @@ -1,5 +1,5 @@ /* - * $Id: misc.c,v 1.47 2006-12-16 14:43:50 bacon Exp $ + * $Id: misc.c,v 1.48 2006-12-16 16:12:07 bacon Exp $ */ #include @@ -1116,7 +1116,7 @@ int ase_awk_assertfail (ase_awk_t* awk, file, line, expr, desc); } - awk->sysfns.abort (); + awk->sysfns.abort (awk->sysfns.custom_data); return 0; } diff --git a/ase/awk/run.c b/ase/awk/run.c index 8227aae2..594eb5e6 100644 --- a/ase/awk/run.c +++ b/ase/awk/run.c @@ -1,5 +1,5 @@ /* - * $Id: run.c,v 1.301 2006-12-16 14:43:51 bacon Exp $ + * $Id: run.c,v 1.302 2006-12-16 16:14:40 bacon Exp $ */ #include @@ -587,7 +587,7 @@ int ase_awk_run (ase_awk_t* awk, ase_awk_map_getsize(&awk->tree.afns) == 0) { /* if not, deny the run */ - awk->errnum = ASE_AWK_EACCES; + awk->errnum = ASE_AWK_ENOPER; return -1; } diff --git a/ase/awk/val.c b/ase/awk/val.c index c8c465da..0071b222 100644 --- a/ase/awk/val.c +++ b/ase/awk/val.c @@ -1,5 +1,5 @@ /* - * $Id: val.c,v 1.99 2006-12-16 14:43:51 bacon Exp $ + * $Id: val.c,v 1.100 2006-12-16 16:14:40 bacon Exp $ */ #include @@ -35,7 +35,18 @@ static ase_awk_val_int_t __awk_int[] = { ASE_AWK_VAL_INT, 0, 6, ASE_NULL }, { ASE_AWK_VAL_INT, 0, 7, ASE_NULL }, { ASE_AWK_VAL_INT, 0, 8, ASE_NULL }, - { ASE_AWK_VAL_INT, 0, 9, ASE_NULL } + { ASE_AWK_VAL_INT, 0, 9, ASE_NULL }, + { ASE_AWK_VAL_INT, 0, 10, ASE_NULL }, + { ASE_AWK_VAL_INT, 0, 11, ASE_NULL }, + { ASE_AWK_VAL_INT, 0, 12, ASE_NULL }, + { ASE_AWK_VAL_INT, 0, 13, ASE_NULL }, + { ASE_AWK_VAL_INT, 0, 14, ASE_NULL }, + { ASE_AWK_VAL_INT, 0, 15, ASE_NULL }, + { ASE_AWK_VAL_INT, 0, 16, ASE_NULL }, + { ASE_AWK_VAL_INT, 0, 17, ASE_NULL }, + { ASE_AWK_VAL_INT, 0, 18, ASE_NULL }, + { ASE_AWK_VAL_INT, 0, 19, ASE_NULL }, + { ASE_AWK_VAL_INT, 0, 20, ASE_NULL } }; ase_awk_val_t* ase_awk_val_negone = (ase_awk_val_t*)&__awk_int[0]; diff --git a/ase/test/awk/awk.c b/ase/test/awk/awk.c index a6709f84..def6a617 100644 --- a/ase/test/awk/awk.c +++ b/ase/test/awk/awk.c @@ -1,5 +1,5 @@ /* - * $Id: awk.c,v 1.138 2006-12-16 14:45:02 bacon Exp $ + * $Id: awk.c,v 1.139 2006-12-16 16:12:07 bacon Exp $ */ #include @@ -151,6 +151,11 @@ static ase_real_t awk_pow (ase_real_t x, ase_real_t y) return pow (x, y); } +static void awk_abort (void* custom_data) +{ + abort (); +} + static FILE* popen_t (const ase_char_t* cmd, const ase_char_t* mode) { #if defined(_WIN32) @@ -796,12 +801,12 @@ static int __main (int argc, ase_char_t* argv[]) } memset (&sysfns, 0, ASE_SIZEOF(sysfns)); - sysfns.malloc = awk_malloc; - sysfns.realloc = awk_realloc; - sysfns.free = awk_free; - sysfns.lock = NULL; - sysfns.unlock = NULL; + sysfns.malloc = awk_malloc; + sysfns.realloc = awk_realloc; + sysfns.free = awk_free; + sysfns.memcpy = memcpy; + sysfns.memset = memset; sysfns.is_upper = awk_isupper; sysfns.is_lower = awk_islower; @@ -817,13 +822,13 @@ static int __main (int argc, ase_char_t* argv[]) sysfns.to_upper = awk_toupper; sysfns.to_lower = awk_tolower; - sysfns.memcpy = memcpy; - sysfns.memset = memset; - sysfns.pow = awk_pow; + sysfns.pow = awk_pow; sysfns.sprintf = awk_sprintf; sysfns.aprintf = awk_aprintf; sysfns.dprintf = awk_dprintf; - sysfns.abort = abort; + sysfns.abort = awk_abort; + sysfns.lock = NULL; + sysfns.unlock = NULL; #ifdef _WIN32 sysfns_data.heap = HeapCreate (0, 1000000, 1000000);