Many documents have code extracts with line numbers on the left of the lines that are referred to in the text. W.Rich Stevens' texts on TCP/IP and Network Programming are good examples. In many cases I suspect the line numbers are generated by pr(1) or cat(1) with the -n switch and the numbers manually removed from the uninteresting lines. I wondered whether a simple program could do a little better.
Prcl is a small program that prepends line numbers to interesting lines in C source code for the purposes of documentation etc. Uninteresting lines such as blank lines, line containing only comments, strings and punctuation do not have their line numbers printed. A selection of keywords appearing on a line with only other uninteresting symbols are also deemed uninteresting.
EXAMPLE
$ ./prcl example.c
[example.c]
/*
// @(#) example.c
*/
4 # include <stdio.h>
// C++ style comment
6 main (int argc, char* argv[]) {
7 if (argc < 4) {
8 switch (argc) {
9 case 1:
10 printf ("Hello!\n");
break;
12 case 2:
13 printf ("Hello %s!\n", argv[1]);
break;
15 case 3:
16 printf ("Hello %s and %s!\n", argv[1], argv[2]);
break;
}
}
else {
21 printf ("Hello all!\n");
}
}
Source at https://github.com/pellucida/prcl/
Only requires the standard C [89] library so no Makefile
Build with cc -o prcl prcl.c
BUGS
This program has no knowledge of C syntax or preprocessor constructions
so erroneous C code and clever macros will likely break it.
What constitutes an uninteresting keyword is a matter of taste but
can be add or subtracted from the BORING[] table in the program's
source.
LICENSE
Creative Commons CC0
http://creativecommons.org/publicdomain/zero/1.0/legalcode
AUTHOR
James Sainsbury
SEE ALSO
Pr(1) with -n 8 will print numbers against every line.
Indent(1) is a C beautfier and source code reformatter that probably can do intelligent line numbering if you can locate the correct switches http://www.gnu.org/software/indent/