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