static SQInteger _file_releasehook(SQUserPointer p, SQInteger size)\r
{\r
SQFile *self = (SQFile*)p;\r
- delete self;\r
+ self->~SQFile();\r
+ sq_free(self,sizeof(SQFile));\r
return 1;\r
}\r
\r
} else {\r
return sq_throwerror(v,_SC("wrong parameter"));\r
}\r
- f = new SQFile(newf,owns);\r
+ \r
+ f = new (sq_malloc(sizeof(SQFile)))SQFile(newf,owns);\r
if(SQ_FAILED(sq_setinstanceup(v,1,f))) {\r
- delete f;\r
+ f->~SQFile();\r
+ sq_free(f,sizeof(SQFile));\r
return sq_throwerror(v, _SC("cannot create blob with negative size"));\r
}\r
sq_setreleasehook(v,1,_file_releasehook);\r
return 0;\r
}\r
\r
+static SQInteger _file_close(HSQUIRRELVM v)\r
+{\r
+ SQFile *self = NULL;\r
+ if(SQ_SUCCEEDED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_FILE_TYPE_TAG))\r
+ && self != NULL)\r
+ {\r
+ self->Close();\r
+ }\r
+ return 0;\r
+}\r
+\r
//bindings\r
#define _DECL_FILE_FUNC(name,nparams,typecheck) {_SC(#name),_file_##name,nparams,typecheck}\r
static SQRegFunction _file_methods[] = {\r
_DECL_FILE_FUNC(constructor,3,_SC("x")),\r
_DECL_FILE_FUNC(_typeof,1,_SC("x")),\r
+ _DECL_FILE_FUNC(close,1,_SC("x")),\r
{0,0,0,0},\r
};\r
\r
\r
\r
\r
-static SQInteger _io_file_lexfeed_ASCII(SQUserPointer file)\r
+static SQInteger _io_file_lexfeed_PLAIN(SQUserPointer file)\r
{\r
SQInteger ret;\r
char c;\r
return 0;\r
}\r
\r
+#ifdef SQUNICODE\r
static SQInteger _io_file_lexfeed_UTF8(SQUserPointer file)\r
{\r
#define READ() \\r
}\r
return c;\r
}\r
+#endif\r
\r
static SQInteger _io_file_lexfeed_UCS2_LE(SQUserPointer file)\r
{\r
SQInteger ret;\r
unsigned short us;\r
unsigned char uc;\r
- SQLEXREADFUNC func = _io_file_lexfeed_ASCII;\r
+ SQLEXREADFUNC func = _io_file_lexfeed_PLAIN;\r
if(file){\r
ret = sqstd_fread(&us,1,2,file);\r
if(ret != 2) {\r
sqstd_fclose(file); \r
return sq_throwerror(v,_SC("Unrecognozed ecoding")); \r
}\r
+#ifdef SQUNICODE\r
func = _io_file_lexfeed_UTF8;\r
+#else\r
+ func = _io_file_lexfeed_PLAIN;\r
+#endif\r
break;//UTF-8 ;\r
default: sqstd_fseek(file,0,SQ_SEEK_SET); break; // ascii\r
}\r
declare_stream(v,_SC("file"),(SQUserPointer)SQSTD_FILE_TYPE_TAG,_SC("std_file"),_file_methods,iolib_funcs);\r
sq_pushstring(v,_SC("stdout"),-1);\r
sqstd_createfile(v,stdout,SQFalse);\r
- sq_createslot(v,-3);\r
+ sq_newslot(v,-3,SQFalse);\r
sq_pushstring(v,_SC("stdin"),-1);\r
sqstd_createfile(v,stdin,SQFalse);\r
- sq_createslot(v,-3);\r
+ sq_newslot(v,-3,SQFalse);\r
sq_pushstring(v,_SC("stderr"),-1);\r
sqstd_createfile(v,stderr,SQFalse);\r
- sq_createslot(v,-3);\r
+ sq_newslot(v,-3,SQFalse);\r
sq_settop(v,top);\r
return SQ_OK;\r
}\r