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 */