summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/isfopen.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/isfopen.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/isfopen.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/isfopen.c b/reference/C/CONTRIB/SNIP/isfopen.c
new file mode 100755
index 0000000..4a88f1d
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/isfopen.c
@@ -0,0 +1,41 @@
+/*
+** Find out if a FILE * is valid
+**
+** public domain demo by Bob Stout
+*/
+
+#include <stdio.h>
+
+#ifdef __TURBOC__
+ #define STREAM_BUF _streams
+ #define FCNT FOPEN_MAX
+ #define FLAG flags
+#else /* MSC, ZTC++ */
+ #define STREAM_BUF _iob
+ #define FCNT _NFILE
+ #define FLAG _flag
+#endif
+
+typedef enum {FALSE, TRUE} LOGICAL;
+
+int isfopen(FILE *fp)
+{
+ int i;
+
+ for (i = 0; i < FCNT; ++i)
+ {
+ if (0 != STREAM_BUF[i].FLAG && fp == &STREAM_BUF[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+#ifdef TEST
+
+void main(void)
+{
+ printf("stdout is%s valid\n", isfopen(stdout) ? "":" not");
+ printf("buffer #10 is%s valid\n", isfopen(&STREAM_BUF[9]) ? "":" not");
+}
+
+#endif /*TEST */