Howto:Disable Nasal entirely: Difference between revisions

Jump to navigation Jump to search
m
→‎Patch: untested for now ...
m (→‎Patch: untested for now ...)
Line 18: Line 18:
}}
}}


<syntaxhighlight lang="diff">
<syntaxhighlight lang="diff">diff --git a/src/AIModel/AIManager.cxx b/src/AIModel/AIManager.cxx
index 4faf23e..e09db60 100644
--- a/src/AIModel/AIManager.cxx
+++ b/src/AIModel/AIManager.cxx
@@ -72,6 +72,10 @@ public:
        std::string loadScript = nasalScripts->getStringValue("load");
        if (!loadScript.empty()) {
            FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal");
+     if(!nasalSys) {
+ NASAL_DISABLED("AI scenarios");
+ return;
+     }
            std::string moduleName = "scenario_" + _internalName;
            nasalSys->createModule(moduleName.c_str(), moduleName.c_str(),
                                    loadScript.c_str(), loadScript.size(),
@@ -86,8 +90,10 @@ public:
        }
       
        FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal");
-        if (!nasalSys)
-            return;
+        if(!nasalSys) {
+ NASAL_DISABLED("AI scenarios");
+ return;
+     }
       
        std::string moduleName = "scenario_" + _internalName;
        if (!_unloadScript.empty()) {
diff --git a/src/GUI/CanvasWidget.cxx b/src/GUI/CanvasWidget.cxx
index f68fe22..52ed2f4 100644
--- a/src/GUI/CanvasWidget.cxx
+++ b/src/GUI/CanvasWidget.cxx
@@ -72,10 +72,13 @@ CanvasWidget::CanvasWidget( int x, int y,
    return;
  FGNasalSys *nas = dynamic_cast<FGNasalSys*>(globals->get_subsystem("nasal"));
-  if( !nas )
+  if( !nas ) {
    SG_LOG( SG_GENERAL,
            SG_ALERT,
            "CanvasWidget: Failed to get nasal subsystem!" );
+  NASAL_DISABLED("PUI CanvasWidget");
+  return;
+  }
  const std::string file = std::string("__canvas:")
                          + cprops->getStringValue("name");
diff --git a/src/GUI/FGPUIDialog.cxx b/src/GUI/FGPUIDialog.cxx
index 30cbef7..f66f40e 100644
--- a/src/GUI/FGPUIDialog.cxx
+++ b/src/GUI/FGPUIDialog.cxx
@@ -672,7 +672,9 @@ FGPUIDialog::FGPUIDialog (SGPropertyNode *props) :
            FGNasalSys *nas = (FGNasalSys *)globals->get_subsystem("nasal");
            if (nas)
                nas->createModule(_module.c_str(), _module.c_str(), s, strlen(s), props);
+     else NASAL_DISABLED("Nasal embedded in PUI dialogs");
        }
+
    }
    display(props);
}
@@ -1056,7 +1058,11 @@ FGPUIDialog::makeObject (SGPropertyNode *props, int parentWidth, int parentHeigh
          }
        } else {
          FGNasalSys* nasal = (FGNasalSys*) globals->get_subsystem("nasal");
+   if(nasal)  
          obj->setBuffer(nasal->log());
+   else {
+   NASAL_DISABLED("PUI");
+   }
        }
        setupObject(obj, props);
diff --git a/src/GUI/FileDialog.cxx b/src/GUI/FileDialog.cxx
index 2047898..d71d910 100644
--- a/src/GUI/FileDialog.cxx
+++ b/src/GUI/FileDialog.cxx
@@ -100,6 +100,10 @@ public:
        object(obj)
    {
        FGNasalSys* sys = static_cast<FGNasalSys*>(globals->get_subsystem("nasal"));
+        if(!sys) {
+ NASAL_DISABLED("FileDialog");
+ return;
+ }
        _gcKeys[0] = sys->gcSave(f);
        _gcKeys[1] = sys->gcSave(obj);
    }
@@ -107,7 +111,10 @@ public:
    virtual void onFileDialogDone(FGFileDialog* instance, const SGPath& aPath)
    {
        FGNasalSys* sys = static_cast<FGNasalSys*>(globals->get_subsystem("nasal"));
-       
+        if(!sys) {
+ NASAL_DISABLED("FileDialog (done)");
+ return;
+ }
        naContext ctx = naNewContext();
        naRef args[1];
        args[0] = nasal::to_nasal(ctx, aPath);
@@ -119,6 +126,10 @@ public:
    ~NasalCallback()
    {
        FGNasalSys* sys = static_cast<FGNasalSys*>(globals->get_subsystem("nasal"));
+ if(!sys) {
+ NASAL_DISABLED("FileDialog");
+ return;
+ }
        sys->gcRelease(_gcKeys[0]);
        sys->gcRelease(_gcKeys[1]);
    }
diff --git a/src/Input/FGEventInput.cxx b/src/Input/FGEventInput.cxx
index 29bdc6e..7bbab09 100644
--- a/src/Input/FGEventInput.cxx
+++ b/src/Input/FGEventInput.cxx
@@ -236,6 +236,7 @@ FGInputDevice::~FGInputDevice()
    }
    nas->deleteModule(nasalModule.c_str());
  }
+  else NASAL_DISABLED("FGInputDevice");
}
void FGInputDevice::Configure( SGPropertyNode_ptr aDeviceNode )
@@ -264,7 +265,7 @@ void FGInputDevice::Configure( SGPropertyNode_ptr aDeviceNode )
      FGNasalSys *nas = (FGNasalSys *)globals->get_subsystem("nasal");
      if (nas)
        nas->createModule(nasalModule.c_str(), nasalModule.c_str(), s.c_str(), s.length(), deviceNode );
