12 #define scvprintf vwprintf
14 #define scvprintf vprintf
16 static void print_stdout(HSQUIRRELVM v, const SQChar *s, ...)
20 scvprintf(s, arglist);
24 static void print_other(HSQUIRRELVM v, const SQChar *s, ...)
27 const struct textcontrol *p = (const struct textcontrol *) sq_getforeignptr(v);
30 p->append_va(p->object, s, arglist);
34 HSQUIRRELVM qr_open(const struct textcontrol *p)
36 HSQUIRRELVM v = sq_open(0x400);
38 sq_setprintfunc(v, print_stdout);
40 sq_setforeignptr(v, (SQUserPointer) p);
41 sq_setprintfunc(v, print_other);
44 sqstd_seterrorhandlers(v);
45 sqstd_register_iolib(v);
50 void qr_function_register_global(HSQUIRRELVM v, const SQChar *name, SQFUNCTION f)
53 sq_pushstring(v, name, -1);
54 sq_newclosure(v, f, 0);
59 SQRESULT qr_call(HSQUIRRELVM v, const SQChar *functionname, SQUserPointer up, const SQChar *scriptfile, int argnum, ...)
61 SQRESULT r = SQ_ERROR;
62 SQInteger top = sq_gettop(v);
64 sq_pushstring(v, functionname, -1);
65 if(SQ_SUCCEEDED(sq_get(v,-2))){
70 sq_pushuserpointer(v, up);
71 sq_pushstring(v, scriptfile, -1);
72 for(i = 0; i < argnum; i++){
73 sq_pushinteger(v, va_arg(ap, long));
75 r = sq_call(v, 3 + argnum, SQFalse, SQTrue); //calls the function
77 sq_settop(v, top); //restores the original stack size
81 void qr_close(HSQUIRRELVM v)
87 static bool long_get(HSQUIRRELVM v, SQInteger index, long *d)
89 if(sq_gettype(v, index) != OT_INTEGER){
93 if(SQ_FAILED(sq_getinteger(v, index, &i))){
100 SQRESULT qr_argument_get(HSQUIRRELVM v, SQInteger num, ...)
103 if(sq_gettop(v) != (num + 2)){ //roottable, up, arguments...
104 return sq_throwerror(v, _SC("argument number error"));
108 for(i = 0; i < num; i++){
109 if(long_get(v, i + 3, va_arg(ap, long *)) == false){
110 return sq_throwerror(v, _SC("argument type error"));
116 SQRESULT qr_userpointer_get(HSQUIRRELVM v, SQUserPointer *up)
119 assert(sq_gettype(v, 2) == OT_USERPOINTER);
120 r = sq_getuserpointer(v, 2, up);
122 return sq_throwerror(v, _SC("1st argument must be d (userpointer)"));
127 void qr_version_print(const struct textcontrol *l)
129 l->append(l->object, SQUIRREL_VERSION _SC(" "));
130 l->append(l->object, SQUIRREL_COPYRIGHT _SC("\n"));