/* connect.c */
/* author: Edward A. Green */
/* purpose:  manipulate connection table */

#include "proj3.h"

void connect(int a, int b, CONNECT *bb_connect)
{
	CONNECT *entry;
	CONNECT *find_connect_entry(int, CONNECT *bb_connect);
	void check_connect_entry(int, CONNECT *bb_connect);

	check_connect_entry(b, bb_connect);
	check_connect_entry(a, bb_connect);
	entry=find_connect_entry(a, bb_connect);
	     if (entry->to[0]==-1) entry->to[0]=b;
	else if (entry->to[1]==-1) entry->to[1]=b;
	return;
}


CONNECT *find_connect_entry(int a, CONNECT *bb_connect)
{
	CONNECT *tbl;
	void check_connect_entry(int, CONNECT *bb_connect);

	tbl=bb_connect;
	while (tbl!=NULL)
	  {
	  if (tbl->from==a) return(tbl);
	  tbl=tbl->next;
	  }
	return(tbl);
}


void check_connect_entry(int a, CONNECT *bb_connect)
{
	CONNECT *entry;
	CONNECT *t1, *t2;

	entry=find_connect_entry(a, bb_connect);

	if (entry==NULL)
	  {
	  entry=(CONNECT *)malloc(sizeof(CONNECT));
	  entry->from=a;
	  entry->to[0]=-1;
	  entry->to[1]=-1;

	  if (bb_connect==NULL)
	    {
	    entry->next=bb_connect;
	    bb_connect=entry;
	    }
	  else
	    {
	    t1=bb_connect;
	    t2=NULL;
	    while (t1!=NULL)
	      {
	      if (t1->from>a) t1=NULL;
	      else
		{
		t2=t1;
		t1=t1->next;
		}
	      }

	    if (t2==NULL)
	      {
	      entry->next=bb_connect;
	      bb_connect=entry;
	      }
	    else
	      {
	      entry->next=t2->next;
	      t2->next=entry;
	      }
	    }
	  }

	return;

}

void dump_connect(CONNECT *bb_connect)
{
	CONNECT *tbl;

	tbl=bb_connect;
	while (tbl!=NULL)
	  {
	  printf("%d -> ",tbl->from);
	  if (tbl->to[0]!=-1) printf("%d",tbl->to[0]);
	  if (tbl->to[1]!=-1) printf(", %d",tbl->to[1]);
	  printf("\n");
	  tbl=tbl->next;
	  }
	return;
}
