2 * ncsl -- count non-comment source lines
3 * Deletes comments, white space and braces then counts non-empty lines.
4 * Flag -t causes { and } not to be ignored.
5 * Flag -b causes C++ comments //...\n to be ignored
8 int tflag
; /* don't ignore Trivial lines */
9 int bflag
; /* ignore Bjarne-style comments */
10 int getnc(FILE *f
){ /* get non-comment */
20 if(c
==EOF
) return EOF
;
32 if(c
==EOF
) return EOF
;
41 int getnwnc(FILE *f
){ /* get non-whitespace, non-comment */
46 while(c
==' ' || c
=='\t' || (!tflag
&& (c
=='{' || c
=='}')));
54 while((c
=getnwnc(f
))!=EOF
){
55 if(c
=='\n' && lastc
!='\n') nline
++;
60 main(int argc
, char *argv
[]){
61 int total
, i
, n
, error
;
68 while(argc
>1 && argv
[1][0]=='-'){
69 for(c
=argv
[1]+1;*c
;c
++) switch(*c
){
70 case 'b': bflag
++; break;
71 case 't': tflag
++; break;
73 fprintf(stderr
, "Usage: %s -[bt] [file ...]\n", cmd
);
81 printf("%d\n", count(stdin
));
84 f
=fopen(argv
[1], "r");
90 printf("%d\n", count(f
));
97 f
=fopen(argv
[i
], "r");
105 printf("%s: %d\n", argv
[i
], n
);
109 printf("total %d\n", total
);