Pulley: store backend-parameters in the script (Parser)
authorAdriaan de Groot <groot@kde.org>
Wed, 3 Aug 2016 11:54:32 +0000 (13:54 +0200)
committerAdriaan de Groot <groot@kde.org>
Wed, 3 Aug 2016 11:54:32 +0000 (13:54 +0200)
src/pulley/pulleyscript/parserpp.cpp

index 9ba532b..40ecc79 100644 (file)
@@ -18,6 +18,45 @@ Adriaan de Groot <groot@kde.org>
 #include <logger.h>
 #include <jsoniterator.h>
 
+struct BackendParms
+{
+       int varc;
+       int argc;
+       char** argv;
+
+       BackendParms(const std::vector<std::string>& expressions) :
+               varc(0),
+               argc(expressions.size()),
+               argv(nullptr)
+       {
+               if (argc > 0)
+               {
+                       argv = (char **)calloc(argc, sizeof(char *));
+               }
+               if (argv)
+               {
+                       unsigned int i = 0;
+                       for (const auto& s : expressions)
+                       {
+                               argv[i++] = strdup(s.c_str());
+                       }
+               }
+       }
+
+       ~BackendParms()
+       {
+               if (argv)
+               {
+                       for (unsigned int i=0; i < argc; i++)
+                       {
+                               free(argv[i]);
+                       }
+                       free(argv);
+                       argv = nullptr;
+               }
+       }
+} ;
+
 class SquealOpener
 {
 public:
@@ -68,6 +107,7 @@ private:
 
        using generator_variablenames_t = std::vector<std::string>;
        std::vector<generator_variablenames_t> m_variables_per_generator;
+       std::vector<BackendParms> m_parameters_per_driver;
 
        bool m_valid;
        State m_state;
@@ -233,6 +273,7 @@ public:
 
                auto& log = SteamWorks::Logging::getLogger("steamworks.pulleyscript");
                log.debugStream() << "Drivers: " << drvtab_count(m_prs.drvtab);
+               m_parameters_per_driver.clear();
                for (unsigned int drvidx=0; drvidx < drvtab_count(m_prs.drvtab); drvidx++)
                {
                        log.debugStream() << "  .. " << drvidx << " name " << drv_get_module(m_prs.drvtab, drvidx);
@@ -242,6 +283,10 @@ public:
                                struct var_value* value = var_share_value(m_prs.vartab, binding);
                                std::vector<std::string> expressions;
                                decode_parameter_binding(m_prs.vartab, value->typed_blob.str, value->typed_blob.len, expressions);
+
+                               BackendParms parms(expressions);
+                               m_parameters_per_driver.push_back(parms);
+
                                for (auto s : expressions)
                                {
                                        log.debugStream() << "  .. " << drvidx << " parm " << s;