summaryrefslogtreecommitdiffstats
path: root/idx.c
diff options
context:
space:
mode:
Diffstat (limited to 'idx.c')
-rw-r--r--idx.c88
1 files changed, 88 insertions, 0 deletions
diff --git a/idx.c b/idx.c
new file mode 100644
index 0000000..e62e2d9
--- /dev/null
+++ b/idx.c
@@ -0,0 +1,88 @@
+/* static char copyright[] = "@(#)Copyright (c) 1986, Greg McGary";
+ static char sccsid[] = "@(#)idx.c 1.2 86/10/17"; */
+
+#include "config.h"
+#include <stdio.h>
+#include <string.h>
+#include "misc.h"
+#include "filenames.h"
+#include "scanners.h"
+
+void idxtract (char *path);
+
+char const *program_name;
+
+static void
+usage (void)
+{
+ fprintf (stderr, "Usage: %s [-u] [+/-a<ccc>] [-c<ccc>] files\n", program_name);
+ exit (1);
+}
+
+int
+main (int argc, char **argv)
+{
+ char *arg;
+ int op;
+
+ program_name = basename ((argc--, *argv++));
+
+ init_scanners ();
+
+ while (argc)
+ {
+ arg = (argc--, *argv++);
+ switch (op = *arg++)
+ {
+ case '-':
+ case '+':
+ break;
+ default:
+ (argc++, --argv);
+ goto argsdone;
+ }
+ switch (*arg++)
+ {
+ case 'S':
+ set_scan_args (op, arg);
+ break;
+ default:
+ usage ();
+ }
+ }
+argsdone:
+
+ if (argc == 0)
+ usage ();
+
+ while (argc)
+ idxtract ((argc--, *argv++));
+
+ return 0;
+}
+
+void
+idxtract (char *file_name)
+{
+ char const *key;
+ FILE *source_FILE;
+ int flags;
+ char const *suffix;
+ char const *filter;
+ char const *lang_name;
+ char const *(*scanner) (FILE*, int*);
+
+ suffix = strrchr (file_name, '.');
+ lang_name = get_lang_name (suffix);
+ scanner = get_scanner (lang_name);
+ if (scanner == NULL)
+ return;
+ source_FILE = open_source_FILE (file_name, filter = get_filter (suffix));
+ if (source_FILE == NULL)
+ return;
+
+ while ((key = (*scanner) (source_FILE, &flags)) != NULL)
+ puts (key);
+
+ close_source_FILE (source_FILE, filter);
+}