
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "c_calls.h"

void insert_cell(LIST *list, const char *name)

/*
Insert a new cell in the list with the specified name and return a
pointer to the head of the list.  The new cell is inserted in
alphabetical order.
*/

{
LIST new_cell;

if ((*list == NULL) || (namecmp(name, (*list)->name) < 0))
     {
     if ((new_cell = malloc(sizeof(CELL))) == NULL)
          error("out of memory");

     new_cell->calls = new_cell->called_from = NULL;
     strcpy(new_cell->name, name);

     if (*list == NULL)
          new_cell->next = NULL;
     else
          new_cell->next = *list;

     *list = new_cell;
     }
else
     if (stricmp(name, (*list)->name) != 0)
          insert_cell((&(*list)->next), name);
}


void delete_cell(LIST *list, const char *name)

/* Delete the cell with the specified name from the list. */

{
LIST ptr;

/* If cell to be deleted is at head of list... */
if ((*list != NULL) && (stricmp(name, (*list)->name) == 0))
     {
     /* Delete the cell. */
     ptr = *list;
     *list = (*list)->next;
     free(ptr);
     }

else
     /* Try to delete the cell from the rest of the list. */
     if (*list != NULL)
          delete_cell(&(*list)->next, name);
}


LIST find_cell(LIST list, const char *name)

/*
Return a pointer to the cell containing the specified name
if it is found in the list.  Otherwise return NULL.
*/

{
for (; list != NULL; list = list->next)
     if (stricmp(name, list->name) == 0)
          return list;

return NULL;
}
