summaryrefslogtreecommitdiff
path: root/shortnames/names.c
diff options
context:
space:
mode:
Diffstat (limited to 'shortnames/names.c')
-rw-r--r--shortnames/names.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/shortnames/names.c b/shortnames/names.c
new file mode 100644
index 00000000000..e4beff95a18
--- /dev/null
+++ b/shortnames/names.c
@@ -0,0 +1,99 @@
+/*
+ * A quick and dirty C program to spit out possible identifiers
+ * from a stream of *.c and *.h files. Takes a single parameter
+ * which specifies the minimum length of an identifier to be
+ * extracted.
+ *
+ */
+
+#include <stdio.h>
+#include <ctype.h>
+
+#define FIRSTCHAR(a) (isalpha(a) || (a)=='_')
+#define OTHERCHAR(a) (FIRSTCHAR(a) || isdigit(a))
+#define TRUE 1
+#define FALSE 0
+
+int size = 0;
+char buffer[512];
+char *bp = buffer;
+
+main (argc, argv)
+ int argc;
+ char *argv[];
+{
+ register int ch;
+ register int spitout;
+ register int eating_comment;
+
+ if (argc == 2)
+ {
+ size = atoi (argv[1]);
+ }
+ spitout = FALSE;
+ eating_comment = FALSE;
+ while ((ch = getchar()) != EOF)
+ {
+ if (ch == '/')
+ {
+ if ((ch = getchar()) == EOF)
+ {
+ fprintf (stderr, "unexpected EOF!\n");
+ exit (1);
+ }
+ else
+ {
+ if (ch == '*')
+ {
+ eating_comment = TRUE;
+ }
+ else
+ {
+ ungetc (ch, stdin);
+ }
+ }
+ }
+ else if (eating_comment && ch == '*')
+ {
+ if ((ch = getchar()) == EOF)
+ {
+ fprintf (stderr, "unexpected EOF!\n");
+ exit (1);
+ }
+ else
+ {
+ if (ch == '/')
+ {
+ eating_comment = FALSE;
+ }
+ else
+ {
+ ungetc (ch, stdin);
+ }
+ }
+ }
+ else if (!eating_comment)
+ {
+ if (!spitout && FIRSTCHAR(ch))
+ {
+ spitout = TRUE;
+ *bp++ = ch;
+ }
+ else if (spitout && OTHERCHAR(ch))
+ {
+ *bp++ = ch;
+ }
+ else if (spitout)
+ {
+ *bp++ = '\000';
+ bp = buffer;
+ if (strlen (bp) >= size)
+ {
+ printf ("%s\n", bp);
+ }
+ spitout = FALSE;
+ }
+ }
+ }
+ return (0);
+}