Update to SQUIRREL 3.0.4
[supertux.git] / external / squirrel / sqstdlib / sqstdio.cpp
old mode 100755 (executable)
new mode 100644 (file)
index 2d0d442..b365a07
@@ -117,7 +117,8 @@ static SQInteger _file__typeof(HSQUIRRELVM v)
 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
@@ -138,20 +139,34 @@ static SQInteger _file_constructor(HSQUIRRELVM v)
        } 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
@@ -193,7 +208,7 @@ SQRESULT sqstd_getfile(HSQUIRRELVM v, SQInteger idx, SQFILE *file)
 \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
@@ -202,6 +217,7 @@ static SQInteger _io_file_lexfeed_ASCII(SQUserPointer file)
        return 0;\r
 }\r
 \r
+#ifdef SQUNICODE\r
 static SQInteger _io_file_lexfeed_UTF8(SQUserPointer file)\r
 {\r
 #define READ() \\r
@@ -238,6 +254,7 @@ static SQInteger _io_file_lexfeed_UTF8(SQUserPointer file)
        }\r
        return c;\r
 }\r
+#endif\r
 \r
 static SQInteger _io_file_lexfeed_UCS2_LE(SQUserPointer file)\r
 {\r
@@ -277,7 +294,7 @@ SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror)
        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
@@ -306,7 +323,11 @@ SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror)
                                                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
@@ -398,13 +419,13 @@ SQRESULT sqstd_register_iolib(HSQUIRRELVM v)
        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