Recovered from cvs revision 2007-07-16 11:12:00

This commit is contained in:
2007-07-16 20:16:00 +00:00
parent 4373003780
commit 0f87fb5842
23 changed files with 818 additions and 84 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: Awk.cpp,v 1.45 2007/06/28 15:45:57 bacon Exp $
* $Id: Awk.cpp,v 1.46 2007/07/15 16:31:59 bacon Exp $
*/
#include <ase/awk/Awk.hpp>
@ -734,7 +734,7 @@ namespace ASE
}
Return ret (run);
int n = (this->*handler) (&ret, args, nargs);
int n = (this->*handler) (&ret, args, nargs, name, len);
delete[] args;

View File

@ -1,5 +1,5 @@
/*
* $Id: Awk.hpp,v 1.44 2007/06/29 11:36:45 bacon Exp $
* $Id: Awk.hpp,v 1.45 2007/07/15 16:31:59 bacon Exp $
*/
#ifndef _ASE_AWK_AWK_HPP_
@ -429,7 +429,8 @@ namespace ASE
const char_t** args = ASE_NULL, size_t nargs = 0);
typedef int (Awk::*FunctionHandler) (
Return* ret, const Argument* args, size_t nargs);
Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
virtual int addFunction (
const char_t* name, size_t minArgs, size_t maxArgs,

View File

@ -1,5 +1,5 @@
/*
* $Id: StdAwk.cpp,v 1.21 2007/05/23 14:15:16 bacon Exp $
* $Id: StdAwk.cpp,v 1.22 2007/07/15 16:31:59 bacon Exp $
*/
#include <ase/awk/StdAwk.hpp>
@ -59,52 +59,62 @@ namespace ASE
return 0;
}
int StdAwk::sin (Return* ret, const Argument* args, size_t nargs)
int StdAwk::sin (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
return ret->set ((real_t)::sin(args[0].toReal()));
}
int StdAwk::cos (Return* ret, const Argument* args, size_t nargs)
int StdAwk::cos (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
return ret->set ((real_t)::cos(args[0].toReal()));
}
int StdAwk::tan (Return* ret, const Argument* args, size_t nargs)
int StdAwk::tan (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
return ret->set ((real_t)::tan(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)
{
return ret->set ((real_t)::atan2(args[0].toReal(), args[1].toReal()));
}
int StdAwk::log (Return* ret, const Argument* args, size_t nargs)
int StdAwk::log (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
return ret->set ((real_t)::log(args[0].toReal()));
}
int StdAwk::exp (Return* ret, const Argument* args, size_t nargs)
int StdAwk::exp (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
return ret->set ((real_t)::exp(args[0].toReal()));
}
int StdAwk::sqrt (Return* ret, const Argument* args, size_t nargs)
int StdAwk::sqrt (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
return ret->set ((real_t)::sqrt(args[0].toReal()));
}
int StdAwk::fnint (Return* ret, const Argument* args, size_t nargs)
int StdAwk::fnint (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
return ret->set (args[0].toInt());
}
int StdAwk::rand (Return* ret, const Argument* args, size_t nargs)
int StdAwk::rand (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
return ret->set ((long_t)::rand());
}
int StdAwk::srand (Return* ret, const Argument* args, size_t nargs)
int StdAwk::srand (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
unsigned int prevSeed = seed;
seed = (unsigned int)args[0].toInt();
@ -112,12 +122,14 @@ namespace ASE
return ret->set ((long_t)prevSeed);
}
int StdAwk::systime (Return* ret, const Argument* args, size_t nargs)
int StdAwk::systime (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
return ret->set ((long_t)::time(NULL));
}
int StdAwk::strftime (Return* ret, const Argument* args, size_t nargs)
int StdAwk::strftime (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
const char_t* fmt;
size_t fln;
@ -135,15 +147,16 @@ namespace ASE
#endif
#ifdef ASE_CHAR_IS_MCHAR
size_t len = ::strftime (buf, ASE_COUNTOF(buf), fmt, tm);
size_t l = ::strftime (buf, ASE_COUNTOF(buf), fmt, tm);
#else
size_t len = ::wcsftime (buf, ASE_COUNTOF(buf), fmt, tm);
size_t l = ::wcsftime (buf, ASE_COUNTOF(buf), fmt, tm);
#endif
return ret->set (buf, len);
return ret->set (buf, l);
}
int StdAwk::strfgmtime (Return* ret, const Argument* args, size_t nargs)
int StdAwk::strfgmtime (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
const char_t* fmt;
size_t fln;
@ -161,28 +174,29 @@ namespace ASE
#endif
#ifdef ASE_CHAR_IS_MCHAR
size_t len = ::strftime (buf, ASE_COUNTOF(buf), fmt, tm);
size_t l = ::strftime (buf, ASE_COUNTOF(buf), fmt, tm);
#else
size_t len = ::wcsftime (buf, ASE_COUNTOF(buf), fmt, tm);
size_t l = ::wcsftime (buf, ASE_COUNTOF(buf), fmt, tm);
#endif
return ret->set (buf, len);
return ret->set (buf, l);
}
int StdAwk::system (Return* ret, const Argument* args, size_t nargs)
int StdAwk::system (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len)
{
size_t len;
const char_t* ptr = args[0].toStr(&len);
size_t l;
const char_t* ptr = args[0].toStr(&l);
#ifdef _WIN32
return ret->set ((long_t)::_tsystem(ptr));
#elif defined(ASE_CHAR_IS_MCHAR)
return ret->set ((long_t)::system(ptr));
#else
char* mbs = (char*)ase_awk_malloc (awk, len*5+1);
char* mbs = (char*)ase_awk_malloc (awk, l*5+1);
if (mbs == ASE_NULL) return -1;
::size_t mbl = ::wcstombs (mbs, ptr, len*5);
::size_t mbl = ::wcstombs (mbs, ptr, l*5);
if (mbl == (::size_t)-1) return -1;
mbs[mbl] = '\0';
int n = ret->set ((long_t)::system(mbs));

View File

@ -1,5 +1,5 @@
/*
* $Id: StdAwk.hpp,v 1.11 2007/05/23 14:15:16 bacon Exp $
* $Id: StdAwk.hpp,v 1.12 2007/07/15 16:31:59 bacon Exp $
*/
#ifndef _ASE_AWK_STDAWK_HPP_
@ -19,20 +19,34 @@ namespace ASE
protected:
// builtin functions
int sin (Return* ret, const Argument* args, size_t nargs);
int cos (Return* ret, const Argument* args, size_t nargs);
int tan (Return* ret, const Argument* args, size_t nargs);
int atan2 (Return* ret, const Argument* args, size_t nargs);
int log (Return* ret, const Argument* args, size_t nargs);
int exp (Return* ret, const Argument* args, size_t nargs);
int sqrt (Return* ret, const Argument* args, size_t nargs);
int fnint (Return* ret, const Argument* args, size_t nargs);
int rand (Return* ret, const Argument* args, size_t nargs);
int srand (Return* ret, const Argument* args, size_t nargs);
int systime (Return* ret, const Argument* args, size_t nargs);
int strftime (Return* ret, const Argument* args, size_t nargs);
int strfgmtime (Return* ret, const Argument* args, size_t nargs);
int system (Return* ret, const Argument* args, size_t nargs);
int sin (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int cos (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int tan (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,
const char_t* name, size_t len);
int log (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int exp (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int sqrt (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int fnint (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int rand (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int srand (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int systime (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int strftime (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int strfgmtime (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
int system (Return* ret, const Argument* args, size_t nargs,
const char_t* name, size_t len);
// pipe io handlers
int openPipe (Pipe& io);