#include "name.h"
#include "stringops.h"

name_list *name_add (name_list *m, char *name)
{
	name_list *new, *list;

	#ifdef FUNCTIONS
	puts ("**name_add");
	#endif

	new = allocate (name_list);
	new->name = name;
	new->next = NULL;

	if (m)
	{
		list = m;

		while (m->next) m = m->next;
		m->next = new;

		return list;
	}
	else
		return new;
}

name_list *name_parse (char *i)
{
	name_list *l = NULL;
	char *start, *end;

	#ifdef FUNCTIONS
	puts ("**name_parse");
	#endif

	for (start = i; *start != '\0'; start = end + 2)
	{
		char *name;
		for (end = start; (*end != '\0') && (*end != '|'); end++);
		end--;
		l = name_add (l, clip (start, end));
		start = end + 1;
	}
	return l;
}

void name_save (name_list *l, FILE *f)
{
	#ifdef FUNCTIONS
	puts ("**name_save");
	#endif

	while (l)
	{
		fprintf (f, "%s", l->name);
		if (l->next) putc ('|', f);
		l = l->next;
	}
	putc ('\n', f);
}

void name_burn (name_list *m)
{
	#ifdef FUNCTIONS
	puts ("**name_burn");
	#endif

	if (m)
	{
		name_burn (m->next);
		free (m->name);
		free (m);
	}
}

int name_test (name_list *l, char *line)
{
	#ifdef FUNCTIONS
	puts ("**name_test");
	#endif

	while (l)
	{
		if (find (line, l->name)) return 1;
		l = l->next;
	}

	return 0;
}