*** empty log message ***

This commit is contained in:
hyung-hwan 2007-01-28 11:12:30 +00:00
parent 231b4bd5d6
commit b5a1de919c
5 changed files with 177 additions and 11 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: jni.c,v 1.57 2007-01-27 02:55:55 bacon Exp $
* $Id: jni.c,v 1.58 2007-01-28 11:12:29 bacon Exp $
*/
#include <stdio.h>
@ -1930,9 +1930,163 @@ JNIEXPORT jobject JNICALL Java_ase_awk_Awk_strtonum (
JNIEXPORT jstring JNICALL Java_ase_awk_Awk_valtostr (
JNIEnv* env, jobject obj, jlong runid)
JNIEnv* env, jobject obj, jlong runid, jobject val)
{
// TODO: ...
ase_awk_run_t* run = (ase_awk_run_t*)runid;
run_data_t* run_data;
jstring ret;
ase_awk_val_t* v;
ase_char_t* str;
ase_size_t len;
ase_awk_t* awk;
awk = ase_awk_getrunawk (run);
if (val == NULL)
{
ret = (*env)->NewString (env, NULL, 0);
if (ret == NULL)
{
(*env)->ExceptionClear (env);
throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
}
return ret;
}
run_data = ase_awk_getruncustomdata (run);
if ((*env)->IsInstanceOf (env, val, run_data->string_class))
{
const jchar* ptr;
len = (*env)->GetStringLength (env, val);
ptr = (*env)->GetStringChars (env, val, JNI_FALSE);
if (ptr == NULL)
{
(*env)->ExceptionClear (env);
throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return NULL;
}
ret = (*env)->NewString (env, ptr, len);
(*env)->ReleaseStringChars (env, ret, ptr);
return ret;
}
if ((*env)->IsInstanceOf (env, val, run_data->integer_class))
{
jint jv;
jv = (*env)->CallIntMethod (
env, val, run_data->integer_value);
v = ase_awk_makeintval (run, jv);
}
else if ((*env)->IsInstanceOf (env, val, run_data->long_class))
{
jlong jv = (*env)->CallLongMethod (
env, val, run_data->long_value);
v = ase_awk_makeintval (run, jv);
}
else if ((*env)->IsInstanceOf (env, val, run_data->short_class))
{
jshort jv = (*env)->CallShortMethod (
env, val, run_data->short_value);
v = ase_awk_makeintval (run, jv);
}
else if ((*env)->IsInstanceOf (env, val, run_data->float_class))
{
jfloat jv = (*env)->CallFloatMethod (
env, val, run_data->float_value);
v = ase_awk_makerealval (run, jv);
}
else if ((*env)->IsInstanceOf (env, val, run_data->double_class))
{
jdouble jv = (*env)->CallDoubleMethod (
env, val, run_data->double_value);
v = ase_awk_makerealval (run, jv);
}
else
{
throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_EVALTYPE),
ASE_AWK_EVALTYPE,
0);
return NULL;
}
if (v == NULL)
{
throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return NULL;
}
ase_awk_refupval (run, v);
str = ase_awk_valtostr (run, v, ASE_AWK_VALTOSTR_CLEAR, NULL, &len);
ase_awk_refdownval (run, v);
if (str == NULL)
{
throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return NULL;
}
if (ASE_SIZEOF(jchar) != ASE_SIZEOF(ase_char_t))
{
ase_size_t i;
jchar* tmp = (jchar*) malloc (ASE_SIZEOF(jchar)*len);
if (tmp == NULL)
{
ase_awk_free (awk, str);
throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return NULL;
}
for (i = 0; i < len; i++) tmp[i] = (jchar)str[i];
ret = (*env)->NewString (env, tmp, len);
free (tmp);
}
else
{
ret = (*env)->NewString (env, str, len);
}
ase_awk_free (awk, str);
if (ret == NULL)
{
(*env)->ExceptionClear (env);
throw_exception (
env,
ase_awk_geterrstr(ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
}
return ret;
}

View File

@ -1,13 +1,24 @@
LIBRARY "aseawk.dll"
LIBRARY "aseawk_jni.dll"
EXPORTS
Java_ase_awk_Awk_open
Java_ase_awk_Awk_close
Java_ase_awk_Awk_parse
Java_ase_awk_Awk_run
Java_ase_awk_Awk_getmaxdepth
Java_ase_awk_Awk_setmaxdepth
Java_ase_awk_Awk_getoption
Java_ase_awk_Awk_setoption
Java_ase_awk_Awk_getdebug
Java_ase_awk_Awk_setdebug
Java_ase_awk_Awk_addbfn
Java_ase_awk_Awk_delbfn
Java_ase_awk_Awk_setfilename
Java_ase_awk_Awk_setofilename
Java_ase_awk_Awk_strtonum
Java_ase_awk_Awk_valtostr

View File

@ -1,5 +1,5 @@
/*
* $Id: jni.h,v 1.17 2007-01-25 14:10:03 bacon Exp $
* $Id: jni.h,v 1.18 2007-01-28 11:12:30 bacon Exp $
*/
#ifndef _ASE_AWK_JNI_H_
@ -44,7 +44,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setofilename (
JNIEXPORT jobject JNICALL Java_ase_awk_Awk_strtonum (
JNIEnv* env, jobject obj, jlong runid, jstring str);
JNIEXPORT jstring JNICALL Java_ase_awk_Awk_valtostr (
JNIEnv* env, jobject obj, jlong runid);
JNIEnv* env, jobject obj, jlong runid, jobject val);
#ifdef __cplusplus
}

View File

@ -10,8 +10,8 @@ JNI_OBJS = $(JNI_SRCS:.c=.obj)
JAVA_OBJS = $(JAVA_SRCS:.java=.class)
JNI_INC = \
/I"C:\Program Files\Java\jdk1.5.0_09\include" \
/I"C:\Program Files\Java\jdk1.5.0_09\include\win32"
/I"$(JAVA_HOME)/include" \
/I"$(JAVA_HOME)/include\win32"
CC = cl
LD = link

View File

@ -1,5 +1,5 @@
/*
* $Id: val.c,v 1.103 2007-01-16 14:20:42 bacon Exp $
* $Id: val.c,v 1.104 2007-01-28 11:12:30 bacon Exp $
*/
#include <ase/awk/awk_i.h>
@ -461,10 +461,11 @@ ase_char_t* ase_awk_valtostr (
run, vs->buf, vs->len, opt, buf, len);
}
/* TODO: process more value types */
#ifdef _DEBUG
run->awk->sysfns.dprintf (
ASE_T("ERROR: WRONG VALUE TYPE [%d] in ase_awk_valtostr\n"),
v->type);
#endif
ase_awk_setrunerror (run, ASE_AWK_EVALTYPE, 0, ASE_NULL);
return ASE_NULL;