| 1 | greg | 1.1 | #ifndef lint | 
| 2 | greg | 2.2 | static const char       RCSid[] = "$Id$"; | 
| 3 | greg | 1.1 | #endif | 
| 4 |  |  | /* | 
| 5 | greg | 1.2 | * fgetline.c - read line with escaped newlines. | 
| 6 | greg | 1.1 | * | 
| 7 | greg | 2.2 | *  External symbols declared in standard.h | 
| 8 |  |  | */ | 
| 9 |  |  |  | 
| 10 | greg | 2.3 | #include "copyright.h" | 
| 11 | greg | 1.1 |  | 
| 12 |  |  | #include  <stdio.h> | 
| 13 |  |  |  | 
| 14 |  |  |  | 
| 15 |  |  | char * | 
| 16 |  |  | fgetline(s, n, fp)      /* read in line with escapes, elide final newline */ | 
| 17 |  |  | char  *s; | 
| 18 | greg | 1.2 | int  n; | 
| 19 |  |  | register FILE  *fp; | 
| 20 | greg | 1.1 | { | 
| 21 | greg | 1.2 | register char  *cp = s; | 
| 22 |  |  | register int  c = EOF; | 
| 23 | greg | 1.1 |  | 
| 24 | greg | 1.2 | while (--n > 0 && (c = getc(fp)) != EOF) { | 
| 25 | greg | 2.2 | if (c == '\r') | 
| 26 |  |  | continue; | 
| 27 | greg | 1.2 | if (c == '\n' && (cp == s || cp[-1] != '\\')) | 
| 28 |  |  | break; | 
| 29 | greg | 1.1 | *cp++ = c; | 
| 30 |  |  | } | 
| 31 | greg | 1.2 | if (cp == s && c == EOF) | 
| 32 | greg | 1.1 | return(NULL); | 
| 33 | greg | 1.2 | *cp = '\0'; | 
| 34 | greg | 1.1 | return(s); | 
| 35 |  |  | } |