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 int _system_getenv(HSQUIRRELVM v)
26 if(SQ_SUCCEEDED(sq_getstring(v,2,&s))){
27 sq_pushstring(v,scgetenv(s),-1);
34 static int _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 int _system_clock(HSQUIRRELVM v)
47 sq_pushfloat(v,((SQFloat)clock())/(SQFloat)CLOCKS_PER_SEC);
51 static int _system_time(HSQUIRRELVM v)
55 sq_pushinteger(v,*((SQInteger *)&t));
59 static int _system_remove(HSQUIRRELVM v)
64 return sq_throwerror(v,_SC("remove() failed"));
68 static int _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 int _system_date(HSQUIRRELVM v)
88 SQInteger format = 'l';
89 if(sq_gettop(v) > 1) {
90 sq_getinteger(v,2,(SQInteger*)&t);
91 if(sq_gettop(v) > 2) {
92 sq_getinteger(v,3,(SQInteger*)&format);
102 date = localtime(&t);
104 return sq_throwerror(v,_SC("crt api failure"));
106 _set_integer_slot(v, _SC("sec"), date->tm_sec);
107 _set_integer_slot(v, _SC("min"), date->tm_min);
108 _set_integer_slot(v, _SC("hour"), date->tm_hour);
109 _set_integer_slot(v, _SC("day"), date->tm_mday);
110 _set_integer_slot(v, _SC("month"), date->tm_mon);
111 _set_integer_slot(v, _SC("year"), date->tm_year+1900);
112 _set_integer_slot(v, _SC("wday"), date->tm_wday);
113 _set_integer_slot(v, _SC("yday"), date->tm_yday);
119 #define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_system_##name,nparams,pmask}
120 static SQRegFunction systemlib_funcs[]={
121 _DECL_FUNC(getenv,2,_SC(".s")),
122 _DECL_FUNC(system,2,_SC(".s")),
123 _DECL_FUNC(clock,1,NULL),
124 _DECL_FUNC(time,1,NULL),
125 _DECL_FUNC(date,-1,_SC(".nn")),
126 _DECL_FUNC(remove,2,_SC(".s")),
127 _DECL_FUNC(rename,3,_SC(".ss")),
132 int sqstd_register_systemlib(HSQUIRRELVM v)
135 while(systemlib_funcs[i].name!=0)
137 sq_pushstring(v,systemlib_funcs[i].name,-1);
138 sq_newclosure(v,systemlib_funcs[i].f,0);
139 sq_setparamscheck(v,systemlib_funcs[i].nparamscheck,systemlib_funcs[i].typemask);
140 sq_setnativeclosurename(v,-1,systemlib_funcs[i].name);