gsp@ulysses.UUCP (Gary Perlman) (05/29/84)
Maybe this should only go to net.sources, but it is pretty small. I found it under a log. I hope this is useful to all the people who have asked for it. Gary Perlman BTL MH 5D-105 (201) 582-3624 ulysses!gsp #include <stdio.h> #include <ctype.h> main (argc, argv) char **argv; { while (--argc) include (*++argv, 0); } include (file, depth) { int indent; FILE *ioptr; for (indent = 0; indent < depth; indent++) putchar ('\t'); if (ioptr = fopen (file, "r")) { char line[BUFSIZ]; register char *lptr; printf ("%s\n", file); while (fgets (lptr = line, BUFSIZ, ioptr)) if (*line == '#') { lptr++; while (isspace (*lptr)) lptr++; if (!strncmp (lptr, "include", 7)) { int matcher; char *eptr; lptr += 7; while (isspace (*lptr)) lptr++; matcher = *lptr++; if (matcher == '<') matcher = '>'; for (eptr = lptr; *eptr && *eptr != matcher; eptr++); *eptr = NULL; if (matcher == '>') { char fullname[BUFSIZ]; sprintf (fullname, "/usr/include/%s", lptr); lptr = fullname; } include (lptr, depth+1); } } fclose (ioptr); } else printf ("%s: can't open!\n", file); }
kendall@wjh12.UUCP (Sam Kendall) (05/30/84)
The posted "#include follower" has the following bugs: (1) The path specified in #include should be interpreted relative to the directory in which the file containing the #include resides. In the posted program, all paths are interpreted relative to the current directory. This makes a difference for commands like cc dir/file.c where file.c includes files in its own directory, and for nested #includes. (2) Include lines like #include "stdio.h" (with "" rather than <>) should scan /usr/include after the includer file's directory, but they do not (I think; I didn't test the program). (3) It does not handle -I options. (4) It should exit(0) but does not. (5) Error messages are posted to stdout rather than stderr. Since #includes inside #ifdefs may legitimately fail, the error message will mess up any automatic use of this program. A program to do all these things right is considerably longer. Probably one was posted in the past, but if not, I can dig mine up. Sam Kendall {allegra,ihnp4,ima,amd70}!wjh12!kendall Delft Consulting Corp. decvax!genrad!wjh12!kendall