Added some c++ code to implment missing features from the std(c) implementation. not completed yet
This commit is contained in:
parent
785c95b1e6
commit
17a8a3039d
@ -126,14 +126,14 @@ protected:
|
||||
const char_t* name, size_t len);
|
||||
int system (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
const char_t* name, size_t len);
|
||||
int time (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
const char_t* name, size_t len);
|
||||
|
||||
#if defined(QSE_CHAR_IS_WCHAR)
|
||||
qse_cmgr_t* getcmgr (const char_t* ioname);
|
||||
int setenc (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
int setioattr (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
const char_t* name, size_t len);
|
||||
int unsetenc (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
int getioattr (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
const char_t* name, size_t len);
|
||||
#endif
|
||||
|
||||
// pipe io handlers
|
||||
int openPipe (Pipe& io);
|
||||
@ -183,6 +183,12 @@ protected:
|
||||
qse_htb_t cmgrtab;
|
||||
bool cmgrtab_inited;
|
||||
|
||||
/* global variables */
|
||||
int gbl_argc;
|
||||
int gbl_argv;
|
||||
int gbl_environ;
|
||||
int gbl_procinfo;
|
||||
|
||||
/* standard input console - reuse runarg */
|
||||
size_t runarg_index;
|
||||
size_t runarg_count;
|
||||
|
@ -1272,8 +1272,7 @@ int Awk::init_runctx ()
|
||||
rio.file = fileHandler;
|
||||
rio.console = consoleHandler;
|
||||
|
||||
rtx_t* rtx = qse_awk_rtx_open (
|
||||
awk, QSE_SIZEOF(rxtn_t), &rio, (qse_cstr_t*)runarg.ptr);
|
||||
rtx_t* rtx = qse_awk_rtx_open (awk, QSE_SIZEOF(rxtn_t), &rio);
|
||||
if (rtx == QSE_NULL)
|
||||
{
|
||||
retrieveError();
|
||||
|
@ -96,14 +96,29 @@ int StdAwk::open ()
|
||||
int n = Awk::open ();
|
||||
if (n == -1) return n;
|
||||
|
||||
ADDFNC (QSE_T("rand"), 0, 0, &StdAwk::rand, 0);
|
||||
ADDFNC (QSE_T("srand"), 0, 1, &StdAwk::srand, 0);
|
||||
ADDFNC (QSE_T("system"), 1, 1, &StdAwk::system, 0);
|
||||
this->gbl_argc = addGlobal (QSE_T("ARGC"));
|
||||
this->gbl_argv = addGlobal (QSE_T("ARGV"));
|
||||
this->gbl_environ = addGlobal (QSE_T("ENVIRON"));
|
||||
this->gbl_procinfo = addGlobal (QSE_T("PROCINFO"));
|
||||
if (this->gbl_argc <= -1 ||
|
||||
this->gbl_argv <= -1 ||
|
||||
this->gbl_environ <= -1 ||
|
||||
this->gbl_procinfo <= -1)
|
||||
{
|
||||
Awk::close ();
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if defined(QSE_CHAR_IS_WCHAR)
|
||||
ADDFNC (QSE_T("setenc"), 2, 2, &StdAwk::setenc, QSE_AWK_RIO);
|
||||
ADDFNC (QSE_T("unsetenc"), 1, 1, &StdAwk::unsetenc, QSE_AWK_RIO);
|
||||
#endif
|
||||
if (addFunction (QSE_T("rand"), 0, 0, (FunctionHandler)&StdAwk::rand, 0) <= -1 ||
|
||||
addFunction (QSE_T("srand"), 0, 1, (FunctionHandler)&StdAwk::srand, 0) <= -1 ||
|
||||
addFunction (QSE_T("system"), 1, 1, (FunctionHandler)&StdAwk::system, 0) <= -1 ||
|
||||
addFunction (QSE_T("time"), 1, 1, (FunctionHandler)&StdAwk::time, 0) <= -1 ||
|
||||
addFunction (QSE_T("setioattr"), 3, 3, (FunctionHandler)&StdAwk::setioattr, QSE_AWK_RIO) <= -1 ||
|
||||
addFunction (QSE_T("getioattr"), 2, 2, (FunctionHandler)&StdAwk::getioattr, QSE_AWK_RIO) <= -1)
|
||||
{
|
||||
Awk::close ();
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_ntime_t now;
|
||||
|
||||
@ -197,7 +212,7 @@ int StdAwk::system (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
size_t l;
|
||||
const char_t* ptr = args[0].toStr(&l);
|
||||
|
||||
#ifdef _WIN32
|
||||
#if defined(_WIN32)
|
||||
return ret.setInt ((long_t)::_tsystem(ptr));
|
||||
#elif defined(QSE_CHAR_IS_MCHAR)
|
||||
return ret.setInt ((long_t)::system(ptr));
|
||||
@ -212,7 +227,13 @@ int StdAwk::system (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(QSE_CHAR_IS_WCHAR)
|
||||
int StdAwk::time (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
const char_t* name, size_t len)
|
||||
{
|
||||
/* TODO: */
|
||||
return 0;
|
||||
}
|
||||
|
||||
qse_cmgr_t* StdAwk::getcmgr (const char_t* ioname)
|
||||
{
|
||||
QSE_ASSERT (this->cmgrtab_inited == true);
|
||||
@ -222,7 +243,7 @@ qse_cmgr_t* StdAwk::getcmgr (const char_t* ioname)
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
int StdAwk::setenc (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
int StdAwk::setioattr (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
const char_t* name, size_t len)
|
||||
{
|
||||
QSE_ASSERT (this->cmgrtab_inited == true);
|
||||
@ -248,7 +269,7 @@ int StdAwk::setenc (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
return ret.setInt ((long_t)(pair? 0: -1));
|
||||
}
|
||||
|
||||
int StdAwk::unsetenc (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
int StdAwk::getioattr (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
const char_t* name, size_t len)
|
||||
{
|
||||
QSE_ASSERT (this->cmgrtab_inited == true);
|
||||
@ -257,7 +278,6 @@ int StdAwk::unsetenc (Run& run, Value& ret, const Value* args, size_t nargs,
|
||||
const char_t* ptr = args[0].toStr(&l);
|
||||
return ret.setInt ((long_t)qse_htb_delete (&this->cmgrtab, ptr, l));
|
||||
}
|
||||
#endif
|
||||
|
||||
int StdAwk::openPipe (Pipe& io)
|
||||
{
|
||||
@ -490,7 +510,7 @@ int StdAwk::open_console_in (Console& io)
|
||||
* 'BEGIN { ARGV[1]="file3"; }
|
||||
* { print $0; }' file1 file2
|
||||
*/
|
||||
argv = qse_awk_rtx_getgbl (rtx, QSE_AWK_GBL_ARGV);
|
||||
argv = qse_awk_rtx_getgbl (rtx, this->gbl_argv);
|
||||
QSE_ASSERT (argv != QSE_NULL);
|
||||
QSE_ASSERT (argv->type == QSE_AWK_VAL_MAP);
|
||||
|
||||
|
@ -2416,18 +2416,13 @@ static int add_globals (qse_awk_t* awk)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define ADDFNC(awk,name,min,max,fnc,valid) \
|
||||
if (qse_awk_addfnc (\
|
||||
(awk), (name), qse_strlen(name), \
|
||||
valid, (min), (max), QSE_NULL, (fnc)) == QSE_NULL) return -1;
|
||||
|
||||
static int add_functions (qse_awk_t* awk)
|
||||
{
|
||||
ADDFNC (awk, QSE_T("rand"), 0, 0, fnc_rand, 0);
|
||||
ADDFNC (awk, QSE_T("srand"), 0, 1, fnc_srand, 0);
|
||||
ADDFNC (awk, QSE_T("system"), 1, 1, fnc_system, 0);
|
||||
ADDFNC (awk, QSE_T("time"), 0, 0, fnc_time, 0);
|
||||
ADDFNC (awk, QSE_T("setioattr"), 3, 3, fnc_setioattr, QSE_AWK_RIO);
|
||||
ADDFNC (awk, QSE_T("getioattr"), 2, 2, fnc_getioattr, QSE_AWK_RIO);
|
||||
if (qse_awk_addfnc (awk, QSE_T("rand"), 4, 0, 0, 0, QSE_NULL, fnc_rand) <= -1 ||
|
||||
qse_awk_addfnc (awk, QSE_T("srand"), 5, 0, 0, 1, QSE_NULL, fnc_srand) <= -1 ||
|
||||
qse_awk_addfnc (awk, QSE_T("system"), 6, 0, 1, 1, QSE_NULL, fnc_system) <= -1 ||
|
||||
qse_awk_addfnc (awk, QSE_T("time"), 4, 0, 0, 0, QSE_NULL, fnc_time) <= -1 ||
|
||||
qse_awk_addfnc (awk, QSE_T("setioattr"), 9, QSE_AWK_RIO, 3, 3, QSE_NULL, fnc_setioattr) <= -1 ||
|
||||
qse_awk_addfnc (awk, QSE_T("getioattr"), 9, QSE_AWK_RIO, 2, 2, QSE_NULL, fnc_getioattr) <= -1) return -1;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user