*** empty log message ***

This commit is contained in:
hyung-hwan 2006-12-16 14:48:31 +00:00
parent 4818807837
commit 38d2b2348a
13 changed files with 253 additions and 173 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.c,v 1.99 2006-12-15 14:58:14 bacon Exp $ * $Id: awk.c,v 1.100 2006-12-16 14:43:49 bacon Exp $
*/ */
#if defined(__BORLANDC__) #if defined(__BORLANDC__)
@ -116,7 +116,6 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns, int* errnum)
awk->errnum = ASE_AWK_ENOERR; awk->errnum = ASE_AWK_ENOERR;
awk->parse.nlocals_max = 0; awk->parse.nlocals_max = 0;
awk->parse.nl_semicolon = 0;
awk->tree.nglobals = 0; awk->tree.nglobals = 0;
awk->tree.nbglobals = 0; awk->tree.nbglobals = 0;
@ -126,7 +125,9 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns, int* errnum)
awk->tree.chain_tail = ASE_NULL; awk->tree.chain_tail = ASE_NULL;
awk->tree.chain_size = 0; awk->tree.chain_size = 0;
awk->token.prev = 0; awk->token.prev.type = 0;
awk->token.prev.line = 0;
awk->token.prev.column = 0;
awk->token.type = 0; awk->token.type = 0;
awk->token.line = 0; awk->token.line = 0;
awk->token.column = 0; awk->token.column = 0;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.h,v 1.166 2006-12-15 14:58:14 bacon Exp $ * $Id: awk.h,v 1.167 2006-12-16 14:43:50 bacon Exp $
*/ */
#ifndef _ASE_AWK_AWK_H_ #ifndef _ASE_AWK_AWK_H_
@ -126,9 +126,9 @@ 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, void* handle, void* custom_data); ase_awk_t* awk, ase_awk_run_t* run, void* custom_data);
void (*on_end) ( void (*on_end) (
ase_awk_t* awk, void* handle, int errnum, void* custom_data); ase_awk_t* awk, ase_awk_run_t* run, int errnum, void* custom_data);
void* custom_data; void* custom_data;
}; };
@ -439,8 +439,12 @@ 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);
/* 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);
const ase_char_t* ase_awk_getrunerrmsg (ase_awk_run_t* run);
void ase_awk_setrunerrnum (ase_awk_run_t* run, int errnum); void ase_awk_setrunerrnum (ase_awk_run_t* run, int errnum);
void ase_awk_setrunerrmsg (ase_awk_run_t* run, const ase_char_t* msg);
/* functions to manipulate built-in functions */ /* functions to manipulate built-in functions */
void* ase_awk_addbfn ( void* ase_awk_addbfn (
@ -485,7 +489,10 @@ ase_char_t* ase_awk_strxdup2 (
ase_size_t ase_awk_strlen (const ase_char_t* str); ase_size_t ase_awk_strlen (const ase_char_t* str);
ase_size_t ase_awk_strcpy (ase_char_t* buf, const ase_char_t* str); ase_size_t ase_awk_strcpy (ase_char_t* buf, const ase_char_t* str);
ase_size_t ase_awk_strncpy (ase_char_t* buf, const ase_char_t* str, ase_size_t len); ase_size_t ase_awk_strxcpy (
ase_char_t* buf, ase_size_t bsz, const ase_char_t* str);
ase_size_t ase_awk_strncpy (
ase_char_t* buf, const ase_char_t* str, ase_size_t len);
int ase_awk_strcmp (const ase_char_t* s1, const ase_char_t* s2); int ase_awk_strcmp (const ase_char_t* s1, const ase_char_t* s2);
int ase_awk_strxncmp ( int ase_awk_strxncmp (

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk_i.h,v 1.90 2006-12-13 14:13:07 bacon Exp $ * $Id: awk_i.h,v 1.91 2006-12-16 14:43:50 bacon Exp $
*/ */
#ifndef _ASE_AWK_AWKI_H_ #ifndef _ASE_AWK_AWKI_H_
@ -135,8 +135,6 @@ struct ase_awk_t
ase_awk_tab_t params; ase_awk_tab_t params;
ase_size_t nlocals_max; ase_size_t nlocals_max;
int nl_semicolon;
ase_awk_nde_t* (*parse_block) (ase_awk_t*,ase_bool_t); ase_awk_nde_t* (*parse_block) (ase_awk_t*,ase_bool_t);
} parse; } parse;
@ -166,7 +164,13 @@ struct ase_awk_t
/* token */ /* token */
struct struct
{ {
int prev; struct
{
int type;
ase_size_t line;
ase_size_t column;
} prev;
int type; int type;
ase_awk_str_t name; ase_awk_str_t name;
ase_size_t line; ase_size_t line;
@ -325,6 +329,8 @@ struct ase_awk_run_t
} depth; } depth;
int errnum; int errnum;
ase_char_t errmsg[256];
void* custom_data; void* custom_data;
ase_awk_t* awk; ase_awk_t* awk;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: jni.c,v 1.41 2006-12-15 14:58:15 bacon Exp $ * $Id: jni.c,v 1.42 2006-12-16 14:43:50 bacon Exp $
*/ */
#include <stdio.h> #include <stdio.h>
@ -329,8 +329,9 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_parse (JNIEnv* env, jobject obj)
except = (*env)->FindClass (env, CLASS_EXCEPTION); except = (*env)->FindClass (env, CLASS_EXCEPTION);
if (except == NULL) return; if (except == NULL) return;
n = snprintf (msg, sizeof(msg), "parse error at line %d: %S", n = snprintf (msg, sizeof(msg),
ase_awk_getsrcline(awk), "parse error at line %d: %S",
ase_awk_getsrcline(awk),
ase_awk_geterrstr(ase_awk_geterrnum(awk))); ase_awk_geterrstr(ase_awk_geterrnum(awk)));
if (n < 0 || n >= sizeof(msg)) msg[sizeof(msg)-1] = '\0'; if (n < 0 || n >= sizeof(msg)) msg[sizeof(msg)-1] = '\0';

View File

@ -42,9 +42,6 @@ lib: $(C_OBJS)
jni: lib $(JNI_OBJS) $(JAVA_OBJS) jni: lib $(JNI_OBJS) $(JAVA_OBJS)
$(LD) $(LDFLAGS) $(STARTUP) $(JNI_OBJS),$(OUT).dll,,$(JNI_LIBS),jni.def, $(LD) $(LDFLAGS) $(STARTUP) $(JNI_OBJS),$(OUT).dll,,$(JNI_LIBS),jni.def,
ada:
gnatmake -I.. ase-awk
clean: clean:
-del $(OBJS) $(OUT).lib $(OUT).dll *.obj *.class -del $(OBJS) $(OUT).lib $(OUT).dll *.obj *.class

View File

@ -1,5 +1,5 @@
/* /*
* $Id: misc.c,v 1.46 2006-12-13 14:16:12 bacon Exp $ * $Id: misc.c,v 1.47 2006-12-16 14:43:50 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -670,7 +670,25 @@ ase_size_t ase_awk_strcpy (ase_char_t* buf, const ase_char_t* str)
return buf - org - 1; return buf - org - 1;
} }
ase_size_t ase_awk_strncpy (ase_char_t* buf, const ase_char_t* str, ase_size_t len) ase_size_t ase_awk_strxcpy (
ase_char_t* buf, ase_size_t bsz, const ase_char_t* str)
{
ase_char_t* p, * p2;
p = buf; p2 = buf + bsz - 1;
while (p < p2)
{
if (*str == ASE_T('\0')) break;
*p++ = *str++;
}
if (bsz > 0) *p = ASE_T('\0');
return p - buf;
}
ase_size_t ase_awk_strncpy (
ase_char_t* buf, const ase_char_t* str, ase_size_t len)
{ {
const ase_char_t* end = str + len; const ase_char_t* end = str + len;
while (str < end) *buf++ = *str++; while (str < end) *buf++ = *str++;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: parse.c,v 1.222 2006-12-15 14:58:15 bacon Exp $ * $Id: parse.c,v 1.223 2006-12-16 14:43:50 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -300,11 +300,15 @@ static struct __bvent __bvtab[] =
c = (awk)->src.lex.curc; \ c = (awk)->src.lex.curc; \
} while(0) } while(0)
/*
#define SET_TOKEN_TYPE(awk,code) \ #define SET_TOKEN_TYPE(awk,code) \
do { \ do { \
(awk)->token.prev = (awk)->token.type; \ (awk)->token.prev.type = (awk)->token.type; \
(awk)->token.type = (code); \ (awk)->token.type = (code); \
} while (0); } while (0)
*/
#define SET_TOKEN_TYPE(awk,code) \
do { (awk)->token.type = (code); } while (0)
#define ADD_TOKEN_CHAR(awk,c) \ #define ADD_TOKEN_CHAR(awk,c) \
do { \ do { \
@ -890,7 +894,8 @@ static ase_awk_chain_t* __parse_pattern_block (
if (nde == ASE_NULL) return ASE_NULL; if (nde == ASE_NULL) return ASE_NULL;
} }
chain = (ase_awk_chain_t*) ASE_AWK_MALLOC (awk, ASE_SIZEOF(ase_awk_chain_t)); chain = (ase_awk_chain_t*)
ASE_AWK_MALLOC (awk, ASE_SIZEOF(ase_awk_chain_t));
if (chain == ASE_NULL) if (chain == ASE_NULL)
{ {
ase_awk_clrpt (awk, nde); ase_awk_clrpt (awk, nde);
@ -998,7 +1003,8 @@ static ase_awk_nde_t* __parse_block (ase_awk_t* awk, ase_bool_t is_top)
curr = nde; curr = nde;
} }
block = (ase_awk_nde_blk_t*) ASE_AWK_MALLOC (awk, ASE_SIZEOF(ase_awk_nde_blk_t)); block = (ase_awk_nde_blk_t*)
ASE_AWK_MALLOC (awk, ASE_SIZEOF(ase_awk_nde_blk_t));
if (block == ASE_NULL) if (block == ASE_NULL)
{ {
ase_awk_tab_remove ( ase_awk_tab_remove (
@ -1018,6 +1024,7 @@ static ase_awk_nde_t* __parse_block (ase_awk_t* awk, ase_bool_t is_top)
/* if (head == ASE_NULL) tmp = 0; */ /* if (head == ASE_NULL) tmp = 0; */
block->type = ASE_AWK_NDE_BLK; block->type = ASE_AWK_NDE_BLK;
//block->line =
block->next = ASE_NULL; block->next = ASE_NULL;
block->body = head; block->body = head;
@ -1252,11 +1259,22 @@ static ase_awk_nde_t* __parse_statement (ase_awk_t* awk)
} }
else else
{ {
/* the statement id held in awk->parse.id.stmnt denotes
* the token id of the statement currently being parsed.
* the current statement id is saved here because the
* statement id can be changed in __parse_statement_nb.
* it will, in turn, call __parse_statement which will
* eventually change the statement id. */
int old_id = awk->parse.id.stmnt; int old_id = awk->parse.id.stmnt;
/* set the current statement id */
awk->parse.id.stmnt = awk->token.type; awk->parse.id.stmnt = awk->token.type;
/* proceed parsing the statement */
nde = __parse_statement_nb (awk); nde = __parse_statement_nb (awk);
/* restore the statement id saved previously */
awk->parse.id.stmnt = old_id; awk->parse.id.stmnt = old_id;
awk->parse.nl_semicolon = 0;
} }
return nde; return nde;
@ -1293,7 +1311,6 @@ static ase_awk_nde_t* __parse_statement_nb (ase_awk_t* awk)
return nde; return nde;
} }
awk->parse.nl_semicolon = 1;
/* keywords that require a terminating semicolon */ /* keywords that require a terminating semicolon */
if (MATCH(awk,TOKEN_DO)) if (MATCH(awk,TOKEN_DO))
{ {
@ -1360,8 +1377,6 @@ awk->parse.nl_semicolon = 1;
nde = __parse_expression(awk); nde = __parse_expression(awk);
} }
/* TODO: newline ... */
awk->parse.nl_semicolon = 0;
if (nde == ASE_NULL) return ASE_NULL; if (nde == ASE_NULL) return ASE_NULL;
/* check if a statement ends with a semicolon */ /* check if a statement ends with a semicolon */
@ -2191,6 +2206,7 @@ static ase_awk_nde_t* __parse_primary (ase_awk_t* awk)
/* the regular expression is tokenized here because /* the regular expression is tokenized here because
* of the context-sensitivity of the slash symbol */ * of the context-sensitivity of the slash symbol */
SET_TOKEN_TYPE (awk, TOKEN_REX); SET_TOKEN_TYPE (awk, TOKEN_REX);
ase_awk_str_clear (&awk->token.name); ase_awk_str_clear (&awk->token.name);
if (__get_rexstr (awk) == -1) return ASE_NULL; if (__get_rexstr (awk) == -1) return ASE_NULL;
ASE_AWK_ASSERT (awk, MATCH(awk,TOKEN_REX)); ASE_AWK_ASSERT (awk, MATCH(awk,TOKEN_REX));
@ -2203,8 +2219,7 @@ static ase_awk_nde_t* __parse_primary (ase_awk_t* awk)
nde->next = ASE_NULL; nde->next = ASE_NULL;
nde->len = ASE_AWK_STR_LEN(&awk->token.name); nde->len = ASE_AWK_STR_LEN(&awk->token.name);
nde->buf = ase_awk_strxdup ( nde->buf = ase_awk_strxdup (awk,
awk,
ASE_AWK_STR_BUF(&awk->token.name), ASE_AWK_STR_BUF(&awk->token.name),
ASE_AWK_STR_LEN(&awk->token.name)); ASE_AWK_STR_LEN(&awk->token.name));
if (nde->buf == ASE_NULL) if (nde->buf == ASE_NULL)
@ -2213,8 +2228,7 @@ static ase_awk_nde_t* __parse_primary (ase_awk_t* awk)
PANIC (awk, ASE_AWK_ENOMEM); PANIC (awk, ASE_AWK_ENOMEM);
} }
nde->code = ase_awk_buildrex ( nde->code = ase_awk_buildrex (awk,
awk,
ASE_AWK_STR_BUF(&awk->token.name), ASE_AWK_STR_BUF(&awk->token.name),
ASE_AWK_STR_LEN(&awk->token.name), ASE_AWK_STR_LEN(&awk->token.name),
&errnum); &errnum);
@ -3282,8 +3296,8 @@ static ase_awk_nde_t* __parse_print (ase_awk_t* awk, int type)
} }
/* print 1 > 2 would print 1 to the file named 2. /* print 1 > 2 would print 1 to the file named 2.
* print (1 > 2) would print (1 > 2) in the console */ * print (1 > 2) would print (1 > 2) on the console */
if (awk->token.prev != TOKEN_RPAREN && if (awk->token.prev.type != TOKEN_RPAREN &&
args_tail->type == ASE_AWK_NDE_EXP_BIN) args_tail->type == ASE_AWK_NDE_EXP_BIN)
{ {
ase_awk_nde_exp_t* ep = (ase_awk_nde_exp_t*)args_tail; ase_awk_nde_exp_t* ep = (ase_awk_nde_exp_t*)args_tail;
@ -3430,6 +3444,11 @@ static int __get_token (ase_awk_t* awk)
int n; int n;
line = awk->token.line; line = awk->token.line;
awk->token.prev.type = awk->token.type;
awk->token.prev.line = awk->token.line;
awk->token.prev.column = awk->token.column;
do do
{ {
if (__skip_spaces(awk) == -1) return -1; if (__skip_spaces(awk) == -1) return -1;
@ -3840,8 +3859,7 @@ static int __get_token (ase_awk_t* awk)
ADD_TOKEN_CHAR (awk, c); ADD_TOKEN_CHAR (awk, c);
GET_CHAR (awk); GET_CHAR (awk);
} }
else if (c == ASE_T(';') || else if (c == ASE_T(';'))
(c == ASE_T('\n') && (awk->option & ASE_AWK_NEWLINE)))
{ {
/* TODO: more check on the newline terminator... */ /* TODO: more check on the newline terminator... */
SET_TOKEN_TYPE (awk, TOKEN_SEMICOLON); SET_TOKEN_TYPE (awk, TOKEN_SEMICOLON);
@ -4206,16 +4224,7 @@ static int __unget_char (ase_awk_t* awk, ase_cint_t c)
static int __skip_spaces (ase_awk_t* awk) static int __skip_spaces (ase_awk_t* awk)
{ {
ase_cint_t c = awk->src.lex.curc; ase_cint_t c = awk->src.lex.curc;
while (ASE_AWK_ISSPACE (awk, c)) GET_CHAR_TO (awk, c);
if (awk->option & ASE_AWK_NEWLINE && awk->parse.nl_semicolon)
{
while (c != ASE_T('\n') &&
ASE_AWK_ISSPACE (awk, c)) GET_CHAR_TO (awk, c);
}
else
{
while (ASE_AWK_ISSPACE (awk, c)) GET_CHAR_TO (awk, c);
}
return 0; return 0;
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.300 2006-12-13 14:15:24 bacon Exp $ * $Id: run.c,v 1.301 2006-12-16 14:43:51 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -547,9 +547,23 @@ int ase_awk_getrunerrnum (ase_awk_run_t* run)
return run->errnum; return run->errnum;
} }
const ase_char_t* ase_awk_getrunerrmsg (ase_awk_run_t* run)
{
if (run->errmsg[0] == ASE_T('\0'))
return ase_awk_geterrstr (run->errnum);
return run->errmsg;
}
void ase_awk_setrunerrnum (ase_awk_run_t* run, int errnum) void ase_awk_setrunerrnum (ase_awk_run_t* run, int errnum)
{ {
run->errnum = errnum; run->errnum = errnum;
run->errmsg[0] = ASE_T('\0');
}
void ase_awk_setrunerrmsg (ase_awk_run_t* run, const ase_char_t* msg)
{
ase_awk_strxcpy (run->errmsg, ASE_COUNTOF(run->errmsg), msg);
} }
int ase_awk_run (ase_awk_t* awk, int ase_awk_run (ase_awk_t* awk,
@ -562,65 +576,82 @@ int ase_awk_run (ase_awk_t* awk,
ase_awk_run_t* run; ase_awk_run_t* run;
int n, errnum; int n, errnum;
/* clear the awk error code */
awk->errnum = ASE_AWK_ENOERR; awk->errnum = ASE_AWK_ENOERR;
/* check if the code has ever been parsed */
if (awk->tree.nglobals == 0 && if (awk->tree.nglobals == 0 &&
awk->tree.begin == ASE_NULL && awk->tree.begin == ASE_NULL &&
awk->tree.end == ASE_NULL && awk->tree.end == ASE_NULL &&
awk->tree.chain_size == 0 && awk->tree.chain_size == 0 &&
ase_awk_map_getsize(&awk->tree.afns) == 0) ase_awk_map_getsize(&awk->tree.afns) == 0)
{ {
/* the code has not been parsed. deny the run */ /* if not, deny the run */
awk->errnum = ASE_AWK_EACCES; awk->errnum = ASE_AWK_EACCES;
return -1; return -1;
} }
/* allocate the storage for the run object */
run = (ase_awk_run_t*) ASE_AWK_MALLOC (awk, ASE_SIZEOF(ase_awk_run_t)); run = (ase_awk_run_t*) ASE_AWK_MALLOC (awk, ASE_SIZEOF(ase_awk_run_t));
if (run == ASE_NULL) if (run == ASE_NULL)
{ {
/* if it fails, the failure is reported thru
* the awk object */
awk->errnum = ASE_AWK_ENOMEM; awk->errnum = ASE_AWK_ENOMEM;
return -1; return -1;
} }
/* clear the run object space */
ASE_AWK_MEMSET (awk, run, 0, ASE_SIZEOF(ase_awk_run_t)); ASE_AWK_MEMSET (awk, run, 0, ASE_SIZEOF(ase_awk_run_t));
/* add the run object to the awk object */
__add_run (awk, run); __add_run (awk, run);
/* initialize the run object */
if (__init_run (run, awk, runios, custom_data, &errnum) == -1) if (__init_run (run, awk, runios, custom_data, &errnum) == -1)
{ {
/* if it fails, the failure is still reported thru
* the awk object */
awk->errnum = errnum; awk->errnum = errnum;
__del_run (awk, run); __del_run (awk, run);
ASE_AWK_FREE (awk, run); ASE_AWK_FREE (awk, run);
return -1; return -1;
} }
if (runcbs != ASE_NULL && runcbs->on_start != ASE_NULL) /* clear the run error code */
{ run->errnum = ASE_AWK_ENOERR;
runcbs->on_start (awk, run, runcbs->custom_data);
}
/* execute the start callback if it exists */
if (runcbs != ASE_NULL && runcbs->on_start != ASE_NULL)
runcbs->on_start (awk, run, runcbs->custom_data);
/* enter the main run loop */
n = __run_main (run, main, runarg); n = __run_main (run, main, 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
* is updated with the run's error number */ * is updated with the run's error number */
awk->errnum = (runcbs == ASE_NULL)? run->errnum: ASE_AWK_ERUNTIME; awk->errnum = (runcbs == ASE_NULL)?
run->errnum: ASE_AWK_ERUNTIME;
} }
/* 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 (awk, run,
((n == -1)? run->errnum: ASE_AWK_ENOERR), ((n == -1)? run->errnum: ASE_AWK_ENOERR),
runcbs->custom_data); runcbs->custom_data);
/* when using callbacks, the function always returns 0 after /* when using callbacks, this function always returns 0
* the start callbacks has been triggered */ * after the start callbacks has been triggered */
n = 0; n = 0;
} }
/* uninitialize the run object */
__deinit_run (run); __deinit_run (run);
__del_run (awk, run); __del_run (awk, run);
ASE_AWK_FREE (awk, run); ASE_AWK_FREE (awk, run);
return n; return n;
} }
@ -2441,10 +2472,12 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
(nde->out_type == ASE_AWK_OUT_FILE_APPEND && nde->out != ASE_NULL) || (nde->out_type == ASE_AWK_OUT_FILE_APPEND && nde->out != ASE_NULL) ||
(nde->out_type == ASE_AWK_OUT_CONSOLE && nde->out == ASE_NULL)); (nde->out_type == ASE_AWK_OUT_CONSOLE && nde->out == ASE_NULL));
/* check if destination has been specified. */
if (nde->out != ASE_NULL) if (nde->out != ASE_NULL)
{ {
ase_size_t len; ase_size_t len;
/* if so, resolve the destination name */
v = __eval_expression (run, nde->out); v = __eval_expression (run, nde->out);
if (v == ASE_NULL) return -1; if (v == ASE_NULL) return -1;
@ -2454,42 +2487,42 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
if (out == ASE_NULL) if (out == ASE_NULL)
{ {
ase_awk_refdownval (run, v); ase_awk_refdownval (run, v);
//ase_awk_setrunerrline (nde->line);
return -1; return -1;
} }
ase_awk_refdownval (run, v); ase_awk_refdownval (run, v);
if (len <= 0) if (len <= 0)
{ {
/* the output destination name is empty. */ /* if the destination name is empty, it skips the
* writing and flags an error and ERRNO */
ASE_AWK_FREE (run->awk, out); ASE_AWK_FREE (run->awk, out);
n = -1; ase_awk_setglobal (run, ASE_AWK_GLOBAL_ERRNO, ase_awk_val_negone);
goto skip_write; goto skip_write;
} }
/* it needs to check if the destination name contains
* any invalid characters to the underlying system */
while (len > 0) while (len > 0)
{ {
if (out[--len] == ASE_T('\0')) if (out[--len] == ASE_T('\0'))
{ {
/* the output destination name contains a null /* if so, the error is flagged thru ERRNO */
* character. */
ASE_AWK_FREE (run->awk, out); ASE_AWK_FREE (run->awk, out);
n = -1; ase_awk_setglobal (run, ASE_AWK_GLOBAL_ERRNO, ase_awk_val_negone);
goto skip_write; goto skip_write;
/* TODO: how to handle error???
* make print return -1??? not possible.
* throw an exception??
* set ERRNO or what??? this seems most
* reasonable. or can it have a global
* flag variable for print/printf such
* as PRINT_ERRNO? */
} }
} }
} }
/* transforms the destination to suit the usage with extio */
dst = (out == ASE_NULL)? ASE_T(""): out; dst = (out == ASE_NULL)? ASE_T(""): out;
/* check if print is followed by any arguments */
if (nde->args == ASE_NULL) if (nde->args == ASE_NULL)
{ {
/* if it doesn't have any arguments, print the entire
* input record */
n = ase_awk_writeextio_str ( n = ase_awk_writeextio_str (
run, nde->out_type, dst, run, nde->out_type, dst,
ASE_AWK_STR_BUF(&run->inrec.line), ASE_AWK_STR_BUF(&run->inrec.line),
@ -2497,6 +2530,7 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER) if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER)
{ {
if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out); if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out);
//ase_awk_setrunerrline (nde->line);
return -1; return -1;
} }
/* TODO: how to handle n == -1 && errnum == ASE_AWK_EIOHANDLER. /* TODO: how to handle n == -1 && errnum == ASE_AWK_EIOHANDLER.
@ -2504,6 +2538,8 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
} }
else else
{ {
/* if it has any arguments, print the arguments separated by
* the value OFS */
ase_awk_nde_t* head, * np; ase_awk_nde_t* head, * np;
if (nde->args->type == ASE_AWK_NDE_GRP) if (nde->args->type == ASE_AWK_NDE_GRP)
@ -2525,6 +2561,7 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER) if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER)
{ {
if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out); if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out);
//ase_awk_setrunerrline (nde->line);
return -1; return -1;
} }
} }
@ -2533,6 +2570,7 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
if (v == ASE_NULL) if (v == ASE_NULL)
{ {
if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out); if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out);
//ase_awk_setrunerrline (nde->line);
return -1; return -1;
} }
ase_awk_refupval (run, v); ase_awk_refupval (run, v);
@ -2542,6 +2580,7 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
{ {
if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out); if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out);
ase_awk_refdownval (run, v); ase_awk_refdownval (run, v);
//ase_awk_setrunerrline (nde->line);
return -1; return -1;
} }
@ -2553,12 +2592,14 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
} }
} }
/* print the value ORS to terminate the operation */
n = ase_awk_writeextio_str ( n = ase_awk_writeextio_str (
run, nde->out_type, dst, run, nde->out_type, dst,
run->global.ors.ptr, run->global.ors.len); run->global.ors.ptr, run->global.ors.len);
if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER) if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER)
{ {
if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out); if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out);
//ase_awk_setrunerrline (nde->line);
return -1; return -1;
} }
@ -2566,6 +2607,7 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
* that is the user handler returned an error... */ * that is the user handler returned an error... */
if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out); if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out);
ase_awk_setglobal (run, ASE_AWK_GLOBAL_ERRNO, ase_awk_val_zero);
skip_write: skip_write:
return 0; return 0;
@ -2607,7 +2649,7 @@ static int __run_printf (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
{ {
/* the output destination name is empty. */ /* the output destination name is empty. */
ASE_AWK_FREE (run->awk, out); ASE_AWK_FREE (run->awk, out);
n = -1; ase_awk_setglobal (run, ASE_AWK_GLOBAL_ERRNO, ase_awk_val_negone);
goto skip_write; goto skip_write;
} }
@ -2618,15 +2660,8 @@ static int __run_printf (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
/* the output destination name contains a null /* the output destination name contains a null
* character. */ * character. */
ASE_AWK_FREE (run->awk, out); ASE_AWK_FREE (run->awk, out);
n = -1; ase_awk_setglobal (run, ASE_AWK_GLOBAL_ERRNO, ase_awk_val_negone);
goto skip_write; goto skip_write;
/* TODO: how to handle error???
* make print return -1??? not possible.
* throw an exception??
* set ERRNO or what??? this seems most
* reasonable. or can it have a global
* flag variable for print/printf such
* as PRINT_ERRNO? */
} }
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: tree.h,v 1.83 2006-11-28 04:30:22 bacon Exp $ * $Id: tree.h,v 1.84 2006-12-16 14:43:51 bacon Exp $
*/ */
#ifndef _ASE_AWK_TREE_H_ #ifndef _ASE_AWK_TREE_H_
@ -130,6 +130,7 @@ struct ase_awk_afn_t
#define ASE_AWK_NDE_HDR \ #define ASE_AWK_NDE_HDR \
int type; \ int type; \
ase_size_t line; \
ase_awk_nde_t* next ase_awk_nde_t* next
struct ase_awk_nde_t struct ase_awk_nde_t

