summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/OR_PRACTICAL_C/14_04.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/OR_PRACTICAL_C/14_04.c')
-rw-r--r--reference/C/CONTRIB/OR_PRACTICAL_C/14_04.c38
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);
+}