Recovered from cvs revision 2007-06-25 10:17:00

This commit is contained in:
2007-06-25 23:15:00 +00:00
parent 91fbbedd06
commit d9bd6587a4
5 changed files with 168 additions and 15 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: Awk.java,v 1.10 2007/05/26 10:52:48 bacon Exp $
* $Id: Awk.java,v 1.11 2007/06/24 11:14:58 bacon Exp $
*
* {License}
*/
@ -75,6 +75,8 @@ public abstract class Awk
private native boolean getdebug ();
private native void setdebug (boolean debug);
private native void setword (String ow, String nw);
private native void addbfn (
String name, int min_args, int max_args) throws Exception;
private native void delbfn (String name) throws Exception;
@ -256,6 +258,11 @@ public abstract class Awk
setdebug (debug);
}
public void setWord (String ow, String nw)
{
setword (ow, nw);
}
/* == source code management == */
protected abstract int openSource (int mode);
protected abstract int closeSource (int mode);

View File

@ -1,5 +1,5 @@
/*
* $Id: jni.c,v 1.10 2007/05/25 14:41:48 bacon Exp $
* $Id: jni.c,v 1.11 2007/06/24 11:14:58 bacon Exp $
*
* {License}
*/
@ -2009,6 +2009,119 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setdebug (
((awk_data_t*)ase_awk_getcustomdata(awk))->debug = debug;
}
JNIEXPORT void JNICALL Java_ase_awk_Awk_setword (
JNIEnv* env, jobject obj, jstring ow, jstring nw)
{
jclass class;
jfieldID handle;
ase_awk_t* awk;
const jchar* op, * np;
jsize ol, nl;
ase_char_t* ox, * nx;
jint r;
class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
(*env)->DeleteLocalRef (env, class);
if (handle == NULL)
{
/* internal error. no handle field
* NoSuchFieldError, ExceptionInitializerError,
* OutOfMemoryError might occur */
return;
}
awk = (ase_awk_t*) (*env)->GetLongField (env, obj, handle);
ol = (*env)->GetStringLength (env, ow);
op = (*env)->GetStringChars (env, ow, JNI_FALSE);
if (op == NULL)
{
(*env)->ExceptionClear (env);
throw_exception (
env,
ase_awk_geterrstr(ASE_NULL, ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return;
}
nl = (*env)->GetStringLength (env, nw);
np = (*env)->GetStringChars (env, nw, JNI_FALSE);
if (np == NULL)
{
(*env)->ReleaseStringChars (env, ow, op);
(*env)->ExceptionClear (env);
throw_exception (
env,
ase_awk_geterrstr(ASE_NULL, ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return;
}
if (ol > 0 && ASE_SIZEOF(jchar) != ASE_SIZEOF(ase_char_t))
{
ase_size_t i;
ox = (ase_char_t*)malloc (ASE_SIZEOF(ase_char_t)*ol);
if (ox == ASE_NULL)
{
(*env)->ReleaseStringChars (env, nw, np);
(*env)->ReleaseStringChars (env, ow, op);
throw_exception (
env,
ase_awk_geterrstr(ASE_NULL, ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return;
}
for (i = 0; i < ol; i++) ox[i] = (ase_char_t)op[i];
}
else ox = (ase_char_t*)op;
if (nl > 0 && ASE_SIZEOF(jchar) != ASE_SIZEOF(ase_char_t))
{
ase_size_t i;
nx = (ase_char_t*) malloc (ASE_SIZEOF(ase_char_t)*nl);
if (nx == ASE_NULL)
{
if (ox != (ase_char_t*)op) free (ox);
(*env)->ReleaseStringChars (env, nw, np);
(*env)->ReleaseStringChars (env, ow, op);
throw_exception (
env,
ase_awk_geterrstr(ASE_NULL, ASE_AWK_ENOMEM),
ASE_AWK_ENOMEM,
0);
return;
}
for (i = 0; i < nl; i++) nx[i] = (ase_char_t)np[i];
}
else nx = (ase_char_t*)np;
r = ase_awk_setword (awk, ox, ol, nx, nl);
if (nx != (ase_char_t*)np) free (nx);
if (ox != (ase_char_t*)op) free (ox);
(*env)->ReleaseStringChars (env, nw, np);
(*env)->ReleaseStringChars (env, ow, op);
if (r == -1)
{
throw_exception (
env,
ase_awk_geterrmsg(awk),
ase_awk_geterrnum(awk),
ase_awk_geterrlin(awk));
}
}
JNIEXPORT void JNICALL Java_ase_awk_Awk_setfilename (
JNIEnv* env, jobject obj, jlong runid, jstring name)
{
@ -2506,6 +2619,8 @@ JNIEXPORT jint JNICALL Java_ase_awk_Awk_system (
for (i = 0; i < len; i++) tmp[i] = (ase_char_t)ptr[i];
tmp[i] = ASE_T('\0');
(*env)->ReleaseStringChars (env, cmd, ptr);
#ifdef _WIN32
ret = _tsystem(tmp);
#else

View File

@ -1,5 +1,5 @@
/*
* $Id: jni.h,v 1.3 2007/04/30 05:47:33 bacon Exp $
* $Id: jni.h,v 1.4 2007/06/24 11:14:58 bacon Exp $
*
* {License}
*/
@ -43,6 +43,9 @@ JNIEXPORT jboolean JNICALL Java_ase_awk_Awk_getdebug (
JNIEXPORT void JNICALL Java_ase_awk_Awk_setdebug (
JNIEnv* env, jobject obj, jboolean debug);
JNIEXPORT void JNICALL Java_ase_awk_Awk_setword (
JNIEnv* env, jobject obj, jstring ow, jstring nw);
JNIEXPORT void JNICALL Java_ase_awk_Awk_setfilename (
JNIEnv* env, jobject obj, jlong runid, jstring name);
JNIEXPORT void JNICALL Java_ase_awk_Awk_setofilename (
@ -53,6 +56,13 @@ JNIEXPORT jobject JNICALL Java_ase_awk_Awk_strtonum (
JNIEXPORT jstring JNICALL Java_ase_awk_Awk_valtostr (
JNIEnv* env, jobject obj, jlong runid, jobject val);
JNIEXPORT jstring JNICALL Java_ase_awk_Awk_strftime (
JNIEnv* env, jobject obj, jstring fmt, jlong sec);
JNIEXPORT jstring JNICALL Java_ase_awk_Awk_strfgmtime (
JNIEnv* env, jobject obj, jstring fmt, jlong sec);
JNIEXPORT jint JNICALL Java_ase_awk_Awk_system (
JNIEnv* env, jobject obj, jstring cmd);
#ifdef __cplusplus
}
#endif