// static_assert(plugindir[0] == '/', "Backend must be absolute dir.");
// static_assert(plugindir[sizeof(plugindir)-1] == '/', "Backend must end in /.");
+
+SteamWorks::PulleyBack::Parameters::Parameters(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());
+ }
+ }
+}
+
+SteamWorks::PulleyBack::Parameters::~Parameters()
+{
+ if (argv)
+ {
+ for (unsigned int i=0; i < argc; i++)
+ {
+ free(argv[i]);
+ }
+ free(argv);
+ argv = nullptr;
+ }
+}
+
+
/**
* Helper class when loading the API from a DLL. Uses dlfunc()
* to resolve functions and stores them in referenced function
#ifndef STEAMWORKS_PULLEY_BACKEND_H
#define STEAMWORKS_PULLEY_BACKEND_H
+#include <vector>
#include <memory>
namespace SteamWorks
namespace PulleyBack
{
+struct Parameters
+{
+ int varc;
+ int argc;
+ char** argv;
+
+ Parameters(const std::vector<std::string>& expressions);
+ ~Parameters();
+} ;
+
+
class Instance;
/**
* Close this instance of a Pulley backend-plugin api.
*/
~Instance();
-
+
/**
* The following functions correspond with the pulleyback_*()
* functions in pulleyback.h. Calling one of these functions
#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:
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;
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);
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;