/* * load squirrel script from given file name */ bool loadScript(const char* fname) { FILE* fp = fopen(fname, "r"); if (fp == NULL) { engine->setLastError(ERR_SCRIPT_OPEN); LOGW("loadScript: failed to open main script file"); LOGW(fname); return false; } if (SQ_SUCCEEDED(sq_compile(engine->sqvm, sq_lexer_fp, fp, fname, SQTrue))) { sq_pushroottable(engine->sqvm); if (SQ_FAILED(sq_call(engine->sqvm, 1, SQFalse, SQTrue))) { engine->setLastError(ERR_SCRIPT_CALL_ROOT); LOGW("loadScript: failed to sq_call"); LOGW(fname); fclose(fp); return false; } } else { engine->setLastError(ERR_SCRIPT_COMPILE); LOGW("loadScript: failed to compile squirrel script"); LOGW(fname); fclose(fp); return false; } fclose(fp); return true; }
SQRESULT CompileNutFile(HSQUIRRELVM v, const char *filename) { SQRESULT r = -1; FILE *f=fopen(filename,"rb"); if(f) { r = sq_compile(v,file_lexfeedASCII, f, filename, 1); fclose(f); } return r; }
bool SquirrelScriptContext::ExecuteString(const char* string) { SQRESULT result = 0; // Compile from string and push function onto the stack m_currentStringProgram = string; result = sq_compile( m_vm, SquirrelReadCallback, this, "some script", SQTrue); if (result != SQ_OK) return false; // Push root table (environment) sq_pushroottable(m_vm); // Execute function result = sq_call(m_vm, 1 /* root table */, SQFalse, SQTrue); sq_pop(m_vm, 1); // Pop function return result == SQ_OK; }
/* * Load squirrel script from asset */ bool loadScriptFromAsset(const char* fname) { std::string fpath = std::string( SQUIRREL_SCRIPT_DIR ); fpath.append(fname); /* * read squirrel script from asset */ AAssetManager* mgr = engine->app->activity->assetManager; if (mgr == NULL) { engine->setLastError(ERR_SCRIPT_LOAD); LOGE("loadScriptFromAsset: failed to load AAssetManager"); return false; } AAsset* asset = AAssetManager_open(mgr, fpath.c_str(), AASSET_MODE_UNKNOWN); if (asset == NULL) { engine->setLastError(ERR_SCRIPT_OPEN); LOGW("loadScriptFromAsset: failed to open main script file"); LOGW(fname); return false; } unsigned short sqtag; bool isByteCode = false; if (AAsset_read(asset, &sqtag, 2) > 0) { if (sqtag == SQ_BYTECODE_STREAM_TAG) { isByteCode = true; } AAsset_seek(asset, 0, SEEK_SET); } else { AAsset_close(asset); return false; } if (isByteCode && SQ_SUCCEEDED(sq_readclosure(engine->sqvm, sq_lexer_bytecode, asset))) { sq_pushroottable(engine->sqvm); if (SQ_FAILED(sq_call(engine->sqvm, 1, SQFalse, SQTrue))) { engine->setLastError(ERR_SCRIPT_CALL_ROOT); LOGW("loadScriptFromAsset: failed to sq_call"); LOGW(fname); AAsset_close(asset); return false; } } else if (!isByteCode && SQ_SUCCEEDED(sq_compile(engine->sqvm, sq_lexer_asset, asset, fname, SQTrue))) { sq_pushroottable(engine->sqvm); if (SQ_FAILED(sq_call(engine->sqvm, 1, SQFalse, SQTrue))) { engine->setLastError(ERR_SCRIPT_CALL_ROOT); LOGW("loadScriptFromAsset: failed to sq_call"); LOGW(fname); AAsset_close(asset); return false; } } else { engine->setLastError(ERR_SCRIPT_COMPILE); LOGW("loadScriptFromAsset: failed to compile squirrel script"); LOGW(fname); AAsset_close(asset); return false; } AAsset_close(asset); return true; }
void compile_script(HSQUIRRELVM vm, std::istream& in, const std::string& sourcename) { if(SQ_FAILED(sq_compile(vm, squirrel_read_char, &in, sourcename.c_str(), true))) throw SquirrelError(vm, "Couldn't parse script"); }