home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_09_10
/
9n10037a
< prev
next >
Wrap
Text File
|
1991-08-15
|
1KB
|
57 lines
#include <stdio.h>
#include "c_calls.h"
void print_calls(LIST list, const char *name, int depth, LIST *fcns)
/*
Print out the name of the current fcn, and recursively print the names
of all fcns called by the current fcn (i.e. "expand" the current fcn).
*/
{
LIST tmp;
int i;
for (i = 1; i <= depth; i++)
printf("%1d ", (i - 1) % 10); /* Print name of current fcn. */
if (find_cell(*fcns, name) != NULL) /* Don't continue recursive call. */
printf("%s...\n", name);
else
{
printf("%s\n", name);
/* Save the name of the current fcn to avoid infinite expansion. */
insert_cell(fcns, name);
/* Print out names of all fcns called by the current fcn. */
tmp = find_cell(list, name);
for (tmp = tmp->calls; tmp != NULL; tmp = tmp->next)
print_calls(list, tmp->name, depth + 1, fcns);
/* Delete name of current fcn after completely expanding it. */
delete_cell(fcns, name);
}
}
void print_all_calls(LIST list)
/* Print the fcn call tree. */
{
LIST tmp1, tmp2, fcns = NULL;
for (tmp1 = list; tmp1 != NULL; tmp1 = tmp1->next)
{
print_calls(list, tmp1->name, 0, &fcns);
printf("\n%s is called by:\n", tmp1->name);
for (tmp2 = tmp1->called_from; tmp2 != NULL; tmp2 = tmp2->next)
printf(" %s\n", tmp2->name);
printf("\n\n");
}
}