diff options
Diffstat (limited to 'reference/C/CONTRIB/OR_PRACTICAL_C/14_04.c')
-rw-r--r-- | reference/C/CONTRIB/OR_PRACTICAL_C/14_04.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/OR_PRACTICAL_C/14_04.c b/reference/C/CONTRIB/OR_PRACTICAL_C/14_04.c new file mode 100644 index 0000000..ca5c709 --- /dev/null +++ b/reference/C/CONTRIB/OR_PRACTICAL_C/14_04.c @@ -0,0 +1,38 @@ +#include <stdio.h> +FILE *save_file = NULL; /* Save input in this file */ +FILE *playback_file = NULL; /* Playback data from this file */ +/******************************************************** + * extended_fgets -- get a line from the input file * + * and record it in a save file if needed * + * * + * Parameters * + * line -- the line to read * + * size -- sizeof(line) -- maximum number of * + * characters to read * + * file -- file to read data from * + * (normally stdin) * + * * + * Returns * + * NULL -- error or end of file in read * + * otherwise line (just like fgets) * + ********************************************************/ +char *extended_fgets(char *line, int size, FILE *file) +{ + extern FILE *save_file; /* file to save strings in */ + extern FILE *playback_file; /* file for alternate input */ + + char *result; /* result of fgets */ + + if (playback_file != NULL) { + result = fgets(line, size, file); + /* echo the input to the standard out so the user sees it */ + (void)fputs(line, stdout); + } else + result = fgets(line, size, file); + + /* did someone ask for a save file */ + if (save_file != NULL) + (void)fputs(line, save_file); + + return (result); +} |