line.c revision 1.2 1 1.2 perry /* $NetBSD: line.c,v 1.2 1998/01/09 08:05:00 perry Exp $ */
2 1.2 perry
3 1.1 mrg /* @(#)line.c 1.1 */
4 1.1 mrg /*
5 1.1 mrg This program reads a single line from the standard input
6 1.1 mrg and writes it on the standard output. It is probably most useful
7 1.1 mrg in conjunction with the Bourne shell.
8 1.1 mrg */
9 1.1 mrg #define LSIZE 512
10 1.1 mrg int EOF;
11 1.1 mrg char nl = '\n';
12 1.1 mrg main()
13 1.1 mrg {
14 1.1 mrg register char c;
15 1.1 mrg char line[LSIZE];
16 1.1 mrg register char *linep, *linend;
17 1.1 mrg
18 1.1 mrg EOF = 0;
19 1.1 mrg linep = line;
20 1.1 mrg linend = line + LSIZE;
21 1.1 mrg
22 1.1 mrg while ((c = readc()) != nl)
23 1.1 mrg {
24 1.1 mrg if (linep == linend)
25 1.1 mrg {
26 1.1 mrg write (1, line, LSIZE);
27 1.1 mrg linep = line;
28 1.1 mrg }
29 1.1 mrg *linep++ = c;
30 1.1 mrg }
31 1.1 mrg write (1, line, linep-line);
32 1.1 mrg write(1,&nl,1);
33 1.1 mrg if (EOF == 1) exit(1);
34 1.1 mrg exit (0);
35 1.1 mrg }
36 1.1 mrg readc()
37 1.1 mrg {
38 1.1 mrg char c;
39 1.1 mrg if (read (0, &c, 1) != 1) {
40 1.1 mrg EOF = 1;
41 1.1 mrg return(nl);
42 1.1 mrg }
43 1.1 mrg else
44 1.1 mrg return (c);
45 1.1 mrg }
46