Listing 3

#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) != O)
        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;
}
/* End of File */