-int _stream_readstr(HSQUIRRELVM v)
-{
- SETUP_STREAM(v);
- SQInteger type = _SC('a'), size = 0;
- sq_getinteger(v, 2, &size);
- if(size <= 0) return sq_throwerror(v,_SC("invalid size"));
- if(sq_gettop(v) > 2)
- sq_getinteger(v, 3, &type);
- SQChar *dest = NULL;
- switch(type) {
- case _SC('a'): {
- char *temp;
- if(self->Read(sq_getscratchpad(v, size+1), size) != size)
- return sq_throwerror(v, _SC("io failure"));
-#ifdef _UNICODE
- temp = (char*) sq_getscratchpad(v, size + (size * sizeof(SQChar)));
- dest = (SQChar*) &temp[size];
- size = (SQInteger)mbstowcs(dest, (const char*)temp, size);
-#else
- temp = (char *) sq_getscratchpad(v, -1);
- dest = temp;
-#endif
- }
- break;
- case _SC('u'): {
- wchar_t *temp;
- if(self->Read(sq_getscratchpad(v, (size + 1) * sizeof(wchar_t)), size * sizeof(wchar_t)) != (int) (size * sizeof(wchar_t)))
- return sq_throwerror(v, _SC("io failure"));
-
-#ifdef _UNICODE
- temp = (wchar_t*) sq_getscratchpad(v, -1);
- dest = (SQChar*) temp;
-#else
- temp = (wchar_t*) sq_getscratchpad(v,(size * 3) + (size * sizeof(wchar_t)));
- dest = (char*) &temp[size];
- size = (SQInteger)wcstombs(dest, (const wchar_t*)temp, size);
-#endif
- }
- break;
- default:
- return sq_throwerror(v, _SC("invalid coding"));
- }
-
- sq_pushstring(v, dest, size);
- return 1;
-}
-
-int _stream_readblob(HSQUIRRELVM v)