1 #include "f2c.h"
2 #include "fio.h"
3 #ifdef KR_headers
f_inqu(a)4 integer f_inqu(a) inlist *a;
5 #else
6 #ifdef MSDOS
7 #undef abs
8 #undef min
9 #undef max
10 #include "string.h"
11 #include "io.h"
12 #endif
13 integer f_inqu(inlist *a)
14 #endif
15 {
16 flag byfile;
17 int i, n;
18 unit *p;
19 char buf[256];
20 long x;
21 if(a->infile != NULL)
22 {
23 byfile = 1;
24 g_char(a->infile, a->infilen, buf);
25 #ifdef NON_UNIX_STDIO
26 x = access(buf, 0) ? -1 : 0;
27 for(i = 0, p = NULL; i < MXUNIT; i++)
28 if(f__units[i].ufd != NULL
29 && f__units[i].ufnm != NULL
30 && !strcmp(f__units[i].ufnm, buf))
31 {
32 p = &f__units[i];
33 break;
34 }
35 #else
36 x = f__inode(buf, &n);
37 for(i = 0, p = NULL; i < MXUNIT; i++)
38 if(f__units[i].uinode == x
39 && f__units[i].ufd != NULL
40 && f__units[i].udev == n)
41 {
42 p = &f__units[i];
43 break;
44 }
45 #endif
46 }
47 else
48 {
49 byfile = 0;
50 if(a->inunit < MXUNIT && a->inunit >= 0)
51 {
52 p = &f__units[a->inunit];
53 }
54 else
55 {
56 p = NULL;
57 }
58 }
59 if(a->inex != NULL)
60 if(byfile && x != -1 || !byfile && p != NULL)
61 *a->inex = 1;
62 else *a->inex = 0;
63 if(a->inopen != NULL)
64 if(byfile) *a->inopen = (p != NULL);
65 else *a->inopen = (p != NULL && p->ufd != NULL);
66 if(a->innum != NULL) *a->innum = p - f__units;
67 if(a->innamed != NULL)
68 if(byfile || p != NULL && p->ufnm != NULL)
69 *a->innamed = 1;
70 else *a->innamed = 0;
71 if(a->inname != NULL)
72 if(byfile)
73 b_char(buf, a->inname, a->innamlen);
74 else if(p != NULL && p->ufnm != NULL)
75 b_char(p->ufnm, a->inname, a->innamlen);
76 if(a->inacc != NULL && p != NULL && p->ufd != NULL)
77 if(p->url)
78 b_char("DIRECT", a->inacc, a->inacclen);
79 else b_char("SEQUENTIAL", a->inacc, a->inacclen);
80 if(a->inseq != NULL)
81 if(p != NULL && p->url)
82 b_char("NO", a->inseq, a->inseqlen);
83 else b_char("YES", a->inseq, a->inseqlen);
84 if(a->indir != NULL)
85 if(p == NULL || p->url)
86 b_char("YES", a->indir, a->indirlen);
87 else b_char("NO", a->indir, a->indirlen);
88 if(a->infmt != NULL)
89 if(p != NULL && p->ufmt == 0)
90 b_char("UNFORMATTED", a->infmt, a->infmtlen);
91 else b_char("FORMATTED", a->infmt, a->infmtlen);
92 if(a->inform != NULL)
93 if(p != NULL && p->ufmt == 0)
94 b_char("NO", a->inform, a->informlen);
95 else b_char("YES", a->inform, a->informlen);
96 if(a->inunf)
97 if(p != NULL && p->ufmt == 0)
98 b_char("YES", a->inunf, a->inunflen);
99 else if(p != NULL) b_char("NO", a->inunf, a->inunflen);
100 else b_char("UNKNOWN", a->inunf, a->inunflen);
101 if(a->inrecl != NULL && p != NULL)
102 *a->inrecl = p->url;
103 if(a->innrec != NULL && p != NULL && p->url > 0)
104 *a->innrec = ftell(p->ufd) / p->url + 1;
105 if(a->inblank && p != NULL && p->ufmt)
106 if(p->ublnk)
107 b_char("ZERO", a->inblank, a->inblanklen);
108 else b_char("NULL", a->inblank, a->inblanklen);
109 return(0);
110 }
111