mirror of
https://github.com/celisej567/source-sdk-2013.git
synced 2026-09-17 20:10:21 +03:00
Move sqstdtime.h
This commit is contained in:
88
sp/src/vscript/sqstdtime.h
Normal file
88
sp/src/vscript/sqstdtime.h
Normal file
@@ -0,0 +1,88 @@
|
||||
//-----------------------------------------------------------------------
|
||||
// see copyright notice in squirrel.h
|
||||
//
|
||||
// Purpose : Squirrel time library cropped out from
|
||||
// the system library as a safe include.
|
||||
//
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
#include "squirrel.h"
|
||||
#include "time.h"
|
||||
|
||||
static SQInteger _system_clock(HSQUIRRELVM v)
|
||||
{
|
||||
sq_pushfloat(v, ((SQFloat)clock()) / (SQFloat)CLOCKS_PER_SEC);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static SQInteger _system_time(HSQUIRRELVM v)
|
||||
{
|
||||
SQInteger t = (SQInteger)time(NULL);
|
||||
sq_pushinteger(v, t);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void _set_integer_slot(HSQUIRRELVM v, const SQChar *name, SQInteger val)
|
||||
{
|
||||
sq_pushstring(v, name, -1);
|
||||
sq_pushinteger(v, val);
|
||||
sq_rawset(v, -3);
|
||||
}
|
||||
|
||||
static SQInteger _system_date(HSQUIRRELVM v)
|
||||
{
|
||||
time_t t;
|
||||
SQInteger it;
|
||||
SQInteger format = 'l';
|
||||
if (sq_gettop(v) > 1) {
|
||||
sq_getinteger(v, 2, &it);
|
||||
t = it;
|
||||
if (sq_gettop(v) > 2) {
|
||||
sq_getinteger(v, 3, (SQInteger*)&format);
|
||||
}
|
||||
}
|
||||
else {
|
||||
time(&t);
|
||||
}
|
||||
tm *date;
|
||||
if (format == 'u')
|
||||
date = gmtime(&t);
|
||||
else
|
||||
date = localtime(&t);
|
||||
if (!date)
|
||||
return sq_throwerror(v, _SC("crt api failure"));
|
||||
sq_newtable(v);
|
||||
_set_integer_slot(v, _SC("sec"), date->tm_sec);
|
||||
_set_integer_slot(v, _SC("min"), date->tm_min);
|
||||
_set_integer_slot(v, _SC("hour"), date->tm_hour);
|
||||
_set_integer_slot(v, _SC("day"), date->tm_mday);
|
||||
_set_integer_slot(v, _SC("month"), date->tm_mon);
|
||||
_set_integer_slot(v, _SC("year"), date->tm_year + 1900);
|
||||
_set_integer_slot(v, _SC("wday"), date->tm_wday);
|
||||
_set_integer_slot(v, _SC("yday"), date->tm_yday);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_system_##name,nparams,pmask}
|
||||
static const SQRegFunction timelib_funcs[] = {
|
||||
_DECL_FUNC(clock, 0, NULL),
|
||||
_DECL_FUNC(time, 1, NULL),
|
||||
_DECL_FUNC(date, -1, _SC(".nn")),
|
||||
{ NULL, (SQFUNCTION)0, 0, NULL }
|
||||
};
|
||||
#undef _DECL_FUNC
|
||||
|
||||
SQInteger sqstd_register_timelib(HSQUIRRELVM v)
|
||||
{
|
||||
SQInteger i = 0;
|
||||
while (timelib_funcs[i].name != 0)
|
||||
{
|
||||
sq_pushstring(v, timelib_funcs[i].name, -1);
|
||||
sq_newclosure(v, timelib_funcs[i].f, 0);
|
||||
sq_setparamscheck(v, timelib_funcs[i].nparamscheck, timelib_funcs[i].typemask);
|
||||
sq_setnativeclosurename(v, -1, timelib_funcs[i].name);
|
||||
sq_newslot(v, -3, SQFalse);
|
||||
i++;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
Reference in New Issue
Block a user