+ void addCommand(naRef func, const std::string& name);
+ void removeCommand(const std::string& name);
+
+ /**
+ * Set member of specified hash to given value
+ */
+ void hashset(naRef hash, const char* key, naRef val);
+
+ /**
+ * Set member of globals hash to given value
+ */
+ void globalsSet(const char* key, naRef val);
+
+ naRef call(naRef code, int argc, naRef* args, naRef locals);
+ naRef callWithContext(naContext ctx, naRef code, int argc, naRef* args, naRef locals);
+
+ naRef callMethod(naRef code, naRef self, int argc, naRef* args, naRef locals);
+ naRef callMethodWithContext(naContext ctx, naRef code, naRef self, int argc, naRef* args, naRef locals);
+
+ naRef propNodeGhost(SGPropertyNode* handle);
+
+ void registerToLoad(FGNasalModelData* data);
+ void registerToUnload(FGNasalModelData* data);
+
+ // can't call this 'globals' due to naming clash
+ naRef nasalGlobals() const
+ { return _globals; }
+
+ nasal::Hash getGlobals() const
+ { return nasal::Hash(_globals, _context); }
+
+ // This mechanism is here to allow naRefs to be passed to
+ // locations "outside" the interpreter. Normally, such a
+ // reference would be garbage collected unexpectedly. By passing
+ // it to gcSave and getting a key/handle, it can be cached in a
+ // globals.__gcsave hash. Be sure to release it with gcRelease
+ // when done.
+ int gcSave(naRef r);
+ void gcRelease(int key);
+
+ /**
+ * Check if IOrules correctly work to limit access from Nasal scripts to the
+ * file system.
+ *
+ * @note Just a simple test is performed to check if access to a path is
+ * possible which should never be possible (The actual path refers to
+ * a file/folder named 'do-not-access' in the file system root).
+ *
+ * @see http://wiki.flightgear.org/IOrules
+ *
+ * @return Whether the check was successful.
+ */
+ bool checkIOrules();
+
+ /// retrive the associated log object, for displaying log
+ /// output somewhere (a UI, presumably)
+ simgear::BufferedLogCallback* log() const
+ { return _log; }