| #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); |
| } |