1 /* see copyright notice in squirrel.h */
6 #include <sqstdsystem.h>
10 #define scgetenv _wgetenv
11 #define scsystem _wsystem
12 #define scasctime _wasctime
13 #define scremove _wremove
14 #define screname _wrename
16 #define scgetenv getenv
17 #define scsystem system
18 #define scasctime asctime
19 #define scremove remove
20 #define screname rename
23 static SQInteger _system_getenv(HSQUIRRELVM v)
26 if(SQ_SUCCEEDED(sq_getstring(v,2,&s))){
27 sq_pushstring(v,scgetenv(s),-1);
34 static SQInteger _system_system(HSQUIRRELVM v)
37 if(SQ_SUCCEEDED(sq_getstring(v,2,&s))){
38 sq_pushinteger(v,scsystem(s));
41 return sq_throwerror(v,_SC("wrong param"));
45 static SQInteger _system_clock(HSQUIRRELVM v)
47 sq_pushfloat(v,((SQFloat)clock())/(SQFloat)CLOCKS_PER_SEC);
51 static SQInteger _system_time(HSQUIRRELVM v)
55 sq_pushinteger(v,*((SQInteger *)&t));
59 static SQInteger _system_remove(HSQUIRRELVM v)
64 return sq_throwerror(v,_SC("remove() failed"));
68 static SQInteger _system_rename(HSQUIRRELVM v)
70 const SQChar *oldn,*newn;
71 sq_getstring(v,2,&oldn);
72 sq_getstring(v,3,&newn);
73 if(screname(oldn,newn)==-1)
74 return sq_throwerror(v,_SC("rename() failed"));
78 static void _set_integer_slot(HSQUIRRELVM v,const SQChar *name,SQInteger val)
80 sq_pushstring(v,name,-1);
81 sq_pushinteger(v,val);
85 static SQInteger _system_date(HSQUIRRELVM v)
89 SQInteger format = 'l';
90 if(sq_gettop(v) > 1) {
91 sq_getinteger(v,2,&it);
93 if(sq_gettop(v) > 2) {
94 sq_getinteger(v,3,(SQInteger*)&format);
104 date = localtime(&t);
106 return sq_throwerror(v,_SC("crt api failure"));
108 _set_integer_slot(v, _SC("sec"), date->tm_sec);
109 _set_integer_slot(v, _SC("min"), date->tm_min);
110 _set_integer_slot(v, _SC("hour"), date->tm_hour);
111 _set_integer_slot(v, _SC("day"), date->tm_mday);
112 _set_integer_slot(v, _SC("month"), date->tm_mon);
113 _set_integer_slot(v, _SC("year"), date->tm_year+1900);
114 _set_integer_slot(v, _SC("wday"), date->tm_wday);
115 _set_integer_slot(v, _SC("yday"), date->tm_yday);
121 #define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_system_##name,nparams,pmask}
122 static SQRegFunction systemlib_funcs[]={
123 _DECL_FUNC(getenv,2,_SC(".s")),
124 _DECL_FUNC(system,2,_SC(".s")),
125 _DECL_FUNC(clock,1,NULL),
126 _DECL_FUNC(time,1,NULL),
127 _DECL_FUNC(date,-1,_SC(".nn")),
128 _DECL_FUNC(remove,2,_SC(".s")),
129 _DECL_FUNC(rename,3,_SC(".ss")),
134 SQInteger sqstd_register_systemlib(HSQUIRRELVM v)
137 while(systemlib_funcs[i].name!=0)
139 sq_pushstring(v,systemlib_funcs[i].name,-1);
140 sq_newclosure(v,systemlib_funcs[i].f,0);
141 sq_setparamscheck(v,systemlib_funcs[i].nparamscheck,systemlib_funcs[i].typemask);
142 sq_setnativeclosurename(v,-1,systemlib_funcs[i].name);