Recovered from cvs revision 2007-09-01 15:43:00

This commit is contained in:
hyung-hwan 2007-09-02 00:43:00 +00:00
parent 6bd702fccf
commit c8b439dd91
20 changed files with 213 additions and 45 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.cpp,v 1.51 2007/08/24 15:11:36 bacon Exp $ * $Id: Awk.cpp,v 1.52 2007/08/26 14:33:38 bacon Exp $
*/ */
@ -539,7 +539,7 @@ namespace ASE
OPT_SHIFT | OPT_SHIFT |
OPT_EXTIO | OPT_EXTIO |
OPT_BLOCKLESS | OPT_BLOCKLESS |
OPT_STRBASEONE | OPT_BASEONE |
OPT_STRIPSPACES | OPT_STRIPSPACES |
OPT_NEXTOFILE | OPT_NEXTOFILE |
OPT_ARGSTOMAIN; OPT_ARGSTOMAIN;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.hpp,v 1.48 2007/08/24 13:17:59 bacon Exp $ * $Id: Awk.hpp,v 1.49 2007/08/26 14:33:38 bacon Exp $
*/ */
#ifndef _ASE_AWK_AWK_HPP_ #ifndef _ASE_AWK_AWK_HPP_
@ -350,7 +350,7 @@ namespace ASE
OPT_EXTIO = ASE_AWK_EXTIO, OPT_EXTIO = ASE_AWK_EXTIO,
OPT_COPROC = ASE_AWK_COPROC, OPT_COPROC = ASE_AWK_COPROC,
OPT_BLOCKLESS = ASE_AWK_BLOCKLESS, OPT_BLOCKLESS = ASE_AWK_BLOCKLESS,
OPT_STRBASEONE = ASE_AWK_STRBASEONE, OPT_BASEONE = ASE_AWK_BASEONE,
OPT_STRIPSPACES = ASE_AWK_STRIPSPACES, OPT_STRIPSPACES = ASE_AWK_STRIPSPACES,
OPT_NEXTOFILE = ASE_AWK_NEXTOFILE, OPT_NEXTOFILE = ASE_AWK_NEXTOFILE,
OPT_CRLF = ASE_AWK_CRLF, OPT_CRLF = ASE_AWK_CRLF,

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.java,v 1.12 2007/06/28 15:45:57 bacon Exp $ * $Id: Awk.java,v 1.13 2007/08/26 14:33:38 bacon Exp $
* *
* {License} * {License}
*/ */
@ -33,7 +33,7 @@ public abstract class Awk
public static final int OPTION_EXTIO = (1 << 7); public static final int OPTION_EXTIO = (1 << 7);
public static final int OPTION_COPROC = (1 << 8); public static final int OPTION_COPROC = (1 << 8);
public static final int OPTION_BLOCKLESS = (1 << 9); public static final int OPTION_BLOCKLESS = (1 << 9);
public static final int OPTION_STRBASEONE = (1 << 10); public static final int OPTION_ASEONE = (1 << 10);
public static final int OPTION_STRIPSPACES = (1 << 11); public static final int OPTION_STRIPSPACES = (1 << 11);
public static final int OPTION_NEXTOFILE = (1 << 12); public static final int OPTION_NEXTOFILE = (1 << 12);
public static final int OPTION_CRLF = (1 << 13); public static final int OPTION_CRLF = (1 << 13);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: StdAwk.cpp,v 1.23 2007/08/21 14:24:37 bacon Exp $ * $Id: StdAwk.cpp,v 1.24 2007/08/26 14:33:38 bacon Exp $
*/ */
#include <ase/awk/StdAwk.hpp> #include <ase/awk/StdAwk.hpp>
@ -44,6 +44,7 @@ namespace ASE
ADD_FUNC (ASE_T("sin"), 1, 1, &StdAwk::sin); ADD_FUNC (ASE_T("sin"), 1, 1, &StdAwk::sin);
ADD_FUNC (ASE_T("cos"), 1, 1, &StdAwk::cos); ADD_FUNC (ASE_T("cos"), 1, 1, &StdAwk::cos);
ADD_FUNC (ASE_T("tan"), 1, 1, &StdAwk::tan); ADD_FUNC (ASE_T("tan"), 1, 1, &StdAwk::tan);
ADD_FUNC (ASE_T("atan"), 1, 1, &StdAwk::atan);
ADD_FUNC (ASE_T("atan2"), 2, 2, &StdAwk::atan2); ADD_FUNC (ASE_T("atan2"), 2, 2, &StdAwk::atan2);
ADD_FUNC (ASE_T("log"), 1, 1, &StdAwk::log); ADD_FUNC (ASE_T("log"), 1, 1, &StdAwk::log);
ADD_FUNC (ASE_T("exp"), 1, 1, &StdAwk::exp); ADD_FUNC (ASE_T("exp"), 1, 1, &StdAwk::exp);
@ -77,6 +78,12 @@ namespace ASE
return ret->set ((real_t)::tan(args[0].toReal())); return ret->set ((real_t)::tan(args[0].toReal()));
} }
int StdAwk::atan (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
return ret->set ((real_t)::atan(args[0].toReal()));
}
int StdAwk::atan2 (Return* ret, const Argument* args, size_t nargs, int StdAwk::atan2 (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len) const char_t* name, size_t len)
{ {

View File

@ -1,5 +1,5 @@
/* /*
* $Id: StdAwk.hpp,v 1.12 2007/07/15 16:31:59 bacon Exp $ * $Id: StdAwk.hpp,v 1.13 2007/08/26 14:33:38 bacon Exp $
*/ */
#ifndef _ASE_AWK_STDAWK_HPP_ #ifndef _ASE_AWK_STDAWK_HPP_
@ -25,6 +25,8 @@ namespace ASE
const char_t* name, size_t len); const char_t* name, size_t len);
int tan (Return* ret, const Argument* args, size_t nargs, int tan (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len); const char_t* name, size_t len);
int atan (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int atan2 (Return* ret, const Argument* args, size_t nargs, int atan2 (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len); const char_t* name, size_t len);
int log (Return* ret, const Argument* args, size_t nargs, int log (Return* ret, const Argument* args, size_t nargs,

View File

@ -1,5 +1,5 @@
/* /*
* $Id: StdAwk.java,v 1.10 2007/05/26 10:23:52 bacon Exp $ * $Id: StdAwk.java,v 1.11 2007/08/26 14:33:38 bacon Exp $
* *
* {License} * {License}
*/ */
@ -23,7 +23,8 @@ public abstract class StdAwk extends Awk
addFunction ("sin", 1, 1); addFunction ("sin", 1, 1);
addFunction ("cos", 1, 1); addFunction ("cos", 1, 1);
addFunction ("tan", 1, 1); addFunction ("tan", 1, 1);
addFunction ("atan2", 1, 1); addFunction ("atan", 1, 1);
addFunction ("atan2", 2, 2);
addFunction ("log", 1, 1); addFunction ("log", 1, 1);
addFunction ("exp", 1, 1); addFunction ("exp", 1, 1);
addFunction ("sqrt", 1, 1); addFunction ("sqrt", 1, 1);
@ -349,6 +350,12 @@ public abstract class StdAwk extends Awk
return new Double (Math.tan(x)); return new Double (Math.tan(x));
} }
public Object bfn_atan (long runid, Object[] args) throws Exception
{
double x = builtinFunctionArgumentToDouble (runid, args[0]);
return new Double (Math.atan(x));
}
public Object bfn_atan2 (long runid, Object[] args) throws Exception public Object bfn_atan2 (long runid, Object[] args) throws Exception
{ {
double y = builtinFunctionArgumentToDouble (runid, args[0]); double y = builtinFunctionArgumentToDouble (runid, args[0]);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.h,v 1.9 2007/08/24 13:17:59 bacon Exp $ * $Id: awk.h,v 1.10 2007/08/26 14:33:38 bacon Exp $
* *
* {License} * {License}
*/ */
@ -165,8 +165,8 @@ enum ase_awk_option_t
/* support blockless patterns */ /* support blockless patterns */
ASE_AWK_BLOCKLESS = (1 << 9), ASE_AWK_BLOCKLESS = (1 << 9),
/* use 1 as the start index for string operations */ /* use 1 as the start index for string operations and ARGV */
ASE_AWK_STRBASEONE = (1 << 10), ASE_AWK_BASEONE = (1 << 10),
/* strip off leading and trailing spaces when splitting a record /* strip off leading and trailing spaces when splitting a record
* into fields with a regular expression. * into fields with a regular expression.

View File

@ -1,5 +1,5 @@
/* /*
* $Id: func.c,v 1.7 2007/06/18 14:26:30 bacon Exp $ * $Id: func.c,v 1.8 2007/08/26 14:33:38 bacon Exp $
* *
* {License} * {License}
*/ */
@ -448,7 +448,7 @@ static int bfn_index (
ptr = ase_strxnstr (str0, len0, str1, len1); ptr = ase_strxnstr (str0, len0, str1, len1);
idx = (ptr == ASE_NULL)? -1: (ase_long_t)(ptr - str0); idx = (ptr == ASE_NULL)? -1: (ase_long_t)(ptr - str0);
if (ase_awk_getoption(run->awk) & ASE_AWK_STRBASEONE) idx = idx + 1; if (ase_awk_getoption(run->awk) & ASE_AWK_BASEONE) idx = idx + 1;
if (a0->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, str0); if (a0->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, str0);
if (a1->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, str1); if (a1->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, str1);
@ -550,7 +550,7 @@ static int bfn_substr (
if (n == 1) lcount = (ase_long_t)rcount; if (n == 1) lcount = (ase_long_t)rcount;
} }
if (ase_awk_getoption(run->awk) & ASE_AWK_STRBASEONE) lindex = lindex - 1; if (ase_awk_getoption(run->awk) & ASE_AWK_BASEONE) lindex = lindex - 1;
if (lindex >= len) lindex = len; if (lindex >= len) lindex = len;
else if (lindex < 0) lindex = 0; else if (lindex < 0) lindex = 0;
@ -724,7 +724,7 @@ static int bfn_split (
ase_awk_refupval (run, *a1_ref); ase_awk_refupval (run, *a1_ref);
p = str; str_left = str_len; p = str; str_left = str_len;
sta = (ase_awk_getoption(run->awk) & ASE_AWK_STRBASEONE)? 1: 0; sta = (ase_awk_getoption(run->awk) & ASE_AWK_BASEONE)? 1: 0;
num = sta; num = sta;
while (p != ASE_NULL) while (p != ASE_NULL)
@ -1280,7 +1280,7 @@ static int bfn_match (
if (n == -1) return -1; if (n == -1) return -1;
idx = (n == 0)? -1: (ase_long_t)(mat_ptr - str0); idx = (n == 0)? -1: (ase_long_t)(mat_ptr - str0);
if (ase_awk_getoption(run->awk) & ASE_AWK_STRBASEONE) idx = idx + 1; if (ase_awk_getoption(run->awk) & ASE_AWK_BASEONE) idx = idx + 1;
a0 = ase_awk_makeintval (run, idx); a0 = ase_awk_makeintval (run, idx);
if (a0 == ASE_NULL) if (a0 == ASE_NULL)

View File

@ -1,5 +1,5 @@
/* /*
* $Id: jni.c,v 1.12 2007/06/28 15:45:57 bacon Exp $ * $Id: jni.c,v 1.13 2007/08/26 14:33:38 bacon Exp $
* *
* {License} * {License}
*/ */
@ -388,7 +388,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj)
ASE_AWK_SHIFT | ASE_AWK_SHIFT |
ASE_AWK_EXTIO | ASE_AWK_EXTIO |
ASE_AWK_BLOCKLESS | ASE_AWK_BLOCKLESS |
ASE_AWK_STRBASEONE | ASE_AWK_BASEONE |
ASE_AWK_STRIPSPACES | ASE_AWK_STRIPSPACES |
ASE_AWK_NEXTOFILE | ASE_AWK_NEXTOFILE |
ASE_AWK_ARGSTOMAIN; ASE_AWK_ARGSTOMAIN;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.10 2007/08/21 14:24:37 bacon Exp $ * $Id: run.c,v 1.11 2007/08/26 14:33:38 bacon Exp $
* *
* {License} * {License}
*/ */
@ -964,8 +964,16 @@ static int __build_runarg (
return -1; return -1;
} }
key_len = ase_awk_longtostr ( if (ase_awk_getoption(run->awk) & ASE_AWK_BASEONE)
argc, 10, ASE_NULL, key, ASE_COUNTOF(key)); {
key_len = ase_awk_longtostr (argc+1,
10, ASE_NULL, key, ASE_COUNTOF(key));
}
else
{
key_len = ase_awk_longtostr (argc,
10, ASE_NULL, key, ASE_COUNTOF(key));
}
ASE_ASSERT (key_len != (ase_size_t)-1); ASE_ASSERT (key_len != (ase_size_t)-1);
/* increment reference count of v_tmp in advance as if /* increment reference count of v_tmp in advance as if

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.cpp,v 1.6 2007/07/02 14:04:20 bacon Exp $ * $Id: Awk.cpp,v 1.7 2007/08/26 14:33:38 bacon Exp $
* *
* {License} * {License}
*/ */
@ -62,7 +62,7 @@ CAwk::CAwk ():
ASE_AWK_SHIFT | ASE_AWK_SHIFT |
ASE_AWK_EXTIO | ASE_AWK_EXTIO |
ASE_AWK_BLOCKLESS | ASE_AWK_BLOCKLESS |
ASE_AWK_STRBASEONE | ASE_AWK_BASEONE |
ASE_AWK_STRIPSPACES | ASE_AWK_STRIPSPACES |
ASE_AWK_NEXTOFILE | ASE_AWK_NEXTOFILE |
ASE_AWK_CRLF; ASE_AWK_CRLF;
@ -1247,17 +1247,17 @@ STDMETHODIMP CAwk::put_SupportBlockless(VARIANT_BOOL newVal)
return S_OK; return S_OK;
} }
STDMETHODIMP CAwk::get_StringBaseOne(VARIANT_BOOL *pVal) STDMETHODIMP CAwk::get_BaseOne(VARIANT_BOOL *pVal)
{ {
if (handle != NULL) option = ase_awk_getoption (handle); if (handle != NULL) option = ase_awk_getoption (handle);
*pVal = (option & ASE_AWK_STRBASEONE) == 1; *pVal = (option & ASE_AWK_BASEONE) == 1;
return S_OK; return S_OK;
} }
STDMETHODIMP CAwk::put_StringBaseOne(VARIANT_BOOL newVal) STDMETHODIMP CAwk::put_BaseOne(VARIANT_BOOL newVal)
{ {
if (newVal) option = option | ASE_AWK_STRBASEONE; if (newVal) option = option | ASE_AWK_BASEONE;
else option = option & ~ASE_AWK_STRBASEONE; else option = option & ~ASE_AWK_BASEONE;
if (handle != NULL) ase_awk_setoption (handle, option); if (handle != NULL) ase_awk_setoption (handle, option);
return S_OK; return S_OK;
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.h,v 1.6 2007/07/02 14:04:20 bacon Exp $ * $Id: Awk.h,v 1.7 2007/08/26 14:33:38 bacon Exp $
* *
* {License} * {License}
*/ */
@ -149,8 +149,8 @@ public:
STDMETHOD(put_Nextofile)(/*[in]*/ VARIANT_BOOL newVal); STDMETHOD(put_Nextofile)(/*[in]*/ VARIANT_BOOL newVal);
STDMETHOD(get_StripSpaces)(/*[out, retval]*/ VARIANT_BOOL *pVal); STDMETHOD(get_StripSpaces)(/*[out, retval]*/ VARIANT_BOOL *pVal);
STDMETHOD(put_StripSpaces)(/*[in]*/ VARIANT_BOOL newVal); STDMETHOD(put_StripSpaces)(/*[in]*/ VARIANT_BOOL newVal);
STDMETHOD(get_StringBaseOne)(/*[out, retval]*/ VARIANT_BOOL *pVal); STDMETHOD(get_BaseOne)(/*[out, retval]*/ VARIANT_BOOL *pVal);
STDMETHOD(put_StringBaseOne)(/*[in]*/ VARIANT_BOOL newVal); STDMETHOD(put_BaseOne)(/*[in]*/ VARIANT_BOOL newVal);
STDMETHOD(get_SupportBlockless)(/*[out, retval]*/ VARIANT_BOOL *pVal); STDMETHOD(get_SupportBlockless)(/*[out, retval]*/ VARIANT_BOOL *pVal);
STDMETHOD(put_SupportBlockless)(/*[in]*/ VARIANT_BOOL newVal); STDMETHOD(put_SupportBlockless)(/*[in]*/ VARIANT_BOOL newVal);
STDMETHOD(get_SupportExtio)(/*[out, retval]*/ VARIANT_BOOL *pVal); STDMETHOD(get_SupportExtio)(/*[out, retval]*/ VARIANT_BOOL *pVal);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: asecom.idl,v 1.6 2007/07/02 14:04:20 bacon Exp $ * $Id: asecom.idl,v 1.7 2007/08/26 14:33:38 bacon Exp $
*/ */
import "oaidl.idl"; import "oaidl.idl";
@ -90,10 +90,10 @@ interface IAwk : IDispatch
[propput, id(19), helpstring("property SupportBlockless")] [propput, id(19), helpstring("property SupportBlockless")]
HRESULT SupportBlockless([in] VARIANT_BOOL newVal); HRESULT SupportBlockless([in] VARIANT_BOOL newVal);
[propget, id(20), helpstring("property StringBaseOne")] [propget, id(20), helpstring("property BaseOne")]
HRESULT StringBaseOne([out,retval] VARIANT_BOOL *pVal); HRESULT BaseOne([out,retval] VARIANT_BOOL *pVal);
[propput, id(20), helpstring("property StringBaseOne")] [propput, id(20), helpstring("property BaseOne")]
HRESULT StringBaseOne([in] VARIANT_BOOL newVal); HRESULT BaseOne([in] VARIANT_BOOL newVal);
[propget, id(21), helpstring("property StripSpaces")] [propget, id(21), helpstring("property StripSpaces")]
HRESULT StripSpaces([out,retval] VARIANT_BOOL *pVal); HRESULT StripSpaces([out,retval] VARIANT_BOOL *pVal);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.hpp,v 1.19 2007/08/24 13:17:59 bacon Exp $ * $Id: Awk.hpp,v 1.20 2007/08/26 14:33:38 bacon Exp $
*/ */
#pragma once #pragma once
@ -310,7 +310,7 @@ namespace ASE
EXTIO = ASE::Awk::OPT_EXTIO, EXTIO = ASE::Awk::OPT_EXTIO,
COPROC = ASE::Awk::OPT_COPROC, COPROC = ASE::Awk::OPT_COPROC,
BLOCKLESS = ASE::Awk::OPT_BLOCKLESS, BLOCKLESS = ASE::Awk::OPT_BLOCKLESS,
STRBASEONE = ASE::Awk::OPT_STRBASEONE, STRBASEONE = ASE::Awk::OPT_BASEONE,
STRIPSPACES = ASE::Awk::OPT_STRIPSPACES, STRIPSPACES = ASE::Awk::OPT_STRIPSPACES,
NEXTOFILE = ASE::Awk::OPT_NEXTOFILE, NEXTOFILE = ASE::Awk::OPT_NEXTOFILE,
CRLF = ASE::Awk::OPT_CRLF, CRLF = ASE::Awk::OPT_CRLF,

View File

@ -1,5 +1,5 @@
/* /*
* $Id: StdAwk.cpp,v 1.7 2007/08/24 16:02:49 bacon Exp $ * $Id: StdAwk.cpp,v 1.8 2007/08/26 14:33:38 bacon Exp $
*/ */
#include "stdafx.h" #include "stdafx.h"
@ -18,10 +18,23 @@ namespace ASE
StdAwk::StdAwk () StdAwk::StdAwk ()
{ {
/*
seed = System::DateTime
random = gcnew System::Random ();
*/
// TODO: exception/error handling.... // TODO: exception/error handling....
AddFunction ("sin", 1, 1, gcnew FunctionHandler (this, &StdAwk::Sin)); AddFunction ("sin", 1, 1, gcnew FunctionHandler (this, &StdAwk::Sin));
AddFunction ("cos", 1, 1, gcnew FunctionHandler (this, &StdAwk::Cos)); AddFunction ("cos", 1, 1, gcnew FunctionHandler (this, &StdAwk::Cos));
AddFunction ("tan", 1, 1, gcnew FunctionHandler (this, &StdAwk::Tan)); AddFunction ("tan", 1, 1, gcnew FunctionHandler (this, &StdAwk::Tan));
AddFunction ("atan", 1, 1, gcnew FunctionHandler (this, &StdAwk::Atan));
AddFunction ("atan2", 2, 2, gcnew FunctionHandler (this, &StdAwk::Atan2));
AddFunction ("log", 1, 1, gcnew FunctionHandler (this, &StdAwk::Log));
AddFunction ("exp", 1, 1, gcnew FunctionHandler (this, &StdAwk::Exp));
AddFunction ("sqrt", 1, 1, gcnew FunctionHandler (this, &StdAwk::Sqrt));
AddFunction ("int", 1, 1, gcnew FunctionHandler (this, &StdAwk::Int));
//AddFunction ("rand", 0, 0, gcnew FunctionHandler (this, &StdAwk::Int));
//AddFunction ("srand", 1, 1, gcnew FunctionHandler (this, &StdAwk::Int));
} }
StdAwk::~StdAwk () StdAwk::~StdAwk ()
@ -46,6 +59,55 @@ namespace ASE
return true; return true;
} }
bool StdAwk::Atan (System::String^ name, array<Argument^>^ args, Return^ ret)
{
ret->RealValue = System::Math::Atan (args[0]->RealValue);
return true;
}
bool StdAwk::Atan2 (System::String^ name, array<Argument^>^ args, Return^ ret)
{
ret->RealValue = System::Math::Atan2 (args[0]->RealValue, args[1]->RealValue);
return true;
}
bool StdAwk::Log (System::String^ name, array<Argument^>^ args, Return^ ret)
{
ret->RealValue = System::Math::Log (args[0]->RealValue);
return true;
}
bool StdAwk::Exp (System::String^ name, array<Argument^>^ args, Return^ ret)
{
ret->RealValue = System::Math::Exp (args[0]->RealValue);
return true;
}
bool StdAwk::Sqrt (System::String^ name, array<Argument^>^ args, Return^ ret)
{
ret->RealValue = System::Math::Sqrt (args[0]->RealValue);
return true;
}
bool StdAwk::Int (System::String^ name, array<Argument^>^ args, Return^ ret)
{
ret->LongValue = args[0]->LongValue;
return true;
}
/*
bool StdAwk::Rand (System::String^ name, array<Argument^>^ args, Return^ ret)
{
ret->LongValue = random->Next ();
return true;
}
bool StdAwk::Srand (System::String^ name, array<Argument^>^ args, Return^ ret)
{
ret->LongValue = args[0]->LongValue;
return true;
}*/
int StdAwk::OpenFile (File^ file) int StdAwk::OpenFile (File^ file)
{ {
System::IO::FileMode mode; System::IO::FileMode mode;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: StdAwk.hpp,v 1.5 2007/08/20 14:19:58 bacon Exp $ * $Id: StdAwk.hpp,v 1.6 2007/08/26 14:33:38 bacon Exp $
*/ */
#include <ase/net/Awk.hpp> #include <ase/net/Awk.hpp>
@ -16,9 +16,19 @@ namespace ASE
~StdAwk (); ~StdAwk ();
protected: protected:
System::Random^ random;
bool Sin (System::String^ name, array<Argument^>^ args, Return^ ret); bool Sin (System::String^ name, array<Argument^>^ args, Return^ ret);
bool Cos (System::String^ name, array<Argument^>^ args, Return^ ret); bool Cos (System::String^ name, array<Argument^>^ args, Return^ ret);
bool Tan (System::String^ name, array<Argument^>^ args, Return^ ret); bool Tan (System::String^ name, array<Argument^>^ args, Return^ ret);
bool Atan (System::String^ name, array<Argument^>^ args, Return^ ret);
bool Atan2 (System::String^ name, array<Argument^>^ args, Return^ ret);
bool Log (System::String^ name, array<Argument^>^ args, Return^ ret);
bool Exp (System::String^ name, array<Argument^>^ args, Return^ ret);
bool Sqrt (System::String^ name, array<Argument^>^ args, Return^ ret);
bool Int (System::String^ name, array<Argument^>^ args, Return^ ret);
//bool Rand (System::String^ name, array<Argument^>^ args, Return^ ret);
//bool Srand (System::String^ name, array<Argument^>^ args, Return^ ret);
public protected: public protected:
// File // File

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.cpp,v 1.31 2007/07/20 09:23:37 bacon Exp $ * $Id: Awk.cpp,v 1.32 2007/08/26 14:33:38 bacon Exp $
*/ */
#include <ase/awk/StdAwk.hpp> #include <ase/awk/StdAwk.hpp>
@ -530,6 +530,8 @@ static void print_usage (const ase_char_t* argv0)
ase_printf (ASE_T(" -w o:n Specify an old and new word pair\n")); ase_printf (ASE_T(" -w o:n Specify an old and new word pair\n"));
ase_printf (ASE_T(" o - an original word\n")); ase_printf (ASE_T(" o - an original word\n"));
ase_printf (ASE_T(" n - the new word to replace the original\n")); ase_printf (ASE_T(" n - the new word to replace the original\n"));
ase_printf (ASE_T(" -ns Don't strip whitespaces\n"));
ase_printf (ASE_T(" The STRIPSPACES option is truned off\n"));
} }
int awk_main (int argc, ase_char_t* argv[]) int awk_main (int argc, ase_char_t* argv[])
@ -561,6 +563,10 @@ int awk_main (int argc, ase_char_t* argv[])
else if (ase_strcmp(argv[i], ASE_T("-a")) == 0) mode = 5; else if (ase_strcmp(argv[i], ASE_T("-a")) == 0) mode = 5;
else if (ase_strcmp(argv[i], ASE_T("-m")) == 0) mode = 6; else if (ase_strcmp(argv[i], ASE_T("-m")) == 0) mode = 6;
else if (ase_strcmp(argv[i], ASE_T("-w")) == 0) mode = 7; else if (ase_strcmp(argv[i], ASE_T("-w")) == 0) mode = 7;
else if (ase_strcmp(argv[i], ASE_T("-ns")) == 0)
{
awk.setOption (awk.getOption () & ~TestAwk::OPT_STRIPSPACES);
}
else else
{ {
print_usage (argv[0]); print_usage (argv[0]);

52
ase/test/awk/asm.awk Normal file
View File

@ -0,0 +1,52 @@
#
# Taken from the book "The AWK Programming Language"
# aseawk++ -si asm.awk -ns -a asm.s
#
# ASEAWK should turn on STRIPSPACES & BASEONE to run this program.
#
BEGIN {
srcfile = ARGV[1];
ARGV[1] = "";
tempfile = "asm.temp";
n = split("const get put ld st add sub jpos jz j halt", x);
for (i = 1; i <= n; i++) op[x[i]] = i - 1;
# PASS 1
FS = "[ \t]+";
while (getline <srcfile > 0) {
sub (/#.*/, "");
symtab[$1] = nextmem;
if ($2 != "") {
print $2 "\t" $3 >tempfile;
nextmem++;
}
}
close (tempfile);
# PASS 2
nextmem = 0;
while (getline <tempfile > 0) {
if ($2 !~ /^[0-9]*$/) $2 = symtab[$2];
mem[nextmem++] = 1000 * op[$1] + $2;
}
# INTERPRETER
for (pc = 0; pc >= 0; ) {
addr = mem[pc] % 1000;
code = int(mem[pc++] / 1000);
if (code == op["get"]) { getline acc; }
else if (code == op["put"]) { print acc; }
else if (code == op["st"]) { mem[addr] = acc; }
else if (code == op["ld"]) { acc = mem[addr]; }
else if (code == op["add"]) { acc += mem[addr]; }
else if (code == op["sub"]) { acc -= mem[addr]; }
else if (code == op["jpos"]) { if (acc > 0) pc = addr; }
else if (code == op["jz"]) { if (acc == 0) pc = addr; }
else if (code == op["j"]) { pc = addr; }
else if (code == op["halt"]) { pc = -1; }
else { pc = -1; }
}
}

14
ase/test/awk/asm.s Normal file
View File

@ -0,0 +1,14 @@
ld zero # initialize sum to zero
st sum
loop get # read a number
jz done # no more input if number is zero
add sum # add in accumulated sum
st sum # store new value back in sum
j loop # go back and read another number
done ld sum # print sum
put
halt
zero const 0
sum const

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.c,v 1.12 2007/06/20 03:48:02 bacon Exp $ * $Id: awk.c,v 1.13 2007/08/26 14:33:38 bacon Exp $
*/ */
#include <ase/awk/awk.h> #include <ase/awk/awk.h>
@ -907,7 +907,7 @@ static int awk_main (int argc, ase_char_t* argv[])
ASE_AWK_SHIFT | ASE_AWK_SHIFT |
ASE_AWK_EXTIO | ASE_AWK_EXTIO |
ASE_AWK_BLOCKLESS | ASE_AWK_BLOCKLESS |
ASE_AWK_STRBASEONE | ASE_AWK_BASEONE |
ASE_AWK_STRIPSPACES | ASE_AWK_STRIPSPACES |
ASE_AWK_NEXTOFILE /*| ASE_AWK_NEXTOFILE /*|
ASE_AWK_ARGSTOMAIN*/; ASE_AWK_ARGSTOMAIN*/;