commit 2be958b69ca6663b13d3f94671009d564e2ca953 Author: teamhimeh Date: Fri Mar 12 21:49:40 2021 +0900 ADD: extension of i/o library TODO: test on Windows diff --git a/script/script.cc b/script/script.cc index c77ea2140..21f4dca53 100644 --- a/script/script.cc +++ b/script/script.cc @@ -144,6 +144,7 @@ script_vm_t::script_vm_t(const char* include_path_, const char* log_name) sqstd_register_stringlib(vm); sqstd_register_mathlib(vm); sqstd_register_systemlib(vm); + sqstd_register_iolib(vm); sq_pop(vm, 1); // export include command export_include(vm, include_path); diff --git a/squirrel/sqstdlib/sqstdstream.cc b/squirrel/sqstdlib/sqstdstream.cc index 902502e67..7d4a73efa 100644 --- a/squirrel/sqstdlib/sqstdstream.cc +++ b/squirrel/sqstdlib/sqstdstream.cc @@ -97,6 +97,16 @@ SQInteger _stream_readn(HSQUIRRELVM v) return 1; } +SQInteger _stream_readstr(HSQUIRRELVM v) { + SETUP_STREAM(v); + SQInteger size; + sq_getinteger(v, 2, &size); + SQChar str[size]; + SQInteger len = self->Read(&str, sizeof(SQChar)*size); + sq_pushstring(v, str, len); + return 1; +} + SQInteger _stream_writeblob(HSQUIRRELVM v) { SQUserPointer data; @@ -180,6 +190,16 @@ SQInteger _stream_writen(HSQUIRRELVM v) return 0; } +SQInteger _stream_writestr(HSQUIRRELVM v) { + SETUP_STREAM(v); + const SQChar* str; + sq_getstring(v, 2, &str); + SQChar str2[strlen(str)+1]; + strcpy(str2, str); + self->Write(str2, sizeof(SQChar)*(strlen(str2))+1); + return 0; +} + SQInteger _stream_seek(HSQUIRRELVM v) { SETUP_STREAM(v); @@ -241,8 +261,10 @@ SQInteger _stream_eos(HSQUIRRELVM v) static const SQRegFunction _stream_methods[] = { _DECL_STREAM_FUNC(readblob,2,_SC("xn")), _DECL_STREAM_FUNC(readn,2,_SC("xn")), + _DECL_STREAM_FUNC(readstr,2,_SC("xn")), _DECL_STREAM_FUNC(writeblob,-2,_SC("xx")), _DECL_STREAM_FUNC(writen,3,_SC("xnn")), + _DECL_STREAM_FUNC(writestr,2,_SC("xs")), _DECL_STREAM_FUNC(seek,-2,_SC("xnn")), _DECL_STREAM_FUNC(tell,1,_SC("x")), _DECL_STREAM_FUNC(len,1,_SC("x")), diff --git a/squirrel/sqstdlib/sqstdstream.h b/squirrel/sqstdlib/sqstdstream.h index 867c135fd..84b6e40eb 100644 --- a/squirrel/sqstdlib/sqstdstream.h +++ b/squirrel/sqstdlib/sqstdstream.h @@ -3,10 +3,11 @@ #define _SQSTD_STREAM_H_ SQInteger _stream_readblob(HSQUIRRELVM v); -SQInteger _stream_readline(HSQUIRRELVM v); SQInteger _stream_readn(HSQUIRRELVM v); +SQInteger _stream_readstr(HSQUIRRELVM v); SQInteger _stream_writeblob(HSQUIRRELVM v); SQInteger _stream_writen(HSQUIRRELVM v); +SQInteger _stream_writestr(HSQUIRRELVM v); SQInteger _stream_seek(HSQUIRRELVM v); SQInteger _stream_tell(HSQUIRRELVM v); SQInteger _stream_len(HSQUIRRELVM v);