2007-05-06 19:44:00 +00:00
|
|
|
/*
|
2008-12-18 02:39:15 +00:00
|
|
|
* $Id: StdAwk.cpp 501 2008-12-17 08:39:15Z baconevi $
|
2007-09-25 20:25:00 +00:00
|
|
|
*
|
2008-12-30 04:49:25 +00:00
|
|
|
Copyright 2006-2008 Chung, Hyung-Hwan.
|
2007-05-06 19:44:00 +00:00
|
|
|
|
2008-12-30 04:49:25 +00:00
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
limitations under the License.
|
|
|
|
*/
|
2008-03-22 05:57:29 +00:00
|
|
|
|
2008-12-21 21:35:07 +00:00
|
|
|
#include <qse/awk/StdAwk.hpp>
|
|
|
|
#include <qse/cmn/str.h>
|
|
|
|
#include <qse/cmn/time.h>
|
2009-01-17 08:57:27 +00:00
|
|
|
#include <qse/cmn/pcp.h>
|
2009-01-18 00:44:31 +00:00
|
|
|
#include <qse/cmn/sio.h>
|
2008-12-21 21:35:07 +00:00
|
|
|
#include <qse/utl/stdio.h>
|
2007-05-06 19:44:00 +00:00
|
|
|
|
2007-05-12 19:14:00 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <math.h>
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
2007-09-11 22:42:00 +00:00
|
|
|
#include <tchar.h>
|
2007-05-12 19:14:00 +00:00
|
|
|
#else
|
2007-09-11 22:42:00 +00:00
|
|
|
#include <wchar.h>
|
2007-05-12 19:14:00 +00:00
|
|
|
#endif
|
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
/////////////////////////////////
|
2008-12-30 04:49:25 +00:00
|
|
|
QSE_BEGIN_NAMESPACE(QSE)
|
2007-09-11 22:42:00 +00:00
|
|
|
/////////////////////////////////
|
2007-05-06 19:44:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
StdAwk::StdAwk ()
|
|
|
|
{
|
|
|
|
}
|
2007-05-06 19:44:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
#define ADD_FUNC(name,min,max,impl) \
|
|
|
|
do { \
|
|
|
|
if (addFunction (name, min, max, \
|
|
|
|
(FunctionHandler)impl) == -1) \
|
|
|
|
{ \
|
|
|
|
Awk::close (); \
|
|
|
|
return -1; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
|
|
|
|
int StdAwk::open ()
|
|
|
|
{
|
|
|
|
int n = Awk::open ();
|
|
|
|
if (n == -1) return n;
|
|
|
|
|
2008-12-21 21:35:07 +00:00
|
|
|
ADD_FUNC (QSE_T("sin"), 1, 1, &StdAwk::sin);
|
|
|
|
ADD_FUNC (QSE_T("cos"), 1, 1, &StdAwk::cos);
|
|
|
|
ADD_FUNC (QSE_T("tan"), 1, 1, &StdAwk::tan);
|
|
|
|
ADD_FUNC (QSE_T("atan"), 1, 1, &StdAwk::atan);
|
|
|
|
ADD_FUNC (QSE_T("atan2"), 2, 2, &StdAwk::atan2);
|
|
|
|
ADD_FUNC (QSE_T("log"), 1, 1, &StdAwk::log);
|
|
|
|
ADD_FUNC (QSE_T("exp"), 1, 1, &StdAwk::exp);
|
|
|
|
ADD_FUNC (QSE_T("sqrt"), 1, 1, &StdAwk::sqrt);
|
|
|
|
ADD_FUNC (QSE_T("int"), 1, 1, &StdAwk::fnint);
|
|
|
|
ADD_FUNC (QSE_T("rand"), 0, 0, &StdAwk::rand);
|
|
|
|
ADD_FUNC (QSE_T("srand"), 0, 1, &StdAwk::srand);
|
|
|
|
ADD_FUNC (QSE_T("system"), 1, 1, &StdAwk::system);
|
2007-09-11 22:42:00 +00:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
2007-05-12 19:14:00 +00:00
|
|
|
|
2008-12-17 03:42:48 +00:00
|
|
|
int StdAwk::run (const char_t* main, const char_t** args, size_t nargs)
|
|
|
|
{
|
2008-12-21 21:35:07 +00:00
|
|
|
qse_ntime_t now;
|
2008-12-17 03:42:48 +00:00
|
|
|
|
2008-12-21 21:35:07 +00:00
|
|
|
if (qse_gettime(&now) == -1) this->seed = 0;
|
2008-12-17 03:42:48 +00:00
|
|
|
else this->seed = (unsigned int)now;
|
|
|
|
|
|
|
|
::srand (this->seed);
|
|
|
|
|
|
|
|
return Awk::run (main, args, nargs);
|
|
|
|
}
|
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::sin (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
2008-12-17 03:42:48 +00:00
|
|
|
return ret.set (
|
|
|
|
#if defined(HAVE_SINL)
|
|
|
|
(real_t)::sinl(args[0].toReal())
|
|
|
|
#elif defined(HAVE_SIN)
|
|
|
|
(real_t)::sin(args[0].toReal())
|
|
|
|
#elif defined(HAVE_SINF)
|
|
|
|
(real_t)::sinf(args[0].toReal())
|
|
|
|
#else
|
|
|
|
#error ### no sin function available ###
|
|
|
|
#endif
|
|
|
|
);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-12 19:14:00 +00:00
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::cos (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
2008-12-17 03:42:48 +00:00
|
|
|
return ret.set (
|
|
|
|
#if defined(HAVE_COSL)
|
|
|
|
(real_t)::cosl(args[0].toReal())
|
|
|
|
#elif defined(HAVE_COS)
|
|
|
|
(real_t)::cos(args[0].toReal())
|
|
|
|
#elif defined(HAVE_COSF)
|
|
|
|
(real_t)::cosf(args[0].toReal())
|
|
|
|
#else
|
|
|
|
#error ### no cos function available ###
|
|
|
|
#endif
|
|
|
|
);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-12 19:14:00 +00:00
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::tan (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
2008-12-17 03:42:48 +00:00
|
|
|
return ret.set (
|
|
|
|
#if defined(HAVE_TANL)
|
|
|
|
(real_t)::tanl(args[0].toReal())
|
|
|
|
#elif defined(HAVE_TAN)
|
|
|
|
(real_t)::tan(args[0].toReal())
|
|
|
|
#elif defined(HAVE_TANF)
|
|
|
|
(real_t)::tanf(args[0].toReal())
|
|
|
|
#else
|
|
|
|
#error ### no tan function available ###
|
|
|
|
#endif
|
|
|
|
);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-09-02 00:43:00 +00:00
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::atan (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
2008-12-17 03:42:48 +00:00
|
|
|
return ret.set (
|
|
|
|
#if defined(HAVE_ATANL)
|
|
|
|
(real_t)::atanl(args[0].toReal())
|
|
|
|
#elif defined(HAVE_ATAN)
|
|
|
|
(real_t)::atan(args[0].toReal())
|
|
|
|
#elif defined(HAVE_ATANF)
|
|
|
|
(real_t)::atanf(args[0].toReal())
|
|
|
|
#else
|
|
|
|
#error ### no atan function available ###
|
|
|
|
#endif
|
|
|
|
);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-12 19:14:00 +00:00
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::atan2 (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
2008-12-17 03:42:48 +00:00
|
|
|
return ret.set (
|
|
|
|
#if defined(HAVE_ATAN2L)
|
|
|
|
(real_t)::atan2l(args[0].toReal(), args[1].toReal())
|
|
|
|
#elif defined(HAVE_ATAN2)
|
|
|
|
(real_t)::atan2(args[0].toReal(), args[1].toReal())
|
|
|
|
#elif defined(HAVE_ATAN2F)
|
|
|
|
(real_t)::atan2f(args[0].toReal(), args[1].toReal())
|
|
|
|
#else
|
|
|
|
#error ### no atan2 function available ###
|
|
|
|
#endif
|
|
|
|
);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-12 19:14:00 +00:00
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::log (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
2008-12-17 03:42:48 +00:00
|
|
|
return ret.set (
|
|
|
|
#if defined(HAVE_LOGL)
|
|
|
|
(real_t)::logl(args[0].toReal())
|
|
|
|
#elif defined(HAVE_LOG)
|
|
|
|
(real_t)::log(args[0].toReal())
|
|
|
|
#elif defined(HAVE_LOGF)
|
|
|
|
(real_t)::logf(args[0].toReal())
|
|
|
|
#else
|
|
|
|
#error ### no log function available ###
|
|
|
|
#endif
|
|
|
|
);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-12 19:14:00 +00:00
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::exp (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
2008-12-17 03:42:48 +00:00
|
|
|
return ret.set (
|
|
|
|
#if defined(HAVE_EXPL)
|
|
|
|
(real_t)::expl(args[0].toReal())
|
|
|
|
#elif defined(HAVE_EXP)
|
|
|
|
(real_t)::exp(args[0].toReal())
|
|
|
|
#elif defined(HAVE_EXPF)
|
|
|
|
(real_t)::expf(args[0].toReal())
|
|
|
|
#else
|
|
|
|
#error ### no exp function available ###
|
|
|
|
#endif
|
|
|
|
);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-12 19:14:00 +00:00
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::sqrt (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
2008-12-17 03:42:48 +00:00
|
|
|
return ret.set (
|
|
|
|
#if defined(HAVE_SQRTL)
|
|
|
|
(real_t)::sqrtl(args[0].toReal())
|
|
|
|
#elif defined(HAVE_SQRT)
|
|
|
|
(real_t)::sqrt(args[0].toReal())
|
|
|
|
#elif defined(HAVE_SQRTF)
|
|
|
|
(real_t)::sqrtf(args[0].toReal())
|
|
|
|
#else
|
|
|
|
#error ### no sqrt function available ###
|
|
|
|
#endif
|
|
|
|
);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-12 19:14:00 +00:00
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::fnint (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
2007-09-25 00:12:00 +00:00
|
|
|
return ret.set (args[0].toInt());
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-12 19:14:00 +00:00
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::rand (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
2007-09-25 00:12:00 +00:00
|
|
|
return ret.set ((long_t)::rand());
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::srand (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
2008-12-17 03:42:48 +00:00
|
|
|
unsigned int prevSeed = this->seed;
|
|
|
|
|
|
|
|
if (nargs == 0)
|
|
|
|
{
|
2008-12-21 21:35:07 +00:00
|
|
|
qse_ntime_t now;
|
2008-12-17 03:42:48 +00:00
|
|
|
|
2008-12-21 21:35:07 +00:00
|
|
|
if (qse_gettime (&now) == -1)
|
2008-12-17 03:42:48 +00:00
|
|
|
this->seed = (unsigned int)now;
|
|
|
|
else this->seed >>= 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
this->seed = (unsigned int)args[0].toInt();
|
|
|
|
}
|
2007-12-05 08:13:38 +00:00
|
|
|
|
2008-12-17 03:42:48 +00:00
|
|
|
::srand (this->seed);
|
2007-09-25 00:12:00 +00:00
|
|
|
return ret.set ((long_t)prevSeed);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-06 19:44:00 +00:00
|
|
|
|
2007-09-25 00:12:00 +00:00
|
|
|
int StdAwk::system (Run& run, Return& ret, const Argument* args, size_t nargs,
|
2007-09-11 22:42:00 +00:00
|
|
|
const char_t* name, size_t len)
|
|
|
|
{
|
|
|
|
size_t l;
|
|
|
|
const char_t* ptr = args[0].toStr(&l);
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
#ifdef _WIN32
|
2007-09-25 00:12:00 +00:00
|
|
|
return ret.set ((long_t)::_tsystem(ptr));
|
2008-12-21 21:35:07 +00:00
|
|
|
#elif defined(QSE_CHAR_IS_MCHAR)
|
2007-09-25 00:12:00 +00:00
|
|
|
return ret.set ((long_t)::system(ptr));
|
2007-09-11 22:42:00 +00:00
|
|
|
#else
|
2008-12-30 04:49:25 +00:00
|
|
|
char* mbs = (char*) qse_awk_alloc ((awk_t*)(Awk*)run, l*5+1);
|
2008-12-21 21:35:07 +00:00
|
|
|
if (mbs == QSE_NULL) return -1;
|
2007-09-11 22:42:00 +00:00
|
|
|
|
2008-12-30 04:49:25 +00:00
|
|
|
/* at this point, the string is guaranteed to be
|
|
|
|
* null-terminating. so qse_wcstombs() can be used to convert
|
|
|
|
* the string, not qse_wcsntombsn(). */
|
|
|
|
|
|
|
|
qse_size_t mbl = l * 5;
|
|
|
|
if (qse_wcstombs (ptr, mbs, &mbl) != l && mbl >= l * 5)
|
2007-09-25 00:12:00 +00:00
|
|
|
{
|
2008-12-30 04:49:25 +00:00
|
|
|
/* not the entire string is converted.
|
|
|
|
* mbs is not null-terminated properly. */
|
|
|
|
qse_awk_free ((awk_t*)(Awk*)run, mbs);
|
2007-09-25 00:12:00 +00:00
|
|
|
return -1;
|
|
|
|
}
|
2008-12-30 04:49:25 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
mbs[mbl] = '\0';
|
2007-09-25 00:12:00 +00:00
|
|
|
int n = ret.set ((long_t)::system(mbs));
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2008-12-30 04:49:25 +00:00
|
|
|
qse_awk_free ((awk_t*)(Awk*)run, mbs);
|
2007-09-11 22:42:00 +00:00
|
|
|
return n;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
int StdAwk::openPipe (Pipe& io)
|
|
|
|
{
|
|
|
|
Awk::Pipe::Mode mode = io.getMode();
|
2009-01-17 08:57:27 +00:00
|
|
|
qse_pcp_t* pcp = QSE_NULL;
|
|
|
|
int flags;
|
2007-09-11 22:42:00 +00:00
|
|
|
|
|
|
|
switch (mode)
|
2007-05-18 01:21:00 +00:00
|
|
|
{
|
2007-09-11 22:42:00 +00:00
|
|
|
case Awk::Pipe::READ:
|
2009-01-17 08:57:27 +00:00
|
|
|
/* TODO: should we specify ERRTOOUT? */
|
|
|
|
flags = QSE_PCP_READOUT |
|
|
|
|
QSE_PCP_ERRTOOUT;
|
2007-09-11 22:42:00 +00:00
|
|
|
break;
|
|
|
|
case Awk::Pipe::WRITE:
|
2009-01-17 08:57:27 +00:00
|
|
|
flags = QSE_PCP_WRITEIN;
|
|
|
|
break;
|
|
|
|
case Awk::Pipe::RW:
|
|
|
|
flags = QSE_PCP_READOUT |
|
|
|
|
QSE_PCP_ERRTOOUT |
|
|
|
|
QSE_PCP_WRITEIN;
|
2007-09-11 22:42:00 +00:00
|
|
|
break;
|
2007-05-18 01:21:00 +00:00
|
|
|
}
|
|
|
|
|
2009-01-17 08:57:27 +00:00
|
|
|
pcp = qse_pcp_open (
|
2009-01-18 00:44:31 +00:00
|
|
|
((Awk*)io)->getMmgr(),
|
2009-01-17 08:57:27 +00:00
|
|
|
0,
|
|
|
|
io.getName(),
|
|
|
|
flags|QSE_PCP_TEXT|QSE_PCP_SHELL
|
|
|
|
);
|
|
|
|
if (pcp == QSE_NULL) return -1;
|
2007-05-20 01:45:00 +00:00
|
|
|
|
2009-01-17 08:57:27 +00:00
|
|
|
io.setHandle (pcp);
|
2007-09-11 22:42:00 +00:00
|
|
|
return 1;
|
|
|
|
}
|
2007-05-20 01:45:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
int StdAwk::closePipe (Pipe& io)
|
|
|
|
{
|
2009-01-17 08:57:27 +00:00
|
|
|
qse_pcp_close ((qse_pcp_t*)io.getHandle());
|
2007-09-11 22:42:00 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
StdAwk::ssize_t StdAwk::readPipe (Pipe& io, char_t* buf, size_t len)
|
|
|
|
{
|
2009-01-17 08:57:27 +00:00
|
|
|
return qse_pcp_read ((qse_pcp_t*)io.getHandle(), buf, len, QSE_PCP_OUT);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
|
|
|
|
2009-01-17 08:57:27 +00:00
|
|
|
StdAwk::ssize_t StdAwk::writePipe (Pipe& io, const char_t* buf, size_t len)
|
2007-09-11 22:42:00 +00:00
|
|
|
{
|
2009-01-17 08:57:27 +00:00
|
|
|
return qse_pcp_write ((qse_pcp_t*)io.getHandle(), buf, len, QSE_PCP_IN);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
int StdAwk::flushPipe (Pipe& io)
|
|
|
|
{
|
2009-01-17 08:57:27 +00:00
|
|
|
return qse_pcp_flush ((qse_pcp_t*)io.getHandle(), QSE_PCP_IN);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
// file io handlers
|
|
|
|
int StdAwk::openFile (File& io)
|
|
|
|
{
|
|
|
|
Awk::File::Mode mode = io.getMode();
|
2009-01-18 00:44:31 +00:00
|
|
|
qse_sio_t* sio = QSE_NULL;
|
|
|
|
int flags;
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
switch (mode)
|
|
|
|
{
|
|
|
|
case Awk::File::READ:
|
2009-01-18 00:44:31 +00:00
|
|
|
flags = QSE_SIO_READ;
|
2007-09-11 22:42:00 +00:00
|
|
|
break;
|
|
|
|
case Awk::File::WRITE:
|
2009-01-18 00:44:31 +00:00
|
|
|
flags = QSE_SIO_WRITE |
|
|
|
|
QSE_SIO_CREATE |
|
|
|
|
QSE_SIO_TRUNCATE;
|
2007-09-11 22:42:00 +00:00
|
|
|
break;
|
|
|
|
case Awk::File::APPEND:
|
2009-01-18 00:44:31 +00:00
|
|
|
flags = QSE_SIO_APPEND |
|
|
|
|
QSE_SIO_CREATE;
|
2007-09-11 22:42:00 +00:00
|
|
|
break;
|
2007-05-18 01:21:00 +00:00
|
|
|
}
|
|
|
|
|
2009-01-18 00:44:31 +00:00
|
|
|
sio = qse_sio_open (
|
|
|
|
((Awk*)io)->getMmgr(),
|
|
|
|
0,
|
|
|
|
io.getName(),
|
|
|
|
flags
|
|
|
|
);
|
|
|
|
if (sio == NULL) return -1;
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2009-01-18 00:44:31 +00:00
|
|
|
io.setHandle (sio);
|
2007-09-11 22:42:00 +00:00
|
|
|
return 1;
|
|
|
|
}
|
2007-05-20 01:45:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
int StdAwk::closeFile (File& io)
|
|
|
|
{
|
2009-01-18 00:44:31 +00:00
|
|
|
qse_sio_close ((qse_sio_t*)io.getHandle());
|
2007-09-11 22:42:00 +00:00
|
|
|
return 0;
|
|
|
|
}
|
2007-05-20 01:45:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
StdAwk::ssize_t StdAwk::readFile (File& io, char_t* buf, size_t len)
|
|
|
|
{
|
2009-01-18 01:48:21 +00:00
|
|
|
return qse_sio_read ((qse_sio_t*)io.getHandle(), buf, len);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
|
|
|
|
2009-01-17 08:57:27 +00:00
|
|
|
StdAwk::ssize_t StdAwk::writeFile (File& io, const char_t* buf, size_t len)
|
2007-09-11 22:42:00 +00:00
|
|
|
{
|
2009-01-18 01:48:21 +00:00
|
|
|
return qse_sio_write ((qse_sio_t*)io.getHandle(), buf, len);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
int StdAwk::flushFile (File& io)
|
|
|
|
{
|
2009-01-18 00:44:31 +00:00
|
|
|
return qse_sio_flush ((qse_sio_t*)io.getHandle());
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
// memory allocation primitives
|
|
|
|
void* StdAwk::allocMem (size_t n)
|
|
|
|
{
|
|
|
|
return ::malloc (n);
|
|
|
|
}
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
void* StdAwk::reallocMem (void* ptr, size_t n)
|
|
|
|
{
|
|
|
|
return ::realloc (ptr, n);
|
|
|
|
}
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
void StdAwk::freeMem (void* ptr)
|
|
|
|
{
|
|
|
|
::free (ptr);
|
|
|
|
}
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2008-08-21 04:58:19 +00:00
|
|
|
// character handling primitive
|
|
|
|
Awk::bool_t StdAwk::isType (cint_t c, ccls_type_t type)
|
2007-09-11 22:42:00 +00:00
|
|
|
{
|
2008-12-21 21:35:07 +00:00
|
|
|
return qse_ccls_is (c, (qse_ccls_type_t)type);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2008-08-21 04:58:19 +00:00
|
|
|
Awk::cint_t StdAwk::transCase (cint_t c, ccls_type_t type)
|
2007-09-11 22:42:00 +00:00
|
|
|
{
|
2008-12-21 21:35:07 +00:00
|
|
|
return qse_ccls_to (c, (qse_ccls_type_t)type);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
// miscellaneous primitive
|
|
|
|
StdAwk::real_t StdAwk::pow (real_t x, real_t y)
|
|
|
|
{
|
|
|
|
return ::pow (x, y);
|
|
|
|
}
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
int StdAwk::vsprintf (
|
|
|
|
char_t* buf, size_t size, const char_t* fmt, va_list arg)
|
|
|
|
{
|
2008-12-21 21:35:07 +00:00
|
|
|
return qse_vsprintf (buf, size, fmt, arg);
|
2007-09-11 22:42:00 +00:00
|
|
|
}
|
2007-05-18 01:21:00 +00:00
|
|
|
|
2007-09-11 22:42:00 +00:00
|
|
|
/////////////////////////////////
|
2008-12-30 04:49:25 +00:00
|
|
|
QSE_END_NAMESPACE(QSE)
|
2007-09-11 22:42:00 +00:00
|
|
|
/////////////////////////////////
|
|
|
|
|