working on Hawk and HawkStd
This commit is contained in:
parent
6f6b860971
commit
8a990821a5
@ -138,7 +138,7 @@ static HAWK_INLINE rxtn_t* GET_RXTN(hawk_rtx_t* rtx) { return (rxtn_t*)((hawk_ui
|
|||||||
// Hawk::RIO
|
// Hawk::RIO
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
Hawk::RIOBase::RIOBase (Run* run, rio_arg_t* riod): run (run), riod (riod)
|
Hawk::RIOBase::RIOBase (Run* run, hawk_rio_arg_t* riod): run (run), riod (riod)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,13 +172,13 @@ Hawk::RIOBase::operator Hawk* () const
|
|||||||
return this->run->awk;
|
return this->run->awk;
|
||||||
}
|
}
|
||||||
|
|
||||||
Hawk::RIOBase::operator Hawk::awk_t* () const
|
Hawk::RIOBase::operator hawk_t* () const
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (hawk_rtx_getawk(this->run->rtx) == this->run->awk->getHandle());
|
HAWK_ASSERT (hawk_rtx_getawk(this->run->rtx) == this->run->awk->getHandle());
|
||||||
return this->run->awk->getHandle();
|
return this->run->awk->getHandle();
|
||||||
}
|
}
|
||||||
|
|
||||||
Hawk::RIOBase::operator Hawk::rio_arg_t* () const
|
Hawk::RIOBase::operator hawk_rio_arg_t* () const
|
||||||
{
|
{
|
||||||
return this->riod;
|
return this->riod;
|
||||||
}
|
}
|
||||||
@ -188,7 +188,7 @@ Hawk::RIOBase::operator Hawk::Run* () const
|
|||||||
return this->run;
|
return this->run;
|
||||||
}
|
}
|
||||||
|
|
||||||
Hawk::RIOBase::operator Hawk::rtx_t* () const
|
Hawk::RIOBase::operator hawk_rtx_t* () const
|
||||||
{
|
{
|
||||||
return this->run->rtx;
|
return this->run->rtx;
|
||||||
}
|
}
|
||||||
@ -197,7 +197,7 @@ Hawk::RIOBase::operator Hawk::rtx_t* () const
|
|||||||
// Hawk::Pipe
|
// Hawk::Pipe
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
Hawk::Pipe::Pipe (Run* run, rio_arg_t* riod): RIOBase (run, riod)
|
Hawk::Pipe::Pipe (Run* run, hawk_rio_arg_t* riod): RIOBase (run, riod)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ Hawk::Pipe::CloseMode Hawk::Pipe::getCloseMode () const
|
|||||||
// Hawk::File
|
// Hawk::File
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
Hawk::File::File (Run* run, rio_arg_t* riod): RIOBase (run, riod)
|
Hawk::File::File (Run* run, hawk_rio_arg_t* riod): RIOBase (run, riod)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,7 +228,7 @@ Hawk::File::Mode Hawk::File::getMode () const
|
|||||||
// Hawk::Console
|
// Hawk::Console
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
Hawk::Console::Console (Run* run, rio_arg_t* riod):
|
Hawk::Console::Console (Run* run, hawk_rio_arg_t* riod):
|
||||||
RIOBase (run, riod), filename (HAWK_NULL)
|
RIOBase (run, riod), filename (HAWK_NULL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -237,7 +237,7 @@ Hawk::Console::~Console ()
|
|||||||
{
|
{
|
||||||
if (filename != HAWK_NULL)
|
if (filename != HAWK_NULL)
|
||||||
{
|
{
|
||||||
hawk_freemem ((awk_t*)this, filename);
|
hawk_freemem ((hawk_t*)this, filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,7 +255,7 @@ int Hawk::Console::setFileName (const hawk_ooch_t* name)
|
|||||||
|
|
||||||
int Hawk::Console::setFNR (int_t fnr)
|
int Hawk::Console::setFNR (int_t fnr)
|
||||||
{
|
{
|
||||||
val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
tmp = hawk_rtx_makeintval (this->run->rtx, fnr);
|
tmp = hawk_rtx_makeintval (this->run->rtx, fnr);
|
||||||
@ -660,7 +660,7 @@ int Hawk::Value::getMbs (const hawk_bch_t** str, hawk_oow_t* len) const
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Hawk::Value::setVal (val_t* v)
|
int Hawk::Value::setVal (hawk_val_t* v)
|
||||||
{
|
{
|
||||||
if (this->run == HAWK_NULL)
|
if (this->run == HAWK_NULL)
|
||||||
{
|
{
|
||||||
@ -671,7 +671,7 @@ int Hawk::Value::setVal (val_t* v)
|
|||||||
return this->setVal(this->run, v);
|
return this->setVal(this->run, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Hawk::Value::setVal (Run* r, val_t* v)
|
int Hawk::Value::setVal (Run* r, hawk_val_t* v)
|
||||||
{
|
{
|
||||||
if (this->run != HAWK_NULL)
|
if (this->run != HAWK_NULL)
|
||||||
{
|
{
|
||||||
@ -713,7 +713,7 @@ int Hawk::Value::setInt (int_t v)
|
|||||||
|
|
||||||
int Hawk::Value::setInt (Run* r, int_t v)
|
int Hawk::Value::setInt (Run* r, int_t v)
|
||||||
{
|
{
|
||||||
val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
tmp = hawk_rtx_makeintval(r->rtx, v);
|
tmp = hawk_rtx_makeintval(r->rtx, v);
|
||||||
if (tmp == HAWK_NULL)
|
if (tmp == HAWK_NULL)
|
||||||
{
|
{
|
||||||
@ -739,7 +739,7 @@ int Hawk::Value::setFlt (flt_t v)
|
|||||||
|
|
||||||
int Hawk::Value::setFlt (Run* r, flt_t v)
|
int Hawk::Value::setFlt (Run* r, flt_t v)
|
||||||
{
|
{
|
||||||
val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
tmp = hawk_rtx_makefltval(r->rtx, v);
|
tmp = hawk_rtx_makefltval(r->rtx, v);
|
||||||
if (tmp == HAWK_NULL)
|
if (tmp == HAWK_NULL)
|
||||||
{
|
{
|
||||||
@ -765,7 +765,7 @@ int Hawk::Value::setStr (const hawk_ooch_t* str, hawk_oow_t len, bool numeric)
|
|||||||
|
|
||||||
int Hawk::Value::setStr (Run* r, const hawk_ooch_t* str, hawk_oow_t len, bool numeric)
|
int Hawk::Value::setStr (Run* r, const hawk_ooch_t* str, hawk_oow_t len, bool numeric)
|
||||||
{
|
{
|
||||||
val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
|
|
||||||
hawk_oocs_t oocs;
|
hawk_oocs_t oocs;
|
||||||
oocs.ptr = (hawk_ooch_t*)str;
|
oocs.ptr = (hawk_ooch_t*)str;
|
||||||
@ -792,7 +792,7 @@ int Hawk::Value::setStr (const hawk_ooch_t* str, bool numeric)
|
|||||||
|
|
||||||
int Hawk::Value::setStr (Run* r, const hawk_ooch_t* str, bool numeric)
|
int Hawk::Value::setStr (Run* r, const hawk_ooch_t* str, bool numeric)
|
||||||
{
|
{
|
||||||
val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
tmp = numeric? hawk_rtx_makenstrvalwithoocstr(r->rtx, str):
|
tmp = numeric? hawk_rtx_makenstrvalwithoocstr(r->rtx, str):
|
||||||
hawk_rtx_makestrvalwithoocstr(r->rtx, str);
|
hawk_rtx_makestrvalwithoocstr(r->rtx, str);
|
||||||
if (tmp == HAWK_NULL)
|
if (tmp == HAWK_NULL)
|
||||||
@ -820,7 +820,7 @@ int Hawk::Value::setMbs (const hawk_bch_t* str, hawk_oow_t len)
|
|||||||
|
|
||||||
int Hawk::Value::setMbs (Run* r, const hawk_bch_t* str, hawk_oow_t len)
|
int Hawk::Value::setMbs (Run* r, const hawk_bch_t* str, hawk_oow_t len)
|
||||||
{
|
{
|
||||||
val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
|
|
||||||
hawk_bcs_t oocs;
|
hawk_bcs_t oocs;
|
||||||
oocs.ptr = (hawk_bch_t*)str;
|
oocs.ptr = (hawk_bch_t*)str;
|
||||||
@ -846,7 +846,7 @@ int Hawk::Value::setMbs (const hawk_bch_t* str)
|
|||||||
|
|
||||||
int Hawk::Value::setMbs (Run* r, const hawk_bch_t* str)
|
int Hawk::Value::setMbs (Run* r, const hawk_bch_t* str)
|
||||||
{
|
{
|
||||||
val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
tmp = hawk_rtx_makembsval(r->rtx, str, hawk_count_bcstr(str));
|
tmp = hawk_rtx_makembsval(r->rtx, str, hawk_count_bcstr(str));
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
{
|
{
|
||||||
@ -859,13 +859,13 @@ int Hawk::Value::setMbs (Run* r, const hawk_bch_t* str)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Hawk::Value::setIndexedVal (const Index& idx, val_t* v)
|
int Hawk::Value::setIndexedVal (const Index& idx, hawk_val_t* v)
|
||||||
{
|
{
|
||||||
if (this->run == HAWK_NULL) return -1;
|
if (this->run == HAWK_NULL) return -1;
|
||||||
return this->setIndexedVal (this->run, idx, v);
|
return this->setIndexedVal (this->run, idx, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Hawk::Value::setIndexedVal (Run* r, const Index& idx, val_t* v)
|
int Hawk::Value::setIndexedVal (Run* r, const Index& idx, hawk_val_t* v)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (r != HAWK_NULL);
|
HAWK_ASSERT (r != HAWK_NULL);
|
||||||
|
|
||||||
@ -873,7 +873,7 @@ int Hawk::Value::setIndexedVal (Run* r, const Index& idx, val_t* v)
|
|||||||
{
|
{
|
||||||
// the previous value is not a map.
|
// the previous value is not a map.
|
||||||
// a new map value needs to be created first.
|
// a new map value needs to be created first.
|
||||||
val_t* map = hawk_rtx_makemapval(r->rtx);
|
hawk_val_t* map = hawk_rtx_makemapval(r->rtx);
|
||||||
if (map == HAWK_NULL)
|
if (map == HAWK_NULL)
|
||||||
{
|
{
|
||||||
r->awk->retrieveError (r);
|
r->awk->retrieveError (r);
|
||||||
@ -934,7 +934,7 @@ int Hawk::Value::setIndexedInt (const Index& idx, int_t v)
|
|||||||
|
|
||||||
int Hawk::Value::setIndexedInt (Run* r, const Index& idx, int_t v)
|
int Hawk::Value::setIndexedInt (Run* r, const Index& idx, int_t v)
|
||||||
{
|
{
|
||||||
val_t* tmp = hawk_rtx_makeintval (r->rtx, v);
|
hawk_val_t* tmp = hawk_rtx_makeintval (r->rtx, v);
|
||||||
if (tmp == HAWK_NULL)
|
if (tmp == HAWK_NULL)
|
||||||
{
|
{
|
||||||
r->awk->retrieveError (r);
|
r->awk->retrieveError (r);
|
||||||
@ -956,7 +956,7 @@ int Hawk::Value::setIndexedFlt (const Index& idx, flt_t v)
|
|||||||
|
|
||||||
int Hawk::Value::setIndexedFlt (Run* r, const Index& idx, flt_t v)
|
int Hawk::Value::setIndexedFlt (Run* r, const Index& idx, flt_t v)
|
||||||
{
|
{
|
||||||
val_t* tmp = hawk_rtx_makefltval(r->rtx, v);
|
hawk_val_t* tmp = hawk_rtx_makefltval(r->rtx, v);
|
||||||
if (tmp == HAWK_NULL)
|
if (tmp == HAWK_NULL)
|
||||||
{
|
{
|
||||||
r->awk->retrieveError (r);
|
r->awk->retrieveError (r);
|
||||||
@ -979,7 +979,7 @@ int Hawk::Value::setIndexedStr (const Index& idx, const hawk_ooch_t* str, hawk_o
|
|||||||
int Hawk::Value::setIndexedStr (
|
int Hawk::Value::setIndexedStr (
|
||||||
Run* r, const Index& idx, const hawk_ooch_t* str, hawk_oow_t len, bool numeric)
|
Run* r, const Index& idx, const hawk_ooch_t* str, hawk_oow_t len, bool numeric)
|
||||||
{
|
{
|
||||||
val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
|
|
||||||
hawk_oocs_t oocs;
|
hawk_oocs_t oocs;
|
||||||
oocs.ptr = (hawk_ooch_t*)str;
|
oocs.ptr = (hawk_ooch_t*)str;
|
||||||
@ -1008,7 +1008,7 @@ int Hawk::Value::setIndexedStr (const Index& idx, const hawk_ooch_t* str, bool n
|
|||||||
|
|
||||||
int Hawk::Value::setIndexedStr (Run* r, const Index& idx, const hawk_ooch_t* str, bool numeric)
|
int Hawk::Value::setIndexedStr (Run* r, const Index& idx, const hawk_ooch_t* str, bool numeric)
|
||||||
{
|
{
|
||||||
val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
tmp = numeric? hawk_rtx_makenstrvalwithoocstr(r->rtx, str):
|
tmp = numeric? hawk_rtx_makenstrvalwithoocstr(r->rtx, str):
|
||||||
hawk_rtx_makestrvalwithoocstr(r->rtx, str);
|
hawk_rtx_makestrvalwithoocstr(r->rtx, str);
|
||||||
if (tmp == HAWK_NULL)
|
if (tmp == HAWK_NULL)
|
||||||
@ -1032,7 +1032,7 @@ int Hawk::Value::setIndexedMbs (const Index& idx, const hawk_bch_t* str, hawk_oo
|
|||||||
|
|
||||||
int Hawk::Value::setIndexedMbs (Run* r, const Index& idx, const hawk_bch_t* str, hawk_oow_t len)
|
int Hawk::Value::setIndexedMbs (Run* r, const Index& idx, const hawk_bch_t* str, hawk_oow_t len)
|
||||||
{
|
{
|
||||||
val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
|
|
||||||
hawk_bcs_t oocs;
|
hawk_bcs_t oocs;
|
||||||
oocs.ptr = (hawk_bch_t*)str;
|
oocs.ptr = (hawk_bch_t*)str;
|
||||||
@ -1060,7 +1060,7 @@ int Hawk::Value::setIndexedMbs (const Index& idx, const hawk_bch_t* str)
|
|||||||
|
|
||||||
int Hawk::Value::setIndexedMbs (Run* r, const Index& idx, const hawk_bch_t* str)
|
int Hawk::Value::setIndexedMbs (Run* r, const Index& idx, const hawk_bch_t* str)
|
||||||
{
|
{
|
||||||
val_t* tmp;
|
hawk_val_t* tmp;
|
||||||
tmp = hawk_rtx_makembsval(r->rtx, str, hawk_count_bcstr(str));
|
tmp = hawk_rtx_makembsval(r->rtx, str, hawk_count_bcstr(str));
|
||||||
if (tmp == HAWK_NULL)
|
if (tmp == HAWK_NULL)
|
||||||
{
|
{
|
||||||
@ -1094,7 +1094,7 @@ int Hawk::Value::getIndexed (const Index& idx, Value* v) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get the value from the map.
|
// get the value from the map.
|
||||||
val_t* fv = hawk_rtx_getmapvalfld(this->run->rtx, val, (hawk_ooch_t*)idx.ptr, idx.len);
|
hawk_val_t* fv = hawk_rtx_getmapvalfld(this->run->rtx, val, (hawk_ooch_t*)idx.ptr, idx.len);
|
||||||
|
|
||||||
// the key is not found. it is not an error. v is just nil
|
// the key is not found. it is not an error. v is just nil
|
||||||
if (fv == HAWK_NULL)
|
if (fv == HAWK_NULL)
|
||||||
@ -1154,7 +1154,7 @@ Hawk::Run::Run (Hawk* awk): awk (awk), rtx (HAWK_NULL)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Hawk::Run::Run (Hawk* awk, rtx_t* rtx): awk (awk), rtx (rtx)
|
Hawk::Run::Run (Hawk* awk, hawk_rtx_t* rtx): awk (awk), rtx (rtx)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
}
|
}
|
||||||
@ -1163,16 +1163,6 @@ Hawk::Run::~Run ()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Hawk::Run::operator Hawk* () const
|
|
||||||
{
|
|
||||||
return this->awk;
|
|
||||||
}
|
|
||||||
|
|
||||||
Hawk::Run::operator Hawk::rtx_t* () const
|
|
||||||
{
|
|
||||||
return this->rtx;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Hawk::Run::halt () const
|
void Hawk::Run::halt () const
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
@ -1182,16 +1172,16 @@ void Hawk::Run::halt () const
|
|||||||
bool Hawk::Run::isHalt () const
|
bool Hawk::Run::isHalt () const
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
return hawk_rtx_ishalt (this->rtx)? true: false;
|
return !!hawk_rtx_ishalt(this->rtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
Hawk::errnum_t Hawk::Run::getErrorNumber () const
|
hawk_errnum_t Hawk::Run::getErrorNumber () const
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
return hawk_rtx_geterrnum (this->rtx);
|
return hawk_rtx_geterrnum(this->rtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
Hawk::loc_t Hawk::Run::getErrorLocation () const
|
hawk_loc_t Hawk::Run::getErrorLocation () const
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
return *hawk_rtx_geterrloc (this->rtx);
|
return *hawk_rtx_geterrloc (this->rtx);
|
||||||
@ -1203,32 +1193,35 @@ const hawk_ooch_t* Hawk::Run::getErrorMessage () const
|
|||||||
return hawk_rtx_geterrmsg (this->rtx);
|
return hawk_rtx_geterrmsg (this->rtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hawk::Run::setError (errnum_t code, const hawk_oocs_t* args, const loc_t* loc)
|
void Hawk::Run::setError (hawk_errnum_t code, const hawk_loc_t* loc)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
hawk_rtx_seterror (this->rtx, code, args, loc);
|
hawk_rtx_seterrnum (this->rtx, loc, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hawk::Run::setErrorWithMessage (
|
void Hawk::Run::formatError (hawk_errnum_t code, const hawk_loc_t* loc, const hawk_bch_t* fmt, ...)
|
||||||
errnum_t code, const hawk_ooch_t* msg, const loc_t* loc)
|
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
|
va_list ap;
|
||||||
|
va_start (ap, fmt);
|
||||||
|
hawk_rtx_seterrbfmt (this->rtx, loc, code, fmt, ap);
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
|
||||||
errinf_t errinf;
|
void Hawk::Run::formatError (hawk_errnum_t code, const hawk_loc_t* loc, const hawk_uch_t* fmt, ...)
|
||||||
|
{
|
||||||
HAWK_MEMSET (&errinf, 0, HAWK_SIZEOF(errinf));
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
errinf.num = code;
|
va_list ap;
|
||||||
if (loc == HAWK_NULL) errinf.loc = *loc;
|
va_start (ap, fmt);
|
||||||
hawk_copy_oocstr (errinf.msg, HAWK_COUNTOF(errinf.msg), msg);
|
hawk_rtx_seterrufmt (this->rtx, loc, code, fmt, ap);
|
||||||
|
va_end (ap);
|
||||||
hawk_rtx_seterrinf (this->rtx, &errinf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int Hawk::Run::setGlobal (int id, int_t v)
|
int Hawk::Run::setGlobal (int id, int_t v)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
|
|
||||||
val_t* tmp = hawk_rtx_makeintval (this->rtx, v);
|
hawk_val_t* tmp = hawk_rtx_makeintval (this->rtx, v);
|
||||||
if (tmp == HAWK_NULL) return -1;
|
if (tmp == HAWK_NULL) return -1;
|
||||||
|
|
||||||
hawk_rtx_refupval (this->rtx, tmp);
|
hawk_rtx_refupval (this->rtx, tmp);
|
||||||
@ -1241,7 +1234,7 @@ int Hawk::Run::setGlobal (int id, flt_t v)
|
|||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
|
|
||||||
val_t* tmp = hawk_rtx_makefltval (this->rtx, v);
|
hawk_val_t* tmp = hawk_rtx_makefltval (this->rtx, v);
|
||||||
if (tmp == HAWK_NULL) return -1;
|
if (tmp == HAWK_NULL) return -1;
|
||||||
|
|
||||||
hawk_rtx_refupval (this->rtx, tmp);
|
hawk_rtx_refupval (this->rtx, tmp);
|
||||||
@ -1254,7 +1247,7 @@ int Hawk::Run::setGlobal (int id, const hawk_ooch_t* ptr, hawk_oow_t len)
|
|||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
|
|
||||||
val_t* tmp = hawk_rtx_makestrvalwithoochars(this->rtx, ptr, len);
|
hawk_val_t* tmp = hawk_rtx_makestrvalwithoochars(this->rtx, ptr, len);
|
||||||
if (tmp == HAWK_NULL) return -1;
|
if (tmp == HAWK_NULL) return -1;
|
||||||
|
|
||||||
hawk_rtx_refupval (this->rtx, tmp);
|
hawk_rtx_refupval (this->rtx, tmp);
|
||||||
@ -1266,7 +1259,7 @@ int Hawk::Run::setGlobal (int id, const hawk_ooch_t* ptr, hawk_oow_t len)
|
|||||||
int Hawk::Run::setGlobal (int id, const Value& gbl)
|
int Hawk::Run::setGlobal (int id, const Value& gbl)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
HAWK_ASSERT (this->rtx != HAWK_NULL);
|
||||||
return hawk_rtx_setgbl (this->rtx, id, (val_t*)gbl);
|
return hawk_rtx_setgbl (this->rtx, id, (hawk_val_t*)gbl);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Hawk::Run::getGlobal (int id, Value& g) const
|
int Hawk::Run::getGlobal (int id, Value& g) const
|
||||||
@ -1295,31 +1288,25 @@ Hawk::Hawk (Mmgr* mmgr):
|
|||||||
errinf.num = HAWK_ENOERR;
|
errinf.num = HAWK_ENOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
Hawk::operator Hawk::awk_t* () const
|
const hawk_ooch_t* Hawk::getErrorString (hawk_errnum_t num) const
|
||||||
{
|
|
||||||
return this->awk;
|
|
||||||
}
|
|
||||||
|
|
||||||
const hawk_ooch_t* Hawk::getErrorString (errnum_t num) const
|
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (awk != HAWK_NULL);
|
HAWK_ASSERT (awk != HAWK_NULL);
|
||||||
HAWK_ASSERT (dflerrstr != HAWK_NULL);
|
HAWK_ASSERT (this->dflerrstr != HAWK_NULL);
|
||||||
return dflerrstr (awk, num);
|
return this->dflerrstr(awk, num);
|
||||||
}
|
}
|
||||||
|
|
||||||
const hawk_ooch_t* Hawk::xerrstr (awk_t* a, errnum_t num)
|
const hawk_ooch_t* Hawk::xerrstr (hawk_t* a, hawk_errnum_t num)
|
||||||
{
|
{
|
||||||
Hawk* awk = *(Hawk**)GET_XTN(a);
|
Hawk* awk = *(Hawk**)GET_XTN(a);
|
||||||
return awk->getErrorString (num);
|
return awk->getErrorString(num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hawk_errnum_t Hawk::getErrorNumber () const
|
||||||
Hawk::errnum_t Hawk::getErrorNumber () const
|
|
||||||
{
|
{
|
||||||
return this->errinf.num;
|
return this->errinf.num;
|
||||||
}
|
}
|
||||||
|
|
||||||
Hawk::loc_t Hawk::getErrorLocation () const
|
hawk_loc_t Hawk::getErrorLocation () const
|
||||||
{
|
{
|
||||||
return this->errinf.loc;
|
return this->errinf.loc;
|
||||||
}
|
}
|
||||||
@ -1329,32 +1316,56 @@ const hawk_ooch_t* Hawk::getErrorMessage () const
|
|||||||
return this->errinf.msg;
|
return this->errinf.msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hawk::setError (errnum_t code, const hawk_oocs_t* args, const loc_t* loc)
|
void Hawk::setError (hawk_errnum_t code, const hawk_loc_t* loc)
|
||||||
{
|
{
|
||||||
if (awk != HAWK_NULL)
|
if (this->awk)
|
||||||
{
|
{
|
||||||
hawk_seterror (awk, code, args, loc);
|
hawk_seterrnum (this->awk, loc, code);
|
||||||
this->retrieveError ();
|
this->retrieveError ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
HAWK_MEMSET (&errinf, 0, HAWK_SIZEOF(errinf));
|
HAWK_MEMSET (&this->errinf, 0, HAWK_SIZEOF(this->errinf));
|
||||||
errinf.num = code;
|
this->errinf.num = code;
|
||||||
if (loc != HAWK_NULL) errinf.loc = *loc;
|
if (loc != HAWK_NULL) this->errinf.loc = *loc;
|
||||||
hawk_copy_oocstr (errinf.msg, HAWK_COUNTOF(errinf.msg),
|
hawk_copy_oocstr (this->errinf.msg, HAWK_COUNTOF(this->errinf.msg), HAWK_T("not ready to set an error message"));
|
||||||
HAWK_T("not ready to set an error message"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hawk::setErrorWithMessage (errnum_t code, const hawk_ooch_t* msg, const loc_t* loc)
|
void Hawk::formatError (hawk_errnum_t code, const hawk_loc_t* loc, const hawk_bch_t* fmt, ...)
|
||||||
{
|
{
|
||||||
HAWK_MEMSET (&errinf, 0, HAWK_SIZEOF(errinf));
|
if (this->awk)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start (ap, fmt);
|
||||||
|
hawk_seterrbfmt (this->awk, loc, code, fmt, ap);
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HAWK_MEMSET (&this->errinf, 0, HAWK_SIZEOF(this->errinf));
|
||||||
|
this->errinf.num = code;
|
||||||
|
if (loc != HAWK_NULL) this->errinf.loc = *loc;
|
||||||
|
hawk_copy_oocstr (this->errinf.msg, HAWK_COUNTOF(this->errinf.msg), HAWK_T("not ready to set an error message"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
errinf.num = code;
|
void Hawk::formatError (hawk_errnum_t code, const hawk_loc_t* loc, const hawk_uch_t* fmt, ...)
|
||||||
if (loc != HAWK_NULL) errinf.loc = *loc;
|
{
|
||||||
hawk_copy_oocstr (errinf.msg, HAWK_COUNTOF(errinf.msg), msg);
|
if (this->awk)
|
||||||
|
{
|
||||||
if (awk != HAWK_NULL) hawk_seterrinf (awk, &errinf);
|
va_list ap;
|
||||||
|
va_start (ap, fmt);
|
||||||
|
hawk_seterrufmt (this->awk, loc, code, fmt, ap);
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HAWK_MEMSET (&this->errinf, 0, HAWK_SIZEOF(this->errinf));
|
||||||
|
this->errinf.num = code;
|
||||||
|
if (loc != HAWK_NULL) this->errinf.loc = *loc;
|
||||||
|
hawk_copy_oocstr (this->errinf.msg, HAWK_COUNTOF(this->errinf.msg), HAWK_T("not ready to set an error message"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hawk::clearError ()
|
void Hawk::clearError ()
|
||||||
@ -1367,7 +1378,7 @@ void Hawk::retrieveError ()
|
|||||||
{
|
{
|
||||||
if (this->awk == HAWK_NULL)
|
if (this->awk == HAWK_NULL)
|
||||||
{
|
{
|
||||||
clearError ();
|
this->clearError ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1426,8 +1437,11 @@ int Hawk::open ()
|
|||||||
xtn->ecb.close = fini_xtn;
|
xtn->ecb.close = fini_xtn;
|
||||||
xtn->ecb.clear = clear_xtn;
|
xtn->ecb.clear = clear_xtn;
|
||||||
|
|
||||||
|
/*
|
||||||
|
// TODO:
|
||||||
dflerrstr = hawk_geterrstr(this->awk);
|
dflerrstr = hawk_geterrstr(this->awk);
|
||||||
hawk_seterrstr (this->awk, xerrstr);
|
hawk_seterrstr (this->awk, Hawk::xerrstr);
|
||||||
|
*/
|
||||||
|
|
||||||
#if defined(HAWK_USE_HTB_FOR_FUNCTION_MAP)
|
#if defined(HAWK_USE_HTB_FOR_FUNCTION_MAP)
|
||||||
this->functionMap = hawk_htb_open(
|
this->functionMap = hawk_htb_open(
|
||||||
@ -1555,7 +1569,7 @@ int Hawk::loop (Value* ret)
|
|||||||
HAWK_ASSERT (this->awk != HAWK_NULL);
|
HAWK_ASSERT (this->awk != HAWK_NULL);
|
||||||
HAWK_ASSERT (this->runctx.rtx != HAWK_NULL);
|
HAWK_ASSERT (this->runctx.rtx != HAWK_NULL);
|
||||||
|
|
||||||
val_t* rv = hawk_rtx_loop (this->runctx.rtx);
|
hawk_val_t* rv = hawk_rtx_loop (this->runctx.rtx);
|
||||||
if (rv == HAWK_NULL)
|
if (rv == HAWK_NULL)
|
||||||
{
|
{
|
||||||
this->retrieveError (&this->runctx);
|
this->retrieveError (&this->runctx);
|
||||||
@ -1573,15 +1587,15 @@ int Hawk::call (const hawk_bch_t* name, Value* ret, const Value* args, hawk_oow_
|
|||||||
HAWK_ASSERT (this->awk != HAWK_NULL);
|
HAWK_ASSERT (this->awk != HAWK_NULL);
|
||||||
HAWK_ASSERT (this->runctx.rtx != HAWK_NULL);
|
HAWK_ASSERT (this->runctx.rtx != HAWK_NULL);
|
||||||
|
|
||||||
val_t* buf[16];
|
hawk_val_t* buf[16];
|
||||||
val_t** ptr = HAWK_NULL;
|
hawk_val_t** ptr = HAWK_NULL;
|
||||||
|
|
||||||
if (args != HAWK_NULL)
|
if (args != HAWK_NULL)
|
||||||
{
|
{
|
||||||
if (nargs <= HAWK_COUNTOF(buf)) ptr = buf;
|
if (nargs <= HAWK_COUNTOF(buf)) ptr = buf;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ptr = (val_t**)hawk_allocmem(awk, HAWK_SIZEOF(val_t*) * nargs);
|
ptr = (hawk_val_t**)hawk_allocmem(awk, HAWK_SIZEOF(hawk_val_t*) * nargs);
|
||||||
if (ptr == HAWK_NULL)
|
if (ptr == HAWK_NULL)
|
||||||
{
|
{
|
||||||
this->runctx.setError (HAWK_ENOMEM);
|
this->runctx.setError (HAWK_ENOMEM);
|
||||||
@ -1590,10 +1604,10 @@ int Hawk::call (const hawk_bch_t* name, Value* ret, const Value* args, hawk_oow_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (hawk_oow_t i = 0; i < nargs; i++) ptr[i] = (val_t*)args[i];
|
for (hawk_oow_t i = 0; i < nargs; i++) ptr[i] = (hawk_val_t*)args[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
val_t* rv = hawk_rtx_callwithbcstr(this->runctx.rtx, name, ptr, nargs);
|
hawk_val_t* rv = hawk_rtx_callwithbcstr(this->runctx.rtx, name, ptr, nargs);
|
||||||
|
|
||||||
if (ptr != HAWK_NULL && ptr != buf) hawk_freemem (awk, ptr);
|
if (ptr != HAWK_NULL && ptr != buf) hawk_freemem (awk, ptr);
|
||||||
|
|
||||||
@ -1614,15 +1628,15 @@ int Hawk::call (const hawk_uch_t* name, Value* ret, const Value* args, hawk_oow_
|
|||||||
HAWK_ASSERT (this->awk != HAWK_NULL);
|
HAWK_ASSERT (this->awk != HAWK_NULL);
|
||||||
HAWK_ASSERT (this->runctx.rtx != HAWK_NULL);
|
HAWK_ASSERT (this->runctx.rtx != HAWK_NULL);
|
||||||
|
|
||||||
val_t* buf[16];
|
hawk_val_t* buf[16];
|
||||||
val_t** ptr = HAWK_NULL;
|
hawk_val_t** ptr = HAWK_NULL;
|
||||||
|
|
||||||
if (args != HAWK_NULL)
|
if (args != HAWK_NULL)
|
||||||
{
|
{
|
||||||
if (nargs <= HAWK_COUNTOF(buf)) ptr = buf;
|
if (nargs <= HAWK_COUNTOF(buf)) ptr = buf;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ptr = (val_t**)hawk_allocmem(awk, HAWK_SIZEOF(val_t*) * nargs);
|
ptr = (hawk_val_t**)hawk_allocmem(awk, HAWK_SIZEOF(hawk_val_t*) * nargs);
|
||||||
if (ptr == HAWK_NULL)
|
if (ptr == HAWK_NULL)
|
||||||
{
|
{
|
||||||
this->runctx.setError (HAWK_ENOMEM);
|
this->runctx.setError (HAWK_ENOMEM);
|
||||||
@ -1631,10 +1645,10 @@ int Hawk::call (const hawk_uch_t* name, Value* ret, const Value* args, hawk_oow_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (hawk_oow_t i = 0; i < nargs; i++) ptr[i] = (val_t*)args[i];
|
for (hawk_oow_t i = 0; i < nargs; i++) ptr[i] = (hawk_val_t*)args[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
val_t* rv = hawk_rtx_callwithucstr(this->runctx.rtx, name, ptr, nargs);
|
hawk_val_t* rv = hawk_rtx_callwithucstr(this->runctx.rtx, name, ptr, nargs);
|
||||||
|
|
||||||
if (ptr != HAWK_NULL && ptr != buf) hawk_freemem (awk, ptr);
|
if (ptr != HAWK_NULL && ptr != buf) hawk_freemem (awk, ptr);
|
||||||
|
|
||||||
@ -1666,7 +1680,7 @@ int Hawk::init_runctx ()
|
|||||||
rio.file = fileHandler;
|
rio.file = fileHandler;
|
||||||
rio.console = consoleHandler;
|
rio.console = consoleHandler;
|
||||||
|
|
||||||
rtx_t* rtx = hawk_rtx_open(awk, HAWK_SIZEOF(rxtn_t), &rio);
|
hawk_rtx_t* rtx = hawk_rtx_open(awk, HAWK_SIZEOF(rxtn_t), &rio);
|
||||||
if (rtx == HAWK_NULL)
|
if (rtx == HAWK_NULL)
|
||||||
{
|
{
|
||||||
this->retrieveError();
|
this->retrieveError();
|
||||||
@ -1726,20 +1740,20 @@ int Hawk::dispatch_function (Run* run, const fnc_info_t* fi)
|
|||||||
|
|
||||||
#if defined(HAWK_USE_HTB_FOR_FUNCTION_MAP)
|
#if defined(HAWK_USE_HTB_FOR_FUNCTION_MAP)
|
||||||
hawk_htb_pair_t* pair;
|
hawk_htb_pair_t* pair;
|
||||||
pair = hawk_htb_search (this->functionMap, fi->name.ptr, fi->name.len);
|
pair = hawk_htb_search(this->functionMap, fi->name.ptr, fi->name.len);
|
||||||
if (pair == HAWK_NULL)
|
if (pair == HAWK_NULL)
|
||||||
{
|
{
|
||||||
run->setError (HAWK_EFUNNF, &fi->name);
|
run->formatError (HAWK_EFUNNF, HAWK_NULL, HAWK_T("function '%.*js' not defined"), &fi->name.len, &fi->name.ptr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
FunctionHandler handler;
|
FunctionHandler handler;
|
||||||
handler = *(FunctionHandler*)HAWK_HTB_VPTR(pair);
|
handler = *(FunctionHandler*)HAWK_HTB_VPTR(pair);
|
||||||
#else
|
#else
|
||||||
FunctionMap::Pair* pair = this->functionMap.search (Cstr(fi->name.ptr, fi->name.len));
|
FunctionMap::Pair* pair = this->functionMap.search(Cstr(fi->name.ptr, fi->name.len));
|
||||||
if (pair == HAWK_NULL)
|
if (pair == HAWK_NULL)
|
||||||
{
|
{
|
||||||
run->setError (HAWK_EFUNNF, &fi->name);
|
run->formatError (HAWK_EFUNNF, HAWK_NULL, HAWK_T("function '%.*js' not defined"), &fi->name.len, &fi->name.ptr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1786,7 +1800,7 @@ int Hawk::dispatch_function (Run* run, const fnc_info_t* fi)
|
|||||||
for (i = 0; i < nargs; i++)
|
for (i = 0; i < nargs; i++)
|
||||||
{
|
{
|
||||||
int xx;
|
int xx;
|
||||||
val_t* v = hawk_rtx_getarg (run->rtx, i);
|
hawk_val_t* v = hawk_rtx_getarg (run->rtx, i);
|
||||||
|
|
||||||
if (HAWK_RTX_GETVALTYPE (run->rtx, v) == HAWK_VAL_REF)
|
if (HAWK_RTX_GETVALTYPE (run->rtx, v) == HAWK_VAL_REF)
|
||||||
{
|
{
|
||||||
@ -1856,7 +1870,7 @@ int Hawk::dispatch_function (Run* run, const fnc_info_t* fi)
|
|||||||
// Do NOT change the run field from function handler
|
// Do NOT change the run field from function handler
|
||||||
HAWK_ASSERT (args[i].run == run);
|
HAWK_ASSERT (args[i].run == run);
|
||||||
|
|
||||||
val_t* v = hawk_rtx_getarg(run->rtx, i);
|
hawk_val_t* v = hawk_rtx_getarg(run->rtx, i);
|
||||||
if (HAWK_RTX_GETVALTYPE(run->rtx, v) == HAWK_VAL_REF)
|
if (HAWK_RTX_GETVALTYPE(run->rtx, v) == HAWK_VAL_REF)
|
||||||
{
|
{
|
||||||
if (hawk_rtx_setrefval(run->rtx, (hawk_val_ref_t*)v, args[i].toVal()) <= -1)
|
if (hawk_rtx_setrefval(run->rtx, (hawk_val_ref_t*)v, args[i].toVal()) <= -1)
|
||||||
@ -1895,7 +1909,7 @@ int Hawk::dispatch_function (Run* run, const fnc_info_t* fi)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Hawk::xstrs_t::add (awk_t* awk, const hawk_ooch_t* arg, hawk_oow_t len)
|
int Hawk::xstrs_t::add (hawk_t* awk, const hawk_ooch_t* arg, hawk_oow_t len)
|
||||||
{
|
{
|
||||||
if (this->len >= this->capa)
|
if (this->len >= this->capa)
|
||||||
{
|
{
|
||||||
@ -1921,7 +1935,7 @@ int Hawk::xstrs_t::add (awk_t* awk, const hawk_ooch_t* arg, hawk_oow_t len)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hawk::xstrs_t::clear (awk_t* awk)
|
void Hawk::xstrs_t::clear (hawk_t* awk)
|
||||||
{
|
{
|
||||||
if (this->ptr != HAWK_NULL)
|
if (this->ptr != HAWK_NULL)
|
||||||
{
|
{
|
||||||
@ -2138,7 +2152,7 @@ int Hawk::deleteFunction (const hawk_ooch_t* name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
hawk_ooi_t Hawk::readSource (
|
hawk_ooi_t Hawk::readSource (
|
||||||
awk_t* awk, sio_cmd_t cmd, sio_arg_t* arg,
|
hawk_t* awk, sio_cmd_t cmd, sio_arg_t* arg,
|
||||||
hawk_ooch_t* data, hawk_oow_t count)
|
hawk_ooch_t* data, hawk_oow_t count)
|
||||||
{
|
{
|
||||||
xtn_t* xtn = GET_XTN(awk);
|
xtn_t* xtn = GET_XTN(awk);
|
||||||
@ -2158,7 +2172,7 @@ hawk_ooi_t Hawk::readSource (
|
|||||||
}
|
}
|
||||||
|
|
||||||
hawk_ooi_t Hawk::writeSource (
|
hawk_ooi_t Hawk::writeSource (
|
||||||
awk_t* awk, hawk_sio_cmd_t cmd, sio_arg_t* arg,
|
hawk_t* awk, hawk_sio_cmd_t cmd, sio_arg_t* arg,
|
||||||
hawk_ooch_t* data, hawk_oow_t count)
|
hawk_ooch_t* data, hawk_oow_t count)
|
||||||
{
|
{
|
||||||
xtn_t* xtn = GET_XTN(awk);
|
xtn_t* xtn = GET_XTN(awk);
|
||||||
@ -2177,7 +2191,7 @@ hawk_ooi_t Hawk::writeSource (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hawk_ooi_t Hawk::pipeHandler (rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod, void* data, hawk_oow_t count)
|
hawk_ooi_t Hawk::pipeHandler (hawk_rtx_t* rtx, rio_cmd_t cmd, hawk_rio_arg_t* riod, void* data, hawk_oow_t count)
|
||||||
{
|
{
|
||||||
rxtn_t* rxtn = GET_RXTN(rtx);
|
rxtn_t* rxtn = GET_RXTN(rtx);
|
||||||
Hawk* awk = rxtn->run->awk;
|
Hawk* awk = rxtn->run->awk;
|
||||||
@ -2241,7 +2255,7 @@ hawk_ooi_t Hawk::pipeHandler (rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod, void*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hawk_ooi_t Hawk::fileHandler (rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod, void* data, hawk_oow_t count)
|
hawk_ooi_t Hawk::fileHandler (hawk_rtx_t* rtx, rio_cmd_t cmd, hawk_rio_arg_t* riod, void* data, hawk_oow_t count)
|
||||||
{
|
{
|
||||||
rxtn_t* rxtn = GET_RXTN(rtx);
|
rxtn_t* rxtn = GET_RXTN(rtx);
|
||||||
Hawk* awk = rxtn->run->awk;
|
Hawk* awk = rxtn->run->awk;
|
||||||
@ -2305,7 +2319,7 @@ hawk_ooi_t Hawk::fileHandler (rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod, void*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hawk_ooi_t Hawk::consoleHandler (rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod, void* data, hawk_oow_t count)
|
hawk_ooi_t Hawk::consoleHandler (hawk_rtx_t* rtx, rio_cmd_t cmd, hawk_rio_arg_t* riod, void* data, hawk_oow_t count)
|
||||||
{
|
{
|
||||||
rxtn_t* rxtn = GET_RXTN(rtx);
|
rxtn_t* rxtn = GET_RXTN(rtx);
|
||||||
Hawk* awk = rxtn->run->awk;
|
Hawk* awk = rxtn->run->awk;
|
||||||
@ -2487,37 +2501,37 @@ int Hawk::nextConsole (Console& io)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Hawk::functionHandler (rtx_t* rtx, const fnc_info_t* fi)
|
int Hawk::functionHandler (hawk_rtx_t* rtx, const fnc_info_t* fi)
|
||||||
{
|
{
|
||||||
rxtn_t* rxtn = GET_RXTN(rtx);
|
rxtn_t* rxtn = GET_RXTN(rtx);
|
||||||
return rxtn->run->awk->dispatch_function (rxtn->run, fi);
|
return rxtn->run->awk->dispatch_function (rxtn->run, fi);
|
||||||
}
|
}
|
||||||
|
|
||||||
Hawk::flt_t Hawk::pow (awk_t* awk, flt_t x, flt_t y)
|
Hawk::flt_t Hawk::pow (hawk_t* awk, flt_t x, flt_t y)
|
||||||
{
|
{
|
||||||
xtn_t* xtn = GET_XTN(awk);
|
xtn_t* xtn = GET_XTN(awk);
|
||||||
return xtn->awk->pow (x, y);
|
return xtn->awk->pow (x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
Hawk::flt_t Hawk::mod (awk_t* awk, flt_t x, flt_t y)
|
Hawk::flt_t Hawk::mod (hawk_t* awk, flt_t x, flt_t y)
|
||||||
{
|
{
|
||||||
xtn_t* xtn = GET_XTN(awk);
|
xtn_t* xtn = GET_XTN(awk);
|
||||||
return xtn->awk->mod (x, y);
|
return xtn->awk->mod (x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* Hawk::modopen (awk_t* awk, const mod_spec_t* spec)
|
void* Hawk::modopen (hawk_t* awk, const mod_spec_t* spec)
|
||||||
{
|
{
|
||||||
xtn_t* xtn = GET_XTN(awk);
|
xtn_t* xtn = GET_XTN(awk);
|
||||||
return xtn->awk->modopen (spec);
|
return xtn->awk->modopen (spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hawk::modclose (awk_t* awk, void* handle)
|
void Hawk::modclose (hawk_t* awk, void* handle)
|
||||||
{
|
{
|
||||||
xtn_t* xtn = GET_XTN(awk);
|
xtn_t* xtn = GET_XTN(awk);
|
||||||
xtn->awk->modclose (handle);
|
xtn->awk->modclose (handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* Hawk::modgetsym (awk_t* awk, void* handle, const hawk_ooch_t* name)
|
void* Hawk::modgetsym (hawk_t* awk, void* handle, const hawk_ooch_t* name)
|
||||||
{
|
{
|
||||||
xtn_t* xtn = GET_XTN(awk);
|
xtn_t* xtn = GET_XTN(awk);
|
||||||
return xtn->awk->modgetsym (handle, name);
|
return xtn->awk->modgetsym (handle, name);
|
||||||
|
@ -371,23 +371,17 @@ private:
|
|||||||
|
|
||||||
///
|
///
|
||||||
/// The Hawk class implements an AWK interpreter by wrapping around
|
/// The Hawk class implements an AWK interpreter by wrapping around
|
||||||
/// #hawk_t and #hawk_rtx_t.
|
/// #hhawk_t and #hawk_rtx_t.
|
||||||
///
|
///
|
||||||
class HAWK_EXPORT Hawk: public Uncopyable, public Mmged
|
class HAWK_EXPORT Hawk: public Uncopyable, public Mmged
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// define a primitive handle
|
|
||||||
typedef hawk_t awk_t;
|
|
||||||
|
|
||||||
// redefine flt_t. To access Types::flt_t, use the fully qualified
|
// redefine flt_t. To access Types::flt_t, use the fully qualified
|
||||||
// name as it's overriding Types::flt_t.
|
// name as it's overriding Types::flt_t.
|
||||||
typedef hawk_flt_t flt_t;
|
typedef hawk_flt_t flt_t;
|
||||||
typedef hawk_int_t int_t;
|
typedef hawk_int_t int_t;
|
||||||
typedef hawk_uint_t uint_t;
|
typedef hawk_uint_t uint_t;
|
||||||
|
|
||||||
typedef hawk_loc_t loc_t;
|
|
||||||
typedef hawk_errnum_t errnum_t;
|
|
||||||
typedef hawk_errstr_t errstr_t;
|
typedef hawk_errstr_t errstr_t;
|
||||||
typedef hawk_errinf_t errinf_t;
|
typedef hawk_errinf_t errinf_t;
|
||||||
|
|
||||||
@ -405,14 +399,7 @@ public:
|
|||||||
/// The gbl_id_t type redefines #hawk_gbl_id_t.
|
/// The gbl_id_t type redefines #hawk_gbl_id_t.
|
||||||
typedef hawk_gbl_id_t gbl_id_t;
|
typedef hawk_gbl_id_t gbl_id_t;
|
||||||
|
|
||||||
/** Represents an internal awk value */
|
|
||||||
typedef hawk_val_t val_t;
|
|
||||||
|
|
||||||
/** Represents a runtime context */
|
|
||||||
typedef hawk_rtx_t rtx_t;
|
|
||||||
|
|
||||||
/** Represents an runtime I/O data */
|
/** Represents an runtime I/O data */
|
||||||
typedef hawk_rio_arg_t rio_arg_t;
|
|
||||||
|
|
||||||
typedef hawk_rio_cmd_t rio_cmd_t;
|
typedef hawk_rio_cmd_t rio_cmd_t;
|
||||||
|
|
||||||
@ -444,7 +431,7 @@ protected:
|
|||||||
/// different. The example below changes the formatting string for
|
/// different. The example below changes the formatting string for
|
||||||
/// #HAWK_ENOENT.
|
/// #HAWK_ENOENT.
|
||||||
/// \code
|
/// \code
|
||||||
/// const hawk_ooch_t* MyHawk::getErrorString (hawk_errnum_t num) const
|
/// const hawk_ooch_t* MyHawk::getErrorString (hawk_hawk_errnum_t num) const
|
||||||
/// {
|
/// {
|
||||||
/// if (num == HAWK_ENOENT) return HAWK_T("cannot find '${0}'");
|
/// if (num == HAWK_ENOENT) return HAWK_T("cannot find '${0}'");
|
||||||
/// return Hawk::getErrorString (num);
|
/// return Hawk::getErrorString (num);
|
||||||
@ -452,7 +439,7 @@ protected:
|
|||||||
/// \endcode
|
/// \endcode
|
||||||
///
|
///
|
||||||
virtual const hawk_ooch_t* getErrorString (
|
virtual const hawk_ooch_t* getErrorString (
|
||||||
errnum_t num
|
hawk_errnum_t num
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -460,13 +447,13 @@ public:
|
|||||||
/// The getErrorNumber() function returns the number of the last
|
/// The getErrorNumber() function returns the number of the last
|
||||||
/// error occurred.
|
/// error occurred.
|
||||||
///
|
///
|
||||||
errnum_t getErrorNumber () const;
|
hawk_errnum_t getErrorNumber () const;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// The getErrorLocation() function returns the location of the
|
/// The getErrorLocation() function returns the location of the
|
||||||
/// last error occurred.
|
/// last error occurred.
|
||||||
///
|
///
|
||||||
loc_t getErrorLocation () const;
|
hawk_loc_t getErrorLocation () const;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// The Hawk::getErrorMessage() function returns a message describing
|
/// The Hawk::getErrorMessage() function returns a message describing
|
||||||
@ -474,24 +461,23 @@ public:
|
|||||||
///
|
///
|
||||||
const hawk_ooch_t* getErrorMessage () const;
|
const hawk_ooch_t* getErrorMessage () const;
|
||||||
|
|
||||||
///
|
|
||||||
/// The setError() function sets error information.
|
|
||||||
///
|
|
||||||
void setError (
|
void setError (
|
||||||
errnum_t code, ///< error code
|
hawk_errnum_t code, ///< error code
|
||||||
const hawk_oocs_t* args = HAWK_NULL, ///< message formatting
|
const hawk_loc_t* loc = HAWK_NULL ///< error location
|
||||||
/// argument array
|
|
||||||
const loc_t* loc = HAWK_NULL ///< error location
|
|
||||||
);
|
);
|
||||||
|
|
||||||
///
|
void formatError (
|
||||||
/// The setErrorWithMessage() functions sets error information
|
hawk_errnum_t code,
|
||||||
/// with a customized error message.
|
const hawk_loc_t* loc,
|
||||||
///
|
const hawk_bch_t* fmt,
|
||||||
void setErrorWithMessage (
|
...
|
||||||
errnum_t code, ///< error code
|
);
|
||||||
const hawk_ooch_t* msg, ///< error message
|
|
||||||
const loc_t* loc ///< error location
|
void formatError (
|
||||||
|
hawk_errnum_t code,
|
||||||
|
const hawk_loc_t* loc,
|
||||||
|
const hawk_uch_t* fmt,
|
||||||
|
...
|
||||||
);
|
);
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -588,7 +574,7 @@ public:
|
|||||||
return this->awk;
|
return this->awk;
|
||||||
}
|
}
|
||||||
|
|
||||||
operator awk_t* () const
|
operator hawk_t* () const
|
||||||
{
|
{
|
||||||
return this->awk->getHandle();
|
return this->awk->getHandle();
|
||||||
}
|
}
|
||||||
@ -636,7 +622,7 @@ public:
|
|||||||
class HAWK_EXPORT RIOBase
|
class HAWK_EXPORT RIOBase
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
RIOBase (Run* run, rio_arg_t* riod);
|
RIOBase (Run* run, hawk_rio_arg_t* riod);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const hawk_ooch_t* getName() const;
|
const hawk_ooch_t* getName() const;
|
||||||
@ -648,14 +634,14 @@ public:
|
|||||||
void setUflags (int uflags);
|
void setUflags (int uflags);
|
||||||
|
|
||||||
operator Hawk* () const;
|
operator Hawk* () const;
|
||||||
operator awk_t* () const;
|
operator hawk_t* () const;
|
||||||
operator rio_arg_t* () const;
|
operator hawk_rio_arg_t* () const;
|
||||||
operator Run* () const;
|
operator Run* () const;
|
||||||
operator rtx_t* () const;
|
operator hawk_rtx_t* () const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Run* run;
|
Run* run;
|
||||||
rio_arg_t* riod;
|
hawk_rio_arg_t* riod;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RIOBase (const RIOBase&);
|
RIOBase (const RIOBase&);
|
||||||
@ -708,7 +694,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Pipe (Run* run, rio_arg_t* riod);
|
Pipe (Run* run, hawk_rio_arg_t* riod);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// The getMode() function returns the opening mode requested.
|
/// The getMode() function returns the opening mode requested.
|
||||||
@ -753,7 +739,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
File (Run* run, rio_arg_t* riod);
|
File (Run* run, hawk_rio_arg_t* riod);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Mode getMode () const;
|
Mode getMode () const;
|
||||||
@ -826,7 +812,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Console (Run* run, rio_arg_t* riod);
|
Console (Run* run, hawk_rio_arg_t* riod);
|
||||||
~Console ();
|
~Console ();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -1010,7 +996,7 @@ public:
|
|||||||
|
|
||||||
void clear ();
|
void clear ();
|
||||||
|
|
||||||
operator val_t* () const { return val; }
|
operator hawk_val_t* () const { return val; }
|
||||||
operator int_t () const;
|
operator int_t () const;
|
||||||
operator flt_t () const;
|
operator flt_t () const;
|
||||||
operator const hawk_ooch_t* () const;
|
operator const hawk_ooch_t* () const;
|
||||||
@ -1018,9 +1004,9 @@ public:
|
|||||||
operator const hawk_bch_t* () const;
|
operator const hawk_bch_t* () const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
val_t* toVal () const
|
hawk_val_t* toVal () const
|
||||||
{
|
{
|
||||||
return operator val_t* ();
|
return operator hawk_val_t* ();
|
||||||
}
|
}
|
||||||
|
|
||||||
int_t toInt () const
|
int_t toInt () const
|
||||||
@ -1069,8 +1055,8 @@ public:
|
|||||||
int getStr (const hawk_ooch_t** str, hawk_oow_t* len) const;
|
int getStr (const hawk_ooch_t** str, hawk_oow_t* len) const;
|
||||||
int getMbs (const hawk_bch_t** str, hawk_oow_t* len) const;
|
int getMbs (const hawk_bch_t** str, hawk_oow_t* len) const;
|
||||||
|
|
||||||
int setVal (val_t* v);
|
int setVal (hawk_val_t* v);
|
||||||
int setVal (Run* r, val_t* v);
|
int setVal (Run* r, hawk_val_t* v);
|
||||||
|
|
||||||
int setInt (int_t v);
|
int setInt (int_t v);
|
||||||
int setInt (Run* r, int_t v);
|
int setInt (Run* r, int_t v);
|
||||||
@ -1087,8 +1073,8 @@ public:
|
|||||||
int setMbs (const hawk_bch_t* str);
|
int setMbs (const hawk_bch_t* str);
|
||||||
int setMbs (Run* r, const hawk_bch_t* str);
|
int setMbs (Run* r, const hawk_bch_t* str);
|
||||||
|
|
||||||
int setIndexedVal (const Index& idx, val_t* v);
|
int setIndexedVal (const Index& idx, hawk_val_t* v);
|
||||||
int setIndexedVal (Run* r, const Index& idx, val_t* v);
|
int setIndexedVal (Run* r, const Index& idx, hawk_val_t* v);
|
||||||
int setIndexedInt (const Index& idx, int_t v);
|
int setIndexedInt (const Index& idx, int_t v);
|
||||||
int setIndexedInt (Run* r, const Index& idx, int_t v);
|
int setIndexedInt (Run* r, const Index& idx, int_t v);
|
||||||
int setIndexedFlt (const Index& idx, flt_t v);
|
int setIndexedFlt (const Index& idx, flt_t v);
|
||||||
@ -1144,7 +1130,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
Run* run;
|
Run* run;
|
||||||
val_t* val;
|
hawk_val_t* val;
|
||||||
|
|
||||||
mutable struct
|
mutable struct
|
||||||
{
|
{
|
||||||
@ -1171,30 +1157,52 @@ public:
|
|||||||
friend class Console;
|
friend class Console;
|
||||||
|
|
||||||
Run (Hawk* awk);
|
Run (Hawk* awk);
|
||||||
Run (Hawk* awk, rtx_t* run);
|
Run (Hawk* awk, hawk_rtx_t* run);
|
||||||
~Run ();
|
~Run ();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
operator Hawk* () const;
|
operator Hawk* () const
|
||||||
operator rtx_t* () const;
|
{
|
||||||
|
return this->awk;
|
||||||
|
}
|
||||||
|
|
||||||
|
operator hawk_rtx_t* () const
|
||||||
|
{
|
||||||
|
return this->rtx;
|
||||||
|
}
|
||||||
|
|
||||||
|
operator hawk_gem_t* () const
|
||||||
|
{
|
||||||
|
return this->rtx? hawk_rtx_getgem(this->rtx): HAWK_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void halt () const;
|
void halt () const;
|
||||||
bool isHalt () const;
|
bool isHalt () const;
|
||||||
|
|
||||||
errnum_t getErrorNumber () const;
|
hawk_errnum_t getErrorNumber () const;
|
||||||
loc_t getErrorLocation () const;
|
hawk_loc_t getErrorLocation () const;
|
||||||
const hawk_ooch_t* getErrorMessage () const;
|
const hawk_ooch_t* getErrorMessage () const;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// The setError() function sets error information.
|
||||||
|
///
|
||||||
void setError (
|
void setError (
|
||||||
errnum_t code,
|
hawk_errnum_t code, ///< error code
|
||||||
const hawk_oocs_t* args = HAWK_NULL,
|
const hawk_loc_t* loc = HAWK_NULL ///< error location
|
||||||
const loc_t* loc = HAWK_NULL
|
|
||||||
);
|
);
|
||||||
|
|
||||||
void setErrorWithMessage (
|
void formatError (
|
||||||
errnum_t code,
|
hawk_errnum_t code,
|
||||||
const hawk_ooch_t* msg,
|
const hawk_loc_t* loc,
|
||||||
const loc_t* loc
|
const hawk_bch_t* fmt,
|
||||||
|
...
|
||||||
|
);
|
||||||
|
|
||||||
|
void formatError (
|
||||||
|
hawk_errnum_t code,
|
||||||
|
const hawk_loc_t* loc,
|
||||||
|
const hawk_uch_t* fmt,
|
||||||
|
...
|
||||||
);
|
);
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -1237,14 +1245,22 @@ public:
|
|||||||
int getGlobal (int id, Value& v) const;
|
int getGlobal (int id, Value& v) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Hawk* awk;
|
Hawk* awk;
|
||||||
rtx_t* rtx;
|
hawk_rtx_t* rtx;
|
||||||
};
|
};
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Returns the primitive handle
|
/// Returns the primitive handle
|
||||||
///
|
///
|
||||||
operator awk_t* () const;
|
operator hawk_t* () const
|
||||||
|
{
|
||||||
|
return this->awk;
|
||||||
|
}
|
||||||
|
|
||||||
|
operator hawk_gem_t* () const
|
||||||
|
{
|
||||||
|
return this->awk? hawk_getgem(this->awk): HAWK_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \name Basic Functions
|
/// \name Basic Functions
|
||||||
@ -1499,7 +1515,7 @@ public:
|
|||||||
Run& run,
|
Run& run,
|
||||||
Value& ret,
|
Value& ret,
|
||||||
Value* args,
|
Value* args,
|
||||||
hawk_oow_t nargs,
|
hawk_oow_t nargs,
|
||||||
const fnc_info_t* fi
|
const fnc_info_t* fi
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -1662,38 +1678,38 @@ protected:
|
|||||||
|
|
||||||
// static glue members for various handlers
|
// static glue members for various handlers
|
||||||
static hawk_ooi_t readSource (
|
static hawk_ooi_t readSource (
|
||||||
awk_t* awk, sio_cmd_t cmd, sio_arg_t* arg,
|
hawk_t* awk, sio_cmd_t cmd, sio_arg_t* arg,
|
||||||
hawk_ooch_t* data, hawk_oow_t count);
|
hawk_ooch_t* data, hawk_oow_t count);
|
||||||
static hawk_ooi_t writeSource (
|
static hawk_ooi_t writeSource (
|
||||||
awk_t* awk, sio_cmd_t cmd, sio_arg_t* arg,
|
hawk_t* awk, sio_cmd_t cmd, sio_arg_t* arg,
|
||||||
hawk_ooch_t* data, hawk_oow_t count);
|
hawk_ooch_t* data, hawk_oow_t count);
|
||||||
|
|
||||||
static hawk_ooi_t pipeHandler (
|
static hawk_ooi_t pipeHandler (
|
||||||
rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod,
|
hawk_rtx_t* rtx, rio_cmd_t cmd, hawk_rio_arg_t* riod,
|
||||||
void* data, hawk_oow_t count);
|
void* data, hawk_oow_t count);
|
||||||
static hawk_ooi_t fileHandler (
|
static hawk_ooi_t fileHandler (
|
||||||
rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod,
|
hawk_rtx_t* rtx, rio_cmd_t cmd, hawk_rio_arg_t* riod,
|
||||||
void* data, hawk_oow_t count);
|
void* data, hawk_oow_t count);
|
||||||
static hawk_ooi_t consoleHandler (
|
static hawk_ooi_t consoleHandler (
|
||||||
rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod,
|
hawk_rtx_t* rtx, rio_cmd_t cmd, hawk_rio_arg_t* riod,
|
||||||
void* data, hawk_oow_t count);
|
void* data, hawk_oow_t count);
|
||||||
|
|
||||||
static int functionHandler (rtx_t* rtx, const fnc_info_t* fi);
|
static int functionHandler (hawk_rtx_t* rtx, const fnc_info_t* fi);
|
||||||
|
|
||||||
|
|
||||||
static flt_t pow (awk_t* awk, flt_t x, flt_t y);
|
static flt_t pow (hawk_t* awk, flt_t x, flt_t y);
|
||||||
static flt_t mod (awk_t* awk, flt_t x, flt_t y);
|
static flt_t mod (hawk_t* awk, flt_t x, flt_t y);
|
||||||
|
|
||||||
static void* modopen (awk_t* awk, const mod_spec_t* spec);
|
static void* modopen (hawk_t* awk, const mod_spec_t* spec);
|
||||||
static void modclose (awk_t* awk, void* handle);
|
static void modclose (hawk_t* awk, void* handle);
|
||||||
static void* modgetsym (awk_t* awk, void* handle, const hawk_ooch_t* name);
|
static void* modgetsym (hawk_t* awk, void* handle, const hawk_ooch_t* name);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// use this with care
|
// use this with care
|
||||||
awk_t* getHandle() const { return this->awk; }
|
hawk_t* getHandle() const { return this->awk; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
awk_t* awk;
|
hawk_t* awk;
|
||||||
|
|
||||||
errstr_t dflerrstr;
|
errstr_t dflerrstr;
|
||||||
errinf_t errinf;
|
errinf_t errinf;
|
||||||
@ -1725,12 +1741,12 @@ protected:
|
|||||||
{
|
{
|
||||||
xstrs_t (): ptr (HAWK_NULL), len (0), capa (0) {}
|
xstrs_t (): ptr (HAWK_NULL), len (0), capa (0) {}
|
||||||
|
|
||||||
int add (awk_t* awk, const hawk_ooch_t* arg, hawk_oow_t len);
|
int add (hawk_t* awk, const hawk_ooch_t* arg, hawk_oow_t len);
|
||||||
void clear (awk_t* awk);
|
void clear (hawk_t* awk);
|
||||||
|
|
||||||
hawk_oocs_t* ptr;
|
hawk_oocs_t* ptr;
|
||||||
hawk_oow_t len;
|
hawk_oow_t len;
|
||||||
hawk_oow_t capa;
|
hawk_oow_t capa;
|
||||||
};
|
};
|
||||||
|
|
||||||
xstrs_t runarg;
|
xstrs_t runarg;
|
||||||
@ -1742,7 +1758,7 @@ private:
|
|||||||
void fini_runctx ();
|
void fini_runctx ();
|
||||||
int dispatch_function (Run* run, const fnc_info_t* fi);
|
int dispatch_function (Run* run, const fnc_info_t* fi);
|
||||||
|
|
||||||
static const hawk_ooch_t* xerrstr (awk_t* a, errnum_t num);
|
static const hawk_ooch_t* xerrstr (hawk_t* a, hawk_errnum_t num);
|
||||||
};
|
};
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <HawkStd.hpp>
|
#include <HawkStd.hpp>
|
||||||
|
#include <hawk-sio.h>
|
||||||
|
#include <hawk-std.h>
|
||||||
#include "hawk-prv.h"
|
#include "hawk-prv.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
@ -78,14 +80,19 @@ static hawk_sio_t* open_sio (Hawk* awk, HawkStd::Run* run, const hawk_ooch_t* fi
|
|||||||
hawk_sio_t* sio;
|
hawk_sio_t* sio;
|
||||||
|
|
||||||
//sio = hawk_sio_open ((run? ((Hawk::awk_t*)*(Hawk*)*run)->mmgr: awk->getMmgr()), 0, file, flags);
|
//sio = hawk_sio_open ((run? ((Hawk::awk_t*)*(Hawk*)*run)->mmgr: awk->getMmgr()), 0, file, flags);
|
||||||
sio = hawk_sio_open ((run? ((Hawk*)*run)->getMmgr(): awk->getMmgr()), 0, file, flags);
|
sio = hawk_sio_open((run? (hawk_gem_t*)*run: (hawk_gem_t*)*awk), 0, file, flags);
|
||||||
if (sio == HAWK_NULL)
|
if (sio == HAWK_NULL)
|
||||||
{
|
{
|
||||||
hawk_oocs_t ea;
|
if (run)
|
||||||
ea.ptr = (hawk_ooch_t*)file;
|
{
|
||||||
ea.len = hawk_count_oocstr (file);
|
const hawk_ooch_t* bem = hawk_rtx_backuperrmsg(*run);
|
||||||
if (run) run->setError (HAWK_EOPEN, &ea);
|
run->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), file, bem);
|
||||||
else awk->setError (HAWK_EOPEN, &ea);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const hawk_ooch_t* bem = hawk_backuperrmsg(*awk);
|
||||||
|
awk->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), file, bem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return sio;
|
return sio;
|
||||||
}
|
}
|
||||||
@ -101,14 +108,19 @@ static hawk_sio_t* open_sio_std (Hawk* awk, HawkStd::Run* run, hawk_sio_std_t st
|
|||||||
};
|
};
|
||||||
|
|
||||||
//sio = hawk_sio_openstd ((run? ((Hawk::awk_t*)*(Hawk*)*run)->mmgr: awk->getMmgr()), 0, std, flags);
|
//sio = hawk_sio_openstd ((run? ((Hawk::awk_t*)*(Hawk*)*run)->mmgr: awk->getMmgr()), 0, std, flags);
|
||||||
sio = hawk_sio_openstd ((run? ((Hawk*)*run)->getMmgr(): awk->getMmgr()), 0, std, flags);
|
sio = hawk_sio_openstd((run? (hawk_gem_t*)*run: (hawk_gem_t*)*awk), 0, std, flags);
|
||||||
if (sio == HAWK_NULL)
|
if (sio == HAWK_NULL)
|
||||||
{
|
{
|
||||||
hawk_oocs_t ea;
|
if (run)
|
||||||
ea.ptr = (hawk_ooch_t*)std_names[std];
|
{
|
||||||
ea.len = hawk_count_oocstr (std_names[std]);
|
const hawk_ooch_t* bem = hawk_rtx_backuperrmsg(*run);
|
||||||
if (run) run->setError (HAWK_EOPEN, &ea);
|
run->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), std_names[std], bem);
|
||||||
else awk->setError (HAWK_EOPEN, &ea);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const hawk_ooch_t* bem = hawk_backuperrmsg(*awk);
|
||||||
|
awk->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), std_names[std], bem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return sio;
|
return sio;
|
||||||
}
|
}
|
||||||
@ -118,15 +130,10 @@ int HawkStd::open ()
|
|||||||
int n = Hawk::open ();
|
int n = Hawk::open ();
|
||||||
if (n == -1) return n;
|
if (n == -1) return n;
|
||||||
|
|
||||||
this->gbl_argc = addGlobal (HAWK_T("ARGC"));
|
this->gbl_argc = this->addGlobal(HAWK_T("ARGC"));
|
||||||
this->gbl_argv = addGlobal (HAWK_T("ARGV"));
|
this->gbl_argv = this->addGlobal(HAWK_T("ARGV"));
|
||||||
this->gbl_environ = addGlobal (HAWK_T("ENVIRON"));
|
this->gbl_environ = this->addGlobal(HAWK_T("ENVIRON"));
|
||||||
if (this->gbl_argc <= -1 ||
|
if (this->gbl_argc <= -1 || this->gbl_argv <= -1 || this->gbl_environ <= -1) goto oops;
|
||||||
this->gbl_argv <= -1 ||
|
|
||||||
this->gbl_environ <= -1)
|
|
||||||
{
|
|
||||||
goto oops;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (addFunction (HAWK_T("rand"), 1, 0, HAWK_T("math"), HAWK_NULL, 0) <= -1 ||
|
if (addFunction (HAWK_T("rand"), 1, 0, HAWK_T("math"), HAWK_NULL, 0) <= -1 ||
|
||||||
addFunction (HAWK_T("srand"), 1, 0, HAWK_T("math"), HAWK_NULL, 0) <= -1 ||
|
addFunction (HAWK_T("srand"), 1, 0, HAWK_T("math"), HAWK_NULL, 0) <= -1 ||
|
||||||
@ -143,7 +150,7 @@ int HawkStd::open ()
|
|||||||
if (hawk_setopt(awk, HAWK_MODPOSTFIX, HAWK_T(".so")) <= -1) goto oops;
|
if (hawk_setopt(awk, HAWK_MODPOSTFIX, HAWK_T(".so")) <= -1) goto oops;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (hawk_stdmodstartup (this->awk) <= -1) goto oops;
|
if (hawk_stdmodstartup(this->awk) <= -1) goto oops;
|
||||||
this->stdmod_up = true;
|
this->stdmod_up = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,14 +252,20 @@ int HawkStd::build_argcv (Run* run)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TODO: use wenviron where it's available */
|
||||||
|
typedef hawk_bch_t env_char_t;
|
||||||
|
#define ENV_CHAR_IS_BCH
|
||||||
|
extern char **environ;
|
||||||
|
|
||||||
|
|
||||||
int HawkStd::__build_environ (Run* run, void* envptr)
|
int HawkStd::__build_environ (Run* run, void* envptr)
|
||||||
{
|
{
|
||||||
hawk_env_hawk_ooch_t** envarr = (hawk_env_hawk_ooch_t**)envptr;
|
en_char_t** envarr = (env_char_t**)envptr;
|
||||||
Value v_env (run);
|
Value v_env (run);
|
||||||
|
|
||||||
if (envarr)
|
if (envarr)
|
||||||
{
|
{
|
||||||
hawk_env_hawk_ooch_t* eq;
|
env_char_t* eq;
|
||||||
hawk_ooch_t* kptr, * vptr;
|
hawk_ooch_t* kptr, * vptr;
|
||||||
hawk_oow_t klen, count;
|
hawk_oow_t klen, count;
|
||||||
hawk_mmgr_t* mmgr = ((Hawk*)*run)->getMmgr();
|
hawk_mmgr_t* mmgr = ((Hawk*)*run)->getMmgr();
|
||||||
@ -333,7 +346,7 @@ int HawkStd::build_environ (Run* run)
|
|||||||
hawk_env_t env;
|
hawk_env_t env;
|
||||||
int xret;
|
int xret;
|
||||||
|
|
||||||
if (hawk_env_init (&env, ((Hawk*)*run)->getMmgr(), 1) <= -1)
|
if (hawk_env_init(&env, ((Hawk*)*run)->getMmgr(), 1) <= -1)
|
||||||
{
|
{
|
||||||
this->setError (HAWK_ENOMEM);
|
this->setError (HAWK_ENOMEM);
|
||||||
return -1;
|
return -1;
|
||||||
@ -347,8 +360,8 @@ int HawkStd::build_environ (Run* run)
|
|||||||
|
|
||||||
int HawkStd::make_additional_globals (Run* run)
|
int HawkStd::make_additional_globals (Run* run)
|
||||||
{
|
{
|
||||||
if (build_argcv (run) <= -1 ||
|
if (build_argcv(run) <= -1 ||
|
||||||
build_environ (run) <= -1) return -1;
|
build_environ(run) <= -1) return -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -526,7 +539,7 @@ int HawkStd::open_nwio (Pipe& io, int flags, void* nwad)
|
|||||||
hawk_nwio_tmout_t* tmout = HAWK_NULL;
|
hawk_nwio_tmout_t* tmout = HAWK_NULL;
|
||||||
|
|
||||||
const hawk_ooch_t* name = io.getName();
|
const hawk_ooch_t* name = io.getName();
|
||||||
ioattr_t* ioattr = get_ioattr (name, hawk_count_oocstr(name));
|
ioattr_t* ioattr = get_ioattr(name, hawk_count_oocstr(name));
|
||||||
if (ioattr)
|
if (ioattr)
|
||||||
{
|
{
|
||||||
tmout = &tmout_buf;
|
tmout = &tmout_buf;
|
||||||
@ -634,22 +647,27 @@ static int parse_rwpipe_uri (const hawk_ooch_t* uri, int* flags, hawk_nwad_t* nw
|
|||||||
|
|
||||||
int HawkStd::openPipe (Pipe& io)
|
int HawkStd::openPipe (Pipe& io)
|
||||||
{
|
{
|
||||||
|
#if defined(ENABLE_NWIO)
|
||||||
int flags;
|
int flags;
|
||||||
hawk_nwad_t nwad;
|
hawk_nwad_t nwad;
|
||||||
|
|
||||||
if (io.getMode() != Hawk::Pipe::RW ||
|
if (io.getMode() != Hawk::Pipe::RW ||
|
||||||
parse_rwpipe_uri (io.getName(), &flags, &nwad) <= -1)
|
parse_rwpipe_uri (io.getName(), &flags, &nwad) <= -1)
|
||||||
{
|
{
|
||||||
return open_pio (io);
|
return open_pio(io);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return open_nwio (io, flags, &nwad);
|
return open_nwio (io, flags, &nwad);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
return this->open_pio(io);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int HawkStd::closePipe (Pipe& io)
|
int HawkStd::closePipe (Pipe& io)
|
||||||
{
|
{
|
||||||
|
#if defined(ENABLE_NWIO)
|
||||||
if (io.getUflags() > 0)
|
if (io.getUflags() > 0)
|
||||||
{
|
{
|
||||||
/* nwio can't honor partical close */
|
/* nwio can't honor partical close */
|
||||||
@ -657,6 +675,7 @@ int HawkStd::closePipe (Pipe& io)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#endif
|
||||||
hawk_pio_t* pio = (hawk_pio_t*)io.getHandle();
|
hawk_pio_t* pio = (hawk_pio_t*)io.getHandle();
|
||||||
if (io.getMode() == Hawk::Pipe::RW)
|
if (io.getMode() == Hawk::Pipe::RW)
|
||||||
{
|
{
|
||||||
@ -674,7 +693,9 @@ int HawkStd::closePipe (Pipe& io)
|
|||||||
}
|
}
|
||||||
|
|
||||||
hawk_pio_close (pio);
|
hawk_pio_close (pio);
|
||||||
|
#if defined(ENABLE_NWIO)
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -796,7 +817,7 @@ void HawkStd::clearConsoleOutputs ()
|
|||||||
|
|
||||||
int HawkStd::open_console_in (Console& io)
|
int HawkStd::open_console_in (Console& io)
|
||||||
{
|
{
|
||||||
hawk_rtx_t* rtx = (rtx_t*)io;
|
hawk_rtx_t* rtx = (hawk_rtx_t*)io;
|
||||||
|
|
||||||
if (this->runarg.ptr == HAWK_NULL)
|
if (this->runarg.ptr == HAWK_NULL)
|
||||||
{
|
{
|
||||||
@ -806,7 +827,7 @@ int HawkStd::open_console_in (Console& io)
|
|||||||
{
|
{
|
||||||
hawk_sio_t* sio;
|
hawk_sio_t* sio;
|
||||||
|
|
||||||
sio = open_sio_std (
|
sio = this->open_sio_std (
|
||||||
HAWK_NULL, io, HAWK_SIO_STDIN,
|
HAWK_NULL, io, HAWK_SIO_STDIN,
|
||||||
HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
||||||
if (sio == HAWK_NULL) return -1;
|
if (sio == HAWK_NULL) return -1;
|
||||||
@ -849,7 +870,7 @@ int HawkStd::open_console_in (Console& io)
|
|||||||
* 'BEGIN { ARGV[1]=""; ARGV[2]=""; }
|
* 'BEGIN { ARGV[1]=""; ARGV[2]=""; }
|
||||||
* { print $0; }' file1 file2
|
* { print $0; }' file1 file2
|
||||||
*/
|
*/
|
||||||
sio = open_sio_std (
|
sio = this->open_sio_std(
|
||||||
HAWK_NULL, io, HAWK_SIO_STDIN,
|
HAWK_NULL, io, HAWK_SIO_STDIN,
|
||||||
HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
||||||
if (sio == HAWK_NULL) return -1;
|
if (sio == HAWK_NULL) return -1;
|
||||||
@ -923,9 +944,9 @@ int HawkStd::open_console_in (Console& io)
|
|||||||
file = as.ptr;
|
file = as.ptr;
|
||||||
|
|
||||||
if (file[0] == HAWK_T('-') && file[1] == HAWK_T('\0'))
|
if (file[0] == HAWK_T('-') && file[1] == HAWK_T('\0'))
|
||||||
sio = open_sio_std(HAWK_NULL, io, HAWK_SIO_STDIN, HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
sio = this->open_sio_std(HAWK_NULL, io, HAWK_SIO_STDIN, HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
||||||
else
|
else
|
||||||
sio = open_sio(HAWK_NULL, io, file, HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
sio = this->open_sio(HAWK_NULL, io, file, HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
||||||
if (sio == HAWK_NULL)
|
if (sio == HAWK_NULL)
|
||||||
{
|
{
|
||||||
hawk_rtx_freevaloocstr (rtx, v, as.ptr);
|
hawk_rtx_freevaloocstr (rtx, v, as.ptr);
|
||||||
@ -955,7 +976,7 @@ int HawkStd::open_console_in (Console& io)
|
|||||||
|
|
||||||
int HawkStd::open_console_out (Console& io)
|
int HawkStd::open_console_out (Console& io)
|
||||||
{
|
{
|
||||||
hawk_rtx_t* rtx = (rtx_t*)io;
|
hawk_rtx_t* rtx = (hawk_rtx_t*)io;
|
||||||
|
|
||||||
if (this->ofile.ptr == HAWK_NULL)
|
if (this->ofile.ptr == HAWK_NULL)
|
||||||
{
|
{
|
||||||
@ -964,13 +985,12 @@ int HawkStd::open_console_out (Console& io)
|
|||||||
if (this->ofile_count == 0)
|
if (this->ofile_count == 0)
|
||||||
{
|
{
|
||||||
hawk_sio_t* sio;
|
hawk_sio_t* sio;
|
||||||
sio = open_sio_std (
|
sio = this->open_sio_std(
|
||||||
HAWK_NULL, io, HAWK_SIO_STDOUT,
|
HAWK_NULL, io, HAWK_SIO_STDOUT,
|
||||||
HAWK_SIO_WRITE | HAWK_SIO_IGNOREECERR | HAWK_SIO_LINEBREAK);
|
HAWK_SIO_WRITE | HAWK_SIO_IGNOREECERR | HAWK_SIO_LINEBREAK);
|
||||||
if (sio == HAWK_NULL) return -1;
|
if (sio == HAWK_NULL) return -1;
|
||||||
|
|
||||||
if (this->console_cmgr)
|
if (this->console_cmgr) hawk_sio_setcmgr (sio, this->console_cmgr);
|
||||||
hawk_sio_setcmgr (sio, this->console_cmgr);
|
|
||||||
|
|
||||||
io.setHandle (sio);
|
io.setHandle (sio);
|
||||||
this->ofile_count++;
|
this->ofile_count++;
|
||||||
@ -998,26 +1018,24 @@ int HawkStd::open_console_out (Console& io)
|
|||||||
{
|
{
|
||||||
hawk_oocs_t arg;
|
hawk_oocs_t arg;
|
||||||
arg.ptr = (hawk_ooch_t*)file;
|
arg.ptr = (hawk_ooch_t*)file;
|
||||||
arg.len = hawk_count_oocstr (arg.ptr);
|
arg.len = hawk_count_oocstr(arg.ptr);
|
||||||
((Run*)io)->setError (HAWK_EIONMNL, &arg);
|
((Run*)io)->setError (HAWK_EIONMNL, &arg);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file[0] == HAWK_T('-') && file[1] == HAWK_T('\0'))
|
if (file[0] == HAWK_T('-') && file[1] == HAWK_T('\0'))
|
||||||
sio = open_sio_std (HAWK_NULL, io, HAWK_SIO_STDOUT, HAWK_SIO_WRITE | HAWK_SIO_IGNOREECERR | HAWK_SIO_LINEBREAK);
|
sio = this->open_sio_std(HAWK_NULL, io, HAWK_SIO_STDOUT, HAWK_SIO_WRITE | HAWK_SIO_IGNOREECERR | HAWK_SIO_LINEBREAK);
|
||||||
else
|
else
|
||||||
sio = open_sio (HAWK_NULL, io, file, HAWK_SIO_WRITE | HAWK_SIO_CREATE | HAWK_SIO_TRUNCATE | HAWK_SIO_IGNOREECERR);
|
sio = this->open_sio(HAWK_NULL, io, file, HAWK_SIO_WRITE | HAWK_SIO_CREATE | HAWK_SIO_TRUNCATE | HAWK_SIO_IGNOREECERR);
|
||||||
if (sio == HAWK_NULL) return -1;
|
if (sio == HAWK_NULL) return -1;
|
||||||
|
|
||||||
if (hawk_rtx_setofilename (
|
if (hawk_rtx_setofilename(rtx, file, hawk_count_oocstr(file)) == -1)
|
||||||
rtx, file, hawk_count_oocstr(file)) == -1)
|
|
||||||
{
|
{
|
||||||
hawk_sio_close (sio);
|
hawk_sio_close (sio);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->console_cmgr)
|
if (this->console_cmgr) hawk_sio_setcmgr (sio, this->console_cmgr);
|
||||||
hawk_sio_setcmgr (sio, this->console_cmgr);
|
|
||||||
io.setHandle (sio);
|
io.setHandle (sio);
|
||||||
|
|
||||||
this->ofile_index++;
|
this->ofile_index++;
|
||||||
@ -1175,11 +1193,11 @@ int HawkStd::SourceFile::open (Data& io)
|
|||||||
if (this->name[0] == HAWK_T('-') && this->name[1] == HAWK_T('\0'))
|
if (this->name[0] == HAWK_T('-') && this->name[1] == HAWK_T('\0'))
|
||||||
{
|
{
|
||||||
if (io.getMode() == READ)
|
if (io.getMode() == READ)
|
||||||
sio = open_sio_std (
|
sio = this->open_sio_std (
|
||||||
io, HAWK_NULL, HAWK_SIO_STDIN,
|
io, HAWK_NULL, HAWK_SIO_STDIN,
|
||||||
HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
|
||||||
else
|
else
|
||||||
sio = open_sio_std (
|
sio = this->open_sio_std (
|
||||||
io, HAWK_NULL, HAWK_SIO_STDOUT,
|
io, HAWK_NULL, HAWK_SIO_STDOUT,
|
||||||
HAWK_SIO_WRITE | HAWK_SIO_CREATE |
|
HAWK_SIO_WRITE | HAWK_SIO_CREATE |
|
||||||
HAWK_SIO_TRUNCATE | HAWK_SIO_IGNOREECERR | HAWK_SIO_LINEBREAK);
|
HAWK_SIO_TRUNCATE | HAWK_SIO_IGNOREECERR | HAWK_SIO_LINEBREAK);
|
||||||
@ -1187,7 +1205,7 @@ int HawkStd::SourceFile::open (Data& io)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sio = open_sio (
|
sio = this->open_sio (
|
||||||
io, HAWK_NULL, this->name,
|
io, HAWK_NULL, this->name,
|
||||||
(io.getMode() == READ?
|
(io.getMode() == READ?
|
||||||
(HAWK_SIO_READ | HAWK_SIO_IGNOREECERR | HAWK_SIO_KEEPPATH):
|
(HAWK_SIO_READ | HAWK_SIO_IGNOREECERR | HAWK_SIO_KEEPPATH):
|
||||||
@ -1228,7 +1246,7 @@ int HawkStd::SourceFile::open (Data& io)
|
|||||||
totlen = hawk_count_oocstr(ioname) + dirlen;
|
totlen = hawk_count_oocstr(ioname) + dirlen;
|
||||||
if (totlen >= HAWK_COUNTOF(fbuf))
|
if (totlen >= HAWK_COUNTOF(fbuf))
|
||||||
{
|
{
|
||||||
dbuf = (hawk_ooch_t*) HAWK_MMGR_ALLOC (
|
dbuf = (hawk_ooch_t*)HAWK_MMGR_ALLOC(
|
||||||
((Hawk*)io)->getMmgr(),
|
((Hawk*)io)->getMmgr(),
|
||||||
HAWK_SIZEOF(hawk_ooch_t) * (totlen + 1)
|
HAWK_SIZEOF(hawk_ooch_t) * (totlen + 1)
|
||||||
);
|
);
|
||||||
@ -1248,7 +1266,7 @@ int HawkStd::SourceFile::open (Data& io)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sio = open_sio (
|
sio = this->open_sio(
|
||||||
io, HAWK_NULL, file,
|
io, HAWK_NULL, file,
|
||||||
(io.getMode() == READ?
|
(io.getMode() == READ?
|
||||||
(HAWK_SIO_READ | HAWK_SIO_IGNOREECERR | HAWK_SIO_KEEPPATH):
|
(HAWK_SIO_READ | HAWK_SIO_IGNOREECERR | HAWK_SIO_KEEPPATH):
|
||||||
@ -1308,7 +1326,7 @@ int HawkStd::SourceString::open (Data& io)
|
|||||||
{
|
{
|
||||||
const hawk_ooch_t* outer;
|
const hawk_ooch_t* outer;
|
||||||
|
|
||||||
outer = hawk_sio_getpath ((hawk_sio_t*)io.getPrevHandle());
|
outer = hawk_sio_getpath((hawk_sio_t*)io.getPrevHandle());
|
||||||
if (outer)
|
if (outer)
|
||||||
{
|
{
|
||||||
const hawk_ooch_t* base;
|
const hawk_ooch_t* base;
|
||||||
@ -1336,13 +1354,13 @@ int HawkStd::SourceString::open (Data& io)
|
|||||||
}
|
}
|
||||||
else file = fbuf;
|
else file = fbuf;
|
||||||
|
|
||||||
tmplen = hawk_copy_oochars_to_oocstr_unlimited ((hawk_ooch_t*)file, outer, dirlen);
|
tmplen = hawk_copy_oochars_to_oocstr_unlimited((hawk_ooch_t*)file, outer, dirlen);
|
||||||
hawk_copy_oocstr_unlimited ((hawk_ooch_t*)file + tmplen, ioname);
|
hawk_copy_oocstr_unlimited ((hawk_ooch_t*)file + tmplen, ioname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sio = open_sio (
|
sio = this->open_sio (
|
||||||
io, HAWK_NULL, file,
|
io, HAWK_NULL, file,
|
||||||
(io.getMode() == READ?
|
(io.getMode() == READ?
|
||||||
(HAWK_SIO_READ | HAWK_SIO_IGNOREECERR | HAWK_SIO_KEEPPATH):
|
(HAWK_SIO_READ | HAWK_SIO_IGNOREECERR | HAWK_SIO_KEEPPATH):
|
||||||
|
@ -220,6 +220,46 @@ HAWK_EXPORT hawk_cmgr_t* hawk_rtx_getiocmgrstd (
|
|||||||
const hawk_ooch_t* ioname
|
const hawk_ooch_t* ioname
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
HAWK_EXPORT hawk_flt_t hawk_stdmathpow (
|
||||||
|
hawk_t* hawk,
|
||||||
|
hawk_flt_t x,
|
||||||
|
hawk_flt_t y
|
||||||
|
);
|
||||||
|
|
||||||
|
HAWK_EXPORT hawk_flt_t hawk_stdmathmod (
|
||||||
|
hawk_t* hawk,
|
||||||
|
hawk_flt_t x,
|
||||||
|
hawk_flt_t y
|
||||||
|
);
|
||||||
|
|
||||||
|
HAWK_EXPORT int hawk_stdmodstartup (
|
||||||
|
hawk_t* hawk
|
||||||
|
);
|
||||||
|
|
||||||
|
HAWK_EXPORT void hawk_stdmodshutdown (
|
||||||
|
hawk_t* hawk
|
||||||
|
);
|
||||||
|
|
||||||
|
HAWK_EXPORT void* hawk_stdmodopen (
|
||||||
|
hawk_t* hawk,
|
||||||
|
const hawk_mod_spec_t* spec
|
||||||
|
);
|
||||||
|
|
||||||
|
HAWK_EXPORT void hawk_stdmodclose (
|
||||||
|
hawk_t* hawk,
|
||||||
|
void* handle
|
||||||
|
);
|
||||||
|
|
||||||
|
HAWK_EXPORT void* hawk_stdmodsym (
|
||||||
|
hawk_t* hawk,
|
||||||
|
void* handle,
|
||||||
|
const hawk_ooch_t* name
|
||||||
|
);
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user