/* nodes.c */

#include <stdio.h>
#include "types.h"

DNODE *
add_dep_node(make_list,name)
DNODE		**make_list;
char		*name;
{
	DNODE		*prev;
	DNODE		*cur;
	DNODE		*new;

	for (prev = NULL, cur = *make_list; cur != NULL; cur = cur->next)
		prev = cur;
	new = (DNODE *)malloc(sizeof(DNODE));
	new->name = (char *)malloc(strlen(name)+1);
	strcpy(new->name,name);
	new->next = NULL;
	new->dlist = NULL;
	new->use_it = 1;
	if (prev == NULL)
		*make_list = new;
	else
		prev->next = new;
	return(new);
}

FNODE *
add_file_node(dnode,name)
DNODE		*dnode;
char		*name;
{
	FNODE		*prev;
	FNODE		*cur;
	FNODE		*new;

	for (prev = NULL, cur = dnode->dlist; cur != NULL; cur = cur->next)
		prev = cur;
	new = (FNODE *)malloc(sizeof(FNODE));
	new->name = (char *)malloc(strlen(name)+1);
	strcpy(new->name,name);
	new->next = NULL;
	if (prev == NULL)
		dnode->dlist = new;
	else
		prev->next = new;
	return(new);
}

in_file_list(dnode,name)
DNODE		*dnode;
char		*name;
{
	FNODE		*cur;

	for (cur = dnode->dlist; cur != NULL; cur = cur->next)
		if (!strcmp(cur->name,name))
			return(1);
	return(0);
}

DNODE *
find_dep(make_list,name)
DNODE		**make_list;
char		*name;
{
	DNODE		*cur;

	for (cur = *make_list; cur != NULL; cur = cur->next)
		if (!strcmp(cur->name,name))
			return(cur);
	return(NULL);
}

free_list(make_list)
DNODE		**make_list;
{
	DNODE		*cur;
	DNODE		*next;

	cur = *make_list;
	while (cur != NULL) {
		next = cur->next;
		free(cur->name);
		free_fnodes(cur->dlist);
		free(cur);
		cur = next;
	}
}

free_fnodes(dlist)
FNODE		*dlist;
{
	FNODE		*next;

	while (dlist != NULL) {
		next = dlist->next;
		free(dlist->name);
		free(dlist);
		dlist = next;
	}
}
