*** empty log message ***

This commit is contained in:
hyung-hwan 2007-01-25 14:14:56 +00:00
parent 99bb5ee025
commit e407a0b1fb
14 changed files with 425 additions and 79 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.java,v 1.21 2007-01-24 14:21:29 bacon Exp $ * $Id: Awk.java,v 1.22 2007-01-25 14:10:02 bacon Exp $
*/ */
package ase.awk; package ase.awk;
@ -22,6 +22,22 @@ public abstract class Awk
public static final int DEPTH_REX_BUILD = (1 << 4); public static final int DEPTH_REX_BUILD = (1 << 4);
public static final int DEPTH_REX_MATCH = (1 << 5); public static final int DEPTH_REX_MATCH = (1 << 5);
// options
public static final int OPTION_IMPLICIT = (1 << 0);
public static final int OPTION_EXPLICIT = (1 << 1);
public static final int OPTION_UNIQUEFN = (1 << 2);
public static final int OPTION_SHADING = (1 << 3);
public static final int OPTION_SHIFT = (1 << 4);
public static final int OPTION_IDIV = (1 << 5);
public static final int OPTION_STRCONCAT = (1 << 6);
public static final int OPTION_EXTIO = (1 << 7);
public static final int OPTION_COPROC = (1 << 8);
public static final int OPTION_BLOCKLESS = (1 << 9);
public static final int OPTION_STRBASEONE = (1 << 10);
public static final int OPTION_STRIPSPACES = (1 << 11);
public static final int OPTION_NEXTOFILE = (1 << 12);
public static final int OPTION_CRLF = (1 << 13);
static static
{ {
/* /*
@ -53,6 +69,8 @@ public abstract class Awk
public Awk () throws Exception public Awk () throws Exception
{ {
this.handle = 0;
open (); open ();
} }
@ -72,6 +90,12 @@ public abstract class Awk
private native int getmaxdepth (int id); private native int getmaxdepth (int id);
private native void setmaxdepth (int id, int depth); private native void setmaxdepth (int id, int depth);
private native int getoption ();
private native void setoption (int opt);
private native boolean getdebug ();
private native void setdebug (boolean debug);
private native void addbfn ( private native void addbfn (
String name, int min_args, int max_args) throws Exception; String name, int min_args, int max_args) throws Exception;
private native void delbfn (String name) throws Exception; private native void delbfn (String name) throws Exception;
@ -83,7 +107,8 @@ public abstract class Awk
private native Object strtonum ( private native Object strtonum (
long runid, String str) throws Exception; long runid, String str) throws Exception;
private native String valtostr (long runid, Object obj); private native String valtostr (
long runid, Object obj) throws Exception;
/* == builtin functions == */ /* == builtin functions == */
public void addBuiltinFunction ( public void addBuiltinFunction (
@ -210,6 +235,28 @@ public abstract class Awk
setmaxdepth (ids, depth); setmaxdepth (ids, depth);
} }
/* == option == */
public int getOption ()
{
return getoption ();
}
public void setOption (int opt)
{
setoption (opt);
}
/* == debug == */
public boolean getDebug ()
{
return getdebug ();
}
public void setDebug (boolean debug)
{
setdebug (debug);
}
/* == source code management == */ /* == source code management == */
protected abstract int openSource (int mode); protected abstract int openSource (int mode);
protected abstract int closeSource (int mode); protected abstract int closeSource (int mode);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: StdAwk.java,v 1.12 2007-01-24 14:21:29 bacon Exp $ * $Id: StdAwk.java,v 1.13 2007-01-25 14:10:03 bacon Exp $
*/ */
package ase.awk; package ase.awk;
@ -801,7 +801,6 @@ public abstract class StdAwk extends Awk
return new Long (n); return new Long (n);
} }
/* == utility functions == */ /* == utility functions == */
private Process popen (String command) throws IOException private Process popen (String command) throws IOException
{ {

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.c,v 1.104 2007-01-07 07:30:39 bacon Exp $ * $Id: awk.c,v 1.105 2007-01-25 14:10:03 bacon Exp $
*/ */
#if defined(__BORLANDC__) #if defined(__BORLANDC__)
@ -11,7 +11,8 @@
static void __free_afn (void* awk, void* afn); static void __free_afn (void* awk, void* afn);
ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns, int* errnum) ase_awk_t* ase_awk_open (
const ase_awk_sysfns_t* sysfns, void* custom_data, int* errnum)
{ {
ase_awk_t* awk; ase_awk_t* awk;
@ -157,6 +158,7 @@ ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns, int* errnum)
awk->run.count = 0; awk->run.count = 0;
awk->run.ptr = ASE_NULL; awk->run.ptr = ASE_NULL;
awk->custom_data = custom_data;
return awk; return awk;
} }
@ -263,3 +265,7 @@ void ase_awk_setoption (ase_awk_t* awk, int opt)
awk->option = opt; awk->option = opt;
} }
void* ase_awk_getcustomdata (ase_awk_t* awk)
{
return awk->custom_data;
}

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.h,v 1.184 2007-01-21 13:21:14 bacon Exp $ * $Id: awk.h,v 1.185 2007-01-25 14:10:03 bacon Exp $
*/ */
#ifndef _ASE_AWK_AWK_H_ #ifndef _ASE_AWK_AWK_H_
@ -187,7 +187,7 @@ enum
ASE_AWK_BLOCKLESS = (1 << 9), ASE_AWK_BLOCKLESS = (1 << 9),
/* use 1 as the start index for string operations */ /* use 1 as the start index for string operations */
ASE_AWK_STRIDXONE = (1 << 10), ASE_AWK_STRBASEONE = (1 << 10),
/* strip off leading and trailing spaces when splitting a record /* strip off leading and trailing spaces when splitting a record
* into fields with a regular expression. * into fields with a regular expression.
@ -401,10 +401,12 @@ enum
extern "C" { extern "C" {
#endif #endif
ase_awk_t* ase_awk_open (const ase_awk_sysfns_t* sysfns, int* errnum); ase_awk_t* ase_awk_open (
const ase_awk_sysfns_t* sysfns, void* custom_data, int* errnum);
int ase_awk_close (ase_awk_t* awk); int ase_awk_close (ase_awk_t* awk);
int ase_awk_clear (ase_awk_t* awk); int ase_awk_clear (ase_awk_t* awk);
void* ase_awk_getcustomdata (ase_awk_t* awk);
int ase_awk_geterrnum (ase_awk_t* awk); int ase_awk_geterrnum (ase_awk_t* awk);
ase_size_t ase_awk_geterrlin (ase_awk_t* awk); ase_size_t ase_awk_geterrlin (ase_awk_t* awk);
const ase_char_t* ase_awk_geterrmsg (ase_awk_t* awk); const ase_char_t* ase_awk_geterrmsg (ase_awk_t* awk);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk_i.h,v 1.97 2007-01-06 15:45:50 bacon Exp $ * $Id: awk_i.h,v 1.98 2007-01-25 14:10:03 bacon Exp $
*/ */
#ifndef _ASE_AWK_AWKI_H_ #ifndef _ASE_AWK_AWKI_H_
@ -97,6 +97,7 @@ struct ase_awk_tree_t
struct ase_awk_t struct ase_awk_t
{ {
ase_awk_sysfns_t sysfns; ase_awk_sysfns_t sysfns;
void* custom_data;
/* options */ /* options */
int option; int option;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: func.c,v 1.90 2007-01-17 03:45:59 bacon Exp $ * $Id: func.c,v 1.91 2007-01-25 14:10:03 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -411,7 +411,7 @@ static int __bfn_index (
ptr = ase_awk_strxnstr (str0, len0, str1, len1); ptr = ase_awk_strxnstr (str0, len0, str1, len1);
idx = (ptr == ASE_NULL)? -1: (ase_long_t)(ptr - str0); idx = (ptr == ASE_NULL)? -1: (ase_long_t)(ptr - str0);
if (ase_awk_getoption(run->awk) & ASE_AWK_STRIDXONE) idx = idx + 1; if (ase_awk_getoption(run->awk) & ASE_AWK_STRBASEONE) idx = idx + 1;
if (a0->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, str0); if (a0->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, str0);
if (a1->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, str1); if (a1->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, str1);
@ -513,7 +513,7 @@ static int __bfn_substr (
if (n == 1) lcount = (ase_long_t)rcount; if (n == 1) lcount = (ase_long_t)rcount;
} }
if (ase_awk_getoption(run->awk) & ASE_AWK_STRIDXONE) lindex = lindex - 1; if (ase_awk_getoption(run->awk) & ASE_AWK_STRBASEONE) lindex = lindex - 1;
if (lindex >= len) lindex = len; if (lindex >= len) lindex = len;
else if (lindex < 0) lindex = 0; else if (lindex < 0) lindex = 0;
@ -687,7 +687,7 @@ static int __bfn_split (
ase_awk_refupval (run, *a1_ref); ase_awk_refupval (run, *a1_ref);
p = str; str_left = str_len; p = str; str_left = str_len;
sta = (ase_awk_getoption(run->awk) & ASE_AWK_STRIDXONE)? 1: 0; sta = (ase_awk_getoption(run->awk) & ASE_AWK_STRBASEONE)? 1: 0;
num = sta; num = sta;
while (p != ASE_NULL) while (p != ASE_NULL)
@ -1243,7 +1243,7 @@ static int __bfn_match (
if (n == -1) return -1; if (n == -1) return -1;
idx = (n == 0)? -1: (ase_long_t)(mat_ptr - str0); idx = (n == 0)? -1: (ase_long_t)(mat_ptr - str0);
if (ase_awk_getoption(run->awk) & ASE_AWK_STRIDXONE) idx = idx + 1; if (ase_awk_getoption(run->awk) & ASE_AWK_STRBASEONE) idx = idx + 1;
a0 = ase_awk_makeintval (run, idx); a0 = ase_awk_makeintval (run, idx);
if (a0 == ASE_NULL) if (a0 == ASE_NULL)

View File

@ -1,5 +1,5 @@
/* /*
* $Id: jni.c,v 1.53 2007-01-24 14:21:29 bacon Exp $ * $Id: jni.c,v 1.54 2007-01-25 14:10:03 bacon Exp $
*/ */
#include <stdio.h> #include <stdio.h>
@ -49,10 +49,16 @@ static ase_ssize_t __write_source (
static ase_ssize_t __process_extio ( static ase_ssize_t __process_extio (
int cmd, void* arg, ase_char_t* data, ase_size_t count); int cmd, void* arg, ase_char_t* data, ase_size_t count);
typedef struct awk_data_t awk_data_t;
typedef struct srcio_data_t srcio_data_t; typedef struct srcio_data_t srcio_data_t;
typedef struct runio_data_t runio_data_t; typedef struct runio_data_t runio_data_t;
typedef struct run_data_t run_data_t; typedef struct run_data_t run_data_t;
struct awk_data_t
{
int debug;
};
struct srcio_data_t struct srcio_data_t
{ {
JNIEnv* env; JNIEnv* env;
@ -242,12 +248,19 @@ static void throw_exception (
(*env)->DeleteLocalRef (env, except_obj); (*env)->DeleteLocalRef (env, except_obj);
} }
static jboolean is_debug (ase_awk_t* awk)
{
awk_data_t* awk_data = (awk_data_t*)ase_awk_getcustomdata (awk);
return awk_data->debug? JNI_TRUE: JNI_FALSE;
}
JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj) JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj)
{ {
jclass class; jclass class;
jfieldID handle; jfieldID handle;
ase_awk_t* awk; ase_awk_t* awk;
ase_awk_sysfns_t sysfns; ase_awk_sysfns_t sysfns;
awk_data_t* awk_data;
int opt, errnum; int opt, errnum;
memset (&sysfns, 0, sizeof(sysfns)); memset (&sysfns, 0, sizeof(sysfns));
@ -277,9 +290,23 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj)
sysfns.dprintf = awk_dprintf; sysfns.dprintf = awk_dprintf;
sysfns.abort = awk_abort; sysfns.abort = awk_abort;
awk = ase_awk_open (&sysfns, &errnum); awk_data = (awk_data_t*)malloc (sizeof(awk_data_t));
if (awk_data == NULL)
{
throw_exception (
env,
ase_awk_geterrstr(errnum),
errnum,
0);
return;
}
memset (awk_data, 0, sizeof(awk_data_t));
awk = ase_awk_open (&sysfns, awk_data, &errnum);
if (awk == NULL) if (awk == NULL)
{ {
free (sysfns.custom_data);
throw_exception ( throw_exception (
env, env,
ase_awk_geterrstr(errnum), ase_awk_geterrstr(errnum),
@ -296,6 +323,9 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj)
/* internal error. no handle field /* internal error. no handle field
* NoSuchFieldError, ExceptionInitializerError, * NoSuchFieldError, ExceptionInitializerError,
* OutOfMemoryError might occur */ * OutOfMemoryError might occur */
ase_awk_close (awk);
free (awk_data);
return; return;
} }
@ -328,8 +358,10 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_close (JNIEnv* env, jobject obj)
if (awk != NULL) if (awk != NULL)
{ {
/* the handle is not NULL. close it */ /* the handle is not NULL. close it */
void* tmp = ase_awk_getcustomdata (awk);
ase_awk_close (awk); ase_awk_close (awk);
(*env)->SetLongField (env, obj, handle, (jlong)0); (*env)->SetLongField (env, obj, handle, (jlong)0);
free (tmp);
} }
} }
@ -503,22 +535,33 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_run (JNIEnv* env, jobject obj)
static ase_ssize_t __java_open_source (JNIEnv* env, jobject obj, int mode) static ase_ssize_t __java_open_source (JNIEnv* env, jobject obj, int mode)
{ {
jclass class; jclass class;
jfieldID handle;
jmethodID mid; jmethodID mid;
jthrowable thrown;
jint ret; jint ret;
ase_awk_t* awk;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
mid = (*env)->GetMethodID (env, class, "openSource", "(I)I"); mid = (*env)->GetMethodID (env, class, "openSource", "(I)I");
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL)
{
(*env)->ExceptionClear (env);
return -1;
}
awk = (ase_awk_t*)(*env)->GetLongField (env, obj, handle);
if (mid == NULL) if (mid == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
ret = (*env)->CallIntMethod (env, obj, mid, mode); ret = (*env)->CallIntMethod (env, obj, mid, mode);
thrown = (*env)->ExceptionOccurred (env); if ((*env)->ExceptionOccurred (env))
if (thrown)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -529,22 +572,33 @@ static ase_ssize_t __java_open_source (JNIEnv* env, jobject obj, int mode)
static ase_ssize_t __java_close_source (JNIEnv* env, jobject obj, int mode) static ase_ssize_t __java_close_source (JNIEnv* env, jobject obj, int mode)
{ {
jclass class; jclass class;
jfieldID handle;
jmethodID mid; jmethodID mid;
jthrowable thrown;
jint ret; jint ret;
ase_awk_t* awk;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
mid = (*env)->GetMethodID (env, class, "closeSource", "(I)I"); mid = (*env)->GetMethodID (env, class, "closeSource", "(I)I");
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL)
{
(*env)->ExceptionClear (env);
return -1;
}
awk = (ase_awk_t*)(*env)->GetLongField (env, obj, handle);
if (mid == NULL) if (mid == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
ret = (*env)->CallIntMethod (env, obj, mid, mode); ret = (*env)->CallIntMethod (env, obj, mid, mode);
thrown = (*env)->ExceptionOccurred (env); if ((*env)->ExceptionOccurred (env))
if (thrown)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -556,30 +610,43 @@ static ase_ssize_t __java_read_source (
JNIEnv* env, jobject obj, ase_char_t* buf, ase_size_t size) JNIEnv* env, jobject obj, ase_char_t* buf, ase_size_t size)
{ {
jclass class; jclass class;
jfieldID handle;
jmethodID mid; jmethodID mid;
jcharArray array; jcharArray array;
jchar* tmp; jchar* tmp;
jint ret, i; jint ret, i;
jthrowable thrown; ase_awk_t* awk;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
mid = (*env)->GetMethodID (env, class, "readSource", "([CI)I"); mid = (*env)->GetMethodID (env, class, "readSource", "([CI)I");
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL)
{
(*env)->ExceptionClear (env);
return -1;
}
awk = (ase_awk_t*)(*env)->GetLongField (env, obj, handle);
if (mid == NULL) if (mid == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
array = (*env)->NewCharArray (env, size); array = (*env)->NewCharArray (env, size);
if (array == NULL) if (array == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
ret = (*env)->CallIntMethod (env, obj, mid, array, size); ret = (*env)->CallIntMethod (env, obj, mid, array, size);
thrown = (*env)->ExceptionOccurred (env); if ((*env)->ExceptionOccurred (env))
if (thrown)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -596,24 +663,37 @@ static ase_ssize_t __java_write_source (
JNIEnv* env, jobject obj, ase_char_t* buf, ase_size_t size) JNIEnv* env, jobject obj, ase_char_t* buf, ase_size_t size)
{ {
jclass class; jclass class;
jfieldID handle;
jmethodID mid; jmethodID mid;
jcharArray array; jcharArray array;
jchar* tmp; jchar* tmp;
jint ret; jint ret;
jthrowable thrown;
ase_size_t i; ase_size_t i;
ase_awk_t* awk;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
mid = (*env)->GetMethodID (env, class, "writeSource", "([CI)I"); mid = (*env)->GetMethodID (env, class, "writeSource", "([CI)I");
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL)
{
(*env)->ExceptionClear (env);
return -1;
}
awk = (ase_awk_t*)(*env)->GetLongField (env, obj, handle);
if (mid == NULL) if (mid == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
array = (*env)->NewCharArray (env, size); array = (*env)->NewCharArray (env, size);
if (array == NULL) if (array == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
@ -622,10 +702,9 @@ static ase_ssize_t __java_write_source (
(*env)->ReleaseCharArrayElements (env, array, tmp, 0); (*env)->ReleaseCharArrayElements (env, array, tmp, 0);
ret = (*env)->CallIntMethod (env, obj, mid, array, size); ret = (*env)->CallIntMethod (env, obj, mid, array, size);
thrown = (*env)->ExceptionOccurred (env); if ((*env)->ExceptionOccurred (env))
if (thrown)
{ {
if (awk->debug) (*env)->ExceptionDescribe (env); if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -638,31 +717,51 @@ static ase_ssize_t __java_open_extio (
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio) JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
{ {
jclass class; jclass class;
jfieldID handle;
jmethodID mid; jmethodID mid;
jclass extio_class; jclass extio_class;
jmethodID extio_cons; jmethodID extio_cons;
jobject extio_object; jobject extio_object;
jstring extio_name; jstring extio_name;
jint ret; jint ret;
ase_awk_t* awk;
/* get the method - meth */
class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;)I");
(*env)->DeleteLocalRef (env, class);
if (handle == NULL)
{
(*env)->ExceptionClear (env);
return -1;
}
awk = (ase_awk_t*)(*env)->GetLongField (env, obj, handle);
if (mid == NULL)
{
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1;
}
/* look for extio class */
extio_class = (*env)->FindClass (env, CLASS_EXTIO); extio_class = (*env)->FindClass (env, CLASS_EXTIO);
if (extio_class == NULL) return -1; if (extio_class == NULL)
{
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1;
}
/* get the constructor */ /* get the constructor */
extio_cons = (*env)->GetMethodID ( extio_cons = (*env)->GetMethodID (
env, extio_class, "<init>", "(Ljava/lang/String;IIJ)V"); env, extio_class, "<init>", "(Ljava/lang/String;IIJ)V");
if (extio_cons == NULL) if (extio_cons == NULL)
{ {
(*env)->DeleteLocalRef (env, extio_class); if (is_debug(awk)) (*env)->ExceptionDescribe (env);
return -1; (*env)->ExceptionClear (env);
}
/* get the method - meth */
class = (*env)->GetObjectClass(env, obj);
mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;)I");
(*env)->DeleteLocalRef (env, class);
if (mid == NULL)
{
(*env)->DeleteLocalRef (env, extio_class); (*env)->DeleteLocalRef (env, extio_class);
return -1; return -1;
} }
@ -690,6 +789,8 @@ static ase_ssize_t __java_open_extio (
if (extio_name == NULL) if (extio_name == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
(*env)->DeleteLocalRef (env, extio_class); (*env)->DeleteLocalRef (env, extio_class);
return -1; return -1;
} }
@ -701,6 +802,8 @@ static ase_ssize_t __java_open_extio (
(*env)->DeleteLocalRef (env, extio_class); (*env)->DeleteLocalRef (env, extio_class);
if (extio_object == NULL) if (extio_object == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
(*env)->DeleteLocalRef (env, extio_name); (*env)->DeleteLocalRef (env, extio_name);
return -1; return -1;
} }
@ -712,6 +815,7 @@ static ase_ssize_t __java_open_extio (
if ((*env)->ExceptionOccurred(env)) if ((*env)->ExceptionOccurred(env))
{ {
/* clear the exception */ /* clear the exception */
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -722,10 +826,12 @@ static ase_ssize_t __java_open_extio (
* ret == 0 opened the stream and reached its end * ret == 0 opened the stream and reached its end
* ret == 1 opened the stream. */ * ret == 1 opened the stream. */
extio->handle = (*env)->NewGlobalRef (env, extio_object); extio->handle = (*env)->NewGlobalRef (env, extio_object);
/* TODO: close it... /*
if (extio->handle == NULL) if (extio->handle == NULL)
{ {
close it again... // TODO: close the stream ...
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
*/ */
@ -739,20 +845,33 @@ static ase_ssize_t __java_close_extio (
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio) JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
{ {
jclass class; jclass class;
jfieldID handle;
jmethodID mid; jmethodID mid;
jint ret; jint ret;
ase_awk_t* awk;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;)I"); mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;)I");
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL)
{
(*env)->ExceptionClear (env);
return -1;
}
awk = (ase_awk_t*)(*env)->GetLongField (env, obj, handle);
if (mid == NULL) if (mid == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
ret = (*env)->CallIntMethod (env, obj, mid, extio->handle); ret = (*env)->CallIntMethod (env, obj, mid, extio->handle);
if ((*env)->ExceptionOccurred (env)) if ((*env)->ExceptionOccurred (env))
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -773,30 +892,44 @@ static ase_ssize_t __java_read_extio (
ase_awk_extio_t* extio, ase_char_t* buf, ase_size_t size) ase_awk_extio_t* extio, ase_char_t* buf, ase_size_t size)
{ {
jclass class; jclass class;
jfieldID handle;
jmethodID mid; jmethodID mid;
jcharArray array; jcharArray array;
jchar* tmp; jchar* tmp;
jint ret, i; jint ret, i;
jthrowable thrown; ase_awk_t* awk;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;[CI)I"); mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;[CI)I");
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL)
{
(*env)->ExceptionClear (env);
return -1;
}
awk = (ase_awk_t*)(*env)->GetLongField (env, obj, handle);
if (mid == NULL) if (mid == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
array = (*env)->NewCharArray (env, size); array = (*env)->NewCharArray (env, size);
if (array == NULL) if (array == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
ret = (*env)->CallIntMethod (env, obj, mid, extio->handle, array, size); ret = (*env)->CallIntMethod (env, obj, mid, extio->handle, array, size);
thrown = (*env)->ExceptionOccurred (env); if ((*env)->ExceptionOccurred (env))
if (thrown)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -817,24 +950,37 @@ static ase_ssize_t __java_write_extio (
ase_awk_extio_t* extio, ase_char_t* data, ase_size_t size) ase_awk_extio_t* extio, ase_char_t* data, ase_size_t size)
{ {
jclass class; jclass class;
jfieldID handle;
jmethodID mid; jmethodID mid;
jcharArray array; jcharArray array;
jchar* tmp; jchar* tmp;
jint ret; jint ret;
ase_size_t i; ase_size_t i;
jthrowable thrown; ase_awk_t* awk;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;[CI)I"); mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;[CI)I");
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL)
{
(*env)->ExceptionClear (env);
return -1;
}
awk = (ase_awk_t*)(*env)->GetLongField (env, obj, handle);
if (mid == NULL) if (mid == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
array = (*env)->NewCharArray (env, size); array = (*env)->NewCharArray (env, size);
if (array == NULL) if (array == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
@ -843,9 +989,9 @@ static ase_ssize_t __java_write_extio (
(*env)->ReleaseCharArrayElements (env, array, tmp, 0); (*env)->ReleaseCharArrayElements (env, array, tmp, 0);
ret = (*env)->CallIntMethod (env, obj, mid, extio->handle, array, size); ret = (*env)->CallIntMethod (env, obj, mid, extio->handle, array, size);
thrown = (*env)->ExceptionOccurred (env); if ((*env)->ExceptionOccurred (env))
if (thrown)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -859,21 +1005,32 @@ static ase_ssize_t __java_flush_extio (
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio) JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
{ {
jclass class; jclass class;
jfieldID handle;
jmethodID mid; jmethodID mid;
jint ret; jint ret;
ase_awk_t* awk;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;)I"); mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;)I");
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL)
{
(*env)->ExceptionClear (env);
return -1;
}
awk = (ase_awk_t*)(*env)->GetLongField (env, obj, handle);
if (mid == NULL) if (mid == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env);
return -1; return -1;
} }
ret = (*env)->CallIntMethod (env, obj, mid, extio->handle); ret = (*env)->CallIntMethod (env, obj, mid, extio->handle);
if ((*env)->ExceptionOccurred (env)) if ((*env)->ExceptionOccurred (env))
{ {
if (awk->debug) (*env)->ExceptionDescribe (env); if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -885,21 +1042,31 @@ static ase_ssize_t __java_next_extio (
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio) JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
{ {
jclass class; jclass class;
jfieldID handle;
jmethodID mid; jmethodID mid;
jint ret; jint ret;
ase_awk_t* awk;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
handle = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;)I"); mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;)I");
(*env)->DeleteLocalRef (env, class); (*env)->DeleteLocalRef (env, class);
if (handle == NULL)
{
(*env)->ExceptionClear (env);
return -1;
}
awk = (ase_awk_t*)(*env)->GetLongField (env, obj, handle);
if (mid == NULL) if (mid == NULL)
{ {
(*env)->ExceptionClear (env);
return -1; return -1;
} }
ret = (*env)->CallIntMethod (env, obj, mid, extio->handle); ret = (*env)->CallIntMethod (env, obj, mid, extio->handle);
if ((*env)->ExceptionOccurred (env)) if ((*env)->ExceptionOccurred (env))
{ {
if (awk->debug) (*env)->ExceptionDescribe (env); if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
@ -1017,9 +1184,11 @@ static int __handle_bfn (
jobject arg, ret; jobject arg, ret;
ase_awk_val_t* v; ase_awk_val_t* v;
ase_char_t msg_nomem[MSG_SIZE]; ase_char_t msg_nomem[MSG_SIZE];
ase_awk_t* awk;
run_data = ase_awk_getruncustomdata (run); run_data = ase_awk_getruncustomdata (run);
nargs = ase_awk_getnargs (run); nargs = ase_awk_getnargs (run);
awk = ase_awk_getrunawk (run);
env = run_data->env; env = run_data->env;
obj = run_data->obj; obj = run_data->obj;
@ -1032,7 +1201,7 @@ static int __handle_bfn (
if (ASE_SIZEOF(jchar) != ASE_SIZEOF(ase_char_t)) if (ASE_SIZEOF(jchar) != ASE_SIZEOF(ase_char_t))
{ {
ase_size_t i; ase_size_t i;
jchar* tmp = (jchar*)malloc (ASE_SIZEOF(jchar)*fnl); jchar* tmp = (jchar*) malloc (ASE_SIZEOF(jchar)*fnl);
if (tmp == NULL) if (tmp == NULL)
{ {
ase_awk_setrunerror ( ase_awk_setrunerror (
@ -1048,6 +1217,7 @@ static int __handle_bfn (
if (name == NULL) if (name == NULL)
{ {
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ase_awk_setrunerror (run, ASE_AWK_ENOMEM, 0, msg_nomem); ase_awk_setrunerror (run, ASE_AWK_ENOMEM, 0, msg_nomem);
return -1; return -1;
@ -1070,7 +1240,8 @@ static int __handle_bfn (
if (method == NULL) if (method == NULL)
{ {
/* if the method is not found, the exception is thrown. /* if the method is not found, the exception is thrown.
* so clear it to prevent it from being thrown */ * clear it to prevent it from being thrown */
if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ase_awk_setrunerrnum (run, ASE_AWK_EBFNUSER); ase_awk_setrunerrnum (run, ASE_AWK_EBFNUSER);
return -1; return -1;
@ -1080,9 +1251,8 @@ static int __handle_bfn (
env, nargs, run_data->object_class, NULL); env, nargs, run_data->object_class, NULL);
if (args == NULL) if (args == NULL)
{ {
if ((*env)->ExceptionOccurred (env)) if (is_debug(awk)) (*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ase_awk_setrunerror (run, ASE_AWK_ENOMEM, 0, msg_nomem); ase_awk_setrunerror (run, ASE_AWK_ENOMEM, 0, msg_nomem);
return -1; return -1;
} }
@ -1145,7 +1315,11 @@ static int __handle_bfn (
if (v->type != ASE_AWK_VAL_NIL && arg == NULL) if (v->type != ASE_AWK_VAL_NIL && arg == NULL)
{ {
if ((*env)->ExceptionOccurred (env)) if ((*env)->ExceptionOccurred (env))
{
if (is_debug(awk))
(*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
}
(*env)->DeleteLocalRef (env, args); (*env)->DeleteLocalRef (env, args);
ase_awk_setrunerror (run, ASE_AWK_ENOMEM, 0, msg_nomem); ase_awk_setrunerror (run, ASE_AWK_ENOMEM, 0, msg_nomem);
return -1; return -1;
@ -1158,7 +1332,8 @@ static int __handle_bfn (
ret = (*env)->CallObjectMethod (env, obj, method, (jlong)run, args); ret = (*env)->CallObjectMethod (env, obj, method, (jlong)run, args);
if ((*env)->ExceptionOccurred (env)) if ((*env)->ExceptionOccurred (env))
{ {
if (awk->debug) (*env)->ExceptionDescribe (env); if (is_debug(ase_awk_getrunawk(run)))
(*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
(*env)->DeleteLocalRef (env, args); (*env)->DeleteLocalRef (env, args);
@ -1337,6 +1512,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_addbfn (
if (ptr == NULL) if (ptr == NULL)
{ {
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
throw_exception ( throw_exception (
env, env,
ase_awk_geterrstr(ASE_AWK_ENOMEM), ase_awk_geterrstr(ASE_AWK_ENOMEM),
@ -1497,6 +1673,94 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_setmaxdepth (
ase_awk_setmaxdepth (awk, ids, depth); ase_awk_setmaxdepth (awk, ids, depth);
} }
JNIEXPORT jint JNICALL Java_ase_awk_Awk_getoption (
JNIEnv* env, jobject obj)
{
jclass class;
jfieldID handle;
ase_awk_t* awk;
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 0;
}
awk = (ase_awk_t*) (*env)->GetLongField (env, obj, handle);
return ase_awk_getoption (awk);
}
JNIEXPORT void JNICALL Java_ase_awk_Awk_setoption (
JNIEnv* env, jobject obj, jint options)
{
jclass class;
jfieldID handle;
ase_awk_t* awk;
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);
ase_awk_setoption (awk, (int)options);
}
JNIEXPORT jboolean JNICALL Java_ase_awk_Awk_getdebug (
JNIEnv* env, jobject obj)
{
jclass class;
jfieldID handle;
ase_awk_t* awk;
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 JNI_FALSE;
}
awk = (ase_awk_t*) (*env)->GetLongField (env, obj, handle);
return ((awk_data_t*)ase_awk_getcustomdata(awk))->debug? JNI_TRUE: JNI_FALSE;
}
JNIEXPORT void JNICALL Java_ase_awk_Awk_setdebug (
JNIEnv* env, jobject obj, jboolean debug)
{
jclass class;
jfieldID handle;
ase_awk_t* awk;
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);
((awk_data_t*)ase_awk_getcustomdata(awk))->debug = debug;
}
JNIEXPORT void JNICALL Java_ase_awk_Awk_setfilename ( JNIEXPORT void JNICALL Java_ase_awk_Awk_setfilename (
JNIEnv* env, jobject obj, jlong runid, jstring name) JNIEnv* env, jobject obj, jlong runid, jstring name)
{ {
@ -1682,3 +1946,11 @@ JNIEXPORT jobject JNICALL Java_ase_awk_Awk_strtonum (
return ret; return ret;
} }
JNIEXPORT jstring JNICALL Java_ase_awk_Awk_valtostr (
JNIEnv* env, jobject obj, jlong runid)
{
// TODO: ...
return NULL;
}

View File

@ -1,5 +1,5 @@
/* /*
* $Id: jni.h,v 1.16 2007-01-24 11:54:16 bacon Exp $ * $Id: jni.h,v 1.17 2007-01-25 14:10:03 bacon Exp $
*/ */
#ifndef _ASE_AWK_JNI_H_ #ifndef _ASE_AWK_JNI_H_
@ -26,12 +26,25 @@ JNIEXPORT jint JNICALL Java_ase_awk_Awk_getmaxdepth (
JNIEXPORT void JNICALL Java_ase_awk_Awk_setmaxdepth ( JNIEXPORT void JNICALL Java_ase_awk_Awk_setmaxdepth (
JNIEnv* env, jobject obj, jint ids, jint depth); JNIEnv* env, jobject obj, jint ids, jint depth);
JNIEXPORT jint JNICALL Java_ase_awk_Awk_getoption (
JNIEnv* env, jobject obj);
JNIEXPORT void JNICALL Java_ase_awk_Awk_setoption (
JNIEnv* env, jobject obj, jint options);
JNIEXPORT jboolean JNICALL Java_ase_awk_Awk_getdebug (
JNIEnv* env, jobject obj);
JNIEXPORT void JNICALL Java_ase_awk_Awk_setdebug (
JNIEnv* env, jobject obj, jboolean debug);
JNIEXPORT void JNICALL Java_ase_awk_Awk_setfilename ( JNIEXPORT void JNICALL Java_ase_awk_Awk_setfilename (
JNIEnv* env, jobject obj, jlong runid, jstring name); JNIEnv* env, jobject obj, jlong runid, jstring name);
JNIEXPORT void JNICALL Java_ase_awk_Awk_setofilename ( JNIEXPORT void JNICALL Java_ase_awk_Awk_setofilename (
JNIEnv* env, jobject obj, jlong runid, jstring name); JNIEnv* env, jobject obj, jlong runid, jstring name);
JNIEXPORT jobject JNICALL Java_ase_awk_Awk_strtonum ( JNIEXPORT jobject JNICALL Java_ase_awk_Awk_strtonum (
JNIEnv* env, jobject obj, jlong runid, jstring str); JNIEnv* env, jobject obj, jlong runid, jstring str);
JNIEXPORT jstring JNICALL Java_ase_awk_Awk_valtostr (
JNIEnv* env, jobject obj, jlong runid);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.cpp,v 1.21 2007-01-17 14:09:49 bacon Exp $ * $Id: Awk.cpp,v 1.22 2007-01-25 14:14:55 bacon Exp $
*/ */
#include "stdafx.h" #include "stdafx.h"
@ -51,7 +51,7 @@ CAwk::CAwk ():
ASE_AWK_SHIFT | ASE_AWK_SHIFT |
ASE_AWK_EXTIO | ASE_AWK_EXTIO |
ASE_AWK_BLOCKLESS | ASE_AWK_BLOCKLESS |
ASE_AWK_STRIDXONE | ASE_AWK_STRBASEONE |
ASE_AWK_STRIPSPACES | ASE_AWK_STRIPSPACES |
ASE_AWK_NEXTOFILE | ASE_AWK_NEXTOFILE |
ASE_AWK_CRLF; ASE_AWK_CRLF;
@ -442,7 +442,7 @@ HRESULT CAwk::Parse (int* ret)
sysfns.dprintf = awk_dprintf; sysfns.dprintf = awk_dprintf;
sysfns.abort = awk_abort; sysfns.abort = awk_abort;
handle = ase_awk_open (&sysfns, &errnum); handle = ase_awk_open (&sysfns, NULL, &errnum);
if (handle == NULL) if (handle == NULL)
{ {
errlin = 0; errlin = 0;
@ -976,17 +976,17 @@ STDMETHODIMP CAwk::put_SupportBlockless(BOOL newVal)
return S_OK; return S_OK;
} }
STDMETHODIMP CAwk::get_StringIndexOne(BOOL *pVal) STDMETHODIMP CAwk::get_StringBaseOne(BOOL *pVal)
{ {
if (handle != NULL) option = ase_awk_getoption (handle); if (handle != NULL) option = ase_awk_getoption (handle);
*pVal = (option & ASE_AWK_STRIDXONE) == 1; *pVal = (option & ASE_AWK_STRBASEONE) == 1;
return S_OK; return S_OK;
} }
STDMETHODIMP CAwk::put_StringIndexOne(BOOL newVal) STDMETHODIMP CAwk::put_StringBaseOne(BOOL newVal)
{ {
if (newVal) option = option | ASE_AWK_STRIDXONE; if (newVal) option = option | ASE_AWK_STRBASEONE;
else option = option & ~ASE_AWK_STRIDXONE; else option = option & ~ASE_AWK_STRBASEONE;
if (handle != NULL) ase_awk_setoption (handle, option); if (handle != NULL) ase_awk_setoption (handle, option);
return S_OK; return S_OK;
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.h,v 1.14 2007-01-17 14:09:49 bacon Exp $ * $Id: Awk.h,v 1.15 2007-01-25 14:14:56 bacon Exp $
*/ */
#ifndef _ASE_COM_AWK_H_ #ifndef _ASE_COM_AWK_H_
@ -127,8 +127,8 @@ public:
STDMETHOD(put_Nextofile)(/*[in]*/ BOOL newVal); STDMETHOD(put_Nextofile)(/*[in]*/ BOOL newVal);
STDMETHOD(get_StripSpaces)(/*[out, retval]*/ BOOL *pVal); STDMETHOD(get_StripSpaces)(/*[out, retval]*/ BOOL *pVal);
STDMETHOD(put_StripSpaces)(/*[in]*/ BOOL newVal); STDMETHOD(put_StripSpaces)(/*[in]*/ BOOL newVal);
STDMETHOD(get_StringIndexOne)(/*[out, retval]*/ BOOL *pVal); STDMETHOD(get_StringBaseOne)(/*[out, retval]*/ BOOL *pVal);
STDMETHOD(put_StringIndexOne)(/*[in]*/ BOOL newVal); STDMETHOD(put_StringBaseOne)(/*[in]*/ BOOL newVal);
STDMETHOD(get_SupportBlockless)(/*[out, retval]*/ BOOL *pVal); STDMETHOD(get_SupportBlockless)(/*[out, retval]*/ BOOL *pVal);
STDMETHOD(put_SupportBlockless)(/*[in]*/ BOOL newVal); STDMETHOD(put_SupportBlockless)(/*[in]*/ BOOL newVal);
STDMETHOD(get_SupportExtio)(/*[out, retval]*/ BOOL *pVal); STDMETHOD(get_SupportExtio)(/*[out, retval]*/ BOOL *pVal);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: ase.idl,v 1.15 2007-01-17 14:09:49 bacon Exp $ * $Id: ase.idl,v 1.16 2007-01-25 14:14:56 bacon Exp $
*/ */
import "oaidl.idl"; import "oaidl.idl";
@ -81,10 +81,10 @@ interface IAwk : IDispatch
[propput, id(16), helpstring("property SupportBlockless")] [propput, id(16), helpstring("property SupportBlockless")]
HRESULT SupportBlockless([in] BOOL newVal); HRESULT SupportBlockless([in] BOOL newVal);
[propget, id(17), helpstring("property StringIndexOne")] [propget, id(17), helpstring("property StringBaseOne")]
HRESULT StringIndexOne([out, retval] BOOL *pVal); HRESULT StringBaseOne([out, retval] BOOL *pVal);
[propput, id(17), helpstring("property StringIndexOne")] [propput, id(17), helpstring("property StringBaseOne")]
HRESULT StringIndexOne([in] BOOL newVal); HRESULT StringBaseOne([in] BOOL newVal);
[propget, id(18), helpstring("property StripSpaces")] [propget, id(18), helpstring("property StripSpaces")]
HRESULT StripSpaces([out, retval] BOOL *pVal); HRESULT StripSpaces([out, retval] BOOL *pVal);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.java,v 1.21 2007-01-24 14:21:30 bacon Exp $ * $Id: Awk.java,v 1.22 2007-01-25 14:14:56 bacon Exp $
*/ */
package ase.test.awk; package ase.test.awk;
@ -88,6 +88,11 @@ public class Awk extends ase.awk.StdAwk
{ {
awk = new Awk (); awk = new Awk ();
awk.setMaxDepth (Awk.DEPTH_BLOCK_PARSE, 30); awk.setMaxDepth (Awk.DEPTH_BLOCK_PARSE, 30);
awk.setDebug (true);
//awk.setDebug (false);
//awk.setOption (awk.getOption() | OPTION_STRBASEONE);
System.out.println ("[" + awk.getOption() + "]");
awk.parse (); awk.parse ();
awk.run (); awk.run ();

View File

@ -4,6 +4,7 @@ import java.applet.*;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
public class AwkApplet extends Applet public class AwkApplet extends Applet
{ {
public void init () public void init ()

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.c,v 1.152 2007-01-23 14:23:18 bacon Exp $ * $Id: awk.c,v 1.153 2007-01-25 14:14:56 bacon Exp $
*/ */
#include <ase/awk/awk.h> #include <ase/awk/awk.h>
@ -797,7 +797,7 @@ static int __main (int argc, ase_char_t* argv[])
ASE_AWK_EXTIO | ASE_AWK_EXTIO |
/*ASE_AWK_COPROC |*/ /*ASE_AWK_COPROC |*/
ASE_AWK_BLOCKLESS | ASE_AWK_BLOCKLESS |
ASE_AWK_STRIDXONE | ASE_AWK_STRBASEONE |
ASE_AWK_STRIPSPACES | ASE_AWK_STRIPSPACES |
ASE_AWK_NEXTOFILE; ASE_AWK_NEXTOFILE;
@ -872,7 +872,7 @@ static int __main (int argc, ase_char_t* argv[])
sysfns.custom_data = &sysfns_data; sysfns.custom_data = &sysfns_data;
#endif #endif
if ((awk = ase_awk_open(&sysfns, &errnum)) == ASE_NULL) if ((awk = ase_awk_open(&sysfns, ASE_NULL, &errnum)) == ASE_NULL)
{ {
#ifdef _WIN32 #ifdef _WIN32
HeapDestroy (sysfns_data.heap); HeapDestroy (sysfns_data.heap);