*** empty log message ***

This commit is contained in:
hyung-hwan 2006-11-21 15:06:51 +00:00
parent 7f022d4ec2
commit 81fcbf1c69
10 changed files with 516 additions and 226 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.java,v 1.3 2006-10-24 06:05:01 bacon Exp $ * $Id: Awk.java,v 1.4 2006-11-21 15:06:14 bacon Exp $
*/ */
package ase.awk; package ase.awk;
@ -29,23 +29,68 @@ public abstract class Awk
public native void run () throws Exception; public native void run () throws Exception;
private native void open () throws Exception; private native void open () throws Exception;
/*
protected native void set_extio (long extio, Object obj);
protected native Object get_extio (long extio);
*/
/* abstrace methods */ /* abstrace methods */
protected abstract int open_source (int mode); protected abstract int open_source (int mode);
protected abstract int close_source (int mode); protected abstract int close_source (int mode);
protected abstract int read_source (char[] buf, int len); protected abstract int read_source (char[] buf, int len);
protected abstract int write_source (char[] buf, int len); protected abstract int write_source (char[] buf, int len);
protected abstract int open_console (); protected int open_extio (Extio extio)
protected abstract int close_console (); {
protected abstract int read_console (char[] buf, int len); int type = extio.getType ();
protected abstract int write_console (char[] buf, int len); if (type == Extio.TYPE_CONSOLE) return open_console (extio);
protected abstract int next_console (char[] buf, int len); if (type == Extio.TYPE_FILE) return open_file (extio);
/*if (type == Extio.TYPE_PIPE) return open_pipe (extio);
if (type == Extio.TYPE_COPROC) return open_coproc (extio);*/
return -1;
}
protected int close_extio (Extio extio)
{
int type = extio.getType ();
if (type == Extio.TYPE_CONSOLE) return close_console (extio);
if (type == Extio.TYPE_FILE) return close_file (extio);
/*if (type == Extio.TYPE_PIPE) return close_pipe (extio);
if (type == Extio.TYPE_COPROC) return close_coproc (extio);*/
return -1;
}
protected int read_extio (Extio extio, char[] buf, int len)
{
int type = extio.getType ();
if (type == Extio.TYPE_CONSOLE)
return read_console (extio, buf, len);
if (type == Extio.TYPE_FILE)
return read_file (extio, buf, len);
/*if (type == Extio.TYPE_PIPE)
* return read_pipe (extio, buf, len);
if (type == Extio.TYPE_COPROC)
return read_coproc (extio, buf, len);*/
return -1;
}
protected int write_extio (Extio extio, char[] buf, int len)
{
int type = extio.getType ();
if (type == Extio.TYPE_CONSOLE)
return write_console (extio, buf, len);
if (type == Extio.TYPE_FILE)
return write_file (extio, buf, len);
/*if (type == Extio.TYPE_PIPE)
* return write_pipe (extio, buf, len);
if (type == Extio.TYPE_COPROC)
return write_coproc (extio, buf, len);*/
return -1;
}
protected abstract int open_console (Extio extio);
protected abstract int close_console (Extio extio);
protected abstract int read_console (Extio extio, char[] buf, int len);
protected abstract int write_console (Extio extio, char[] buf, int len);
protected abstract int next_console (Extio extio, char[] buf, int len);
protected abstract int open_file (Extio extio); protected abstract int open_file (Extio extio);
protected abstract int close_file (String name); protected abstract int close_file (Extio name);
protected abstract int read_file (Extio extio, char[] buf, int len);
protected abstract int write_file (Extio extio, char[] buf, int len);
} }

View File

