*** empty log message ***

This commit is contained in:
hyung-hwan 2006-12-16 16:14:40 +00:00
parent 38d2b2348a
commit 51c8b72b8e
8 changed files with 85 additions and 48 deletions

View File

@ -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__) #if defined(__BORLANDC__)
@ -157,6 +157,17 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns, int* errnum)
return awk; 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) int ase_awk_close (ase_awk_t* awk)
{ {
if (ase_awk_clear (awk) == -1) return -1; 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) int ase_awk_clear (ase_awk_t* awk)
{ {
/* you should stop all running instances beforehand */ /* you should stop all running instances beforehand */
/* TODO: can i stop all instances??? */
if (awk->run.ptr != ASE_NULL) if (awk->run.ptr != ASE_NULL)
{ {
awk->errnum = ASE_AWK_ERUNNING; awk->errnum = ASE_AWK_ERUNNING;
@ -250,17 +260,6 @@ void ase_awk_setopt (ase_awk_t* awk, int opt)
awk->option = 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) ase_size_t ase_awk_getsrcline (ase_awk_t* awk)
{ {
return awk->token.line; return awk->token.line;

View File

@ -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_ #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, ...); 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_aprintf_t) (const ase_char_t* fmt, ...);
typedef void (*ase_awk_dprintf_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_abort_t) (void* custom_data);
typedef void (*ase_awk_lock_t) (ase_awk_t* awk, void* custom_data); typedef void (*ase_awk_lock_t) (void* custom_data);
typedef ase_ssize_t (*ase_awk_io_t) ( typedef ase_ssize_t (*ase_awk_io_t) (
int cmd, void* arg, ase_char_t* data, ase_size_t count); int cmd, void* arg, ase_char_t* data, ase_size_t count);
@ -208,21 +208,30 @@ enum
ASE_AWK_STRIPSPACES = (1 << 12), ASE_AWK_STRIPSPACES = (1 << 12),
/* enable the nextoutfile keyword */ /* enable the nextoutfile keyword */
ASE_AWK_NEXTOFILE = (1 << 13), ASE_AWK_NEXTOFILE = (1 << 13)
/* a newline terminates a statement */
ASE_AWK_NEWLINE = (1 << 14)
}; };
/* error code */ /* error code */
enum enum
{ {
ASE_AWK_ENOERR, /* no error */ ASE_AWK_ENOERR, /* no error */
ASE_AWK_ENOMEM, /* out of memory */
ASE_AWK_EINVAL, /* invalid parameter */ ASE_AWK_EINVAL, /* invalid parameter */
ASE_AWK_EEXIST, /* existing data found */ ASE_AWK_ENOMEM, /* out of memory */
ASE_AWK_ENOENT, /* no such data entry found */ ASE_AWK_ENOSUP, /* not supported */
ASE_AWK_EACCES, /* access denied */ 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_ERUNTIME, /* run-time error */
ASE_AWK_ERUNNING, /* there are running instances */ ASE_AWK_ERUNNING, /* there are running instances */

View File

@ -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_ #ifndef _ASE_AWK_AWKI_H_
@ -55,13 +55,13 @@ typedef struct ase_awk_tree_t ase_awk_tree_t;
#define ASE_AWK_LOCK(awk) \ #define ASE_AWK_LOCK(awk) \
do { \ do { \
if ((awk)->sysfns.lock != ASE_NULL) \ if ((awk)->sysfns.lock != ASE_NULL) \
(awk)->sysfns.lock (awk, (awk)->sysfns.custom_data); \ (awk)->sysfns.lock ((awk)->sysfns.custom_data); \
} while (0) } while (0)
#define ASE_AWK_UNLOCK(awk) \ #define ASE_AWK_UNLOCK(awk) \
do { \ do { \
if ((awk)->sysfns.unlock != ASE_NULL) \ if ((awk)->sysfns.unlock != ASE_NULL) \
(awk)->sysfns.unlock (awk, (awk)->sysfns.custom_data); \ (awk)->sysfns.unlock ((awk)->sysfns.custom_data); \
} while (0) } while (0)
#define ASE_AWK_ISUPPER(awk,c) (awk)->sysfns.is_upper(c) #define ASE_AWK_ISUPPER(awk,c) (awk)->sysfns.is_upper(c)

View File

@ -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 <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -14,11 +14,24 @@ const ase_char_t* ase_awk_geterrstr (int errnum)
static const ase_char_t* __errstr[] = static const ase_char_t* __errstr[] =
{ {
ASE_T("no error"), ASE_T("no error"),
ASE_T("out of memory"),
ASE_T("invalid parameter"), ASE_T("invalid parameter"),
ASE_T("existing data found"), ASE_T("out of memory"),
ASE_T("no such data entry found"), ASE_T("not supported"),
ASE_T("permission denied"), 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("general run-time error"),
ASE_T("one or more running instances"), ASE_T("one or more running instances"),
ASE_T("too many running instances"), ASE_T("too many running instances"),

View File

@ -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 <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -1116,7 +1116,7 @@ int ase_awk_assertfail (ase_awk_t* awk,
file, line, expr, desc); file, line, expr, desc);
} }
awk->sysfns.abort (); awk->sysfns.abort (awk->sysfns.custom_data);
return 0; return 0;
} }

View File

@ -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 <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -587,7 +587,7 @@ int ase_awk_run (ase_awk_t* awk,
ase_awk_map_getsize(&awk->tree.afns) == 0) ase_awk_map_getsize(&awk->tree.afns) == 0)
{ {
/* if not, deny the run */ /* if not, deny the run */
awk->errnum = ASE_AWK_EACCES; awk->errnum = ASE_AWK_ENOPER;
return -1; return -1;
} }

View File

@ -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 <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -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, 6, ASE_NULL },
{ ASE_AWK_VAL_INT, 0, 7, ASE_NULL }, { ASE_AWK_VAL_INT, 0, 7, ASE_NULL },
{ ASE_AWK_VAL_INT, 0, 8, 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]; ase_awk_val_t* ase_awk_val_negone = (ase_awk_val_t*)&__awk_int[0];

View File

@ -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 <ase/awk/awk.h> #include <ase/awk/awk.h>
@ -151,6 +151,11 @@ static ase_real_t awk_pow (ase_real_t x, ase_real_t y)
return pow (x, 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) static FILE* popen_t (const ase_char_t* cmd, const ase_char_t* mode)
{ {
#if defined(_WIN32) #if defined(_WIN32)
@ -796,12 +801,12 @@ static int __main (int argc, ase_char_t* argv[])
} }
memset (&sysfns, 0, ASE_SIZEOF(sysfns)); memset (&sysfns, 0, ASE_SIZEOF(sysfns));
sysfns.malloc = awk_malloc;
sysfns.realloc = awk_realloc;
sysfns.free = awk_free;
sysfns.lock = NULL; sysfns.malloc = awk_malloc;
sysfns.unlock = NULL; sysfns.realloc = awk_realloc;
sysfns.free = awk_free;
sysfns.memcpy = memcpy;
sysfns.memset = memset;
sysfns.is_upper = awk_isupper; sysfns.is_upper = awk_isupper;
sysfns.is_lower = awk_islower; 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_upper = awk_toupper;
sysfns.to_lower = awk_tolower; sysfns.to_lower = awk_tolower;
sysfns.memcpy = memcpy; sysfns.pow = awk_pow;
sysfns.memset = memset;
sysfns.pow = awk_pow;
sysfns.sprintf = awk_sprintf; sysfns.sprintf = awk_sprintf;
sysfns.aprintf = awk_aprintf; sysfns.aprintf = awk_aprintf;
sysfns.dprintf = awk_dprintf; sysfns.dprintf = awk_dprintf;
sysfns.abort = abort; sysfns.abort = awk_abort;
sysfns.lock = NULL;
sysfns.unlock = NULL;
#ifdef _WIN32 #ifdef _WIN32
sysfns_data.heap = HeapCreate (0, 1000000, 1000000); sysfns_data.heap = HeapCreate (0, 1000000, 1000000);