140 lines
3.2 KiB
C++
140 lines
3.2 KiB
C++
|
/*
|
||
|
* $Id: Awk.cpp,v 1.1 2007/05/15 08:29:30 bacon Exp $
|
||
|
*/
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "Awk.hpp"
|
||
|
|
||
|
#include <ase/utl/ctype.h>
|
||
|
#include <ase/utl/stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <math.h>
|
||
|
|
||
|
#include <msclr/auto_gcroot.h>
|
||
|
|
||
|
|
||
|
namespace ASE
|
||
|
{
|
||
|
|
||
|
class StubAwk: public Awk
|
||
|
{
|
||
|
public:
|
||
|
StubAwk (NET::Awk^ wrapper): wrapper(wrapper)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
int openSource (Source& io)
|
||
|
{
|
||
|
NET::Awk::Source^ nio = gcnew NET::Awk::Source ();
|
||
|
int n = wrapper->OpenSource (nio);
|
||
|
// TODO: put nio back to io.
|
||
|
return n;
|
||
|
}
|
||
|
|
||
|
int closeSource (Source& io)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
ssize_t readSource (Source& io, char_t* buf, size_t len)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
ssize_t writeSource (Source& io, char_t* buf, size_t len)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int openPipe (Pipe& io) {return 0; }
|
||
|
int closePipe (Pipe& io) {return 0; }
|
||
|
ssize_t readPipe (Pipe& io, char_t* buf, size_t len) {return 0; }
|
||
|
ssize_t writePipe (Pipe& io, char_t* buf, size_t len) {return 0; }
|
||
|
int flushPipe (Pipe& io) {return 0; }
|
||
|
|
||
|
int openFile (File& io) {return 0; }
|
||
|
int closeFile (File& io) {return 0; }
|
||
|
ssize_t readFile (File& io, char_t* buf, size_t len) {return 0; }
|
||
|
ssize_t writeFile (File& io, char_t* buf, size_t len) {return 0; }
|
||
|
int flushFile (File& io) {return 0; }
|
||
|
|
||
|
int openConsole (Console& io) {return 0; }
|
||
|
int closeConsole (Console& io) {return 0; }
|
||
|
ssize_t readConsole (Console& io, char_t* buf, size_t len) {return 0; }
|
||
|
ssize_t writeConsole (Console& io, char_t* buf, size_t len) {return 0; }
|
||
|
int flushConsole (Console& io) {return 0; }
|
||
|
int nextConsole (Console& io) {return 0; }
|
||
|
|
||
|
// primitive operations
|
||
|
void* allocMem (size_t n) { return ::malloc (n); }
|
||
|
void* reallocMem (void* ptr, size_t n) { return ::realloc (ptr, n); }
|
||
|
void freeMem (void* ptr) { ::free (ptr); }
|
||
|
|
||
|
bool_t isUpper (cint_t c) { return ase_isupper (c); }
|
||
|
bool_t isLower (cint_t c) { return ase_islower (c); }
|
||
|
bool_t isAlpha (cint_t c) { return ase_isalpha (c); }
|
||
|
bool_t isDigit (cint_t c) { return ase_isdigit (c); }
|
||
|
bool_t isXdigit (cint_t c) { return ase_isxdigit (c); }
|
||
|
bool_t isAlnum (cint_t c) { return ase_isalnum (c); }
|
||
|
bool_t isSpace (cint_t c) { return ase_isspace (c); }
|
||
|
bool_t isPrint (cint_t c) { return ase_isprint (c); }
|
||
|
bool_t isGraph (cint_t c) { return ase_isgraph (c); }
|
||
|
bool_t isCntrl (cint_t c) { return ase_iscntrl (c); }
|
||
|
bool_t isPunct (cint_t c) { return ase_ispunct (c); }
|
||
|
cint_t toUpper (cint_t c) { return ase_toupper (c); }
|
||
|
cint_t toLower (cint_t c) { return ase_tolower (c); }
|
||
|
|
||
|
real_t pow (real_t x, real_t y)
|
||
|
{
|
||
|
return ::pow (x, y);
|
||
|
}
|
||
|
|
||
|
int vsprintf (char_t* buf, size_t size, const char_t* fmt, va_list arg)
|
||
|
{
|
||
|
return ase_vsprintf (buf, size, fmt, arg);
|
||
|
}
|
||
|
|
||
|
void vdprintf (const char_t* fmt, va_list arg)
|
||
|
{
|
||
|
ase_vfprintf (stderr, fmt, arg);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
msclr::auto_gcroot<NET::Awk^> wrapper;
|
||
|
};
|
||
|
|
||
|
namespace NET
|
||
|
{
|
||
|
|
||
|
Awk::Awk ()
|
||
|
{
|
||
|
awk = new ASE::StubAwk (this);
|
||
|
}
|
||
|
|
||
|
Awk::~Awk ()
|
||
|
{
|
||
|
delete awk;
|
||
|
}
|
||
|
|
||
|
bool Awk::Parse ()
|
||
|
{
|
||
|
return awk->parse () == 0;
|
||
|
}
|
||
|
|
||
|
bool Awk::Run ()
|
||
|
{
|
||
|
return awk->run () == 0;
|
||
|
}
|
||
|
|
||
|
bool Awk::AddFunction (System::String^ name, int minArgs, int maxArgs, FunctionHandler^ handler)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
bool Awk::DeleteFunction (System::String^ name)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|