]> Nishi Git Mirror - gwion.git/commitdiff
:art: Driver system updates
authorfennecdjay <fennecdjay@gmail.com>
Fri, 31 Mar 2023 10:30:10 +0000 (12:30 +0200)
committerfennecdjay <fennecdjay@gmail.com>
Fri, 31 Mar 2023 10:30:10 +0000 (12:30 +0200)
include/plug.h
include/vm.h
plug
src/gwion.c
src/main.c
src/plug.c

index 7bac9fb4c54d52a4f0de0c52f369e1bcdfbc9544..7551eec0f91e2fd9219c5fb7ecb1fce4ea300aa1 100644 (file)
@@ -25,7 +25,7 @@ ANN static inline Plug new_plug(MemPool p) {
 }
 
 ANN m_bool plug_ini(const struct Gwion_ *, const Vector);
-ANN m_bool driver_ini(const struct Gwion_ *);
+ANN gwdriver_t driver_ini(const struct Gwion_ *, struct SoundInfo_ *);
 ANN m_bool plug_run(const struct Gwion_ *, const Map);
 ANN void   free_plug(const Gwion);
 ANN void * get_module(const struct Gwion_ *, const m_str);
index 54cac88147f5503810b800666d19c6e99ab94b24..c1a7597ab2bb015020c9d45820387bd3101dd96a 100644 (file)
@@ -137,7 +137,7 @@ ANN uint32_t gw_rand(uint32_t s[2]);
 ANN void     gw_seed(uint32_t s[2], const uint64_t);
 ANN bool     handle(VM_Shred shred, const m_str effect);
 #define xfun_handle(shred, effect) {\
-/*  shred->mem -= ((Instr)vector_at(&shred->code->instr, shred->pc-1))->m_val2; */\
+  shred->mem -= ((Instr)vector_at(&shred->code->instr, shred->pc-1))->m_val2; \
   handle(shred, effect); \
 }
 
diff --git a/plug b/plug
index 05ab62e2ce4b00c4e1f380fd4e27adf4946b0bc0..3410ba0416ba3d2c18305f5a0518541c8aa90626 160000 (submodule)
--- a/plug
+++ b/plug
@@ -1 +1 @@
-Subproject commit 05ab62e2ce4b00c4e1f380fd4e27adf4946b0bc0
+Subproject commit 3410ba0416ba3d2c18305f5a0518541c8aa90626
index a2754a3bbdd96fdeb3b21780fc10d35a889ba26d..27c14c03b0ddaf0b87cc5eb37a4b763ebea14f49 100644 (file)
@@ -18,7 +18,7 @@
 
 ANN m_bool gwion_audio(const Gwion gwion) {
   Driver *const di = gwion->vm->bbq;
-  if (di->si->arg) CHECK_BB(driver_ini(gwion));
+  if (di->si->arg) CHECK_OB((di->func = driver_ini(gwion, di->si)));
   di->func(di->driver);
   CHECK_BB(di->driver->ini(gwion->vm, di));
   driver_alloc(di);
index b2d1be35dd1a6e5b72b6614cd366ea01b18be34e..dd4139f74a86d8e7123900cb89f07ef937c60692 100644 (file)
@@ -63,7 +63,7 @@ int main(int argc, char **argv) {
 #ifdef GWION_EMBED
   gwion_embed(&gwion);
 #endif
-  arg_compile(&gwion, &arg);
+  if(ini > 0) arg_compile(&gwion, &arg);
   arg_release(&arg);
 #ifdef GWION_CONFIG_ARGS
   free(config_argv);
index cd5164325bdd4e6fa8a2e253807b9a5a41df56b7..d6cb87aa245cafd8de6ee19cb28dc31a4a6b51e2 100644 (file)
@@ -235,9 +235,9 @@ ANN m_bool plugin_ini(struct Gwion_ *gwion, const m_str iname, const loc_t loc)
   return GW_OK;
 }
 
-ANN m_bool driver_ini(const struct Gwion_ *gwion) {
+ANN gwdriver_t driver_ini(const struct Gwion_ *gwion, struct SoundInfo_ *si) {
   const Map  map   = &gwion->data->plugs->map;
-  m_str      dname = gwion->vm->bbq->si->arg;
+  m_str      dname = si->arg;
   m_str      opt   = strchr(dname, '=');
   const char c     = opt ? *opt : '\0';
   if (opt) *opt = '\0';
@@ -246,14 +246,13 @@ ANN m_bool driver_ini(const struct Gwion_ *gwion) {
     if (!strcmp(name, dname)) {
       const Plug     plug = (Plug)VVAL(map, i);
       const gwdriver_t drv  = plug->driver;
-      if (!drv) break;
-      gwion->vm->bbq->func = drv;
       if (opt) *opt = c;
-      return GW_OK;
+      return drv;
     }
   }
+  if (opt) *opt = c;
   gw_err("can't find driver '%s'\n", dname);
-  return GW_ERROR;
+  return NULL;
 }
 
 ANN void *get_module(const struct Gwion_ *gwion, const m_str name) {