Recovered from cvs revision 2007-10-25 14:43:00

This commit is contained in:
hyung-hwan 2007-10-25 23:43:00 +00:00
parent 62ce250c12
commit 01c0434577
13 changed files with 507 additions and 146 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: Return.java,v 1.3 2007/10/24 04:58:35 bacon Exp $
* $Id: Return.java,v 1.4 2007/10/24 14:17:32 bacon Exp $
*/
package ase.awk;
@ -20,6 +20,11 @@ public class Return
this.valid = valid;
}
public boolean isIndexed ()
{
return isindexed (this.runid, this.valid);
}
public void setIntValue (long v)
{
setintval (this.runid, this.valid, v);
@ -90,11 +95,49 @@ public class Return
setindexedstrval (this.runid, this.valid, index, v);
}
public void setIndexedIntValue (long index, long v)
{
setindexedintval (this.runid, this.valid, Long.toString(index), v);
}
public void setIndexedIntValue (long index, int v)
{
setindexedintval (this.runid, this.valid, Long.toString(index), (long)v);
}
public void setIndexedIntValue (long index, short v)
{
setindexedintval (this.runid, this.valid, Long.toString(index), (long)v);
}
public void setIndexedIntValue (long index, byte v)
{
setindexedintval (this.runid, this.valid, Long.toString(index), (long)v);
}
public void setIndexedRealValue (long index, double v)
{
setindexedrealval (this.runid, this.valid, Long.toString(index), v);
}
public void setIndexedRealValue (long index, float v)
{
setindexedrealval (this.runid, this.valid, Long.toString(index), (double)v);
}
public void setIndexedStringValue (long index, String v)
{
setindexedstrval (this.runid, this.valid, Long.toString(index), v);
}
public void clear ()
{
clearval (this.runid, this.valid);
}
protected native boolean isindexed (long runid, long valid);
protected native void setintval (long runid, long valid, long v);
protected native void setrealval (long runid, long valid, double v);
protected native void setstrval (long runid, long valid, String v);

View File

