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

This commit is contained in:
hyung-hwan 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

View File

@ -2,12 +2,15 @@
* added ase_awk_setword to enable customization of keywords and
intrinsic function names.
* added setWord method to the awk c++ class.
* added setErrorString method to the awk c++ class.
* added setWord method to the awk c++ class (awk/Awk.cpp)
* added setErrorString method to the awk c++ class (awk/Awk.cpp)
* added setWord method to the awk java class (awk/Awk.java)
* changed the wrong macro name WIN32 to _WIN32 in utl/stdio.h
* changed test/awk/Awk.cpp to include an option(-w) to utilize
the setWord method.
* changed test/awk/AseAwk.java to include an option(-w) to utilize
the setWord method.
[0.2.0]

View File

@ -1,5 +1,5 @@
/*
* $Id: AseAwk.java,v 1.8 2007/05/28 10:29:57 bacon Exp $
* $Id: AseAwk.java,v 1.9 2007/06/24 11:14:58 bacon Exp $
*/
import java.awt.*;
@ -53,15 +53,18 @@ public class AseAwk extends StdAwk
System.out.print ("Usage: ");
System.out.print (AseAwk.class.getName());
System.out.println (" [-m main] [-si file]? [-so file]? [-ci file]* [-co file]* [-a arg]*");
System.out.println (" -m main Specify the main function name\n");
System.out.println (" -si file Specify the input source file\n");
System.out.println (" The source code is read from stdin when it is not specified\n");
System.out.println (" -so file Specify the output source file\n");
System.out.println (" The deparsed code is not output when is it not specified\n");
System.out.println (" -ci file Specify the input console file\n");
System.out.println (" -co file Specify the output console file\n");
System.out.println (" -a str Specify an argument\n");
System.out.println (" [-m main] [-si file]? [-so file]? [-ci file]* [-co file]* [-a arg]* [-w o:n]*");
System.out.println (" -m main Specify the main function name");
System.out.println (" -si file Specify the input source file");
System.out.println (" The source code is read from stdin when it is not specified");
System.out.println (" -so file Specify the output source file");
System.out.println (" The deparsed code is not output when is it not specified");
System.out.println (" -ci file Specify the input console file");
System.out.println (" -co file Specify the output console file");
System.out.println (" -a str Specify an argument");
System.out.println (" -w o:n Specify an old and new word pair");
System.out.println (" o - an original word");
System.out.println (" n - the new word to replace the original word");
}
private static void print_error (String msg)
@ -143,6 +146,7 @@ public class AseAwk extends StdAwk
else if (arg.equals("-co")) mode = 4;
else if (arg.equals("-a")) mode = 5;
else if (arg.equals("-m")) mode = 6;
else if (arg.equals("-w")) mode = 7;
else
{
print_usage ();
@ -207,6 +211,20 @@ public class AseAwk extends StdAwk
mainfn = arg;
mode = 0;
}
else if (mode == 7)
{
int idx = arg.indexOf(':');
if (idx == -1)
{
print_usage ();
return;
}
String ow = arg.substring (0, idx);
String nw = arg.substring (idx+1);
awk.setWord (ow, nw);
mode = 0;
}
}
}