148 lines
4.5 KiB
Java
148 lines
4.5 KiB
Java
/*
|
|
* $Id: Awk.java,v 1.9 2006-11-24 15:04:23 bacon Exp $
|
|
*/
|
|
|
|
package ase.awk;
|
|
|
|
import java.io.*;
|
|
|
|
public abstract class Awk
|
|
{
|
|
// mode for open_source & close_source
|
|
public static final int SOURCE_READ = 1;
|
|
public static final int SOURCE_WRITE = 2;
|
|
|
|
static
|
|
{
|
|
System.load ("c://projects//ase/awk/aseawk.dll");
|
|
}
|
|
|
|
private long __awk;
|
|
|
|
public Awk () throws Exception
|
|
{
|
|
open ();
|
|
}
|
|
|
|
public native void close ();
|
|
public native void parse () throws Exception;
|
|
public native void run () throws Exception;
|
|
private native void open () throws Exception;
|
|
private native int setfilename (long run_id, String name);
|
|
private native int setofilename (long run_id, String name);
|
|
|
|
public void setInputConsoleName (Extio extio, String name) //throws Exception
|
|
{
|
|
/* TODO: setconsolename is not safe. for example, it can
|
|
* crash the program if run_id is invalid. so this wrapper
|
|
* needs to do some sanity check. */
|
|
//if (setconsolename (run_id, name) == -1)
|
|
// throw new Exception ("cannot set the consle name");
|
|
setfilename (extio.getRunId(), name);
|
|
}
|
|
|
|
public void setOutputConsoleName (Extio extio, String name)
|
|
{
|
|
// TODO:
|
|
setofilename (extio.getRunId(), name);
|
|
}
|
|
|
|
/* abstrace methods */
|
|
protected abstract int open_source (int mode);
|
|
protected abstract int close_source (int mode);
|
|
protected abstract int read_source (char[] buf, int len);
|
|
protected abstract int write_source (char[] buf, int len);
|
|
|
|
protected int open_extio (Extio extio)
|
|
{
|
|
int type = extio.getType ();
|
|
if (type == Extio.TYPE_CONSOLE) return open_console (extio);
|
|
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)
|
|
{
|
|
// this check is needed because 0 is used to indicate
|
|
// the end of the stream. java streams can return 0
|
|
// if the data given is 0 bytes and it didn't reach
|
|
// the end of the stream.
|
|
if (len <= 0) return -1;
|
|
|
|
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)
|
|
{
|
|
if (len <= 0) return -1;
|
|
|
|
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 int flush_extio (Extio extio)
|
|
{
|
|
int type = extio.getType ();
|
|
if (type == Extio.TYPE_CONSOLE) return flush_console (extio);
|
|
if (type == Extio.TYPE_FILE) return flush_file (extio);
|
|
if (type == Extio.TYPE_PIPE) return flush_pipe (extio);
|
|
//if (type == Extio.TYPE_COPROC) return flush_coproc (extio);
|
|
return -1;
|
|
}
|
|
|
|
protected int next_extio (Extio extio)
|
|
{
|
|
int type = extio.getType ();
|
|
if (type == Extio.TYPE_CONSOLE) return next_console (extio);
|
|
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 flush_console (Extio extio);
|
|
protected abstract int next_console (Extio extio);
|
|
|
|
protected abstract int open_file (Extio extio);
|
|
protected abstract int close_file (Extio extio);
|
|
protected abstract int read_file (Extio extio, char[] buf, int len);
|
|
protected abstract int write_file (Extio extio, char[] buf, int len);
|
|
protected abstract int flush_file (Extio extio);
|
|
|
|
protected abstract int open_pipe (Extio extio);
|
|
protected abstract int close_pipe (Extio extio);
|
|
protected abstract int read_pipe (Extio extio, char[] buf, int len);
|
|
protected abstract int write_pipe (Extio extio, char[] buf, int len);
|
|
protected abstract int flush_pipe (Extio extio);
|
|
}
|