From: mfranz Date: Sat, 18 Oct 2008 19:52:18 +0000 (+0000) Subject: - createModule: add optional arg[] vector arguments X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=1a292c9ed28735ab785078905e6a9445d7b198fb;p=flightgear.git - createModule: add optional arg[] vector arguments - make propNodeGhost() public, so that it can be used by non-friends - SGNasalModelData: create module with arg[] containing two prop ghosts --- diff --git a/src/Scripting/NasalSys.cxx b/src/Scripting/NasalSys.cxx index 97b8f82ef..941776b35 100644 --- a/src/Scripting/NasalSys.cxx +++ b/src/Scripting/NasalSys.cxx @@ -788,7 +788,9 @@ void FGNasalSys::loadModule(SGPath file, const char* module) // used to pass an associated property node to the module, which can then // be accessed via cmdarg(). (This is, for example, used by XML dialogs.) void FGNasalSys::createModule(const char* moduleName, const char* fileName, - const char* src, int len, const SGPropertyNode* arg) + const char* src, int len, + const SGPropertyNode* cmdarg, + int argc, naRef* args) { naRef code = parse(fileName, src, len); if(naIsNil(code)) @@ -803,9 +805,9 @@ void FGNasalSys::createModule(const char* moduleName, const char* fileName, if(!naHash_get(_globals, modname, &locals)) locals = naNewHash(_context); - _cmdArg = (SGPropertyNode*)arg; + _cmdArg = (SGPropertyNode*)cmdarg; - call(code, 0, 0, locals); + call(code, argc, args, locals); hashset(_globals, moduleName, locals); } @@ -1105,7 +1107,12 @@ void FGNasalModelData::modelLoaded(const string& path, SGPropertyNode *prop, if(_props) _module += ':' + _props->getPath(); const char *s = load ? load->getStringValue() : ""; - nasalSys->createModule(_module.c_str(), _module.c_str(), s, strlen(s), _root); + + naRef arg[2]; + arg[0] = nasalSys->propNodeGhost(_root); + arg[1] = nasalSys->propNodeGhost(prop); + nasalSys->createModule(_module.c_str(), _module.c_str(), s, strlen(s), + _root, 2, arg); _props = 0; } diff --git a/src/Scripting/NasalSys.hxx b/src/Scripting/NasalSys.hxx index e010ba348..9b50e89f0 100644 --- a/src/Scripting/NasalSys.hxx +++ b/src/Scripting/NasalSys.hxx @@ -54,11 +54,13 @@ public: virtual bool handleCommand(const SGPropertyNode* arg); void createModule(const char* moduleName, const char* fileName, - const char* src, int len, const SGPropertyNode* arg=0); + const char* src, int len, const SGPropertyNode* cmdarg=0, + int argc=0, naRef*args=0); void deleteModule(const char* moduleName); naRef call(naRef code, int argc, naRef* args, naRef locals); + naRef propNodeGhost(SGPropertyNode* handle); private: friend class FGNasalScript; @@ -87,7 +89,6 @@ private: void logError(naContext); naRef parse(const char* filename, const char* buf, int len); naRef genPropsModule(); - naRef propNodeGhost(SGPropertyNode* handle); // This mechanism is here to allow naRefs to be passed to // locations "outside" the interpreter. Normally, such a