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/