@ -2,21 +2,61 @@ package ase.awk;
public class Extio public class Extio
{ {
private long extio; public static final int TYPE_PIPE = 0;
public static final int TYPE_COPROC = 1;
public static final int TYPE_FILE = 2;
public static final int TYPE_CONSOLE = 3;
protected Extio (long extio) public static final int MODE_PIPE_READ = 0;
public static final int MODE_PIPE_WRITE = 1;
public static final int MODE_FILE_READ = 0;
public static final int MODE_FILE_WRITE = 1;
public static final int MODE_FILE_APPEND = 2;
public static final int MODE_CONSOLE_READ = 0;
public static final int MODE_CONSOLE_WRITE = 1;
private String name;
private int type;
private int mode;
private Object handle;
protected Extio (String name, int type, int mode)
{ {
this.name = name;
this.type = type;
this.mode = mode;
this.handle = null;
} }
public native String name (); public String getName ()
/*
void setHandle (Object obj)
{ {
return this.name;
} }
Object getHandle () public int getType ()
{ {
return this.type;
}
public int getMode ()
{
return this.mode;
}
public void setHandle (Object handle)
{
this.handle = handle;
}
public Object getHandle ()
{
return this.handle;
}
protected void finalize ()
{
System.out.println ("Extio being finalized....");
} }
*/
}; };

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.h,v 1.147 2006-11-19 15:24:20 bacon Exp $ * $Id: awk.h,v 1.148 2006-11-21 15:06:14 bacon Exp $
*/ */
#ifndef _ASE_AWK_AWK_H_ #ifndef _ASE_AWK_AWK_H_
@ -30,18 +30,25 @@ struct ase_awk_extio_t
int mode; /* [IN] read, write, etc */ int mode; /* [IN] read, write, etc */
ase_char_t* name; /* [IN] */ ase_char_t* name; /* [IN] */
void* custom_data; /* [IN] */ void* custom_data; /* [IN] */
void* handle; /* [OUT] */ void* handle; /* [OUT] */
/* input buffer */ /* input */
struct struct
{ {
ase_char_t buf[2048]; ase_char_t buf[2048];
ase_size_t pos; ase_size_t pos;
ase_size_t len; ase_size_t len;
ase_bool_t eof; ase_bool_t eof;
ase_bool_t eos;
} in; } in;
/* output */
struct
{
ase_bool_t eof;
ase_bool_t eos;
} out;
ase_awk_extio_t* next; ase_awk_extio_t* next;
}; };
@ -126,15 +133,21 @@ enum
enum enum
{ {
ASE_AWK_IO_PIPE_READ = 0, ASE_AWK_EXTIO_PIPE_READ = 0,
ASE_AWK_IO_PIPE_WRITE = 1, ASE_AWK_EXTIO_PIPE_WRITE = 1,
ASE_AWK_IO_FILE_READ = 0, /*
ASE_AWK_IO_FILE_WRITE = 1, ASE_AWK_EXTIO_COPROC_READ = 0,
ASE_AWK_IO_FILE_APPEND = 2, ASE_AWK_EXTIO_COPROC_WRITE = 1,
ASE_AWK_EXTIO_COPROC_RDWR = 2,
*/
ASE_AWK_IO_CONSOLE_READ = 0, ASE_AWK_EXTIO_FILE_READ = 0,
ASE_AWK_IO_CONSOLE_WRITE = 1 ASE_AWK_EXTIO_FILE_WRITE = 1,
ASE_AWK_EXTIO_FILE_APPEND = 2,
ASE_AWK_EXTIO_CONSOLE_READ = 0,
ASE_AWK_EXTIO_CONSOLE_WRITE = 1
}; };
/* various options */ /* various options */
@ -311,7 +324,7 @@ enum
}; };
/* extio types */ /* extio types */
enum enum ase_awk_extio_type_t
{ {
/* extio types available */ /* extio types available */
ASE_AWK_EXTIO_PIPE, ASE_AWK_EXTIO_PIPE,

View File

@ -1,5 +1,5 @@
/* /*
* $Id: extio.c,v 1.60 2006-11-17 07:26:15 bacon Exp $ * $Id: extio.c,v 1.61 2006-11-21 15:06:14 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -27,10 +27,10 @@ static int __in_mode_map[] =
{ {
/* the order should match the order of the /* the order should match the order of the
* ASE_AWK_IN_XXX values in tree.h */ * ASE_AWK_IN_XXX values in tree.h */
ASE_AWK_IO_PIPE_READ, ASE_AWK_EXTIO_PIPE_READ,
0, 0,
ASE_AWK_IO_FILE_READ, ASE_AWK_EXTIO_FILE_READ,
ASE_AWK_IO_CONSOLE_READ ASE_AWK_EXTIO_CONSOLE_READ
}; };
static int __in_mask_map[] = static int __in_mask_map[] =
@ -56,11 +56,11 @@ static int __out_mode_map[] =
{ {
/* the order should match the order of the /* the order should match the order of the
* ASE_AWK_OUT_XXX values in tree.h */ * ASE_AWK_OUT_XXX values in tree.h */
ASE_AWK_IO_PIPE_WRITE, ASE_AWK_EXTIO_PIPE_WRITE,
0, 0,
ASE_AWK_IO_FILE_WRITE, ASE_AWK_EXTIO_FILE_WRITE,
ASE_AWK_IO_FILE_APPEND, ASE_AWK_EXTIO_FILE_APPEND,
ASE_AWK_IO_CONSOLE_WRITE ASE_AWK_EXTIO_CONSOLE_WRITE
}; };
static int __out_mask_map[] = static int __out_mask_map[] =
@ -140,6 +140,7 @@ int ase_awk_readextio (
p->in.pos = 0; p->in.pos = 0;
p->in.len = 0; p->in.len = 0;
p->in.eof = ase_false; p->in.eof = ase_false;
p->in.eos = ase_false;
n = handler (ASE_AWK_IO_OPEN, p, ASE_NULL, 0); n = handler (ASE_AWK_IO_OPEN, p, ASE_NULL, 0);
if (n == -1) if (n == -1)
@ -165,7 +166,17 @@ int ase_awk_readextio (
* open request if it doesn't have any files to open. One * open request if it doesn't have any files to open. One
* advantage of doing this would be that you can skip the * advantage of doing this would be that you can skip the
* entire pattern-block matching and exeuction. */ * entire pattern-block matching and exeuction. */
if (n == 0) return 0; if (n == 0)
{
p->in.eos = ase_true;
return 0;
}
}
if (p->in.eos)
{
/* no more streams. */
return 0;
} }
/* ready to read a line */ /* ready to read a line */
@ -323,7 +334,8 @@ int ase_awk_readextio (
else line_len = line_len + 1; else line_len = line_len + 1;
} }
if (rs_ptr != ASE_NULL && rs->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, rs_ptr); if (rs_ptr != ASE_NULL &&
rs->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, rs_ptr);
ase_awk_refdownval (run, rs); ase_awk_refdownval (run, rs);
/* increment NR */ /* increment NR */
@ -460,6 +472,9 @@ int ase_awk_writeextio_str (
p->next = ASE_NULL; p->next = ASE_NULL;
p->custom_data = run->extio.custom_data; p->custom_data = run->extio.custom_data;
p->out.eof = ase_false;
p->out.eos = ase_false;
n = handler (ASE_AWK_IO_OPEN, p, ASE_NULL, 0); n = handler (ASE_AWK_IO_OPEN, p, ASE_NULL, 0);
if (n == -1) if (n == -1)
{ {
@ -484,11 +499,27 @@ int ase_awk_writeextio_str (
* open request if it doesn't have any files to open. One * open request if it doesn't have any files to open. One
* advantage of doing this would be that you can skip the * advantage of doing this would be that you can skip the
* entire pattern-block matching and exeuction. */ * entire pattern-block matching and exeuction. */
if (n == 0) return 0; if (n == 0)
{
p->out.eos = ase_true;
return 0;
}
} }
/* TODO: if write handler returns less than the request, loop */ if (p->out.eos)
if (len > 0) {
/* no more streams */
return 0;
}
if (p->out.eof)
{
/* it has reached the end of the stream but this function
* has been recalled */
return 0;
}
while (len > 0)
{ {
n = handler (ASE_AWK_IO_WRITE, p, str, len); n = handler (ASE_AWK_IO_WRITE, p, str, len);
@ -503,13 +534,19 @@ int ase_awk_writeextio_str (
return -1; return -1;
} }
if (n == 0) return 0; if (n == 0)
{
p->out.eof = ase_true;
return 0;
}
len -= n;
str += n;
} }
return 1; return 1;
} }
int ase_awk_flushextio ( int ase_awk_flushextio (
ase_awk_run_t* run, int out_type, const ase_char_t* name) ase_awk_run_t* run, int out_type, const ase_char_t* name)
{ {
@ -615,6 +652,12 @@ int ase_awk_nextextio_read (
return -1; return -1;
} }
if (p->in.eos)
{
/* no more streams. */
return 0;
}
n = handler (ASE_AWK_IO_NEXT, p, ASE_NULL, 0); n = handler (ASE_AWK_IO_NEXT, p, ASE_NULL, 0);
if (n == -1) if (n == -1)
{ {
@ -623,6 +666,20 @@ int ase_awk_nextextio_read (
return -1; return -1;
} }
if (n == 0)
{
/* the next stream cannot be opened.
* set the eos flags so that the next call to nextextio_read
* will return 0 without executing the handler */
p->in.eos = ase_true;
}
else
{
/* as the next stream has been opened successfully,
* the eof flag should be cleared if set */
p->in.eof = ase_false;
}
return n; return n;
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: jni.c,v 1.17 2006-11-19 15:33:39 bacon Exp $ * $Id: jni.c,v 1.18 2006-11-21 15:06:15 bacon Exp $
*/ */
#include <ase/awk/jni.h> #include <ase/awk/jni.h>
@ -10,13 +10,18 @@
#include <wchar.h> #include <wchar.h>
#include <stdio.h> #include <stdio.h>
#include <stdarg.h> #include <stdarg.h>
#include <math.h>
#ifdef _WIN32 #ifdef _WIN32
#include <windows.h> #include <windows.h>
#include <tchar.h> #include <tchar.h>
#endif #endif
#define EXCEPTION_AWK "ase/awk/AwkException" #ifndef ASE_CHAR_IS_WCHAR
#error this module supports ASE_CHAR_IS_WCHAR only
#endif
#define EXCEPTION_AWK "ase/awk/Exception"
#define FIELD_AWK "__awk" #define FIELD_AWK "__awk"
enum enum
@ -31,9 +36,7 @@ static ase_ssize_t __read_source (
int cmd, void* arg, ase_char_t* data, ase_size_t count); int cmd, void* arg, ase_char_t* data, ase_size_t count);
static ase_ssize_t __write_source ( static ase_ssize_t __write_source (
int cmd, void* arg, ase_char_t* data, ase_size_t count); int cmd, void* arg, ase_char_t* data, ase_size_t count);
static ase_ssize_t __process_extio_console ( static ase_ssize_t __process_extio (
int cmd, void* arg, ase_char_t* data, ase_size_t count);
static ase_ssize_t __process_extio_file (
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 srcio_data_t srcio_data_t; typedef struct srcio_data_t srcio_data_t;
@ -66,6 +69,11 @@ static void __awk_free (void* ptr, void* custom_data)
free (ptr); free (ptr);
} }
static ase_real_t __awk_pow (ase_real_t x, ase_real_t y)
{
return pow (x, y);
}
static int __awk_sprintf ( static int __awk_sprintf (
ase_char_t* buf, ase_size_t len, const ase_char_t* fmt, ...) ase_char_t* buf, ase_size_t len, const ase_char_t* fmt, ...)
{ {
@ -166,6 +174,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj)
syscas.memcpy = memcpy; syscas.memcpy = memcpy;
syscas.memset = memset; syscas.memset = memset;
syscas.pow = __awk_pow;
syscas.sprintf = __awk_sprintf; syscas.sprintf = __awk_sprintf;
syscas.aprintf = __awk_aprintf; syscas.aprintf = __awk_aprintf;
syscas.dprintf = __awk_dprintf; syscas.dprintf = __awk_dprintf;
@ -187,7 +196,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj)
opt = ASE_AWK_EXPLICIT | ASE_AWK_UNIQUE | ASE_AWK_DBLSLASHES | opt = ASE_AWK_EXPLICIT | ASE_AWK_UNIQUE | ASE_AWK_DBLSLASHES |
ASE_AWK_SHADING | ASE_AWK_IMPLICIT | ASE_AWK_SHIFT | ASE_AWK_SHADING | ASE_AWK_IMPLICIT | ASE_AWK_SHIFT |
ASE_AWK_EXTIO | ASE_AWK_BLOCKLESS; ASE_AWK_EXTIO | ASE_AWK_BLOCKLESS | ASE_AWK_HASHSIGN;
ase_awk_setopt (awk, opt); ase_awk_setopt (awk, opt);
printf ("__awk(native) done => %u, 0x%X\n", awk, awk); printf ("__awk(native) done => %u, 0x%X\n", awk, awk);
@ -266,15 +275,22 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_run (JNIEnv* env, jobject obj)
runios.pipe = ASE_NULL; runios.pipe = ASE_NULL;
runios.coproc = ASE_NULL; runios.coproc = ASE_NULL;
runios.file = __process_extio_file; runios.file = __process_extio;
runios.console = __process_extio_console; runios.console = __process_extio;
runios.custom_data = &runio_data; runios.custom_data = &runio_data;
if (ase_awk_run (awk, ASE_NULL, &runios, ASE_NULL, ASE_NULL) == -1) if (ase_awk_run (awk, ASE_NULL, &runios, ASE_NULL, ASE_NULL) == -1)
{ {
char msg[256];
int n;
except = (*env)->FindClass (env, EXCEPTION_AWK); except = (*env)->FindClass (env, EXCEPTION_AWK);
if (except == 0) return; if (except == 0) return;
(*env)->ThrowNew (env, except, "Run Error ...");
snprintf (msg, sizeof(msg), "%S",
ase_awk_geterrstr(ase_awk_geterrnum(awk)));
if (n < 0 || n >= sizeof(msg)) msg[sizeof(msg)-1] = '\0';
(*env)->ThrowNew (env, except, msg);
return; return;
} }
} }
@ -303,7 +319,11 @@ static ase_ssize_t __call_java_open_source (JNIEnv* env, jobject obj, int mode)
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
mid = (*env)->GetMethodID (env, class, "open_source", "(I)I"); mid = (*env)->GetMethodID (env, class, "open_source", "(I)I");
if (mid == 0) return -1; if (mid == NULL)
{
(*env)->DeleteLocalRef (env, class);
return -1;
}
ret = (*env)->CallIntMethod (env, obj, mid, mode); ret = (*env)->CallIntMethod (env, obj, mid, mode);
thrown = (*env)->ExceptionOccurred (env); thrown = (*env)->ExceptionOccurred (env);
@ -313,6 +333,7 @@ static ase_ssize_t __call_java_open_source (JNIEnv* env, jobject obj, int mode)
ret = -1; ret = -1;
} }
(*env)->DeleteLocalRef (env, class);
return ret; return ret;
} }
@ -326,7 +347,11 @@ static ase_ssize_t __call_java_close_source (JNIEnv* env, jobject obj, int mode)
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
mid = (*env)->GetMethodID (env, class, "close_source", "(I)I"); mid = (*env)->GetMethodID (env, class, "close_source", "(I)I");
if (mid == 0) return -1; if (mid == NULL)
{
(*env)->DeleteLocalRef (env, class);
return -1;
}
ret = (*env)->CallIntMethod (env, obj, mid, mode); ret = (*env)->CallIntMethod (env, obj, mid, mode);
thrown = (*env)->ExceptionOccurred (env); thrown = (*env)->ExceptionOccurred (env);
@ -336,6 +361,7 @@ static ase_ssize_t __call_java_close_source (JNIEnv* env, jobject obj, int mode)
ret = -1; ret = -1;
} }
(*env)->DeleteLocalRef (env, class);
return ret; return ret;
} }
@ -352,10 +378,18 @@ static ase_ssize_t __call_java_read_source (
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
mid = (*env)->GetMethodID (env, class, "read_source", "([CI)I"); mid = (*env)->GetMethodID (env, class, "read_source", "([CI)I");
if (mid == 0) return -1; if (mid == NULL)
{
(*env)->DeleteLocalRef (env, class);
return -1;
}
array = (*env)->NewCharArray (env, size); array = (*env)->NewCharArray (env, size);
if (array == NULL) return -1; if (array == NULL)
{
(*env)->DeleteLocalRef (env, class);
return -1;
}
ret = (*env)->CallIntMethod (env, obj, mid, array, size); ret = (*env)->CallIntMethod (env, obj, mid, array, size);
thrown = (*env)->ExceptionOccurred (env); thrown = (*env)->ExceptionOccurred (env);
@ -370,6 +404,7 @@ static ase_ssize_t __call_java_read_source (
(*env)->ReleaseCharArrayElements (env, array, tmp, 0); (*env)->ReleaseCharArrayElements (env, array, tmp, 0);
(*env)->DeleteLocalRef (env, array); (*env)->DeleteLocalRef (env, array);
(*env)->DeleteLocalRef (env, class);
return i; return i;
} }
@ -386,10 +421,18 @@ static ase_ssize_t __call_java_write_source (
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
mid = (*env)->GetMethodID (env, class, "write_source", "([CI)I"); mid = (*env)->GetMethodID (env, class, "write_source", "([CI)I");
if (mid == 0) return -1; if (mid == NULL)
{
(*env)->DeleteLocalRef (env, class);
return -1;
}
array = (*env)->NewCharArray (env, size); array = (*env)->NewCharArray (env, size);
if (array == NULL) return -1; if (array == NULL)
{
(*env)->DeleteLocalRef (env, class);
return -1;
}
tmp = (*env)->GetCharArrayElements (env, array, 0); tmp = (*env)->GetCharArrayElements (env, array, 0);
for (i = 0; i < size; i++) tmp[i] = (jchar)buf[i]; for (i = 0; i < size; i++) tmp[i] = (jchar)buf[i];
@ -404,6 +447,7 @@ static ase_ssize_t __call_java_write_source (
} }
(*env)->DeleteLocalRef (env, array); (*env)->DeleteLocalRef (env, array);
(*env)->DeleteLocalRef (env, class);
return ret; return ret;
} }
@ -413,63 +457,84 @@ static ase_ssize_t __call_java_open_extio (
jclass class; jclass class;
jmethodID mid; jmethodID mid;
jthrowable thrown; jthrowable thrown;
jclass extio_class;
jmethodID extio_cons;
jobject extio_object;
jstring extio_name;
jint ret; jint ret;
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
if (extio == ASE_NULL)
{
mid = (*env)->GetMethodID (env, class, meth, "()I");
if (mid == 0) return -1;
ret = (*env)->CallIntMethod (env, obj, mid);
}
else
{
/*
jstring name_str;
mid = (*env)->GetMethodID (
env, class, meth, "(Ljava/lang/String;)I");
if (mid == 0) return -1;
name_str = (*env)->NewString (
env, extio->name, ase_awk_strlen(extio->name));
if (name_str == 0) return -1;
ret = (*env)->CallIntMethod (env, obj, mid, name_str);
(*env)->DeleteLocalRef (env, name_str);
*/
jclass extio_class;
jmethodID extio_cons;
jobject extio_object;
extio_class = (*env)->FindClass (env, "ase/awk/Extio"); extio_class = (*env)->FindClass (env, "ase/awk/Extio");
if (extio_class == NULL) return -1; if (extio_class == NULL)
{
extio_cons = (*env)->GetMethodID ( (*env)->DeleteLocalRef (env, class);
env, extio_class, "<init>", "(J)V"); return -1;
if (extio_cons == NULL) return -1;
mid = (*env)->GetMethodID (
env, class, meth, "(Lase/awk/Extio;)I");
if (mid == NULL) return -1;
extio_object = (*env)->NewObject (
env, extio_class, extio_cons, (jlong)extio);
if (extio_object == NULL) return -1;
ret = (*env)->CallIntMethod (env, obj, mid, extio_object);
} }
/* get the constructor */
extio_cons = (*env)->GetMethodID (
env, extio_class, "<init>", "(Ljava/lang/String;II)V");
if (extio_cons == NULL)
{
(*env)->DeleteLocalRef (env, extio_class);
(*env)->DeleteLocalRef (env, class);
return -1;
}
/* get the method - meth */
mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;)I");
if (mid == NULL)
{
(*env)->DeleteLocalRef (env, extio_class);
(*env)->DeleteLocalRef (env, class);
return -1;
}
/* construct the name */
extio_name = (*env)->NewString (
env, extio->name, ase_awk_strlen(extio->name));
if (extio_name == NULL)
{
(*env)->DeleteLocalRef (env, extio_class);
(*env)->DeleteLocalRef (env, class);
return -1;
}
/* construct the extio object */
extio_object = (*env)->NewObject (
env, extio_class, extio_cons,
extio_name, extio->type & 0xFF, extio->mode);
if (extio_object == NULL)
{
(*env)->DeleteLocalRef (env, extio_name);
(*env)->DeleteLocalRef (env, extio_class);
(*env)->DeleteLocalRef (env, class);
return -1;
}
/* execute the method */
ret = (*env)->CallIntMethod (env, obj, mid, extio_object);
thrown = (*env)->ExceptionOccurred (env); thrown = (*env)->ExceptionOccurred (env);
if (thrown) if (thrown)
{ {
(*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; return -1;
} }
if (ret != -1)
{
/* ret == -1 failed to open the stream
* ret == 0 opened the stream and reached its end
* ret == 1 opened the stream. */
extio->handle = (*env)->NewGlobalRef (env, extio_object);
}
(*env)->DeleteLocalRef (env, extio_object);
(*env)->DeleteLocalRef (env, extio_name);
(*env)->DeleteLocalRef (env, extio_class);
(*env)->DeleteLocalRef (env, class);
return ret; return ret;
} }
@ -483,41 +548,38 @@ static ase_ssize_t __call_java_close_extio (
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
if (extio == ASE_NULL)
{
mid = (*env)->GetMethodID (env, class, meth, "()I");
if (mid == 0) return -1;
ret = (*env)->CallIntMethod (env, obj, mid);
}
else
{
jstring name_str;
mid = (*env)->GetMethodID ( mid = (*env)->GetMethodID (
env, class, meth, "(Ljava/lang/String;)I"); env, class, meth, "(Lase/awk/Extio;)I");
if (mid == 0) return -1; if (mid == NULL)
{
name_str = (*env)->NewString ( (*env)->DeleteLocalRef (env, class);
env, extio->name, ase_awk_strlen(extio->name)); return -1;
if (name_str == 0) return -1;
ret = (*env)->CallIntMethod (env, obj, mid, name_str);
(*env)->DeleteLocalRef (env, name_str);
} }
ret = (*env)->CallIntMethod (env, obj, mid, extio->handle);
thrown = (*env)->ExceptionOccurred (env); thrown = (*env)->ExceptionOccurred (env);
if (thrown) if (thrown)
{ {
(*env)->ExceptionDescribe (env);
(*env)->ExceptionClear (env); (*env)->ExceptionClear (env);
ret = -1; ret = -1;
} }
if (ret != -1)
{
/* ret == -1 failed to close the stream
* ret == 0 closed the stream */
(*env)->DeleteGlobalRef (env, extio->handle);
extio->handle = NULL;
}
(*env)->DeleteLocalRef (env, class);
return ret; return ret;
} }
static ase_ssize_t __call_java_read_extio ( static ase_ssize_t __call_java_read_extio (
JNIEnv* env, jobject obj, char* meth, ase_char_t* buf, ase_size_t size) JNIEnv* env, jobject obj, char* meth,
ase_awk_extio_t* extio, ase_char_t* buf, ase_size_t size)
{ {
jclass class; jclass class;
jmethodID mid; jmethodID mid;
@ -528,13 +590,21 @@ static ase_ssize_t __call_java_read_extio (
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
mid = (*env)->GetMethodID (env, class, meth, "([CI)I"); mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;[CI)I");
if (mid == 0) return -1; if (mid == NULL)
{
(*env)->DeleteLocalRef (env, class);
return -1;
}
array = (*env)->NewCharArray (env, size); array = (*env)->NewCharArray (env, size);
if (array == NULL) return -1; if (array == NULL)
{
(*env)->DeleteLocalRef (env, class);
return -1;
}
ret = (*env)->CallIntMethod (env, obj, mid, array, size); ret = (*env)->CallIntMethod (env, obj, mid, extio->handle, array, size);
thrown = (*env)->ExceptionOccurred (env); thrown = (*env)->ExceptionOccurred (env);
if (thrown) if (thrown)
{ {
@ -542,16 +612,21 @@ static ase_ssize_t __call_java_read_extio (
ret = -1; ret = -1;
} }
if (ret > 0)
{
tmp = (*env)->GetCharArrayElements (env, array, 0); tmp = (*env)->GetCharArrayElements (env, array, 0);
for (i = 0; i < ret; i++) buf[i] = (ase_char_t)tmp[i]; for (i = 0; i < ret; i++) buf[i] = (ase_char_t)tmp[i];
(*env)->ReleaseCharArrayElements (env, array, tmp, 0); (*env)->ReleaseCharArrayElements (env, array, tmp, 0);
}
(*env)->DeleteLocalRef (env, array); (*env)->DeleteLocalRef (env, array);
(*env)->DeleteLocalRef (env, class);
return ret; return ret;
} }
static ase_ssize_t __call_java_write_extio ( static ase_ssize_t __call_java_write_extio (
JNIEnv* env, jobject obj, char* meth, ase_char_t* data, ase_size_t size) JNIEnv* env, jobject obj, char* meth,
ase_awk_extio_t* extio, ase_char_t* data, ase_size_t size)
{ {
jclass class; jclass class;
jmethodID mid; jmethodID mid;
@ -563,17 +638,25 @@ static ase_ssize_t __call_java_write_extio (
class = (*env)->GetObjectClass(env, obj); class = (*env)->GetObjectClass(env, obj);
mid = (*env)->GetMethodID (env, class, meth, "([CI)I"); mid = (*env)->GetMethodID (env, class, meth, "(Lase/awk/Extio;[CI)I");
if (mid == 0) return -1; if (mid == NULL)
{
(*env)->DeleteLocalRef (env, class);
return -1;
}
array = (*env)->NewCharArray (env, size); array = (*env)->NewCharArray (env, size);
if (array == NULL) return -1; if (array == NULL)
{
(*env)->DeleteLocalRef (env, class);
return -1;
}
tmp = (*env)->GetCharArrayElements (env, array, 0); tmp = (*env)->GetCharArrayElements (env, array, 0);
for (i = 0; i < size; i++) tmp[i] = (jchar)data[i]; for (i = 0; i < size; i++) tmp[i] = (jchar)data[i];
(*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, extio->handle, array, size);
thrown = (*env)->ExceptionOccurred (env); thrown = (*env)->ExceptionOccurred (env);
if (thrown) if (thrown)
{ {
@ -582,6 +665,7 @@ static ase_ssize_t __call_java_write_extio (
} }
(*env)->DeleteLocalRef (env, array); (*env)->DeleteLocalRef (env, array);
(*env)->DeleteLocalRef (env, class);
return ret; return ret;
} }
@ -633,7 +717,7 @@ static ase_ssize_t __write_source (
return -1; return -1;
} }
static ase_ssize_t __process_extio_console ( static ase_ssize_t __process_extio (
int cmd, void* arg, ase_char_t* data, ase_size_t size) int cmd, void* arg, ase_char_t* data, ase_size_t size)
{ {
ase_awk_extio_t* epa = (ase_awk_extio_t*)arg; ase_awk_extio_t* epa = (ase_awk_extio_t*)arg;
@ -643,26 +727,25 @@ static ase_ssize_t __process_extio_console (
{ {
return __call_java_open_extio ( return __call_java_open_extio (
runio_data->env, runio_data->obj, runio_data->env, runio_data->obj,
"open_console", ASE_NULL); "open_extio", epa);
} }
else if (cmd == ASE_AWK_IO_CLOSE) else if (cmd == ASE_AWK_IO_CLOSE)
{ {
return __call_java_close_extio ( return __call_java_close_extio (
runio_data->env, runio_data->obj, runio_data->env, runio_data->obj,
"close_console", ASE_NULL); "close_extio", epa);
} }
else if (cmd == ASE_AWK_IO_READ) else if (cmd == ASE_AWK_IO_READ)
{ {
return __call_java_read_extio ( return __call_java_read_extio (
runio_data->env, runio_data->obj, "read_console", runio_data->env, runio_data->obj,
data, size); "read_extio", epa, data, size);
} }
else if (cmd == ASE_AWK_IO_WRITE) else if (cmd == ASE_AWK_IO_WRITE)
{ {
return __call_java_write_extio ( return __call_java_write_extio (
runio_data->env, runio_data->obj, "write_console", runio_data->env, runio_data->obj,
data, size); "write_extio", epa, data, size);
} }
#if 0 #if 0
else if (cmd == ASE_AWK_IO_FLUSH) else if (cmd == ASE_AWK_IO_FLUSH)
@ -681,25 +764,3 @@ static ase_ssize_t __process_extio_console (
return -1; return -1;
} }
static ase_ssize_t __process_extio_file (
int cmd, void* arg, ase_char_t* data, ase_size_t size)
{
ase_awk_extio_t* epa = (ase_awk_extio_t*)arg;
runio_data_t* runio_data = (runio_data_t*)epa->custom_data;
if (cmd == ASE_AWK_IO_OPEN)
{
return __call_java_open_extio (
runio_data->env, runio_data->obj,
"open_file", epa);
}
else if (cmd == ASE_AWK_IO_CLOSE)
{
return __call_java_close_extio (
runio_data->env, runio_data->obj,
"close_file", epa);
}
return -1;
}

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.279 2006-11-20 14:29:33 bacon Exp $ * $Id: run.c,v 1.280 2006-11-21 15:06:15 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -562,6 +562,7 @@ int ase_awk_run (ase_awk_t* awk,
n = 0; n = 0;
} }
__deinit_run (run); __deinit_run (run);
__del_run (awk, run); __del_run (awk, run);
ASE_AWK_FREE (awk, run); ASE_AWK_FREE (awk, run);
@ -758,7 +759,6 @@ static int __init_run (ase_awk_run_t* run, ase_awk_runios_t* runios, int* errnum
static void __deinit_run (ase_awk_run_t* run) static void __deinit_run (ase_awk_run_t* run)
{ {
if (run->pattern_range_state != ASE_NULL) if (run->pattern_range_state != ASE_NULL)
ASE_AWK_FREE (run->awk, run->pattern_range_state); ASE_AWK_FREE (run->awk, run->pattern_range_state);
@ -1281,8 +1281,8 @@ static int __run_pattern_blocks (ase_awk_run_t* run)
int saved = run->errnum; int saved = run->errnum;
/* don't care about the result of input close */ /* don't care about the result of input close */
ase_awk_closeextio_read ( // ase_awk_closeextio_read (
run, ASE_AWK_IN_CONSOLE, ASE_T("")); // run, ASE_AWK_IN_CONSOLE, ASE_T(""));
run->errnum = saved; run->errnum = saved;
return -1; return -1;
@ -1300,8 +1300,8 @@ static int __run_pattern_blocks (ase_awk_run_t* run)
{ {
int saved = run->errnum; int saved = run->errnum;
ase_awk_closeextio_read ( // ase_awk_closeextio_read (
run, ASE_AWK_IN_CONSOLE, ASE_T("")); // run, ASE_AWK_IN_CONSOLE, ASE_T(""));
run->errnum = saved; run->errnum = saved;
return -1; return -1;
@ -1318,6 +1318,7 @@ static int __run_pattern_blocks (ase_awk_run_t* run)
* -1 regardless of the value of errnum. */ * -1 regardless of the value of errnum. */
if (need_to_close) if (need_to_close)
{ {
/* TODO: do i have to close exito here...
n = ase_awk_closeextio_read ( n = ase_awk_closeextio_read (
run, ASE_AWK_IN_CONSOLE, ASE_T("")); run, ASE_AWK_IN_CONSOLE, ASE_T(""));
if (n == -1) if (n == -1)
@ -1326,6 +1327,7 @@ static int __run_pattern_blocks (ase_awk_run_t* run)
PANIC_I (run, ASE_AWK_ECONINCLOSE); PANIC_I (run, ASE_AWK_ECONINCLOSE);
else return -1; else return -1;
} }
*/
} }
return 0; return 0;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: tree.c,v 1.89 2006-11-19 11:21:06 bacon Exp $ * $Id: tree.c,v 1.90 2006-11-21 15:06:15 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -282,7 +282,7 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
len = ((ase_awk_nde_str_t*)nde)->len; len = ((ase_awk_nde_str_t*)nde)->len;
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
/* TODO: more deescaping */ /* TODO: maybe more de-escaping?? */
if (ptr[i] == ASE_T('\n')) if (ptr[i] == ASE_T('\n'))
PUT_SRCSTR (awk, ASE_T("\\n")); PUT_SRCSTR (awk, ASE_T("\\n"));
else if (ptr[i] == ASE_T('\r')) else if (ptr[i] == ASE_T('\r'))
@ -304,7 +304,6 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
case ASE_AWK_NDE_REX: case ASE_AWK_NDE_REX:
{ {
/* TODO: buf, len */
PUT_SRCSTR (awk, ASE_T("/")); PUT_SRCSTR (awk, ASE_T("/"));
PUT_SRCSTRX (awk, PUT_SRCSTRX (awk,
((ase_awk_nde_rex_t*)nde)->buf, ((ase_awk_nde_rex_t*)nde)->buf,
@ -489,7 +488,6 @@ static int __print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
case ASE_AWK_NDE_AFN: case ASE_AWK_NDE_AFN:
{ {
/* TODO: use px->what.afn.name_len */
ase_awk_nde_call_t* px = (ase_awk_nde_call_t*)nde; ase_awk_nde_call_t* px = (ase_awk_nde_call_t*)nde;
PUT_SRCSTRX (awk, PUT_SRCSTRX (awk,
px->what.afn.name, px->what.afn.name_len); px->what.afn.name, px->what.afn.name_len);
@ -795,7 +793,6 @@ static int __print_statements (ase_awk_t* awk, ase_awk_nde_t* tree, int depth)
{ {
PRINT_TABS (awk, depth); PRINT_TABS (awk, depth);
PUT_SRCSTR (awk, ASE_T("delete ")); PUT_SRCSTR (awk, ASE_T("delete "));
/* TODO: can't use __print_expression??? */
ase_awk_prnpt (awk, ((ase_awk_nde_delete_t*)p)->var); ase_awk_prnpt (awk, ((ase_awk_nde_delete_t*)p)->var);
break; break;
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.java,v 1.1 2006-10-24 06:03:14 bacon Exp $ * $Id: Awk.java,v 1.2 2006-11-21 15:06:50 bacon Exp $
*/ */
package ase.test.awk; package ase.test.awk;
@ -11,6 +11,8 @@ public class Awk extends ase.awk.Awk
private FileReader insrc; private FileReader insrc;
private FileWriter outsrc; private FileWriter outsrc;
private InputStreamReader console_in = null;
public Awk () throws ase.awk.Exception public Awk () throws ase.awk.Exception
{ {
super (); super ();
@ -20,13 +22,13 @@ public class Awk extends ase.awk.Awk
{ {
if (mode == SOURCE_READ) if (mode == SOURCE_READ)
{ {
try { insrc = new FileReader ("test.awk"); } try { insrc = new FileReader ("t.awk"); }
catch (IOException e) { return -1; } catch (IOException e) { return -1; }
return 1; return 1;
} }
else if (mode == SOURCE_WRITE) else if (mode == SOURCE_WRITE)
{ {
try { outsrc = new FileWriter ("test.out"); } try { outsrc = new FileWriter ("t.out"); }
catch (IOException e) { return -1; } catch (IOException e) { return -1; }
return 1; return 1;
} }
@ -65,39 +67,107 @@ public class Awk extends ase.awk.Awk
return len; return len;
} }
protected int open_console () protected int open_console (ase.awk.Extio extio)
{ {
System.err.println ("[open_console called....]"); System.err.println ("[open_console called.... name: " + extio.getName() + " mode: " + extio.getMode());
int mode = extio.getMode ();
if (mode == ase.awk.Extio.MODE_CONSOLE_READ)
{
InputStreamReader isr =
new InputStreamReader (System.in);
extio.setHandle (isr);
return 1;
}
else if (mode == ase.awk.Extio.MODE_CONSOLE_WRITE)
{
OutputStreamWriter osw =
new OutputStreamWriter (System.out);
extio.setHandle (osw);
return 1; return 1;
} }
protected int close_console () return -1;
{
System.err.println ("[close_console called....]");
return 1;
} }
protected int read_console (char[] buf, int len) protected int close_console (ase.awk.Extio extio)
{ {
System.err.println ("[close_console called.... name: " + extio.getName() + " mode: " + extio.getMode());
int mode = extio.getMode ();
if (mode == ase.awk.Extio.MODE_CONSOLE_READ)
{
InputStreamReader isr = (InputStreamReader)extio.getHandle ();
try { isr.close (); }
catch (IOException e) { return -1; }
return 0;
}
else if (mode == ase.awk.Extio.MODE_CONSOLE_WRITE)
{
OutputStreamWriter osw = (OutputStreamWriter)extio.getHandle ();
//try { osw.close (); }
//catch (IOException e) { return -1; }
return 0; return 0;
} }
protected int write_console (char[] buf, int len) return -1;
{
System.out.print (new String (buf, 0, len));
return len;
} }
protected int next_console (char[] buf, int len) protected int read_console (ase.awk.Extio extio, char[] buf, int len)
{
int mode = extio.getMode ();
if (mode == ase.awk.Extio.MODE_CONSOLE_READ)
{
InputStreamReader isr = (InputStreamReader)extio.getHandle ();
try
{
len = isr.read (buf, 0, len);
if (len == -1) len = 0;
}
catch (IOException e) { System.out.println ("EXCEPTIN---"+e.getMessage());return -1; }
return len;
}
else if (mode == ase.awk.Extio.MODE_CONSOLE_WRITE)
{
return -1;
}
return -1;
}
protected int write_console (ase.awk.Extio extio, char[] buf, int len)
{
int mode = extio.getMode ();
if (mode == ase.awk.Extio.MODE_CONSOLE_READ)
{
return -1;
}
else if (mode == ase.awk.Extio.MODE_CONSOLE_WRITE)
{
OutputStreamWriter osw = (OutputStreamWriter)extio.getHandle ();
try { osw.write (buf, 0, len); osw.flush (); }
catch (IOException e) { return -1; }
return len;
}
return -1;
}
protected int next_console (ase.awk.Extio extio, char[] buf, int len)
{ {
return 0; return 0;
} }
public int open_file (ase.awk.Extio extio) public int open_file (ase.awk.Extio extio)
{ {
System.out.print ("opening file ["); /*System.out.print ("opening file [");
//System.out.print (extio.name()); System.out.print (extio.getName());
System.out.println ("]"); System.out.println ("]");*/
/* /*
FileInputStream f = new FileInputStream (extio.name()); FileInputStream f = new FileInputStream (extio.name());
@ -106,24 +176,23 @@ public class Awk extends ase.awk.Awk
return 1; return 1;
} }
/* public int close_file (ase.awk.Extio extio)
public int open_file (String name)
{ {
System.out.print ("opening file ["); /*System.out.print ("closing file [");
System.out.print (name); System.out.print (extio.getName());
System.out.println ("]"); System.out.println ("]");*/
return 1;
}
*/
public int close_file (String name)
{
System.out.print ("closing file [");
System.out.print (name);
System.out.println ("]");
return 0; return 0;
} }
protected int read_file (ase.awk.Extio extio, char[] buf, int len)
{
return -1;
}
protected int write_file (ase.awk.Extio extio, char[] buf, int len)
{
return -1;
}
public static void main (String[] args) public static void main (String[] args)
{ {
Awk awk = null; Awk awk = null;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.c,v 1.120 2006-11-19 15:33:40 bacon Exp $ * $Id: awk.c,v 1.121 2006-11-21 15:06:51 bacon Exp $
*/ */
#include <ase/awk/awk.h> #include <ase/awk/awk.h>
@ -271,9 +271,9 @@ static ase_ssize_t process_extio_pipe (
FILE* handle; FILE* handle;
const ase_char_t* mode; const ase_char_t* mode;
if (epa->mode == ASE_AWK_IO_PIPE_READ) if (epa->mode == ASE_AWK_EXTIO_PIPE_READ)
mode = ASE_T("r"); mode = ASE_T("r");
else if (epa->mode == ASE_AWK_IO_PIPE_WRITE) else if (epa->mode == ASE_AWK_EXTIO_PIPE_WRITE)
mode = ASE_T("w"); mode = ASE_T("w");
else return -1; /* TODO: any way to set the error number? */ else return -1; /* TODO: any way to set the error number? */
__awk_dprintf (ASE_T("opending %s of type %d (pipe)\n"), epa->name, epa->type); __awk_dprintf (ASE_T("opending %s of type %d (pipe)\n"), epa->name, epa->type);
@ -311,7 +311,7 @@ static ase_ssize_t process_extio_pipe (
case ASE_AWK_IO_FLUSH: case ASE_AWK_IO_FLUSH:
{ {
if (epa->mode == ASE_AWK_IO_PIPE_READ) return -1; if (epa->mode == ASE_AWK_EXTIO_PIPE_READ) return -1;
else return 0; else return 0;
} }
@ -336,11 +336,11 @@ static ase_ssize_t process_extio_file (
FILE* handle; FILE* handle;
const ase_char_t* mode; const ase_char_t* mode;
if (epa->mode == ASE_AWK_IO_FILE_READ) if (epa->mode == ASE_AWK_EXTIO_FILE_READ)
mode = ASE_T("r"); mode = ASE_T("r");
else if (epa->mode == ASE_AWK_IO_FILE_WRITE) else if (epa->mode == ASE_AWK_EXTIO_FILE_WRITE)
mode = ASE_T("w"); mode = ASE_T("w");
else if (epa->mode == ASE_AWK_IO_FILE_APPEND) else if (epa->mode == ASE_AWK_EXTIO_FILE_APPEND)
mode = ASE_T("a"); mode = ASE_T("a");
else return -1; /* TODO: any way to set the error number? */ else return -1; /* TODO: any way to set the error number? */
@ -506,7 +506,7 @@ static int open_extio_console (ase_awk_extio_t* epa)
__awk_dprintf (ASE_T("opening console[%s] of type %x\n"), epa->name, epa->type); __awk_dprintf (ASE_T("opening console[%s] of type %x\n"), epa->name, epa->type);
if (epa->mode == ASE_AWK_IO_CONSOLE_READ) if (epa->mode == ASE_AWK_EXTIO_CONSOLE_READ)
{ {
if (infiles[infile_no] == ASE_NULL) if (infiles[infile_no] == ASE_NULL)
{ {
@ -546,7 +546,7 @@ static int open_extio_console (ase_awk_extio_t* epa)
infile_no++; infile_no++;
return 1; return 1;
} }
else if (epa->mode == ASE_AWK_IO_CONSOLE_WRITE) else if (epa->mode == ASE_AWK_EXTIO_CONSOLE_WRITE)
{ {
__awk_dprintf (ASE_T(" console(w) - <standard output>\n")); __awk_dprintf (ASE_T(" console(w) - <standard output>\n"));
/* TODO: does output console has a name??? */ /* TODO: does output console has a name??? */

View File

@ -19,8 +19,14 @@ all: awk
awk: awk.obj awk: awk.obj
$(LD) $(LDFLAGS) $(STARTUP) awk.obj,$@.exe,,$(LIBS),, $(LD) $(LDFLAGS) $(STARTUP) awk.obj,$@.exe,,$(LIBS),,
java:
javac -classpath ../../.. Awk.java
jrun:
java -Xms1m -Xmx2m -classpath ../../.. ase.test.awk.Awk
clean: clean:
del $(OBJS) *.obj $(OUT) del $(OBJS) *.obj *.class awk.exe
.SUFFIXES: .c .obj .SUFFIXES: .c .obj
.c.obj: .c.obj: