xref: /csrg-svn/old/num/num.c (revision 8516)
1*8516Smckusick static char *sccsid = "@(#)num.c	4.2 (Berkeley) 10/13/82";
2*8516Smckusick #include	<stdio.h>
31061Sbill #define		formfeed 0xc
41061Sbill 
51061Sbill /*
61061Sbill  * number - a cat like program which prints a file with line
71061Sbill  *	    numbers. Printing of numbers is suppressed on blank
81061Sbill  *	    lines.
91061Sbill  *
101061Sbill  * Original Version by William Joy, June 1977
111061Sbill  * Updated October 1979 by M. Kirk McKusick
121061Sbill  */
main(ac,av)131061Sbill main(ac, av)
141061Sbill 	int ac;
151061Sbill 	char *av[];
161061Sbill 	{
171061Sbill 	register int argc = ac;
181061Sbill 	register char **argv = av;
191061Sbill 	register int lino;
201061Sbill 	register char *lineptr;
211061Sbill 	register FILE *STDOUT = stdout;
221061Sbill 	register FILE *STDIN = stdin;
231061Sbill 	char line[512];
241061Sbill 	extern char _sibuf[], _sobuf[];
251061Sbill 
261061Sbill 	argv++;
271061Sbill 	argc--;
281061Sbill 	lino = 1;
291061Sbill 	setbuf(STDIN,_sibuf);
301061Sbill 	setbuf(STDOUT,_sobuf);
311061Sbill 	do
321061Sbill 		{
331061Sbill 		if (argc)
341061Sbill 			if (freopen(*argv++, "r", STDIN) == NULL)
351061Sbill 				{
361061Sbill 				perror(*--argv);
371061Sbill 				exit(1);
381061Sbill 				}
391061Sbill 		for(;;)
401061Sbill 			{
411061Sbill 			lineptr = line;
421061Sbill 			*lineptr = 0;
431061Sbill 			fscanf(STDIN,"%[^\n]",lineptr);
441061Sbill 			if (feof(STDIN))
451061Sbill 				break;
461061Sbill 			if (*lineptr == formfeed)
471061Sbill 				putc(*lineptr++,STDOUT);
481061Sbill 			if (!*lineptr)
491061Sbill 				putc('\n',STDOUT);
501061Sbill 			else
511061Sbill 				fprintf(STDOUT,"%6d  %s\n",lino,lineptr);
521061Sbill 			lino++;
531061Sbill 			getc(STDIN);
541061Sbill 			}
551061Sbill 		}
561061Sbill 		while (--argc > 0);
571061Sbill 	exit();
581061Sbill 	}
59