20 const char * delim =
"\",;&| \t";
24 for(token = strtok(strchoices2, delim); token ; token = strtok(NULL, delim)) {
26 if(strcasecmp(token, p->
name) == 0) {
47 char * buffer =
ta_malloc(
"formatbuffer",
char, bleft);
59 bleft-= strlen(p->
name);
61 int extra = (- bleft) + btotal;
62 buffer = (
char *)
myrealloc(buffer, btotal + extra);
105 for(i = 0; i < ps->
size; i ++) {
120 if (size == 0)
return 0;
121 char * buf =
ta_malloc2(
"line",
char, size + 1);
122 static char blanks[] =
" \t\r\n=";
123 static char comments[] =
"%#";
124 strncpy(buf, start, size);
128 const char *
name = NULL;
133 while(*ptr && strchr(blanks, *ptr)) ptr++;
134 if (*ptr == 0 || strchr(comments, *ptr)) {
140 while(*ptr && !strchr(blanks, *ptr)) ptr++;
145 while(*ptr && strchr(blanks, *ptr)) ptr++;
147 if (*ptr == 0 || strchr(comments, *ptr)) {
149 strncpy(buf, start, size);
150 message(0,
"Line %d : `%s` is malformed.\n", lineno, buf);
155 while(*ptr && !strchr(comments, *ptr)) ptr++;
162 message(0,
"Line %d: Parameter `%s` is unknown.\n", lineno,
name);
169 message(0,
"Triggering Action on `%s` failed.\n",
name);
182 for(i = 0; i < ps->
size; i ++) {
185 message(0,
"Parameter `%s` is required, but not set.\n", p->
name);
195 for(i = 0; i < ps->
size; i ++) {
199 fprintf(stream,
"%-31s %-20s # Line %03d # %s \n", p->
name, v, ps->
value[i].
lineno, p->
help);
201 fprintf(stream,
"%-31s %-20s # Default # %s \n", p->
name, v, p->
help);
212 for(i = 0; i < ps->
size; i ++) {
220 if(*p ==
'\n' || *p == 0) {
221 int flag1 =
param_emit(ps, p1, p - p1, lineno);
237 if(content == NULL) {
238 endrun(1,
"Could not read file: %s\n", filename);
254 ps->
p[free].
type = type;
261 ps->
p[free].
help = help;
293 if(defvalue != NULL) {
340 message(0,
"Accessing an undefined parameter `%s`.\n", p->
name);
350 message(0,
"Accessing an undefined parameter `%s`.\n", p->
name);
359 message(0,
"Accessing an undefined parameter `%s`.\n", p->
name);
362 endrun(1,
"Parameter string %s too long for storage (%d)\n", ps->
value[p->
index].
s, len);
372 message(0,
"Accessing an undefined parameter `%s`.\n", p->
name);
382 message(0,
"Accessing an undefined parameter `%s`.\n", p->
name);
399 snprintf(buf, 128,
"%d", i);
407 snprintf(buf, 128,
"%g", d);
434 sscanf(value,
"%d", &i);
442 sscanf(value,
"%lf", &d);
449 while(*value ==
' ') value ++;
void message(int where, const char *fmt,...)
void endrun(int where, const char *fmt,...)
#define ta_malloc2(name, type, nele)
#define ta_malloc(name, type, nele)
#define myrealloc(ptr, size)
struct ParameterSchema ParameterSchema
static int parse_enum(ParameterEnum *table, const char *strchoices)
void param_declare_enum(ParameterSet *ps, const char *name, ParameterEnum *enumtable, const enum ParameterFlag required, const char *defvalue, const char *help)
double param_get_double(ParameterSet *ps, const char *name)
void param_get_string2(ParameterSet *ps, const char *name, char *dst, size_t len)
void parameter_set_free(ParameterSet *ps)
void param_declare_double(ParameterSet *ps, const char *name, const enum ParameterFlag required, const double defvalue, const char *help)
struct ParameterValue ParameterValue
void param_declare_int(ParameterSet *ps, const char *name, const enum ParameterFlag required, const int defvalue, const char *help)
int param_parse_file(ParameterSet *ps, const char *filename)
static ParameterSchema * param_declare(ParameterSet *ps, const char *name, const int type, const enum ParameterFlag required, const char *help)
int param_get_int(ParameterSet *ps, const char *name)
void param_set_action(ParameterSet *ps, const char *name, ParameterAction action, void *userdata)
static char * format_enum(ParameterEnum *table, int value)
void param_declare_string(ParameterSet *ps, const char *name, const enum ParameterFlag required, const char *defvalue, const char *help)
static int param_emit(ParameterSet *ps, char *start, int size, int lineno)
void param_dump(ParameterSet *ps, FILE *stream)
char * param_get_string(ParameterSet *ps, const char *name)
int param_is_nil(ParameterSet *ps, const char *name)
int param_parse(ParameterSet *ps, char *content)
char * param_format_value(ParameterSet *ps, const char *name)
int param_get_enum(ParameterSet *ps, const char *name)
static ParameterSchema * param_get_schema(ParameterSet *ps, const char *name)
static void param_set_from_string(ParameterSet *ps, const char *name, char *value, int lineno)
int param_validate(ParameterSet *ps)
ParameterSet * parameter_set_new()
int(* ParameterAction)(ParameterSet *ps, const char *name, void *userdata)
char * fastpm_file_get_content(const char *filename)
char * fastpm_strdup(const char *str)
ParameterEnum * enumtable
enum ParameterFlag required
ParameterValue value[1024]