1: /*
2: * A quick and dirty C program to spit out possible identifiers
3: * from a stream of *.c and *.h files. Takes a single parameter
4: * which specifies the minimum length of an identifier to be
5: * extracted.
6: *
7: */
8:
9: #include <stdio.h>
10: #include <ctype.h>
11:
12: #define FIRSTCHAR(a) (isalpha(a) || (a)=='_')
13: #define OTHERCHAR(a) (FIRSTCHAR(a) || isdigit(a))
14: #define TRUE 1
15: #define FALSE 0
16:
17: int size = 0;
18: char buffer[512];
19: char *bp = buffer;
20:
21: main (argc, argv)
22: int argc;
23: char *argv[];
24: {
25: register int ch;
26: register int spitout;
27: register int eating_comment;
28:
29: if (argc = 2)
30: {
31: size = atoi (argv[1]);
32: }
33: spitout = FALSE;
34: eating_comment = FALSE;
35: while ((ch = getchar()) != EOF)
36: {
37: if (ch == '/')
38: {
39: if ((ch = getchar()) == EOF)
40: {
41: fprintf (stderr, "unexpected EOF!\n");
42: exit (1);
43: }
44: else
45: {
46: if (ch == '*')
47: {
48: eating_comment = TRUE;
49: }
50: else
51: {
52: ungetc (ch, stdin);
53: }
54: }
55: }
56: else if (eating_comment && ch == '*')
57: {
58: if ((ch = getchar()) == EOF)
59: {
60: fprintf (stderr, "unexpected EOF!\n");
61: exit (1);
62: }
63: else
64: {
65: if (ch == '/')
66: {
67: eating_comment = FALSE;
68: }
69: else
70: {
71: ungetc (ch, stdin);
72: }
73: }
74: }
75: else if (!eating_comment)
76: {
77: if (!spitout && FIRSTCHAR(ch))
78: {
79: spitout = TRUE;
80: *bp++ = ch;
81: }
82: else if (spitout && OTHERCHAR(ch))
83: {
84: *bp++ = ch;
85: }
86: else if (spitout)
87: {
88: *bp++ = '\000';
89: bp = buffer;
90: if (strlen (bp) >= size)
91: {
92: printf ("%s\n", bp);
93: }
94: spitout = FALSE;
95: }
96: }
97: }
98: return (0);
99: }
Defined functions
main
defined in line
21;
never used
Defined variables
bp
defined in line
19; used 6 times
size
defined in line
17; used 2 times
Defined macros
FALSE
defined in line
15; used 4 times
TRUE
defined in line
14; used 2 times