ref: d7de4a7c8e5532dd8ac6f63616836c03ef9bd4d5
dir: /vars.c/
#include <u.h>
#include <libc.h>
#include "dat.h"
#include "fns.h"
typedef struct Var Var;
struct Var {
char *name;
Var *next;
};
Var *vars = nil;
static int
hasvar(char *name)
{
Var *v;
for (v = vars; v; v = v->next)
if (v->name == name)
return 1;
return 0;
}
static void
caddvar(char *name)
{
Var *v;
if (!vars) {
vars = mallocz(sizeof(Var), 1);
vars->name = name;
return;
}
if (hasvar(name))
return;
v = vars;
vars = mallocz(sizeof(Var), 1);
vars->name = name;
vars->next = v;
}
static void
collectvars(VFile *f, void*)
{
char **a;
char *s;
int n;
for (a = f->parts; *a; a++) {
s = *a;
if (s[0] == 0)
continue;
n = strlen(s) - 1;
if (!(s[0] == '{' && s[n] == '}'))
continue;
caddvar(s);
}
}
void
printauxvars()
{
Var *v;
char buf[32];
char *s;
foreachfile(collectvars, nil);
print(
"typedef struct FileAux FileAux;\n"
"struct FileAux {\n"
);
if (!vars)
print(" int dummy;\n");
for (v = vars; v; v = v->next) {
strcpy(buf, v->name+1);
s = strchr(buf, '}');
*s = 0;
print(" char *%s;\n", buf);
}
print("};\n\n");
}