#include /* clist - list 'c' source files */ #define eos '\0' #define std_err 4 #define dev_lst 2 int n_flag, h_flag; #include "cpybuf.c" #include "cmpbuflc.c" #include "instr.c" #include "diagn.c" #include "pagin8.c" #include "incl.c" #include "filenm.c" #include "detab.c" /* check include - do possible include processing */ check_include (line) /******************/ char *line; { int n; char file[20]; int list(); int abort; for ( ; isspace(*line) ; ++line); /* skip leading spaces */ if (cmpbuflc (line, "#include ", 9)) { n = get_name (line+9, file); if (n == 0 || n > 20) { if (n > 20) abort = TRUE; else abort = FALSE; diagnostic (abort, "error in file name ", file, NULL); } else { if (cmpbuflc (&file[n-2], ".h", 2)) /* header file */ { if (h_flag) include (file, &list); } else if (n_flag) /* non-header file */ include (file, &list); } } } /* check_include */ /* list - label and print lines of "file" */ list (file, iobuf) /*********/ char *file; struct _buf *iobuf; { char *fgets(); char *buf, *line; int line_number; char *alloc(); buf = alloc (170); line = alloc (150); line_number = 0; strcpy (buf, file); while (strlen(buf) < 17) strcat (buf, " "); while (fgets (line, iobuf)) { sprintf (&buf[14], "%3d", ++line_number); strcat (buf, ": "); detab (line, buf+19); paginate (buf); if (n_flag || h_flag) check_include (line); } /* while */ free (buf); free (line); } /* list */ main (argc, argv) /***************/ int argc; char **argv; { _allocp = NULL; n_flag = TRUE; h_flag = FALSE; page = 0; if (argc <= 1) diagnostic (TRUE, "Usage A>clist file1 file2 ... filen \n", NULL); --argc; ++argv; do { title = *argv; include (title, &list); paginate (NULL); } while (++argv, --argc); } .