void SqEnv::_init(size_t sz) { // AutoLock a(&_m); __vm = sq_open(sz); _vm= &__vm; assert( *_vm ); Sqrat::DefaultVM::Set(*_vm); sq_setprintfunc(*_vm, SqEnv::print_func, SqEnv::print_func); sq_newclosure(*_vm, SqEnv::error_handler,0); sq_seterrorhandler(*_vm); //sq sq_pushroottable(*_vm); sqstd_register_iolib(*_vm); sqstd_register_bloblib(*_vm); sqstd_register_mathlib(*_vm); sqstd_register_stringlib(*_vm); sqstd_register_systemlib(*_vm); sqstd_seterrorhandlers(*_vm); sqstd_printcallstack(*_vm); // setnativedebughook(_vmsys,debug_hook); sq_notifyallexceptions(*_vm, true); }
bool CSprite::LoadTexture(char* filename) { Engine()->PushContext(); // TODO: Move this into a separate class if ( !glIsEnabled( GL_TEXTURE_RECTANGLE_NV ) ) { m_iTexture = ilutGLLoadImage( filename ); if (ilGetError() != IL_NO_ERROR) return false; m_iWidth = ilGetInteger( IL_IMAGE_WIDTH ); m_iHeight = ilGetInteger( IL_IMAGE_HEIGHT ); } else { ILuint texid; ilGenImages(1, &texid); ilBindImage(texid); ilLoadImage( filename ); ILenum Error = ilGetError(); if ( Error != IL_NO_ERROR ) { sqstd_printcallstack( Sqrat::DefaultVM::Get() ); std::stringstream st; st << "DevIL Error: " << iluErrorString(Error) << std::endl; Engine()->Debug( st.str() ); return false; } m_iWidth = ilGetInteger( IL_IMAGE_WIDTH ); m_iHeight = ilGetInteger( IL_IMAGE_HEIGHT ); ilConvertImage(IL_RGB, IL_UNSIGNED_BYTE); glGenTextures(1, &m_iTexture); glBindTexture(GL_TEXTURE_RECTANGLE_NV, m_iTexture); glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, ilGetInteger(IL_IMAGE_BPP), m_iWidth, m_iHeight, 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE, ilGetData()); } //Engine()->PopContext(); return true; }
SQInteger Context::Detail::handleError(HSQUIRRELVM vm) { const SQChar* error = 0; if (sq_gettop(vm) >= 1) { if (SQ_SUCCEEDED(sq_getstring(vm, 2, &error))) printError(vm, _SC("[%s]"), error); else printError(vm, _SC("unknown")); sqstd_printcallstack(vm); } return SQ_ERROR; }
static SQInteger _sqstd_aux_printerror(HSQUIRRELVM v) { SQPRINTFUNCTION pf = sq_geterrorfunc(v); if(pf) { const SQChar *sErr = 0; if(sq_gettop(v)>=1) { if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr))) { pf(v,_SC("\nAN ERROR HAS OCCURED [%s]\n"),sErr); } else{ pf(v,_SC("\nAN ERROR HAS OCCURED [unknown]\n")); } sqstd_printcallstack(v); } } return 0; }
void Squirrel::RunError(HSQUIRRELVM vm, const SQChar *error) { /* Set the print function to something that prints to stderr */ SQPRINTFUNCTION pf = sq_getprintfunc(vm); sq_setprintfunc(vm, &Squirrel::ErrorPrintFunc); /* Check if we have a custom print function */ SQChar buf[1024]; scsnprintf(buf, lengthof(buf), _SC("Your script made an error: %s\n"), error); Squirrel *engine = (Squirrel *)sq_getforeignptr(vm); SQPrintFunc *func = engine->print_func; if (func == NULL) { scfprintf(stderr, _SC("%s"), buf); } else { (*func)(true, buf); } /* Print below the error the stack, so the users knows what is happening */ sqstd_printcallstack(vm); /* Reset the old print function */ sq_setprintfunc(vm, pf); }
int app_sqlang_run_ex(sip_msg_t *msg, char *func, char *p1, char *p2, char *p3, int emode) { int n; int ret; int top; sip_msg_t *bmsg; SQInteger rv; if(_sr_J_env.JJ==NULL) { LM_ERR("sqlang loading state not initialized (call: %s)\n", func); return -1; } /* check the script version loaded */ sqlang_kemi_reload_script(); top = sqlang_gettop(_sr_J_env.JJ); LM_DBG("sqlang top index is: %d\n", top); sq_pushroottable(_sr_J_env.JJ); /* pushes the global table */ sq_pushstring(_sr_J_env.JJ, _SC(func), -1); if(!SQ_SUCCEEDED(sq_get(_sr_J_env.JJ, -2))) { /* failed to gets the func field from the global table */ sq_settop(_sr_J_env.JJ, (top<=0)?1:top); /* restores the original stack size */ LM_ERR("sqlang failed to find symbol (call: %s)\n", func); return -1; } if(!sqlang_isfunction(_sr_J_env.JJ, -1)) { LM_ERR("no such function [%s] in sqlang scripts\n", func); LM_ERR("top stack type [%d]\n", sqlang_gettype(_sr_J_env.JJ, -1)); } /* push the 'this' (in this case is the global table) */ sq_pushroottable(_sr_J_env.JJ); n = 1; if(p1!=NULL) { sqlang_pushstring(_sr_J_env.JJ, p1); n++; if(p2!=NULL) { sqlang_pushstring(_sr_J_env.JJ, p2); n++; if(p3!=NULL) { sqlang_pushstring(_sr_J_env.JJ, p3); n++; } } } LM_DBG("executing sqlang function: [[%s]] (n: %d)\n", func, n); bmsg = _sr_J_env.msg; _sr_J_env.msg = msg; _sr_J_env.JJ_exit = 0; /* call the function */ rv = sq_call(_sr_J_env.JJ, n, SQFalse, SQTrue); if(SQ_SUCCEEDED(rv)) { ret = 1; } else { if(_sr_J_env.JJ_exit==0) { LM_ERR("failed to execute the func: %s (%d)\n", func, (int)rv); sqstd_printcallstack(_sr_J_env.JJ); ret = -1; } else { LM_DBG("script execution exit\n"); ret = 1; } } _sr_J_env.msg = bmsg; _sr_J_env.JJ_exit = 0; sq_settop(_sr_J_env.JJ, (top<=0)?1:top); /* restores the original stack size */ return ret; }
static SQInteger printCallStack(HSQUIRRELVM v) { sqstd_printcallstack(v); return SQ_OK; }