/* dirty.c MR 20/09/98 Generate a calling tree from a C source file that has already been filtered through 'clscanc1.sh'. */ #include #include main() { char buf[256]; char k; char bufpr[256]; char kpr; char save1[256]; int roundbrlevel = 0; int curlybrlevel = 0; int alert1 = 0; strcpy( buf, "" ); k = 0x00; while ( kpr = k, strcpy( bufpr, buf+1 ), fgets( buf, sizeof(buf), stdin ) ) { int len; len = strlen( buf ); if ( len > 0 && buf[len-1] == '\n' ) { buf[len-1] = '\0'; } k = buf[0]; if ( kpr == 'I' && k == '(' ) { if ( curlybrlevel > 0 ) { /* Function call inside a function definition body */ printf( "call_in_of %s %s\n", save1, bufpr ); } else { /* Possible start of fnc decl/def */ strcpy( save1, bufpr ); alert1 = 1; } } else if ( roundbrlevel == 0 && alert1 && curlybrlevel == 0 && kpr == ')' && k == '{' ) { /* Function definition, now at opening '{' */ printf( "startdef %s\n", save1 ); } else if ( roundbrlevel == 0 && alert1 && curlybrlevel == 0 && kpr == ')' && k == ';' ) { /* Function declaration */ printf( "funcdecl %s\n", save1 ); alert1 = 0; } else if ( alert1 && k == '}' && curlybrlevel == 1 ) { /* Function definition, now at closing '{' */ printf( "enddef %s\n", save1 ); alert1 = 0; } if ( k == '(' ) { roundbrlevel++; } if ( k == ')' ) { roundbrlevel--; } if ( k == '{' ) { curlybrlevel++; } if ( k == '}' ) { curlybrlevel--; } } return 0; }