Recovered from cvs revision 2007-07-17 09:46:00

This commit is contained in:
hyung-hwan 2007-07-17 20:20:00 +00:00
parent 0f87fb5842
commit af7146069a
6 changed files with 112 additions and 26 deletions

View File

@ -1,6 +1,6 @@
/* /*
* $Id: Awk.cpp,v 1.3 2007/07/15 16:31:59 bacon Exp $ * $Id: Awk.cpp,v 1.5 2007/07/16 11:16:46 bacon Exp $
*/ */
#include "stdafx.h" #include "stdafx.h"
#include "Awk.hpp" #include "Awk.hpp"
@ -17,6 +17,7 @@ namespace ASE
class StubAwk: public Awk class StubAwk: public Awk
{ {
public: public:
StubAwk (Net::Awk^ wrapper): wrapper(wrapper) StubAwk (Net::Awk^ wrapper): wrapper(wrapper)
{ {
} }
@ -31,39 +32,101 @@ namespace ASE
int openSource (Source& io) int openSource (Source& io)
{ {
/*
Net::Awk::Source^ nio = gcnew Net::Awk::Source ();
int n = wrapper->OpenSource (nio);
return n;
*/
if (io.getMode() == Source::READ) if (io.getMode() == Source::READ)
{ {
//wrapper->SourceInputStream->BeginRead (); if (wrapper->SourceInputStream == nullptr)
{
return -1;
}
if (!wrapper->SourceInputStream->CanRead)
{
wrapper->SourceInputStream->Close ();
return -1;
}
//interior_ptr<System::IO::Stream> p = wrapper->SourceInputStream;
//io.setHandle (wrapper->SourceInputStream);
System::IO::StreamReader^ reader = gcnew System::IO::StreamReader (wrapper->SourceInputStream);
System::Runtime::InteropServices::GCHandle* handle = (System::Runtime::InteropServices::GCHandle*)malloc (sizeof(System::Runtime::InteropServices::GCHandle));
if (handle == NULL)
{
reader->Close ();
return -1;
}
handle->Alloc (reader/*, System::Runtime::InteropServices::GCHandleType::Pinned */);
io.setHandle (handle);
} }
else else
{ {
//wrapper->SourceOutputStream->BeginWrite (); if (wrapper->SourceOutputStream == nullptr)
{
return -1;
} }
if (!wrapper->SourceOutputStream->CanWrite)
{
wrapper->SourceOutputStream->Close ();
return -1;
}
System::IO::StreamWriter^ writer = gcnew System::IO::StreamWriter (wrapper->SourceOutputStream);
System::Runtime::InteropServices::GCHandle* handle = (System::Runtime::InteropServices::GCHandle*)::malloc (sizeof(System::Runtime::InteropServices::GCHandle));
if (handle == NULL)
{
writer->Close ();
return -1;
}
handle->Alloc (writer/*, System::Runtime::InteropServices::GCHandleType::Pinned*/);
io.setHandle (handle);
}
return 1; return 1;
} }
int closeSource (Source& io) int closeSource (Source& io)
{ {
//System::IO::Stream^ stream = io.getHandle(); System::Runtime::InteropServices::GCHandle* handle = (System::Runtime::InteropServices::GCHandle*)io.getHandle();
//stream->Close ();
if (io.getMode() == Source::READ)
{
System::IO::StreamReader^ reader = (System::IO::StreamReader^)handle->Target;
reader->Close ();
}
else
{
System::IO::StreamWriter^ writer = (System::IO::StreamWriter^)handle->Target;
writer->Close ();
}
handle->Free ();
::free (handle);
return 0; return 0;
} }
ssize_t readSource (Source& io, char_t* buf, size_t len) ssize_t readSource (Source& io, char_t* buf, size_t len)
{ {
//System::IO::Stream^ stream = io.getHandle(); System::Runtime::InteropServices::GCHandle* handle = (System::Runtime::InteropServices::GCHandle*)io.getHandle();
return 0; System::IO::StreamReader^ reader = (System::IO::StreamReader^)handle->Target;
cli::array<char_t>^ b = gcnew cli::array<char_t>(len);
int n = reader->Read (b, 0, len);
for (int i = 0; i < n; i++) buf[i] = b[i];
return n;
} }
ssize_t writeSource (Source& io, char_t* buf, size_t len) ssize_t writeSource (Source& io, char_t* buf, size_t len)
{ {
//System::IO::Stream^ stream = io.getHandle(); System::Runtime::InteropServices::GCHandle* handle = (System::Runtime::InteropServices::GCHandle*)io.getHandle();
return 0; System::IO::StreamWriter^ writer = (System::IO::StreamWriter^)handle->Target;
cli::array<char_t>^ b = gcnew cli::array<char_t>(len);
for (int i = 0; i < (int)len; i++) buf[i] = b[i];
writer->Write (b, 0, len);
return len;
} }
int openPipe (Pipe& io) {return 0; } int openPipe (Pipe& io) {return 0; }
@ -129,13 +192,24 @@ namespace ASE
Awk::Awk () Awk::Awk ()
{ {
awk = new ASE::StubAwk (this); awk = new ASE::StubAwk (this);
if (awk->open () == -1)
{
// TODO:...
//throw new AwkException ("cannot open awk");
}
} }
Awk::~Awk () Awk::~Awk ()
{ {
Close ();
delete awk; delete awk;
} }
void Awk::Close ()
{
awk->close ();
}
bool Awk::Parse () bool Awk::Parse ()
{ {
return awk->parse () == 0; return awk->parse () == 0;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.hpp,v 1.2 2007/07/15 16:31:59 bacon Exp $ * $Id: Awk.hpp,v 1.3 2007/07/16 11:12:12 bacon Exp $
*/ */
#pragma once #pragma once
@ -16,6 +16,7 @@ namespace ASE
public ref class Awk abstract public ref class Awk abstract
{ {
public: public:
/*
ref class Source ref class Source
{ {
public: public:
@ -33,7 +34,7 @@ namespace ASE
private: private:
MODE^ mode; MODE^ mode;
}; };*/
ref class Extio ref class Extio
{ {
@ -101,6 +102,9 @@ namespace ASE
Awk (); Awk ();
virtual ~Awk (); virtual ~Awk ();
bool Open ();
void Close ();
bool Parse (); bool Parse ();
bool Run (); bool Run ();
@ -109,10 +113,6 @@ namespace ASE
bool AddFunction (System::String^ name, int minArgs, int maxArgs, FunctionHandler^ handler); bool AddFunction (System::String^ name, int minArgs, int maxArgs, FunctionHandler^ handler);
bool DeleteFunction (System::String^ name); bool DeleteFunction (System::String^ name);
virtual int OpenSource (Source^ io) = 0;
virtual int CloseSource (Source^ io) = 0;
virtual int ReadSource (Source^ io, ASE::Awk::char_t* buf, ASE::Awk::size_t len) = 0;
virtual int WriteSource (Source^ io, ASE::Awk::char_t* buf, ASE::Awk::size_t len) = 0;
property System::IO::Stream^ SourceInputStream property System::IO::Stream^ SourceInputStream
{ {
@ -142,6 +142,7 @@ namespace ASE
protected: protected:
ASE::Awk* awk; ASE::Awk* awk;
System::IO::Stream^ sourceInputStream; System::IO::Stream^ sourceInputStream;
System::IO::Stream^ sourceOutputStream; System::IO::Stream^ sourceOutputStream;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: StdAwk.hpp,v 1.1 2007/07/15 16:31:59 bacon Exp $ * $Id: StdAwk.hpp,v 1.2 2007/07/16 11:12:12 bacon Exp $
*/ */
#include <ase/net/Awk.hpp> #include <ase/net/Awk.hpp>
@ -8,9 +8,11 @@ namespace ASE
{ {
namespace Net namespace Net
{ {
public ref class StdAwk: Awk public ref class StdAwk: Awk
{ {
public: public:
}; };
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: assert.cpp,v 1.1 2007/07/15 16:31:59 bacon Exp $ * $Id: assert.cpp,v 1.2 2007/07/16 11:12:12 bacon Exp $
*/ */
#include "stdafx.h" #include "stdafx.h"
@ -12,6 +12,9 @@
#include <stdlib.h> #include <stdlib.h>
#include <tchar.h> #include <tchar.h>
#pragma warning(disable:4996)
#pragma unmanaged
void ase_assert_abort (void) void ase_assert_abort (void)
{ {
::abort (); ::abort ();

View File

@ -17,7 +17,13 @@ namespace asetestnet
private void button1_Click(object sender, EventArgs e) private void button1_Click(object sender, EventArgs e)
{ {
ASE.Net.Awk awk = new ASE.Net.Awk(); ASE.Net.Awk awk = new ASE.Net.StdAwk();
awk.Open();
awk.SourceInputStream = new System.IO.FileStream("t.awk", System.IO.FileMode.Open, System.IO.FileAccess.Read);
awk.SourceOutputStream = new System.IO.FileStream("t.out", System.IO.FileMode.Create, System.IO.FileAccess.Write);
awk.Parse();
} }
} }
} }

View File

@ -14,7 +14,7 @@
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath> <OutputPath>..\..\Debug\bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
@ -22,7 +22,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType> <DebugType>pdbonly</DebugType>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath> <OutputPath>..\..\Release\bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants> <DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>