shithub: fsgen

ref: d7de4a7c8e5532dd8ac6f63616836c03ef9bd4d5
dir: /vars.c/

View raw version
#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");
}