1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
#include "goom_script.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
static PluginParameters *getBaseForVariable (PluginInfo *pluginInfo, const char *name) {
int i;
if (name == NULL) {
printf("ERROR: No variable container name specified\n");
return NULL;
}
/* TODO: using an hashmap */
for (i=0;i<pluginInfo->nbParams;i++) {
if (!strcmp(name, pluginInfo->params[i].name)) {
return &(pluginInfo->params[i]);
}
}
printf ("ERROR: No such variable container: %s\n", name);
return NULL;
}
static PluginParam *getParamForVariable(PluginParameters *params, const char *name) {
int i;
if (name == NULL)
return NULL;
for (i=0;i<params->nbParams;i++) {
if (params->params[i] && (!strcmp(name, params->params[i]->name))) {
return params->params[i];
}
}
printf ("ERROR: No such variable into %s: %s\n", params->name, name);
return NULL;
}
PluginParam *goom_script_get_param(PluginInfo *pluginInfo, const char *name) {
int i;
char *base;
char *var;
int len = strlen(name);
int hasDot = 0;
PluginParameters *pparams;
if (name == NULL)
return NULL;
if (pluginInfo == NULL) {
printf("ERROR: programming %s on line %d\n", __FILE__, __LINE__);
return NULL;
}
base = (char*)calloc(len+1,1);
var = (char*)calloc(len+1,1);
for (i=0;i<len;i++) {
char c = name[i];
if (c == '_') {
c=' ';
}
if (c == '.') {
if (i==0)
return NULL;
hasDot = i;
}
else if (hasDot)
var[i-hasDot-1] = c;
else
base[i] = c;
}
if ((hasDot==0)||(var[0]==0)||(base[0]==0))
return NULL;
pparams = getBaseForVariable(pluginInfo,base);
if (pparams==NULL)
return NULL;
return getParamForVariable(pparams, var);
}
void goom_execute_script(PluginInfo *pluginInfo, const char *cmds) {
goom_script_scanner_compile(pluginInfo->scanner, pluginInfo, cmds);
goom_script_scanner_execute(pluginInfo->scanner);
}
/* set a script that will be executed every loop */
void goom_set_main_script(PluginInfo *pluginInfo, const char *script) {
pluginInfo->main_script_str = script;
goom_script_scanner_compile(pluginInfo->main_scanner, pluginInfo, script);
}
void goom_execute_main_script(PluginInfo *pluginInfo) {
goom_script_scanner_execute(pluginInfo->main_scanner);
}
/* return a script containing the current goom state */
char *goom_create_state_script(PluginInfo *pluginInfo) {
printf("not implemented\n");
return NULL;
}
|