*** empty log message ***
This commit is contained in:
parent
f5c8c110cb
commit
4818807837
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: awk.c,v 1.98 2006-12-13 14:13:06 bacon Exp $
|
||||
* $Id: awk.c,v 1.99 2006-12-15 14:58:14 bacon Exp $
|
||||
*/
|
||||
|
||||
#if defined(__BORLANDC__)
|
||||
@ -11,16 +11,14 @@
|
||||
|
||||
static void __free_afn (void* awk, void* afn);
|
||||
|
||||
ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns)
|
||||
ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns, int* errnum)
|
||||
{
|
||||
ase_awk_t* awk;
|
||||
|
||||
if (sysfns == ASE_NULL) return ASE_NULL;
|
||||
|
||||
if (sysfns->malloc == ASE_NULL ||
|
||||
sysfns->free == ASE_NULL) return ASE_NULL;
|
||||
|
||||
if (sysfns->is_upper == ASE_NULL ||
|
||||
if (sysfns == ASE_NULL ||
|
||||
sysfns->malloc == ASE_NULL ||
|
||||
sysfns->free == ASE_NULL ||
|
||||
sysfns->is_upper == ASE_NULL ||
|
||||
sysfns->is_lower == ASE_NULL ||
|
||||
sysfns->is_alpha == ASE_NULL ||
|
||||
sysfns->is_digit == ASE_NULL ||
|
||||
@ -32,14 +30,16 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns)
|
||||
sysfns->is_cntrl == ASE_NULL ||
|
||||
sysfns->is_punct == ASE_NULL ||
|
||||
sysfns->to_upper == ASE_NULL ||
|
||||
sysfns->to_lower == ASE_NULL) return ASE_NULL;
|
||||
|
||||
if (sysfns->sprintf == ASE_NULL ||
|
||||
sysfns->aprintf == ASE_NULL ||
|
||||
sysfns->dprintf == ASE_NULL ||
|
||||
sysfns->abort == ASE_NULL) return ASE_NULL;
|
||||
|
||||
if (sysfns->pow == ASE_NULL) return ASE_NULL;
|
||||
sysfns->to_lower == ASE_NULL ||
|
||||
sysfns->pow == ASE_NULL ||
|
||||
sysfns->sprintf == ASE_NULL ||
|
||||
sysfns->aprintf == ASE_NULL ||
|
||||
sysfns->dprintf == ASE_NULL ||
|
||||
sysfns->abort == ASE_NULL)
|
||||
{
|
||||
*errnum = ASE_AWK_ESYSFNS;
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
#if defined(_WIN32) && defined(_MSC_VER) && defined(_DEBUG)
|
||||
awk = (ase_awk_t*) malloc (ASE_SIZEOF(ase_awk_t));
|
||||
@ -47,7 +47,11 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns)
|
||||
awk = (ase_awk_t*) sysfns->malloc (
|
||||
ASE_SIZEOF(ase_awk_t), sysfns->custom_data);
|
||||
#endif
|
||||
if (awk == ASE_NULL) return ASE_NULL;
|
||||
if (awk == ASE_NULL)
|
||||
{
|
||||
*errnum = ASE_AWK_ENOMEM;
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
/* it uses the built-in ase_awk_memset because awk is not
|
||||
* fully initialized yet */
|
||||
@ -64,6 +68,7 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns)
|
||||
if (ase_awk_str_open (&awk->token.name, 128, awk) == ASE_NULL)
|
||||
{
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
*errnum = ASE_AWK_ENOMEM;
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
@ -73,6 +78,7 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns)
|
||||
{
|
||||
ase_awk_str_close (&awk->token.name);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
*errnum = ASE_AWK_ENOMEM;
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
@ -81,6 +87,7 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns)
|
||||
ase_awk_str_close (&awk->token.name);
|
||||
ase_awk_map_close (&awk->tree.afns);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
*errnum = ASE_AWK_ENOMEM;
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
@ -90,6 +97,7 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns)
|
||||
ase_awk_map_close (&awk->tree.afns);
|
||||
ase_awk_tab_close (&awk->parse.globals);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
*errnum = ASE_AWK_ENOMEM;
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
@ -100,6 +108,7 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns)
|
||||
ase_awk_tab_close (&awk->parse.globals);
|
||||
ase_awk_tab_close (&awk->parse.locals);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
*errnum = ASE_AWK_ENOMEM;
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: awk.h,v 1.165 2006-12-14 07:55:51 bacon Exp $
|
||||
* $Id: awk.h,v 1.166 2006-12-15 14:58:14 bacon Exp $
|
||||
*/
|
||||
|
||||
#ifndef _ASE_AWK_AWK_H_
|
||||
@ -19,22 +19,22 @@ typedef struct ase_awk_runios_t ase_awk_runios_t;
|
||||
typedef struct ase_awk_runcbs_t ase_awk_runcbs_t;
|
||||
typedef struct ase_awk_runarg_t ase_awk_runarg_t;
|
||||
|
||||
typedef void* (*ase_awk_malloc_t) (ase_size_t n, void* custom_data);
|
||||
typedef void* (*ase_awk_malloc_t) (ase_size_t n, void* custom_data);
|
||||
typedef void* (*ase_awk_realloc_t) (void* ptr, ase_size_t n, void* custom_data);
|
||||
typedef void (*ase_awk_free_t) (void* ptr, void* custom_data);
|
||||
typedef void* (*ase_awk_memcpy_t) (void* dst, const void* src, ase_size_t n);
|
||||
typedef void* (*ase_awk_memset_t) (void* dst, int val, ase_size_t n);
|
||||
typedef void (*ase_awk_free_t) (void* ptr, void* custom_data);
|
||||
typedef void* (*ase_awk_memcpy_t) (void* dst, const void* src, ase_size_t n);
|
||||
typedef void* (*ase_awk_memset_t) (void* dst, int val, ase_size_t n);
|
||||
|
||||
typedef ase_bool_t (*ase_awk_isctype_t) (ase_cint_t c);
|
||||
typedef ase_cint_t (*ase_awk_toctype_t) (ase_cint_t c);
|
||||
typedef ase_real_t (*ase_awk_pow_t) (ase_real_t x, ase_real_t y);
|
||||
|
||||
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);
|
||||
typedef void (*ase_awk_lock_t) (ase_awk_t* awk, void* custom_data);
|
||||
|
||||
typedef ase_ssize_t (*ase_awk_io_t) (
|
||||
int cmd, void* arg, ase_char_t* data, ase_size_t count);
|
||||
@ -183,11 +183,14 @@ enum
|
||||
/* support getline and print */
|
||||
ASE_AWK_EXTIO = (1 << 8),
|
||||
|
||||
/* support co-process */
|
||||
ASE_AWK_COPROC = (1 << 9),
|
||||
|
||||
/* support blockless patterns */
|
||||
ASE_AWK_BLOCKLESS = (1 << 9),
|
||||
ASE_AWK_BLOCKLESS = (1 << 10),
|
||||
|
||||
/* use 1 as the start index for string operations */
|
||||
ASE_AWK_STRINDEXONE = (1 << 10),
|
||||
ASE_AWK_STRINDEXONE = (1 << 11),
|
||||
|
||||
/* strip off leading and trailing spaces when splitting a record
|
||||
* into fields with a regular expression.
|
||||
@ -202,13 +205,13 @@ enum
|
||||
* The program splits " a b c " into [a], [b], [c] when this
|
||||
* option is on while into [], [a], [b], [c], [] when it is off.
|
||||
*/
|
||||
ASE_AWK_STRIPSPACES = (1 << 11),
|
||||
ASE_AWK_STRIPSPACES = (1 << 12),
|
||||
|
||||
/* enable the nextoutfile keyword */
|
||||
ASE_AWK_NEXTOFILE = (1 << 12),
|
||||
ASE_AWK_NEXTOFILE = (1 << 13),
|
||||
|
||||
/* a newline terminates a statement */
|
||||
ASE_AWK_NEWLINE = (1 << 13)
|
||||
ASE_AWK_NEWLINE = (1 << 14)
|
||||
};
|
||||
|
||||
/* error code */
|
||||
@ -220,10 +223,12 @@ enum
|
||||
ASE_AWK_EEXIST, /* existing data found */
|
||||
ASE_AWK_ENOENT, /* no such data entry found */
|
||||
ASE_AWK_EACCES, /* access denied */
|
||||
|
||||
ASE_AWK_ERUNTIME, /* run-time error */
|
||||
ASE_AWK_ERUNNING, /* there are running instances */
|
||||
ASE_AWK_ETOOMANYRUNS, /* too many running instances */
|
||||
ASE_AWK_ERECURSION, /* recursion too deep */
|
||||
ASE_AWK_ESYSFNS, /* system functions not proper */
|
||||
|
||||
ASE_AWK_ESRCINOPEN,
|
||||
ASE_AWK_ESRCINCLOSE,
|
||||
@ -383,7 +388,7 @@ enum
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns);
|
||||
ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns, int* errnum);
|
||||
int ase_awk_close (ase_awk_t* awk);
|
||||
int ase_awk_clear (ase_awk_t* awk);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: err.c,v 1.58 2006-12-12 05:16:29 bacon Exp $
|
||||
* $Id: err.c,v 1.59 2006-12-15 14:58:14 bacon Exp $
|
||||
*/
|
||||
|
||||
#include <ase/awk/awk_i.h>
|
||||
@ -23,6 +23,7 @@ const ase_char_t* ase_awk_geterrstr (int errnum)
|
||||
ASE_T("one or more running instances"),
|
||||
ASE_T("too many running instances"),
|
||||
ASE_T("recursion too deep"),
|
||||
ASE_T("system functions not provided or not proper"),
|
||||
|
||||
ASE_T("cannot open source input"),
|
||||
ASE_T("cannot close source input"),
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: jni.c,v 1.40 2006-12-13 14:16:12 bacon Exp $
|
||||
* $Id: jni.c,v 1.41 2006-12-15 14:58:15 bacon Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
@ -182,7 +182,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj)
|
||||
jthrowable except;
|
||||
ase_awk_t* awk;
|
||||
ase_awk_sysfns_t sysfns;
|
||||
int opt;
|
||||
int opt, errnum;
|
||||
|
||||
memset (&sysfns, 0, sizeof(sysfns));
|
||||
sysfns.malloc = __awk_malloc;
|
||||
@ -211,7 +211,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj)
|
||||
sysfns.dprintf = __awk_dprintf;
|
||||
sysfns.abort = abort;
|
||||
|
||||
awk = ase_awk_open (&sysfns);
|
||||
awk = ase_awk_open (&sysfns, &errnum);
|
||||
if (awk == NULL)
|
||||
{
|
||||
except = (*env)->FindClass (env, CLASS_EXCEPTION);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: parse.c,v 1.221 2006-12-12 05:16:30 bacon Exp $
|
||||
* $Id: parse.c,v 1.222 2006-12-15 14:58:15 bacon Exp $
|
||||
*/
|
||||
|
||||
#include <ase/awk/awk_i.h>
|
||||
@ -3608,7 +3608,7 @@ static int __get_token (ase_awk_t* awk)
|
||||
ADD_TOKEN_CHAR (awk, c);
|
||||
GET_CHAR (awk);
|
||||
}
|
||||
else if (c == ASE_T('&'))
|
||||
else if ((awk->option & ASE_AWK_COPROC) && c == ASE_T('&'))
|
||||
{
|
||||
SET_TOKEN_TYPE (awk, TOKEN_BORAND);
|
||||
ADD_TOKEN_CHAR (awk, c);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: awk.c,v 1.136 2006-12-13 14:17:01 bacon Exp $
|
||||
* $Id: awk.c,v 1.137 2006-12-15 14:58:37 bacon Exp $
|
||||
*/
|
||||
|
||||
#include <ase/awk/awk.h>
|
||||
@ -739,7 +739,7 @@ static int __main (int argc, ase_char_t* argv[])
|
||||
ase_awk_runarg_t runarg[10];
|
||||
ase_awk_sysfns_t sysfns;
|
||||
struct src_io src_io = { NULL, NULL };
|
||||
int opt, i, file_count = 0;
|
||||
int opt, i, file_count = 0, errnum;
|
||||
#ifdef _WIN32
|
||||
sysfns_data_t sysfns_data;
|
||||
#endif
|
||||
@ -753,6 +753,7 @@ static int __main (int argc, ase_char_t* argv[])
|
||||
ASE_AWK_SHADING |
|
||||
ASE_AWK_SHIFT |
|
||||
ASE_AWK_EXTIO |
|
||||
/*ASE_AWK_COPROC |*/
|
||||
ASE_AWK_BLOCKLESS |
|
||||
ASE_AWK_STRINDEXONE |
|
||||
ASE_AWK_STRIPSPACES |
|
||||
@ -829,12 +830,14 @@ static int __main (int argc, ase_char_t* argv[])
|
||||
sysfns.custom_data = &sysfns_data;
|
||||
#endif
|
||||
|
||||
if ((awk = ase_awk_open(&sysfns)) == ASE_NULL)
|
||||
if ((awk = ase_awk_open(&sysfns, &errnum)) == ASE_NULL)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
HeapDestroy (sysfns_data.heap);
|
||||
#endif
|
||||
xp_printf (ASE_T("Error: cannot open awk\n"));
|
||||
xp_printf (
|
||||
ASE_T("ERROR: cannot parse awk [%d] %s\n"),
|
||||
errnum, ase_awk_geterrstr(errnum));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user