2007-05-17 00:14:00 +00:00
|
|
|
/*
|
2007-08-20 23:27:00 +00:00
|
|
|
* $Id: Awk.hpp,v 1.13 2007/08/18 15:42:04 bacon Exp $
|
2007-05-17 00:14:00 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <ase/awk/Awk.hpp>
|
2007-08-20 23:27:00 +00:00
|
|
|
#include <vcclr.h>
|
2007-05-17 00:14:00 +00:00
|
|
|
|
|
|
|
using namespace System;
|
|
|
|
|
|
|
|
namespace ASE
|
|
|
|
{
|
2007-08-20 23:27:00 +00:00
|
|
|
class MojoAwk;
|
|
|
|
|
2007-07-16 20:16:00 +00:00
|
|
|
namespace Net
|
2007-05-17 00:14:00 +00:00
|
|
|
{
|
|
|
|
public ref class Awk abstract
|
|
|
|
{
|
|
|
|
public:
|
2007-08-20 23:27:00 +00:00
|
|
|
typedef ASE::Awk::long_t long_t;
|
|
|
|
typedef ASE::Awk::real_t real_t;
|
|
|
|
typedef ASE::Awk::char_t char_t;
|
|
|
|
typedef ASE::Awk::size_t size_t;
|
|
|
|
|
|
|
|
ref class Argument
|
|
|
|
{
|
|
|
|
public protected:
|
|
|
|
Argument (const ASE::Awk::Argument& arg)
|
|
|
|
{
|
|
|
|
size_t len;
|
|
|
|
const char_t* s = arg.toStr(&len);
|
|
|
|
|
|
|
|
str = gcnew System::String (s, 0, len);
|
|
|
|
inum = arg.toInt ();
|
|
|
|
rnum = arg.toReal ();
|
|
|
|
}
|
|
|
|
|
|
|
|
public:
|
|
|
|
long_t ToInt () { return inum; }
|
|
|
|
real_t ToReal () { return rnum; }
|
|
|
|
System::String^ ToStr () { return str; }
|
|
|
|
|
|
|
|
protected:
|
|
|
|
long_t inum;
|
|
|
|
real_t rnum;
|
|
|
|
System::String^ str;
|
|
|
|
};
|
|
|
|
|
|
|
|
ref class Return
|
|
|
|
{
|
|
|
|
public protected:
|
|
|
|
Return (ASE::Awk::Return& ret): ret (ret)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
property System::Object^ Value
|
|
|
|
{
|
|
|
|
void set (System::String^ v)
|
|
|
|
{
|
|
|
|
cli::pin_ptr<const char_t> nptr = PtrToStringChars(v);
|
|
|
|
ret.set (nptr, v->Length);
|
|
|
|
}
|
|
|
|
void set (System::Single^ v)
|
|
|
|
{
|
|
|
|
ret.set ((real_t)(float)v);
|
|
|
|
}
|
|
|
|
void set (System::Double^ v)
|
|
|
|
{
|
|
|
|
ret.set ((real_t)(double)v);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
ASE::Awk::Return& ret;
|
|
|
|
};
|
|
|
|
|
2007-05-17 00:14:00 +00:00
|
|
|
ref class Source
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
enum class MODE
|
|
|
|
{
|
|
|
|
READ = ASE::Awk::Source::READ,
|
|
|
|
WRITE = ASE::Awk::Source::WRITE
|
|
|
|
};
|
|
|
|
|
2007-08-04 00:58:00 +00:00
|
|
|
Source (MODE^ mode): handle (nullptr)
|
|
|
|
{
|
|
|
|
this->mode = mode;
|
|
|
|
}
|
|
|
|
|
|
|
|
property Object^ Handle
|
|
|
|
{
|
|
|
|
Object^ get () { return this->handle; }
|
|
|
|
void set (Object^ handle) { this->handle = handle; }
|
|
|
|
}
|
|
|
|
|
2007-05-17 00:14:00 +00:00
|
|
|
property MODE^ Mode
|
|
|
|
{
|
|
|
|
MODE^ get () { return this->mode; }
|
|
|
|
};
|
|
|
|
|
|
|
|
private:
|
|
|
|
MODE^ mode;
|
2007-08-04 00:58:00 +00:00
|
|
|
Object^ handle;
|
|
|
|
};
|
2007-05-17 00:14:00 +00:00
|
|
|
|
|
|
|
ref class Extio
|
|
|
|
{
|
2007-07-18 20:12:00 +00:00
|
|
|
public:
|
2007-07-21 01:21:00 +00:00
|
|
|
Extio (System::String^ name): handle (nullptr)
|
2007-07-18 20:12:00 +00:00
|
|
|
{
|
2007-07-21 01:21:00 +00:00
|
|
|
this->name = name;
|
2007-07-18 20:12:00 +00:00
|
|
|
}
|
2007-05-17 00:14:00 +00:00
|
|
|
|
2007-07-18 20:12:00 +00:00
|
|
|
property Object^ Handle
|
|
|
|
{
|
|
|
|
Object^ get () { return this->handle; }
|
|
|
|
void set (Object^ handle) { this->handle = handle; }
|
|
|
|
}
|
|
|
|
|
2007-07-21 01:21:00 +00:00
|
|
|
property System::String^ Name
|
|
|
|
{
|
|
|
|
System::String^ get () { return this->name; }
|
|
|
|
};
|
|
|
|
|
2007-07-18 20:12:00 +00:00
|
|
|
private:
|
|
|
|
Object^ handle;
|
2007-07-21 01:21:00 +00:00
|
|
|
System::String^ name;
|
2007-05-17 00:14:00 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
ref class Pipe: public Extio
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
enum class MODE
|
|
|
|
{
|
|
|
|
READ = ASE::Awk::Pipe::READ,
|
|
|
|
WRITE = ASE::Awk::Pipe::WRITE
|
|
|
|
};
|
|
|
|
|
|
|
|
property MODE^ Mode
|
|
|
|
{
|
|
|
|
MODE^ get () { return this->mode; }
|
|
|
|
};
|
|
|
|
|
2007-07-21 01:21:00 +00:00
|
|
|
Pipe (System::String^ name, MODE^ mode): Extio (name)
|
|
|
|
{
|
|
|
|
this->mode = mode;
|
|
|
|
}
|
|
|
|
|
2007-05-17 00:14:00 +00:00
|
|
|
private:
|
|
|
|
MODE^ mode;
|
|
|
|
};
|
|
|
|
|
|
|
|
ref class File: public Extio
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
enum class MODE
|
|
|
|
{
|
|
|
|
READ = ASE::Awk::File::READ,
|
|
|
|
WRITE = ASE::Awk::File::WRITE,
|
|
|
|
APPEND = ASE::Awk::File::APPEND
|
|
|
|
};
|
|
|
|
|
|
|
|
property MODE^ Mode
|
|
|
|
{
|
|
|
|
MODE^ get () { return this->mode; }
|
|
|
|
};
|
|
|
|
|
2007-07-21 01:21:00 +00:00
|
|
|
File (System::String^ name, MODE^ mode): Extio (name)
|
|
|
|
{
|
|
|
|
this->mode = mode;
|
|
|
|
}
|
|
|
|
|
2007-05-17 00:14:00 +00:00
|
|
|
private:
|
|
|
|
MODE^ mode;
|
|
|
|
};
|
|
|
|
|
|
|
|
ref class Console: public Extio
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
enum class MODE
|
|
|
|
{
|
|
|
|
READ = ASE::Awk::Console::READ,
|
|
|
|
WRITE = ASE::Awk::Console::WRITE
|
|
|
|
};
|
|
|
|
|
|
|
|
property MODE^ Mode
|
|
|
|
{
|
|
|
|
MODE^ get () { return this->mode; }
|
|
|
|
};
|
|
|
|
|
2007-07-21 01:21:00 +00:00
|
|
|
Console (System::String^ name, MODE^ mode): Extio (name)
|
|
|
|
{
|
|
|
|
this->mode = mode;
|
|
|
|
}
|
|
|
|
|
2007-05-17 00:14:00 +00:00
|
|
|
private:
|
|
|
|
MODE^ mode;
|
|
|
|
};
|
|
|
|
|
2007-08-20 23:27:00 +00:00
|
|
|
|
2007-08-16 00:25:00 +00:00
|
|
|
[Flags] enum class OPTION: int
|
|
|
|
{
|
|
|
|
NONE = 0,
|
|
|
|
IMPLICIT = ASE::Awk::OPT_IMPLICIT,
|
|
|
|
EXPLICIT = ASE::Awk::OPT_EXPLICIT,
|
|
|
|
UNIQUEFN = ASE::Awk::OPT_UNIQUEFN,
|
|
|
|
SHADING = ASE::Awk::OPT_SHADING,
|
|
|
|
SHIFT = ASE::Awk::OPT_SHIFT,
|
|
|
|
IDIV = ASE::Awk::OPT_IDIV,
|
|
|
|
STRCONCAT = ASE::Awk::OPT_STRCONCAT,
|
|
|
|
EXTIO = ASE::Awk::OPT_EXTIO,
|
|
|
|
COPROC = ASE::Awk::OPT_COPROC,
|
|
|
|
BLOCKLESS = ASE::Awk::OPT_BLOCKLESS,
|
|
|
|
STRBASEONE = ASE::Awk::OPT_STRBASEONE,
|
|
|
|
STRIPSPACES = ASE::Awk::OPT_STRIPSPACES,
|
|
|
|
NEXTOFILE = ASE::Awk::OPT_NEXTOFILE,
|
|
|
|
CRLF = ASE::Awk::OPT_CRLF,
|
|
|
|
ARGSTOMAIN = ASE::Awk::OPT_ARGSTOMAIN
|
|
|
|
};
|
|
|
|
|
2007-07-19 23:35:00 +00:00
|
|
|
typedef ASE::Awk::char_t char_t;
|
|
|
|
|
2007-05-17 00:14:00 +00:00
|
|
|
Awk ();
|
2007-08-17 00:19:00 +00:00
|
|
|
!Awk ();
|
2007-05-17 00:14:00 +00:00
|
|
|
virtual ~Awk ();
|
|
|
|
|
2007-07-18 20:12:00 +00:00
|
|
|
//bool Open ();
|
2007-07-17 20:20:00 +00:00
|
|
|
void Close ();
|
|
|
|
|
2007-05-17 00:14:00 +00:00
|
|
|
bool Parse ();
|
|
|
|
bool Run ();
|
|
|
|
|
2007-08-20 23:27:00 +00:00
|
|
|
delegate System::Object^ FunctionHandler (System::String^ name, array<Argument^>^ args);
|
2007-05-17 00:14:00 +00:00
|
|
|
|
|
|
|
bool AddFunction (System::String^ name, int minArgs, int maxArgs, FunctionHandler^ handler);
|
|
|
|
bool DeleteFunction (System::String^ name);
|
|
|
|
|
2007-08-17 00:19:00 +00:00
|
|
|
property OPTION Option
|
2007-07-16 20:16:00 +00:00
|
|
|
{
|
2007-08-17 00:19:00 +00:00
|
|
|
OPTION get (); //{ return this->option; }
|
|
|
|
void set (OPTION opt); //{ this->option = opt; }
|
2007-07-16 20:16:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
2007-08-20 23:27:00 +00:00
|
|
|
MojoAwk* awk;
|
2007-08-17 00:19:00 +00:00
|
|
|
OPTION option;
|
2007-08-20 23:27:00 +00:00
|
|
|
System::Collections::Hashtable^ funcs;
|
2007-07-16 20:16:00 +00:00
|
|
|
|
2007-07-25 18:53:00 +00:00
|
|
|
public protected:
|
2007-08-04 00:58:00 +00:00
|
|
|
// Source
|
|
|
|
virtual int OpenSource (Source^ source) = 0;
|
|
|
|
virtual int CloseSource (Source^ source) = 0;
|
|
|
|
virtual int ReadSource (
|
|
|
|
Source^ source, cli::array<char_t>^ buf, int len) = 0;
|
|
|
|
virtual int WriteSource (
|
|
|
|
Source^ source, cli::array<char_t>^ buf, int len) = 0;
|
|
|
|
|
2007-07-25 18:53:00 +00:00
|
|
|
// File
|
|
|
|
virtual int OpenFile (File^ file) = 0;
|
|
|
|
virtual int CloseFile (File^ file) = 0;
|
|
|
|
virtual int ReadFile (
|
|
|
|
File^ file, cli::array<char_t>^ buf, int len) = 0;
|
|
|
|
virtual int WriteFile (
|
|
|
|
File^ file, cli::array<char_t>^ buf, int len) = 0;
|
|
|
|
virtual int FlushFile (File^ file) = 0;
|
|
|
|
|
|
|
|
// Pipe
|
|
|
|
virtual int OpenPipe (Pipe^ pipe) = 0;
|
|
|
|
virtual int ClosePipe (Pipe^ pipe) = 0;
|
|
|
|
virtual int ReadPipe (
|
|
|
|
Pipe^ pipe, cli::array<char_t>^ buf, int len) = 0;
|
|
|
|
virtual int WritePipe (
|
|
|
|
Pipe^ pipe, cli::array<char_t>^ buf, int len) = 0;
|
|
|
|
virtual int FlushPipe (Pipe^ pipe) = 0;
|
|
|
|
|
|
|
|
// Console
|
|
|
|
virtual int OpenConsole (Console^ console) = 0;
|
|
|
|
virtual int CloseConsole (Console^ console) = 0;
|
|
|
|
virtual int ReadConsole (
|
|
|
|
Console^ console, cli::array<char_t>^ buf, int len) = 0;
|
|
|
|
virtual int WriteConsole (
|
|
|
|
Console^ console, cli::array<char_t>^ buf, int len) = 0;
|
|
|
|
virtual int FlushConsole (Console^ console) = 0;
|
|
|
|
virtual int NextConsole (Console^ console) = 0;
|
|
|
|
|
2007-07-16 20:16:00 +00:00
|
|
|
public protected:
|
2007-08-20 23:27:00 +00:00
|
|
|
int Awk::DispatchFunction (ASE::Awk::Return* ret,
|
|
|
|
const ASE::Awk::Argument* args, size_t nargs,
|
|
|
|
const char_t* name, size_t len);
|
2007-05-17 00:14:00 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|