View File

@ -1,5 +1,5 @@
/* /*
* $Id: val.c,v 1.98 2006-12-13 14:16:12 bacon Exp $ * $Id: val.c,v 1.99 2006-12-16 14:43:51 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -38,6 +38,7 @@ static ase_awk_val_int_t __awk_int[] =
{ ASE_AWK_VAL_INT, 0, 9, ASE_NULL } { ASE_AWK_VAL_INT, 0, 9, ASE_NULL }
}; };
ase_awk_val_t* ase_awk_val_negone = (ase_awk_val_t*)&__awk_int[0];
ase_awk_val_t* ase_awk_val_zero = (ase_awk_val_t*)&__awk_int[1]; ase_awk_val_t* ase_awk_val_zero = (ase_awk_val_t*)&__awk_int[1];
ase_awk_val_t* ase_awk_val_one = (ase_awk_val_t*)&__awk_int[2]; ase_awk_val_t* ase_awk_val_one = (ase_awk_val_t*)&__awk_int[2];

View File

@ -1,5 +1,5 @@
/* /*
* $Id: val.h,v 1.56 2006-12-04 12:58:24 bacon Exp $ * $Id: val.h,v 1.57 2006-12-16 14:43:51 bacon Exp $
*/ */
#ifndef _ASE_AWK_VAL_H_ #ifndef _ASE_AWK_VAL_H_
@ -138,6 +138,7 @@ extern "C" {
extern ase_awk_val_t* ase_awk_val_nil; extern ase_awk_val_t* ase_awk_val_nil;
extern ase_awk_val_t* ase_awk_val_zls; extern ase_awk_val_t* ase_awk_val_zls;
extern ase_awk_val_t* ase_awk_val_nl; extern ase_awk_val_t* ase_awk_val_nl;
extern ase_awk_val_t* ase_awk_val_negone;
extern ase_awk_val_t* ase_awk_val_zero; extern ase_awk_val_t* ase_awk_val_zero;
extern ase_awk_val_t* ase_awk_val_one; extern ase_awk_val_t* ase_awk_val_one;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.c,v 1.137 2006-12-15 14:58:37 bacon Exp $ * $Id: awk.c,v 1.138 2006-12-16 14:45:02 bacon Exp $
*/ */
#include <ase/awk/awk.h> #include <ase/awk/awk.h>
@ -78,7 +78,7 @@ static FILE* fopen_t (const ase_char_t* path, const ase_char_t* mode)
#endif #endif
} }
static int __awk_sprintf ( static int awk_sprintf (
ase_char_t* buf, ase_size_t len, const ase_char_t* fmt, ...) ase_char_t* buf, ase_size_t len, const ase_char_t* fmt, ...)
{ {
int n; int n;
@ -102,7 +102,7 @@ static int __awk_sprintf (
return n; return n;
} }
static void __awk_aprintf (const ase_char_t* fmt, ...) static void awk_aprintf (const ase_char_t* fmt, ...)
{ {
va_list ap; va_list ap;
#ifdef _WIN32 #ifdef _WIN32
@ -130,7 +130,7 @@ static void __awk_aprintf (const ase_char_t* fmt, ...)
va_end (ap); va_end (ap);
} }
static void __awk_dprintf (const ase_char_t* fmt, ...) static void awk_dprintf (const ase_char_t* fmt, ...)
{ {
va_list ap; va_list ap;
va_start (ap, fmt); va_start (ap, fmt);
@ -146,7 +146,7 @@ static void __awk_dprintf (const ase_char_t* fmt, ...)
va_end (ap); va_end (ap);
} }
static ase_real_t __awk_pow (ase_real_t x, ase_real_t y) static ase_real_t awk_pow (ase_real_t x, ase_real_t y)
{ {
return pow (x, y); return pow (x, y);
} }
@ -272,7 +272,7 @@ static ase_ssize_t process_extio_pipe (
else if (epa->mode == ASE_AWK_EXTIO_PIPE_WRITE) else if (epa->mode == ASE_AWK_EXTIO_PIPE_WRITE)
mode = ASE_T("w"); mode = ASE_T("w");
else return -1; /* TODO: any way to set the error number? */ else return -1; /* TODO: any way to set the error number? */
__awk_dprintf (ASE_T("opending %s of type %d (pipe)\n"), epa->name, epa->type); awk_dprintf (ASE_T("opending %s of type %d (pipe)\n"), epa->name, epa->type);
handle = popen_t (epa->name, mode); handle = popen_t (epa->name, mode);
if (handle == NULL) return -1; if (handle == NULL) return -1;
epa->handle = (void*)handle; epa->handle = (void*)handle;
@ -281,7 +281,7 @@ static ase_ssize_t process_extio_pipe (
case ASE_AWK_IO_CLOSE: case ASE_AWK_IO_CLOSE:
{ {
__awk_dprintf (ASE_T("closing %s of type (pipe) %d\n"), epa->name, epa->type); awk_dprintf (ASE_T("closing %s of type (pipe) %d\n"), epa->name, epa->type);
fclose ((FILE*)epa->handle); fclose ((FILE*)epa->handle);
epa->handle = NULL; epa->handle = NULL;
return 0; return 0;
@ -340,7 +340,7 @@ static ase_ssize_t process_extio_file (
mode = ASE_T("a"); mode = ASE_T("a");
else return -1; /* TODO: any way to set the error number? */ else return -1; /* TODO: any way to set the error number? */
__awk_dprintf (ASE_T("opending %s of type %d (file)\n"), epa->name, epa->type); awk_dprintf (ASE_T("opending %s of type %d (file)\n"), epa->name, epa->type);
handle = fopen_t (epa->name, mode); handle = fopen_t (epa->name, mode);
if (handle == NULL) return -1; if (handle == NULL) return -1;
@ -350,7 +350,7 @@ static ase_ssize_t process_extio_file (
case ASE_AWK_IO_CLOSE: case ASE_AWK_IO_CLOSE:
{ {
__awk_dprintf (ASE_T("closing %s of type %d (file)\n"), epa->name, epa->type); awk_dprintf (ASE_T("closing %s of type %d (file)\n"), epa->name, epa->type);
fclose ((FILE*)epa->handle); fclose ((FILE*)epa->handle);
epa->handle = NULL; epa->handle = NULL;
return 0; return 0;
@ -455,7 +455,7 @@ static ase_ssize_t process_extio_console (
FILE* fp = fopen_t (infiles[infile_no], ASE_T("r")); FILE* fp = fopen_t (infiles[infile_no], ASE_T("r"));
if (fp == ASE_NULL) if (fp == ASE_NULL)
{ {
__awk_dprintf (ASE_T("failed to open the next console of type %x - fopen failure\n"), epa->type); awk_dprintf (ASE_T("failed to open the next console of type %x - fopen failure\n"), epa->type);
return -1; return -1;
} }
@ -464,7 +464,7 @@ static ase_ssize_t process_extio_console (
epa->handle != stdout && epa->handle != stdout &&
epa->handle != stderr) fclose (epa->handle); epa->handle != stderr) fclose (epa->handle);
__awk_dprintf (ASE_T("open the next console [%s]\n"), infiles[infile_no]); awk_dprintf (ASE_T("open the next console [%s]\n"), infiles[infile_no]);
epa->handle = fp; epa->handle = fp;
} }
@ -505,20 +505,20 @@ static int open_extio_console (ase_awk_extio_t* epa)
/* epa->name is always empty for console */ /* epa->name is always empty for console */
assert (epa->name[0] == ASE_T('\0')); assert (epa->name[0] == ASE_T('\0'));
__awk_dprintf (ASE_T("opening console[%s] of type %x\n"), epa->name, epa->type); awk_dprintf (ASE_T("opening console[%s] of type %x\n"), epa->name, epa->type);
if (epa->mode == ASE_AWK_EXTIO_CONSOLE_READ) if (epa->mode == ASE_AWK_EXTIO_CONSOLE_READ)
{ {
if (infiles[infile_no] == ASE_NULL) if (infiles[infile_no] == ASE_NULL)
{ {
/* no more input file */ /* no more input file */
__awk_dprintf (ASE_T("console - no more file\n"));; awk_dprintf (ASE_T("console - no more file\n"));;
return 0; return 0;
} }
if (infiles[infile_no][0] == ASE_T('\0')) if (infiles[infile_no][0] == ASE_T('\0'))
{ {
__awk_dprintf (ASE_T(" console(r) - <standard input>\n")); awk_dprintf (ASE_T(" console(r) - <standard input>\n"));
epa->handle = stdin; epa->handle = stdin;
} }
else else
@ -528,11 +528,11 @@ static int open_extio_console (ase_awk_extio_t* epa)
FILE* fp = fopen_t (infiles[infile_no], ASE_T("r")); FILE* fp = fopen_t (infiles[infile_no], ASE_T("r"));
if (fp == ASE_NULL) if (fp == ASE_NULL)
{ {
__awk_dprintf (ASE_T("cannot open console of type %x - fopen failure\n"), epa->type); awk_dprintf (ASE_T("cannot open console of type %x - fopen failure\n"), epa->type);
return -1; return -1;
} }
__awk_dprintf (ASE_T(" console(r) - %s\n"), infiles[infile_no]); awk_dprintf (ASE_T(" console(r) - %s\n"), infiles[infile_no]);
if (ase_awk_setfilename ( if (ase_awk_setfilename (
epa->run, infiles[infile_no], epa->run, infiles[infile_no],
ase_awk_strlen(infiles[infile_no])) == -1) ase_awk_strlen(infiles[infile_no])) == -1)
@ -549,7 +549,7 @@ static int open_extio_console (ase_awk_extio_t* epa)
} }
else if (epa->mode == ASE_AWK_EXTIO_CONSOLE_WRITE) else if (epa->mode == ASE_AWK_EXTIO_CONSOLE_WRITE)
{ {
__awk_dprintf (ASE_T(" console(w) - <standard output>\n")); awk_dprintf (ASE_T(" console(w) - <standard output>\n"));
/* TODO: does output console has a name??? */ /* TODO: does output console has a name??? */
/*ase_awk_setconsolename (ASE_T(""));*/ /*ase_awk_setconsolename (ASE_T(""));*/
epa->handle = stdout; epa->handle = stdout;
@ -561,7 +561,7 @@ static int open_extio_console (ase_awk_extio_t* epa)
static int close_extio_console (ase_awk_extio_t* epa) static int close_extio_console (ase_awk_extio_t* epa)
{ {
__awk_dprintf (ASE_T("closing console of type %x\n"), epa->type); awk_dprintf (ASE_T("closing console of type %x\n"), epa->type);
if (epa->handle != ASE_NULL && if (epa->handle != ASE_NULL &&
epa->handle != stdin && epa->handle != stdin &&
@ -580,7 +580,7 @@ static int next_extio_console (ase_awk_extio_t* epa)
int n; int n;
FILE* fp = epa->handle; FILE* fp = epa->handle;
__awk_dprintf (ASE_T("switching console[%s] of type %x\n"), epa->name, epa->type); awk_dprintf (ASE_T("switching console[%s] of type %x\n"), epa->name, epa->type);
n = open_extio_console(epa); n = open_extio_console(epa);
if (n == -1) return -1; if (n == -1) return -1;
@ -599,7 +599,7 @@ static int next_extio_console (ase_awk_extio_t* epa)
ase_awk_t* app_awk = NULL; ase_awk_t* app_awk = NULL;
void* app_run = NULL; ase_awk_t* app_run = NULL;
#ifdef _WIN32 #ifdef _WIN32
static BOOL WINAPI __stop_run (DWORD ctrl_type) static BOOL WINAPI __stop_run (DWORD ctrl_type)
@ -624,21 +624,27 @@ static void __stop_run (int sig)
} }
#endif #endif
static void __on_run_start (ase_awk_t* awk, void* handle, void* arg) static void on_run_start (
ase_awk_t* awk, ase_awk_run_t* run, void* custom_data)
{ {
app_awk = awk; app_awk = awk;
app_run = handle; app_run = run;
__awk_dprintf (ASE_T("AWK PRORAM ABOUT TO START...\n")); awk_dprintf (ASE_T("AWK ABOUT TO START...\n"));
} }
static void __on_run_end (ase_awk_t* awk, void* handle, int errnum, void* arg) static void on_run_end (
ase_awk_t* awk, 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 PRORAM ABOUT TO END WITH AN ERROR - %d - %s\n"), errnum, ase_awk_geterrstr (errnum)); //const ase_awk_t* errmsg = ase_awk_getrunerrmsg (run);
awk_dprintf (
ASE_T("AWK ABOUT TO END WITH AN ERROR - [%d] %s\n"),
errnum, ase_awk_getrunerrmsg (run));
} }
else __awk_dprintf (ASE_T("AWK PRORAM ENDED SUCCESSFULLY\n")); else awk_dprintf (ASE_T("AWK ENDED SUCCESSFULLY\n"));
app_awk = NULL; app_awk = NULL;
app_run = NULL; app_run = NULL;
@ -652,7 +658,7 @@ struct sysfns_data_t
}; };
#endif #endif
static void* __awk_malloc (ase_size_t n, void* custom_data) static void* awk_malloc (ase_size_t n, void* custom_data)
{ {
#ifdef _WIN32 #ifdef _WIN32
return HeapAlloc (((sysfns_data_t*)custom_data)->heap, 0, n); return HeapAlloc (((sysfns_data_t*)custom_data)->heap, 0, n);
@ -661,7 +667,7 @@ static void* __awk_malloc (ase_size_t n, void* custom_data)
#endif #endif
} }
static void* __awk_realloc (void* ptr, ase_size_t n, void* custom_data) static void* awk_realloc (void* ptr, ase_size_t n, void* custom_data)
{ {
#ifdef _WIN32 #ifdef _WIN32
/* HeapReAlloc behaves differently from realloc */ /* HeapReAlloc behaves differently from realloc */
@ -674,7 +680,7 @@ static void* __awk_realloc (void* ptr, ase_size_t n, void* custom_data)
#endif #endif
} }
static void __awk_free (void* ptr, void* custom_data) static void awk_free (void* ptr, void* custom_data)
{ {
#ifdef _WIN32 #ifdef _WIN32
HeapFree (((sysfns_data_t*)custom_data)->heap, 0, ptr); HeapFree (((sysfns_data_t*)custom_data)->heap, 0, ptr);
@ -685,49 +691,49 @@ static void __awk_free (void* ptr, void* custom_data)
#if defined(ASE_CHAR_IS_MCHAR) #if defined(ASE_CHAR_IS_MCHAR)
#if (__TURBOC__<=513) /* turboc 2.01 or earlier */ #if (__TURBOC__<=513) /* turboc 2.01 or earlier */
static int __awk_isupper (int c) { return isupper (c); } static int awk_isupper (int c) { return isupper (c); }
static int __awk_islower (int c) { return islower (c); } static int awk_islower (int c) { return islower (c); }
static int __awk_isalpha (int c) { return isalpha (c); } static int awk_isalpha (int c) { return isalpha (c); }
static int __awk_isdigit (int c) { return isdigit (c); } static int awk_isdigit (int c) { return isdigit (c); }
static int __awk_isxdigit (int c) { return isxdigit (c); } static int awk_isxdigit (int c) { return isxdigit (c); }
static int __awk_isalnum (int c) { return isalnum (c); } static int awk_isalnum (int c) { return isalnum (c); }
static int __awk_isspace (int c) { return isspace (c); } static int awk_isspace (int c) { return isspace (c); }
static int __awk_isprint (int c) { return isprint (c); } static int awk_isprint (int c) { return isprint (c); }
static int __awk_isgraph (int c) { return isgraph (c); } static int awk_isgraph (int c) { return isgraph (c); }
static int __awk_iscntrl (int c) { return iscntrl (c); } static int awk_iscntrl (int c) { return iscntrl (c); }
static int __awk_ispunct (int c) { return ispunct (c); } static int awk_ispunct (int c) { return ispunct (c); }
static int __awk_toupper (int c) { return toupper (c); } static int awk_toupper (int c) { return toupper (c); }
static int __awk_tolower (int c) { return tolower (c); } static int awk_tolower (int c) { return tolower (c); }
#else #else
#define __awk_isupper isupper #define awk_isupper isupper
#define __awk_islower islower #define awk_islower islower
#define __awk_isalpha isalpha #define awk_isalpha isalpha
#define __awk_isdigit isdigit #define awk_isdigit isdigit
#define __awk_isxdigit isxdigit #define awk_isxdigit isxdigit
#define __awk_isalnum isalnum #define awk_isalnum isalnum
#define __awk_isspace isspace #define awk_isspace isspace
#define __awk_isprint isprint #define awk_isprint isprint
#define __awk_isgraph isgraph #define awk_isgraph isgraph
#define __awk_iscntrl iscntrl #define awk_iscntrl iscntrl
#define __awk_ispunct ispunct #define awk_ispunct ispunct
#define __awk_toupper tolower #define awk_toupper tolower
#define __awk_tolower tolower #define awk_tolower tolower
#endif #endif
#else #else
#define __awk_isupper iswupper #define awk_isupper iswupper
#define __awk_islower iswlower #define awk_islower iswlower
#define __awk_isalpha iswalpha #define awk_isalpha iswalpha
#define __awk_isdigit iswdigit #define awk_isdigit iswdigit
#define __awk_isxdigit iswxdigit #define awk_isxdigit iswxdigit
#define __awk_isalnum iswalnum #define awk_isalnum iswalnum
#define __awk_isspace iswspace #define awk_isspace iswspace
#define __awk_isprint iswprint #define awk_isprint iswprint
#define __awk_isgraph iswgraph #define awk_isgraph iswgraph
#define __awk_iscntrl iswcntrl #define awk_iscntrl iswcntrl
#define __awk_ispunct iswpunct #define awk_ispunct iswpunct
#define __awk_toupper towlower #define awk_toupper towlower
#define __awk_tolower towlower #define awk_tolower towlower
#endif #endif
static int __main (int argc, ase_char_t* argv[]) static int __main (int argc, ase_char_t* argv[])
@ -790,33 +796,33 @@ 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.malloc = awk_malloc;
sysfns.realloc = __awk_realloc; sysfns.realloc = awk_realloc;
sysfns.free = __awk_free; sysfns.free = awk_free;
sysfns.lock = NULL; sysfns.lock = NULL;
sysfns.unlock = NULL; sysfns.unlock = NULL;
sysfns.is_upper = __awk_isupper; sysfns.is_upper = awk_isupper;
sysfns.is_lower = __awk_islower; sysfns.is_lower = awk_islower;
sysfns.is_alpha = __awk_isalpha; sysfns.is_alpha = awk_isalpha;
sysfns.is_digit = __awk_isdigit; sysfns.is_digit = awk_isdigit;
sysfns.is_xdigit = __awk_isxdigit; sysfns.is_xdigit = awk_isxdigit;
sysfns.is_alnum = __awk_isalnum; sysfns.is_alnum = awk_isalnum;
sysfns.is_space = __awk_isspace; sysfns.is_space = awk_isspace;
sysfns.is_print = __awk_isprint; sysfns.is_print = awk_isprint;
sysfns.is_graph = __awk_isgraph; sysfns.is_graph = awk_isgraph;
sysfns.is_cntrl = __awk_iscntrl; sysfns.is_cntrl = awk_iscntrl;
sysfns.is_punct = __awk_ispunct; sysfns.is_punct = awk_ispunct;
sysfns.to_upper = __awk_toupper; sysfns.to_upper = awk_toupper;
sysfns.to_lower = __awk_tolower; sysfns.to_lower = awk_tolower;
sysfns.memcpy = memcpy; sysfns.memcpy = memcpy;
sysfns.memset = memset; sysfns.memset = memset;
sysfns.pow = __awk_pow; 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 = abort;
#ifdef _WIN32 #ifdef _WIN32
@ -875,8 +881,8 @@ static int __main (int argc, ase_char_t* argv[])
runios.file = process_extio_file; runios.file = process_extio_file;
runios.console = process_extio_console; runios.console = process_extio_console;
runcbs.on_start = __on_run_start; runcbs.on_start = on_run_start;
runcbs.on_end = __on_run_end; runcbs.on_end = on_run_end;
runcbs.custom_data = ASE_NULL; runcbs.custom_data = ASE_NULL;
runarg[0].ptr = ASE_T("argument 0"); runarg[0].ptr = ASE_T("argument 0");

View File

@ -25,9 +25,6 @@ java:
jrun: jrun:
java -Xms1m -Xmx2m -classpath ../../.. ase.test.awk.Awk java -Xms1m -Xmx2m -classpath ../../.. ase.test.awk.Awk
ada:
gnatmake -I..\.. -I..\..\awk awk
clean: clean:
del $(OBJS) *.obj *.class awk.exe del $(OBJS) *.obj *.class awk.exe