@ -1,5 +1,5 @@
/*
* $Id: awk.c,v 1.11 2007/10/10 13:22:12 bacon Exp $
* $Id: awk.c,v 1.13 2007/10/24 14:17:32 bacon Exp $
*
* {License}
*/
@ -13,6 +13,7 @@
static void free_kw (void* awk, void* ptr);
static void free_afn (void* awk, void* afn);
static void free_bfn (void* awk, void* afn);
ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data)
{
@ -136,7 +137,19 @@ ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data)
awk->src.shared.buf_len = 0;
awk->bfn.sys = ASE_NULL;
awk->bfn.user = ASE_NULL;
/*awk->bfn.user = ASE_NULL;*/
awk->bfn.user = ase_awk_map_open (awk, 512, 70, free_bfn, awk);
if (awk->bfn.user == ASE_NULL)
{
ase_awk_tab_close (&awk->parse.params);
ase_awk_tab_close (&awk->parse.locals);
ase_awk_tab_close (&awk->parse.globals);
ase_awk_map_close (awk->tree.afns);
ase_awk_map_close (awk->kwtab);
ase_str_close (&awk->token.name);
ASE_AWK_FREE (awk, awk);
return ASE_NULL;
}
awk->parse.depth.cur.block = 0;
awk->parse.depth.cur.loop = 0;
@ -153,6 +166,7 @@ ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data)
if (ase_awk_initglobals (awk) == -1)
{
ase_awk_map_close (awk->bfn.user);
ase_awk_tab_close (&awk->parse.params);
ase_awk_tab_close (&awk->parse.locals);
ase_awk_tab_close (&awk->parse.globals);
@ -182,12 +196,19 @@ static void free_afn (void* owner, void* afn)
ASE_AWK_FREE ((ase_awk_t*)owner, f);
}
static void free_bfn (void* owner, void* bfn)
{
ase_awk_bfn_t* f = (ase_awk_bfn_t*)bfn;
ASE_AWK_FREE ((ase_awk_t*)owner, f);
}
int ase_awk_close (ase_awk_t* awk)
{
ase_size_t i;
if (ase_awk_clear (awk) == -1) return -1;
ase_awk_clrbfn (awk);
/*ase_awk_clrbfn (awk);*/
ase_awk_map_close (awk->bfn.user);
ase_awk_tab_close (&awk->parse.params);
ase_awk_tab_close (&awk->parse.locals);

View File

@ -1,5 +1,5 @@
/*
* $Id: awk.h,v 1.21 2007/10/21 07:59:35 bacon Exp $
* $Id: awk.h,v 1.22 2007/10/24 09:57:45 bacon Exp $
*
* {License}
*/
@ -466,6 +466,9 @@ void ase_awk_setoption (ase_awk_t* awk, int opt);
ase_size_t ase_awk_getmaxdepth (ase_awk_t* awk, int type);
void ase_awk_setmaxdepth (ase_awk_t* awk, int types, ase_size_t depth);
/*
* Enables replacement of a name of a keyword.
*/
int ase_awk_setword (ase_awk_t* awk,
const ase_char_t* okw, ase_size_t olen,
const ase_char_t* nkw, ase_size_t nlen);

View File

@ -1,5 +1,5 @@
/*
* $Id: awk_i.h,v 1.8 2007/10/10 13:22:12 bacon Exp $
* $Id: awk_i.h,v 1.9 2007/10/24 09:57:45 bacon Exp $
*
* {License}
*/
@ -160,7 +160,8 @@ struct ase_awk_t
struct
{
ase_awk_bfn_t* sys;
ase_awk_bfn_t* user;
/*ase_awk_bfn_t* user;*/
ase_awk_map_t* user;
} bfn;
struct

View File

@ -1,5 +1,5 @@
/*
* $Id: err.c,v 1.10 2007/10/21 07:59:35 bacon Exp $
* $Id: err.c,v 1.11 2007/10/24 09:57:45 bacon Exp $
*
* {License}
*/
@ -55,7 +55,7 @@ static const ase_char_t* __geterrstr (int errnum)
ASE_T("a comment not closed properly"),
ASE_T("a string not closed with a quote"),
ASE_T("unexpected end of a regular expression"),
ASE_T("a left brace expected n place of '%.*s'"),
ASE_T("a left brace expected in place of '%.*s'"),
ASE_T("a left parenthesis expected in place of '%.*s'"),
ASE_T("a right parenthesis expected in place of '%.*s'"),
ASE_T("a right bracket expected in place of '%.*s'"),

View File

@ -1,5 +1,5 @@
/*
* $Id: func.c,v 1.11 2007/10/21 13:58:47 bacon Exp $
* $Id: func.c,v 1.12 2007/10/24 09:57:45 bacon Exp $
*
* {License}
*/
@ -22,7 +22,7 @@ static int bfn_sprintf (ase_awk_run_t*, const ase_char_t*, ase_size_t);
#undef MAX
#define MAX ASE_TYPE_UNSIGNED_MAX(ase_size_t)
static ase_awk_bfn_t __sys_bfn[] =
static ase_awk_bfn_t sys_bfn[] =
{
/* io functions */
{ {ASE_T("close"), 5}, ASE_AWK_EXTIO, {1, 1, ASE_NULL}, bfn_close},
@ -49,9 +49,8 @@ void* ase_awk_addfunc (
const ase_char_t* arg_spec,
int (*handler)(ase_awk_run_t*,const ase_char_t*,ase_size_t))
{
ase_awk_bfn_t* p;
/* TODO: make function table hash-accessable */
ase_awk_bfn_t* bfn;
ase_size_t spec_len;
if (name_len <= 0)
{
@ -70,144 +69,108 @@ void* ase_awk_addfunc (
return ASE_NULL;
}
p = (ase_awk_bfn_t*) ASE_AWK_MALLOC (awk, ASE_SIZEOF(ase_awk_bfn_t));
if (p == ASE_NULL)
spec_len = (arg_spec == ASE_NULL)? 0: ase_strlen(arg_spec);
bfn = (ase_awk_bfn_t*) ASE_AWK_MALLOC (awk,
ASE_SIZEOF(ase_awk_bfn_t) +
(name_len+1) * ASE_SIZEOF(ase_char_t) +
(spec_len+1) * ASE_SIZEOF(ase_char_t));
if (bfn == ASE_NULL)
{
ase_awk_seterror (awk, ASE_AWK_ENOMEM, 0, ASE_NULL, 0);
ase_awk_seterrnum (awk, ASE_AWK_ENOMEM);
return ASE_NULL;
}
p->name.ptr = ase_strxdup (name, name_len, &awk->prmfns.mmgr);
if (p->name.ptr == ASE_NULL)
{
ASE_AWK_FREE (awk, p);
ase_awk_seterror (awk, ASE_AWK_ENOMEM, 0, ASE_NULL, 0);
return ASE_NULL;
}
bfn->name.ptr = (ase_char_t*)(bfn + 1);
bfn->name.len = name_len;
ase_strxncpy (bfn->name.ptr, name_len+1, name, name_len);
p->name.len = name_len;
p->valid = when_valid;
p->arg.min = min_args;
p->arg.max = max_args;
if (arg_spec == ASE_NULL) p->arg.spec = ASE_NULL;
bfn->valid = when_valid;
bfn->arg.min = min_args;
bfn->arg.max = max_args;
if (arg_spec == ASE_NULL) bfn->arg.spec = ASE_NULL;
else
{
p->arg.spec = ase_strdup (arg_spec, &awk->prmfns.mmgr);
if (p->arg.spec == ASE_NULL)
bfn->arg.spec = bfn->name.ptr + bfn->name.len + 1;
ase_strxcpy (bfn->arg.spec, spec_len+1, arg_spec);
}
bfn->handler = handler;
if (ase_awk_map_put (awk->bfn.user, name, name_len, bfn) == ASE_NULL)
{
ASE_AWK_FREE (awk, p->name.ptr);
ASE_AWK_FREE (awk, p);
ase_awk_seterror (awk, ASE_AWK_ENOMEM, 0, ASE_NULL, 0);
ASE_AWK_FREE (awk, bfn);
ase_awk_seterrnum (awk, ASE_AWK_ENOMEM);
return ASE_NULL;
}
}
p->handler = handler;
p->next = awk->bfn.user;
awk->bfn.user = p;
return p;
return bfn;
}
int ase_awk_delfunc (
ase_awk_t* awk, const ase_char_t* name, ase_size_t name_len)
{
ase_awk_bfn_t* p, * pp = ASE_NULL;
if (ase_awk_map_remove (awk->bfn.user, name, name_len) == -1)
{
ase_cstr_t errarg;
for (p = awk->bfn.user; p != ASE_NULL; p = p->next)
{
if (ase_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;
}
pp = p;
}
errarg.ptr = name;
errarg.len = name_len;
ase_awk_seterror (awk, ASE_AWK_ENOENT, 0, &errarg, 1);
return -1;
}
return 0;
}
void ase_awk_clrbfn (ase_awk_t* awk)
{
ase_awk_bfn_t* p, * np;
p = awk->bfn.user;
while (p != ASE_NULL)
{
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;
}
awk->bfn.user = ASE_NULL;
ase_awk_map_clear (awk->bfn.user);
}
ase_awk_bfn_t* ase_awk_getbfn (
ase_awk_t* awk, const ase_char_t* name, ase_size_t len)
{
ase_awk_bfn_t* p;
ase_awk_bfn_t* bfn;
ase_awk_pair_t* pair;
const ase_char_t* k;
ase_size_t l;
for (p = __sys_bfn; p->name.ptr != ASE_NULL; p++)
/* search the system function table */
for (bfn = sys_bfn; bfn->name.ptr != ASE_NULL; bfn++)
{
if (p->valid != 0 &&
(awk->option & p->valid) == 0) continue;
if (bfn->valid != 0 &&
(awk->option & bfn->valid) == 0) continue;
pair = ase_awk_map_get (awk->kwtab, p->name.ptr, p->name.len);
pair = ase_awk_map_get (
awk->kwtab, bfn->name.ptr, bfn->name.len);
if (pair != ASE_NULL)
{
/* found in the customized word table */
k = ((ase_cstr_t*)(pair->val))->ptr;
l = ((ase_cstr_t*)(pair->val))->len;
}
else
{
k = p->name.ptr;
l = p->name.len;
k = bfn->name.ptr;
l = bfn->name.len;
}
if (ase_strxncmp (k, l, name, len) == 0) return p;
if (ase_strxncmp (k, l, name, len) == 0) return bfn;
}
for (p = awk->bfn.user; p != ASE_NULL; p = p->next)
{
if (p->valid != 0 &&
(awk->option & p->valid) == 0) continue;
/* no setword related operation for user-defined instrinc function
* as the name can be decided by the user upon addition. */
pair = ase_awk_map_get (awk->kwtab, p->name.ptr, p->name.len);
if (pair != ASE_NULL)
{
k = ((ase_cstr_t*)(pair->val))->ptr;
l = ((ase_cstr_t*)(pair->val))->len;
}
else
{
k = p->name.ptr;
l = p->name.len;
}
pair = ase_awk_map_get (awk->bfn.user, name, len);
if (pair == ASE_NULL) return ASE_NULL;
if (ase_strxncmp (k, l, name, len) == 0) return p;
}
bfn = (ase_awk_bfn_t*)pair->val;
if (bfn->valid != 0 && (awk->option & bfn->valid) == 0) return ASE_NULL;
return ASE_NULL;
return bfn;
}
static int bfn_close (

View File

@ -1,5 +1,5 @@
/*
* $Id: func.h,v 1.3 2007/04/30 05:47:33 bacon Exp $
* $Id: func.h,v 1.4 2007/10/24 09:57:45 bacon Exp $
*
* {License}
*/
@ -32,7 +32,7 @@ struct ase_awk_bfn_t
int (*handler) (ase_awk_run_t*, const ase_char_t*, ase_size_t);
ase_awk_bfn_t* next;
/*ase_awk_bfn_t* next;*/
};
#ifdef __cplusplus

View File

@ -27,7 +27,11 @@ EXPORTS
Java_ase_awk_Argument_getstrval
Java_ase_awk_Argument_isindexed
Java_ase_awk_Argument_getindexed
Java_ase_awk_Return_isindexed
Java_ase_awk_Return_setintval
Java_ase_awk_Return_setrealval
Java_ase_awk_Return_setstrval
Java_ase_awk_Return_setindexedintval
Java_ase_awk_Return_setindexedrealval
Java_ase_awk_Return_setindexedstrval
Java_ase_awk_Return_clearval

View File

@ -1,5 +1,5 @@
/*
* $Id: jni.c,v 1.38 2007/10/24 04:58:35 bacon Exp $
* $Id: jni.c,v 1.40 2007/10/24 14:17:32 bacon Exp $
*
* {License}
*/
@ -360,7 +360,7 @@ static void throw_exception (
}
#define THROW_STATIC_EXCEPTION(env,errnum) \
throw_exception (env, ase_awk_geterrstr(ASE_ASE_NULL, errnum), errnum, 0)
throw_exception (env, ase_awk_geterrstr(ASE_NULL, errnum), errnum, 0)
#define EXCEPTION_ON_ASE_NULL_AWK(env,awk) \
if (awk == ASE_NULL) \
@ -605,7 +605,7 @@ static ase_char_t* java_strxdup (ase_awk_t* awk, const jchar* str, jint len)
ase_size_t i;
tmp = (ase_char_t*) ase_awk_malloc (awk, (len+1) * ASE_SIZEOF(ase_char_t));
if (tmp == ASE_ASE_NULL) return ASE_ASE_NULL;
if (tmp == ASE_NULL) return ASE_NULL;
for (i = 0; i < (ase_size_t)len; i++) tmp[i] = (ase_char_t)str[i];
tmp[i] = ASE_T('\0');
@ -617,7 +617,7 @@ static ase_char_t* java_strxdup (ase_awk_t* awk, const jchar* str, jint len)
ase_char_t* tmp;
tmp = (ase_char_t*) ase_awk_malloc (awk, (len+1) * ASE_SIZEOF(ase_char_t));
if (tmp == ASE_ASE_NULL) return ASE_ASE_NULL;
if (tmp == ASE_NULL) return ASE_NULL;
ase_strncpy (tmp, (ase_char_t*)str, (ase_size_t)len);
return tmp;
@ -758,7 +758,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_run (JNIEnv* env, jobject obj, jlong awk
runio_data.obj = obj;
runios.pipe = process_extio;
runios.coproc = ASE_ASE_NULL;
runios.coproc = ASE_NULL;
runios.file = process_extio;
runios.console = process_extio;
runios.custom_data = &runio_data;
@ -792,7 +792,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_run (JNIEnv* env, jobject obj, jlong awk
}
mmm = (ase_char_t*) ase_awk_malloc (awk, ASE_SIZEOF(ase_char_t)*(len+1));
if (mmm == ASE_ASE_NULL)
if (mmm == ASE_NULL)
{
(*env)->ReleaseStringChars (env, mfn, ptr);
DELETE_CLASS_REFS (env, run_data);
@ -1764,7 +1764,7 @@ static int handle_bfn (
{
jsize x;
rptr = (ase_char_t*) ase_awk_malloc (awk, ASE_SIZEOF(ase_char_t)*len);
if (rptr == ASE_ASE_NULL)
if (rptr == ASE_NULL)
{
/* ran out of memory in exception handling.
* it is freaking studid. */
@ -1837,7 +1837,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_addfunc (
jsize x;
ase_char_t* tmp = (ase_char_t*)
ase_awk_malloc (awk, ASE_SIZEOF(ase_char_t)*len);
if (tmp == ASE_ASE_NULL)
if (tmp == ASE_NULL)
{
(*env)->ReleaseStringChars (env, name, ptr);
THROW_NOMEM_EXCEPTION (env);
@ -1846,13 +1846,13 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_addfunc (
for (x = 0; x < len; x++) tmp[x] = (ase_char_t)ptr[x];
n = (ase_awk_addfunc (awk, tmp, len, 0,
min_args, max_args, ASE_ASE_NULL, handle_bfn) == ASE_NULL)? -1: 0;
min_args, max_args, ASE_NULL, handle_bfn) == ASE_NULL)? -1: 0;
ase_awk_free (awk, tmp);
}
else
{
n = (ase_awk_addfunc (awk, (ase_char_t*)ptr, len, 0,
min_args, max_args, ASE_ASE_NULL, handle_bfn) == ASE_NULL)? -1: 0;
min_args, max_args, ASE_NULL, handle_bfn) == ASE_NULL)? -1: 0;
}
@ -1898,7 +1898,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_delfunc (
jsize x;
ase_char_t* tmp = (ase_char_t*)
ase_awk_malloc (awk, ASE_SIZEOF(ase_char_t)*len);
if (tmp == ASE_ASE_NULL)
if (tmp == ASE_NULL)
{
(*env)->ReleaseStringChars (env, name, ptr);
THROW_NOMEM_EXCEPTION (env);
@ -2003,7 +2003,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setword (
{
jsize x;
ox = (ase_char_t*)ase_awk_malloc (awk, ASE_SIZEOF(ase_char_t)*ol);
if (ox == ASE_ASE_NULL)
if (ox == ASE_NULL)
{
if (nw != ASE_NULL) (*env)->ReleaseStringChars (env, nw, np);
if (ow != ASE_NULL) (*env)->ReleaseStringChars (env, ow, op);
@ -2020,7 +2020,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setword (
{
jsize x;
nx = (ase_char_t*) ase_awk_malloc (awk, ASE_SIZEOF(ase_char_t)*nl);
if (nx == ASE_ASE_NULL)
if (nx == ASE_NULL)
{
if (ox != (ase_char_t*)op) ase_awk_free (awk, ox);
@ -2070,7 +2070,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setfilename (
jsize x;
ase_char_t* tmp = (ase_char_t*)
ase_awk_malloc (awk, ASE_SIZEOF(ase_char_t)*len);
if (tmp == ASE_ASE_NULL)
if (tmp == ASE_NULL)
{
(*env)->ReleaseStringChars (env, name, ptr);
THROW_NOMEM_EXCEPTION (env);
@ -2115,7 +2115,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setofilename (
jsize x;
ase_char_t* tmp = (ase_char_t*)
ase_awk_malloc (awk, ASE_SIZEOF(ase_char_t)*len);
if (tmp == ASE_ASE_NULL)
if (tmp == ASE_NULL)
{
(*env)->ReleaseStringChars (env, name, ptr);
THROW_NOMEM_EXCEPTION (env);
@ -2296,7 +2296,7 @@ JNIEXPORT jint JNICALL Java_ase_awk_Awk_system (
ret = _tsystem(tmp);
#else
char* mbs = (char*)ase_awk_malloc (awk, len*5+1);
if (mbs == ASE_ASE_NULL)
if (mbs == ASE_NULL)
{
ase_awk_free (awk, tmp);
return -1;
@ -2363,8 +2363,8 @@ JNIEXPORT jstring JNICALL Java_ase_awk_Argument_getstrval (JNIEnv* env, jobject
jstring ret = ASE_NULL;
str = ase_awk_valtostr (
run, val, ASE_AWK_VALTOSTR_CLEAR, ASE_ASE_NULL, &len);
if (str == ASE_ASE_NULL)
run, val, ASE_AWK_VALTOSTR_CLEAR, ASE_NULL, &len);
if (str == ASE_NULL)
{
THROW_RUN_EXCEPTION (env, run);
return ret;
@ -2426,7 +2426,7 @@ JNIEXPORT jobject JNICALL Java_ase_awk_Argument_getindexed (JNIEnv* env, jobject
ase_char_t* rptr;
ase_size_t len;
if (ASE_AWK_VAL_TYPE(val) != ASE_AWK_VAL_MAP) return ASE_ASE_NULL;
if (ASE_AWK_VAL_TYPE(val) != ASE_AWK_VAL_MAP) return ASE_NULL;
len = (*env)->GetStringLength (env, index);
ptr = (*env)->GetStringChars (env, index, JNI_FALSE);
@ -2436,7 +2436,7 @@ JNIEXPORT jobject JNICALL Java_ase_awk_Argument_getindexed (JNIEnv* env, jobject
{
ase_size_t x;
rptr = (ase_char_t*) ase_awk_malloc (awk, ASE_SIZEOF(ase_char_t)*len);
if (rptr == ASE_ASE_NULL)
if (rptr == ASE_NULL)
{
(*env)->ReleaseStringChars (env, index, ptr);
goto nomem;
@ -2450,7 +2450,7 @@ JNIEXPORT jobject JNICALL Java_ase_awk_Argument_getindexed (JNIEnv* env, jobject
(*env)->ReleaseStringChars (env, index, ptr);
/* the key is not found. it is not an error. val is just nil */
if (pair == ASE_ASE_NULL) return ASE_ASE_NULL;;
if (pair == ASE_NULL) return ASE_NULL;;
arg = (*env)->NewObject (env,
run_data->argument_class,
@ -2467,7 +2467,15 @@ nomem:
}
THROW_NOMEM_EXCEPTION (env);
return ASE_ASE_NULL;
return ASE_NULL;
}
JNIEXPORT jboolean JNICALL Java_ase_awk_Return_isindexed (JNIEnv* env, jobject obj, jlong runid, jlong valid)
{
ase_awk_run_t* run = (ase_awk_run_t*)runid;
ase_awk_val_t* val = (ase_awk_val_t*)valid;
return (val != ASE_NULL && ASE_AWK_VAL_TYPE(val) == ASE_AWK_VAL_MAP)? JNI_TRUE: JNI_FALSE;
}
JNIEXPORT void JNICALL Java_ase_awk_Return_setintval (JNIEnv* env, jobject obj, jlong runid, jlong valid, jlong newval)
@ -2554,43 +2562,321 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedintval (JNIEnv* env, jobjec
{
ase_awk_run_t* run = (ase_awk_run_t*)runid;
ase_awk_val_t* val = (ase_awk_val_t*)valid;
ase_awk_val_t* nv;
ase_awk_t* awk;
run_data_t* run_data;
int opt;
const jchar* jptr;
ase_char_t* aptr;
jsize len;
awk = ase_awk_getrunawk (run);
run_data = (run_data_t*)ase_awk_getruncustomdata (run);
nv = ase_awk_makeintval (run, newval);
if (nv == ASE_NULL)
opt = ase_awk_getoption (awk);
if ((opt & ASE_AWK_MAPTOVAR) != ASE_AWK_MAPTOVAR)
{
/* refer to run_return in run.c */
ase_awk_setrunerrnum (run, ASE_AWK_EMAPNOTALLOWED);
THROW_RUN_EXCEPTION (env, run);
return;
}
if (val == ASE_NULL || ASE_AWK_VAL_TYPE(val) != ASE_AWK_VAL_MAP)
{
ase_awk_val_t* x;
ase_awk_val_t* x2;
ase_awk_pair_t* pair;
x = ase_awk_makemapval (run);
if (x == ASE_NULL)
{
THROW_RUN_EXCEPTION (env, run);
return;
}
if (val != ASE_NULL)
ase_awk_refupval (run, x);
x2 = ase_awk_makeintval (run, newval);
if (x2 == ASE_NULL)
{
if (ASE_AWK_VAL_TYPE(val) != ASE_AWK_VAL_MAP)
{
map = ase_awk_makemapval (run);
if (map == ASE_NULL)
{
ase_awk_refupval (run, nv);
ase_awk_refdownval (run, nv);
ase_awk_refdownval (run, x);
THROW_RUN_EXCEPTION (env, run);
return;
}
ase_awk_refupval (run, x2);
if (get_str(env,awk,index,&jptr,&aptr,&len) == -1)
{
ase_awk_refdownval (run, x2);
ase_awk_refdownval (run, x);
THROW_NOMEM_EXCEPTION (env);
return;
}
pair = ase_awk_map_put (
((ase_awk_val_map_t*)x)->map, aptr, len, x2);
free_str (env, awk, index, jptr, aptr);
if (pair == ASE_NULL)
{
ase_awk_refdownval (run, x2);
ase_awk_refdownval (run, x);
THROW_RUN_EXCEPTION (env, run);
return;
}
if (val != ASE_NULL) ase_awk_refdownval (run, val);
(*env)->SetLongField (env, obj, run_data->return_valid, (jlong)x);
}
else
{
ase_awk_val_t* x2;
ase_awk_pair_t* pair;
x2 = ase_awk_makeintval (run, newval);
if (x2 == ASE_NULL)
{
THROW_RUN_EXCEPTION (env, run);
return;
}
ase_awk_refupval (run, x2);
if (get_str(env,awk,index,&jptr,&aptr,&len) == -1)
{
ase_awk_refdownval (run, x2);
THROW_NOMEM_EXCEPTION (env);
return;
}
pair = ase_awk_map_put (
((ase_awk_val_map_t*)val)->map, aptr, len, x2);
free_str (env, awk, index, jptr, aptr);
if (pair == ASE_NULL)
{
ase_awk_refdownval (run, x2);
THROW_NOMEM_EXCEPTION (env);
return;
}
}
}
JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedintval (JNIEnv* env, jobject obj, jlong runid, jlong valid, jstring index, jdouble newval)
JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedrealval (JNIEnv* env, jobject obj, jlong runid, jlong valid, jstring index, jdouble newval)
{
ase_awk_run_t* run = (ase_awk_run_t*)runid;
ase_awk_val_t* val = (ase_awk_val_t*)valid;
ase_awk_t* awk;
run_data_t* run_data;
int opt;
const jchar* jptr;
ase_char_t* aptr;
jsize len;
awk = ase_awk_getrunawk (run);
run_data = (run_data_t*)ase_awk_getruncustomdata (run);
opt = ase_awk_getoption (awk);
if ((opt & ASE_AWK_MAPTOVAR) != ASE_AWK_MAPTOVAR)
{
/* refer to run_return in run.c */
ase_awk_setrunerrnum (run, ASE_AWK_EMAPNOTALLOWED);
THROW_RUN_EXCEPTION (env, run);
return;
}
if (val == ASE_NULL || ASE_AWK_VAL_TYPE(val) != ASE_AWK_VAL_MAP)
{
ase_awk_val_t* x;
ase_awk_val_t* x2;
ase_awk_pair_t* pair;
x = ase_awk_makemapval (run);
if (x == ASE_NULL)
{
THROW_RUN_EXCEPTION (env, run);
return;
}
ase_awk_refupval (run, x);
x2 = ase_awk_makerealval (run, newval);
if (x2 == ASE_NULL)
{
ase_awk_refdownval (run, x);
THROW_RUN_EXCEPTION (env, run);
return;
}
ase_awk_refupval (run, x2);
if (get_str(env,awk,index,&jptr,&aptr,&len) == -1)
{
ase_awk_refdownval (run, x2);
ase_awk_refdownval (run, x);
THROW_NOMEM_EXCEPTION (env);
return;
}
pair = ase_awk_map_put (
((ase_awk_val_map_t*)x)->map, aptr, len, x2);
free_str (env, awk, index, jptr, aptr);
if (pair == ASE_NULL)
{
ase_awk_refdownval (run, x2);
ase_awk_refdownval (run, x);
THROW_RUN_EXCEPTION (env, run);
return;
}
if (val != ASE_NULL) ase_awk_refdownval (run, val);
(*env)->SetLongField (env, obj, run_data->return_valid, (jlong)x);
}
else
{
ase_awk_val_t* x2;
ase_awk_pair_t* pair;
x2 = ase_awk_makerealval (run, newval);
if (x2 == ASE_NULL)
{
THROW_RUN_EXCEPTION (env, run);
return;
}
ase_awk_refupval (run, x2);
if (get_str(env,awk,index,&jptr,&aptr,&len) == -1)
{
ase_awk_refdownval (run, x2);
THROW_NOMEM_EXCEPTION (env);
return;
}
pair = ase_awk_map_put (
((ase_awk_val_map_t*)val)->map, aptr, len, x2);
free_str (env, awk, index, jptr, aptr);
if (pair == ASE_NULL)
{
ase_awk_refdownval (run, x2);
THROW_NOMEM_EXCEPTION (env);
return;
}
}
}
JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedintval (JNIEnv* env, jobject obj, jlong runid, jlong valid, jstring index, jstring newval)
JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedstrval (JNIEnv* env, jobject obj, jlong runid, jlong valid, jstring index, jstring newval)
{
ase_awk_run_t* run = (ase_awk_run_t*)runid;
ase_awk_val_t* val = (ase_awk_val_t*)valid;
ase_awk_t* awk;
run_data_t* run_data;
int opt;
const jchar* jptr;
ase_char_t* aptr;
jsize len;
awk = ase_awk_getrunawk (run);
run_data = (run_data_t*)ase_awk_getruncustomdata (run);
opt = ase_awk_getoption (awk);
if ((opt & ASE_AWK_MAPTOVAR) != ASE_AWK_MAPTOVAR)
{
/* refer to run_return in run.c */
ase_awk_setrunerrnum (run, ASE_AWK_EMAPNOTALLOWED);
THROW_RUN_EXCEPTION (env, run);
return;
}
if (val == ASE_NULL || ASE_AWK_VAL_TYPE(val) != ASE_AWK_VAL_MAP)
{
ase_awk_val_t* x;
ase_awk_val_t* x2;
ase_awk_pair_t* pair;
x = ase_awk_makemapval (run);
if (x == ASE_NULL)
{
THROW_RUN_EXCEPTION (env, run);
return;
}
ase_awk_refupval (run, x);
if (get_str(env,awk,newval,&jptr,&aptr,&len) == -1)
{
ase_awk_refdownval (run, x);
THROW_NOMEM_EXCEPTION (env);
return;
}
x2 = ase_awk_makestrval (run, aptr, len);
free_str (env, awk, index, jptr, aptr);
if (x2 == ASE_NULL)
{
ase_awk_refdownval (run, x);
THROW_RUN_EXCEPTION (env, run);
return;
}
ase_awk_refupval (run, x2);
if (get_str(env,awk,index,&jptr,&aptr,&len) == -1)
{
ase_awk_refdownval (run, x2);
ase_awk_refdownval (run, x);
THROW_NOMEM_EXCEPTION (env);
return;
}
pair = ase_awk_map_put (
((ase_awk_val_map_t*)x)->map, aptr, len, x2);
free_str (env, awk, index, jptr, aptr);
if (pair == ASE_NULL)
{
ase_awk_refdownval (run, x2);
ase_awk_refdownval (run, x);
THROW_RUN_EXCEPTION (env, run);
return;
}
if (val != ASE_NULL) ase_awk_refdownval (run, val);
(*env)->SetLongField (env, obj, run_data->return_valid, (jlong)x);
}
else
{
ase_awk_val_t* x2;
ase_awk_pair_t* pair;
if (get_str(env,awk,newval,&jptr,&aptr,&len) == -1)
{
THROW_NOMEM_EXCEPTION (env);
return;
}
x2 = ase_awk_makestrval (run, aptr, len);
free_str (env, awk, index, jptr, aptr);
if (x2 == ASE_NULL)
{
THROW_RUN_EXCEPTION (env, run);
return;
}
ase_awk_refupval (run, x2);
if (get_str(env,awk,index,&jptr,&aptr,&len) == -1)
{
ase_awk_refdownval (run, x2);
THROW_NOMEM_EXCEPTION (env);
return;
}
pair = ase_awk_map_put (
((ase_awk_val_map_t*)val)->map, aptr, len, x2);
free_str (env, awk, index, jptr, aptr);
if (pair == ASE_NULL)
{
ase_awk_refdownval (run, x2);
THROW_NOMEM_EXCEPTION (env);
return;
}
}
}

View File

@ -26,7 +26,11 @@ EXPORTS
Java_ase_awk_Argument_getstrval
Java_ase_awk_Argument_isindexed
Java_ase_awk_Argument_getindexed
Java_ase_awk_Return_isindexed
Java_ase_awk_Return_setintval
Java_ase_awk_Return_setrealval
Java_ase_awk_Return_setstrval
Java_ase_awk_Return_setindexedintval
Java_ase_awk_Return_setindexedrealval
Java_ase_awk_Return_setindexedstrval
Java_ase_awk_Return_clearval

View File

@ -1,5 +1,5 @@
/*
* $Id: jni.h,v 1.14 2007/10/24 04:58:35 bacon Exp $
* $Id: jni.h,v 1.15 2007/10/24 14:17:32 bacon Exp $
*
* {License}
*/
@ -67,9 +67,13 @@ JNIEXPORT jstring JNICALL Java_ase_awk_Argument_getstrval (JNIEnv* env, jobject
JNIEXPORT jboolean JNICALL Java_ase_awk_Argument_isindexed (JNIEnv* env, jobject obj, jlong runid, jlong valid);
JNIEXPORT jobject JNICALL Java_ase_awk_Argument_getindexed (JNIEnv* env, jobject obj, jlong runid, jlong valid, jstring index);
JNIEXPORT jboolean JNICALL Java_ase_awk_Return_isindexed (JNIEnv* env, jobject obj, jlong runid, jlong valid);
JNIEXPORT void JNICALL Java_ase_awk_Return_setintval (JNIEnv* env, jobject obj, jlong runid, jlong valid, jlong newval);
JNIEXPORT void JNICALL Java_ase_awk_Return_setrealval (JNIEnv* env, jobject obj, jlong runid, jlong valid, jdouble newval);
JNIEXPORT void JNICALL Java_ase_awk_Return_setstrval (JNIEnv* env, jobject obj, jlong runid, jlong valid, jstring newval);
JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedintval (JNIEnv* env, jobject obj, jlong runid, jlong valid, jstring index, jlong newval);
JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedrealval (JNIEnv* env, jobject obj, jlong runid, jlong valid, jstring index, jdouble newval);
JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedstrval (JNIEnv* env, jobject obj, jlong runid, jlong valid, jstring index, jstring newval);
JNIEXPORT void JNICALL Java_ase_awk_Return_clearval (JNIEnv* env, jobject obj, jlong runid, jlong valid);
#ifdef __cplusplus

View File

@ -1,5 +1,5 @@
/*
* $Id: parse.c,v 1.20 2007/10/10 07:03:56 bacon Exp $
* $Id: parse.c,v 1.22 2007/10/24 14:17:32 bacon Exp $
*
* {License}
*/
@ -3027,6 +3027,26 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
}
/* search the global variable list */
// TODO soemthing for setword
//ase_awk_pair_t* pair;
//const ase_char_t* k;
//ase_size_t l;
//check if name_dup and name_len is part of gtab....
//if it is so...
//pair = ase_awk_map_get (awk->kwtab, name_dup, name_len);
//if (pair != ASE_NULL)
//{
/* found in the customized word table */
// k = ((ase_cstr_t*)(pair->val))->ptr;
// l = ((ase_cstr_t*)(pair->val))->len;
//}
//else
//{
// k = name_dup;
// l = name_len;
//}
idxa = ase_awk_tab_rrfind (
&awk->parse.globals, 0, name_dup, name_len);
if (idxa != (ase_size_t)-1)
@ -3163,6 +3183,7 @@ static ase_awk_nde_t* parse_hashidx (
/* search the global variable list */
idxa = ase_awk_tab_rrfind(&awk->parse.globals, 0, name, name_len);
// TODO soemthing for setword
if (idxa != (ase_size_t)-1)
{
nde->type = ASE_AWK_NDE_GLOBALIDX;

View File

@ -1,5 +1,5 @@
/*
* $Id: AseAwkPanel.java,v 1.8 2007/10/24 03:46:51 bacon Exp $
* $Id: AseAwkPanel.java,v 1.10 2007/10/24 14:17:32 bacon Exp $
*/
import java.awt.*;
@ -92,13 +92,24 @@ public class AseAwkPanel extends Panel
this.awkPanel = awkPanel;
addFunction ("sleep", 1, 1);
setWord ("sin", "cain");
setWord ("length", "len");
setWord ("OFMT", "ofmt");
setOption (getOption() | StdAwk.OPTION_MAPTOVAR);
}
public void sleep (Context ctx, String name, Return ret, Argument[] args)
{
try { Thread.sleep (args[0].getIntValue() * 1000); }
catch (InterruptedException e) {}
ret.setIntValue (0);
//ret.setIntValue (0);
//
ret.setIndexedRealValue (1, 111.23);
ret.setIndexedStringValue (2, "kdk2kd");
ret.setIndexedStringValue (3, "3dk3kd");
ret.setIndexedIntValue (4, 444);
ret.setIndexedIntValue (5, 55555);
}
protected int openSource (int mode)