summaryrefslogtreecommitdiffstats
path: root/contrib/libf2c/libI77/inquire.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/libf2c/libI77/inquire.c')
-rw-r--r--contrib/libf2c/libI77/inquire.c143
1 files changed, 143 insertions, 0 deletions
diff --git a/contrib/libf2c/libI77/inquire.c b/contrib/libf2c/libI77/inquire.c
new file mode 100644
index 0000000..dae869c
--- /dev/null
+++ b/contrib/libf2c/libI77/inquire.c
@@ -0,0 +1,143 @@
+#include "config.h"
+#include "f2c.h"
+#include "fio.h"
+#include <string.h>
+#if defined (MSDOS) && !defined (GO32)
+#undef abs
+#undef min
+#undef max
+#include "io.h"
+#endif
+integer
+f_inqu (inlist * a)
+{
+ flag byfile;
+ int i, n;
+ unit *p;
+ char buf[256];
+ long x;
+ if (f__init & 2)
+ f__fatal (131, "I/O recursion");
+ if (a->infile != NULL)
+ {
+ byfile = 1;
+ g_char (a->infile, a->infilen, buf);
+#ifdef NON_UNIX_STDIO
+ x = access (buf, 0) ? -1 : 0;
+ for (i = 0, p = NULL; i < MXUNIT; i++)
+ if (f__units[i].ufd != NULL
+ && f__units[i].ufnm != NULL && !strcmp (f__units[i].ufnm, buf))
+ {
+ p = &f__units[i];
+ break;
+ }
+#else
+ x = f__inode (buf, &n);
+ for (i = 0, p = NULL; i < MXUNIT; i++)
+ if (f__units[i].uinode == x
+ && f__units[i].ufd != NULL && f__units[i].udev == n)
+ {
+ p = &f__units[i];
+ break;
+ }
+#endif
+ }
+ else
+ {
+ byfile = 0;
+ if (a->inunit < MXUNIT && a->inunit >= 0)
+ {
+ p = &f__units[a->inunit];
+ }
+ else
+ {
+ p = NULL;
+ }
+ }
+ if (a->inex != NULL)
+ {
+ if ((byfile && x != -1) || (!byfile && p != NULL))
+ *a->inex = 1;
+ else
+ *a->inex = 0;
+ }
+ if (a->inopen != NULL)
+ {
+ if (byfile)
+ *a->inopen = (p != NULL);
+ else
+ *a->inopen = (p != NULL && p->ufd != NULL);
+ }
+ if (a->innum != NULL)
+ *a->innum = p - f__units;
+ if (a->innamed != NULL)
+ {
+ if (byfile || (p != NULL && p->ufnm != NULL))
+ *a->innamed = 1;
+ else
+ *a->innamed = 0;
+ }
+ if (a->inname != NULL)
+ {
+ if (byfile)
+ b_char (buf, a->inname, a->innamlen);
+ else if (p != NULL && p->ufnm != NULL)
+ b_char (p->ufnm, a->inname, a->innamlen);
+ }
+ if (a->inacc != NULL && p != NULL && p->ufd != NULL)
+ {
+ if (p->url)
+ b_char ("DIRECT", a->inacc, a->inacclen);
+ else
+ b_char ("SEQUENTIAL", a->inacc, a->inacclen);
+ }
+ if (a->inseq != NULL)
+ {
+ if (p != NULL && p->url)
+ b_char ("NO", a->inseq, a->inseqlen);
+ else
+ b_char ("YES", a->inseq, a->inseqlen);
+ }
+ if (a->indir != NULL)
+ {
+ if (p == NULL || p->url)
+ b_char ("YES", a->indir, a->indirlen);
+ else
+ b_char ("NO", a->indir, a->indirlen);
+ }
+ if (a->infmt != NULL)
+ {
+ if (p != NULL && p->ufmt == 0)
+ b_char ("UNFORMATTED", a->infmt, a->infmtlen);
+ else
+ b_char ("FORMATTED", a->infmt, a->infmtlen);
+ }
+ if (a->inform != NULL)
+ {
+ if (p != NULL && p->ufmt == 0)
+ b_char ("NO", a->inform, a->informlen);
+ else
+ b_char ("YES", a->inform, a->informlen);
+ }
+ if (a->inunf)
+ {
+ if (p != NULL && p->ufmt == 0)
+ b_char ("YES", a->inunf, a->inunflen);
+ else if (p != NULL)
+ b_char ("NO", a->inunf, a->inunflen);
+ else
+ b_char ("UNKNOWN", a->inunf, a->inunflen);
+ }
+ if (a->inrecl != NULL && p != NULL)
+ *a->inrecl = p->url;
+ if (a->innrec != NULL && p != NULL && p->url > 0)
+ *a->innrec = FTELL (p->ufd) / p->url + 1;
+ if (a->inblank && p != NULL && p->ufmt)
+ {
+ if (p->ublnk)
+ b_char ("ZERO", a->inblank, a->inblanklen);
+ else
+ b_char ("NULL", a->inblank, a->inblanklen);
+ }
+ return (0);
+}
OpenPOWER on IntegriCloud