Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
sqstdsystem.cpp
00001 /* see copyright notice in squirrel.h */ 00002 #include <squirrel.h> 00003 #include <time.h> 00004 #include <stdlib.h> 00005 #include <stdio.h> 00006 #include <sqstdsystem.h> 00007 00008 #ifdef SQUNICODE 00009 #include <wchar.h> 00010 #define scgetenv _wgetenv 00011 #define scsystem _wsystem 00012 #define scasctime _wasctime 00013 #define scremove _wremove 00014 #define screname _wrename 00015 #else 00016 #define scgetenv getenv 00017 #define scsystem system 00018 #define scasctime asctime 00019 #define scremove remove 00020 #define screname rename 00021 #endif 00022 00023 static SQInteger _system_getenv(HSQUIRRELVM v) 00024 { 00025 const SQChar *s; 00026 if(SQ_SUCCEEDED(sq_getstring(v,2,&s))){ 00027 sq_pushstring(v,scgetenv(s),-1); 00028 return 1; 00029 } 00030 return 0; 00031 } 00032 00033 00034 static SQInteger _system_system(HSQUIRRELVM v) 00035 { 00036 const SQChar *s; 00037 if(SQ_SUCCEEDED(sq_getstring(v,2,&s))){ 00038 sq_pushinteger(v,scsystem(s)); 00039 return 1; 00040 } 00041 return sq_throwerror(v,_SC("wrong param")); 00042 } 00043 00044 00045 static SQInteger _system_clock(HSQUIRRELVM v) 00046 { 00047 sq_pushfloat(v,((SQFloat)clock())/(SQFloat)CLOCKS_PER_SEC); 00048 return 1; 00049 } 00050 00051 static SQInteger _system_time(HSQUIRRELVM v) 00052 { 00053 time_t t; 00054 time(&t); 00055 sq_pushinteger(v,*((SQInteger *)&t)); 00056 return 1; 00057 } 00058 00059 static SQInteger _system_remove(HSQUIRRELVM v) 00060 { 00061 const SQChar *s; 00062 sq_getstring(v,2,&s); 00063 if(scremove(s)==-1) 00064 return sq_throwerror(v,_SC("remove() failed")); 00065 return 0; 00066 } 00067 00068 static SQInteger _system_rename(HSQUIRRELVM v) 00069 { 00070 const SQChar *oldn,*newn; 00071 sq_getstring(v,2,&oldn); 00072 sq_getstring(v,3,&newn); 00073 if(screname(oldn,newn)==-1) 00074 return sq_throwerror(v,_SC("rename() failed")); 00075 return 0; 00076 } 00077 00078 static void _set_integer_slot(HSQUIRRELVM v,const SQChar *name,SQInteger val) 00079 { 00080 sq_pushstring(v,name,-1); 00081 sq_pushinteger(v,val); 00082 sq_rawset(v,-3); 00083 } 00084 00085 static SQInteger _system_date(HSQUIRRELVM v) 00086 { 00087 time_t t; 00088 SQInteger it; 00089 SQInteger format = 'l'; 00090 if(sq_gettop(v) > 1) { 00091 sq_getinteger(v,2,&it); 00092 t = it; 00093 if(sq_gettop(v) > 2) { 00094 sq_getinteger(v,3,(SQInteger*)&format); 00095 } 00096 } 00097 else { 00098 time(&t); 00099 } 00100 tm *date; 00101 if(format == 'u') 00102 date = gmtime(&t); 00103 else 00104 date = localtime(&t); 00105 if(!date) 00106 return sq_throwerror(v,_SC("crt api failure")); 00107 sq_newtable(v); 00108 _set_integer_slot(v, _SC("sec"), date->tm_sec); 00109 _set_integer_slot(v, _SC("min"), date->tm_min); 00110 _set_integer_slot(v, _SC("hour"), date->tm_hour); 00111 _set_integer_slot(v, _SC("day"), date->tm_mday); 00112 _set_integer_slot(v, _SC("month"), date->tm_mon); 00113 _set_integer_slot(v, _SC("year"), date->tm_year+1900); 00114 _set_integer_slot(v, _SC("wday"), date->tm_wday); 00115 _set_integer_slot(v, _SC("yday"), date->tm_yday); 00116 return 1; 00117 } 00118 00119 00120 00121 #define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_system_##name,nparams,pmask} 00122 static SQRegFunction systemlib_funcs[]={ 00123 _DECL_FUNC(getenv,2,_SC(".s")), 00124 _DECL_FUNC(system,2,_SC(".s")), 00125 _DECL_FUNC(clock,0,NULL), 00126 _DECL_FUNC(time,1,NULL), 00127 _DECL_FUNC(date,-1,_SC(".nn")), 00128 _DECL_FUNC(remove,2,_SC(".s")), 00129 _DECL_FUNC(rename,3,_SC(".ss")), 00130 {0,0} 00131 }; 00132 #undef _DECL_FUNC 00133 00134 SQInteger sqstd_register_systemlib(HSQUIRRELVM v) 00135 { 00136 SQInteger i=0; 00137 while(systemlib_funcs[i].name!=0) 00138 { 00139 sq_pushstring(v,systemlib_funcs[i].name,-1); 00140 sq_newclosure(v,systemlib_funcs[i].f,0); 00141 sq_setparamscheck(v,systemlib_funcs[i].nparamscheck,systemlib_funcs[i].typemask); 00142 sq_setnativeclosurename(v,-1,systemlib_funcs[i].name); 00143 sq_newslot(v,-3,SQFalse); 00144 i++; 00145 } 00146 return 1; 00147 }
Generated on Tue Jul 12 2022 21:35:49 by