-    }
+    } else NASAL_DISABLED("FGInputDevice::Configure");
  }
}
diff --git a/src/Input/FGJoystickInput.cxx b/src/Input/FGJoystickInput.cxx
index 069e9d8..d6d3fd8 100644
--- a/src/Input/FGJoystickInput.cxx
+++ b/src/Input/FGJoystickInput.cxx
@@ -208,14 +208,16 @@ void FGJoystickInput::postinit()
    std::ostringstream str;
    str << "__js" << i;
    std::string module = str.str();
+    unsigned int j;
+    if (nasalsys) {
    nasalsys->createModule(module.c_str(), module.c_str(), "", 0);
    PropertyList nasal = js_node->getChildren("nasal");
-    unsigned int j;
    for (j = 0; j < nasal.size(); j++) {
      nasal[j]->setStringValue("module", module.c_str());
      nasalsys->handleCommand(nasal[j]);
    }
+    } else NASAL_DISABLED("Joystick bindings");
    //
    // Initialize the axes.
diff --git a/src/Input/FGKeyboardInput.cxx b/src/Input/FGKeyboardInput.cxx
index 8ff3d0a..004547e 100644
--- a/src/Input/FGKeyboardInput.cxx
+++ b/src/Input/FGKeyboardInput.cxx
@@ -109,11 +109,13 @@ void FGKeyboardInput::postinit()
  }
  FGNasalSys *nasalsys = (FGNasalSys *)globals->get_subsystem("nasal");
+  if(nasalsys) {
  PropertyList nasal = key_nodes->getChildren("nasal");
  for (unsigned int j = 0; j < nasal.size(); j++) {
    nasal[j]->setStringValue("module", module.c_str());
    nasalsys->handleCommand(nasal[j]);
  }
+} else NASAL_DISABLED("Keyboard bindings");
  PropertyList keys = key_nodes->getChildren("key");
  for (unsigned int i = 0; i < keys.size(); i++) {
diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx
index 1e93a0b..e07d4b9 100644
--- a/src/Main/fg_commands.cxx
+++ b/src/Main/fg_commands.cxx
@@ -185,7 +185,13 @@ do_null (const SGPropertyNode * arg)
static bool
do_nasal (const SGPropertyNode * arg)
{
-    return ((FGNasalSys*)globals->get_subsystem("nasal"))->handleCommand(arg);
+    FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal");
+    if(!nasalSys) {
+ NASAL_DISABLED("fgcomand nasal (bindings)");
+ return false;
+    }
+    return nasalSys->handleCommand(arg);
+   
}
/**
diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx
index 61d3425..d8bd11a 100644
--- a/src/Main/fg_init.cxx
+++ b/src/Main/fg_init.cxx
@@ -904,11 +904,12 @@ void fgPostInitSubsystems()
    // Initialize the Nasal interpreter.
    // Do this last, so that the loaded scripts see initialized state
    ////////////////////////////////////////////////////////////////////////
+if(!fgGetBool("/sim/startup/disable-nasal",false)) {
    FGNasalSys* nasal = new FGNasalSys();
    globals->add_subsystem("nasal", nasal, SGSubsystemMgr::INIT);
    nasal->init();
    SG_LOG(SG_GENERAL, SG_INFO, "Nasal init took:" << st.elapsedMSec());
-
+}  else NASAL_DISABLED("Initialization");
    // initialize methods that depend on other subsystems.
    st.stamp();
    globals->get_subsystem_mgr()->postinit();
diff --git a/src/Network/ATC-Main.cxx b/src/Network/ATC-Main.cxx
index 6c0da9b..00cd91a 100644
--- a/src/Network/ATC-Main.cxx
+++ b/src/Network/ATC-Main.cxx
@@ -223,10 +223,12 @@ bool FGATCMain::process() {
    // directly provide.
    FGNasalSys *n = (FGNasalSys*)globals->get_subsystem("nasal");
+    if(n) {
    bool result = n->parseAndRun( "atcsim.update()" );
    if ( !result ) {
        SG_LOG( SG_NETWORK, SG_ALERT, "Nasal: atcsim.update() failed!" );
    }
+    } else NASAL_DISABLED("ATC-Main");
    // process the ATC outputs
    if ( output0 != NULL && board0_locked ) {
diff --git a/src/Network/HTTPClient.cxx b/src/Network/HTTPClient.cxx
index e6d2b29..48376ab 100644
--- a/src/Network/HTTPClient.cxx
+++ b/src/Network/HTTPClient.cxx
@@ -327,6 +327,10 @@ void FGHTTPClient::postinit()
  pkg::Root* packageRoot = globals->packageRoot();
  if (packageRoot) {
    FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal");
+    if(!nasalSys) {
+ NASAL_DISABLED("package manager");
+ return;
+ }
    nasal::Hash nasalGlobals = nasalSys->getGlobals();
    nasal::Hash nasalPkg = nasalGlobals.createHash("pkg"); // module
    nasalPkg.set("root", packageRoot);
diff --git a/src/Scripting/NasalSys.hxx b/src/Scripting/NasalSys.hxx
index 096a591..af01ff2 100644
--- a/src/Scripting/NasalSys.hxx
+++ b/src/Scripting/NasalSys.hxx
@@ -30,11 +30,14 @@ namespace simgear { class BufferedLogCallback; }
SGPropertyNode* ghostToPropNode(naRef ref);
+#define NASAL_DISABLED(feature) SG_LOG(SG_NASAL, SG_ALERT, "Nasal support disabled:" << feature)
+
class FGNasalSys : public SGSubsystem
{
public:
    FGNasalSys();
    virtual ~FGNasalSys();
+
    virtual void init();
    virtual void shutdown();
   
 
</syntaxhighlight>
</syntaxhighlight>

Navigation menu