source: trunk/third/gcc/libf2c/libI77/inquire.c @ 18477

Revision 18477, 2.6 KB checked in by ghudson, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18476, which included commits to RCS files with non-trunk default branches.
Line 
1#include "config.h"
2#include "f2c.h"
3#include "fio.h"
4#include <string.h>
5#ifdef KR_headers
6integer f_inqu(a) inlist *a;
7#else
8#if defined (MSDOS) && !defined (GO32)
9#undef abs
10#undef min
11#undef max
12#include "io.h"
13#endif
14integer f_inqu(inlist *a)
15#endif
16{       flag byfile;
17        int i, n;
18        unit *p;
19        char buf[256];
20        long x;
21        if (f__init & 2)
22                f__fatal (131, "I/O recursion");
23        if(a->infile!=NULL)
24        {       byfile=1;
25                g_char(a->infile,a->infilen,buf);
26#ifdef NON_UNIX_STDIO
27                x = access(buf,0) ? -1 : 0;
28                for(i=0,p=NULL;i<MXUNIT;i++)
29                        if(f__units[i].ufd != NULL
30                         && f__units[i].ufnm != NULL
31                         && !strcmp(f__units[i].ufnm,buf)) {
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                                p = &f__units[i];
42                                break;
43                                }
44#endif
45        }
46        else
47        {
48                byfile=0;
49                if(a->inunit<MXUNIT && a->inunit>=0)
50                {
51                        p= &f__units[a->inunit];
52                }
53                else
54                {
55                        p=NULL;
56                }
57        }
58        if(a->inex!=NULL)
59                if(byfile && x != -1 || !byfile && p!=NULL)
60                        *a->inex=1;
61                else *a->inex=0;
62        if(a->inopen!=NULL)
63                if(byfile) *a->inopen=(p!=NULL);
64                else *a->inopen=(p!=NULL && p->ufd!=NULL);
65        if(a->innum!=NULL) *a->innum= p-f__units;
66        if(a->innamed!=NULL)
67                if(byfile || p!=NULL && p->ufnm!=NULL)
68                        *a->innamed=1;
69                else    *a->innamed=0;
70        if(a->inname!=NULL)
71                if(byfile)
72                        b_char(buf,a->inname,a->innamlen);
73                else if(p!=NULL && p->ufnm!=NULL)
74                        b_char(p->ufnm,a->inname,a->innamlen);
75        if(a->inacc!=NULL && p!=NULL && p->ufd!=NULL)
76                if(p->url)
77                        b_char("DIRECT",a->inacc,a->inacclen);
78                else    b_char("SEQUENTIAL",a->inacc,a->inacclen);
79        if(a->inseq!=NULL)
80                if(p!=NULL && p->url)
81                        b_char("NO",a->inseq,a->inseqlen);
82                else    b_char("YES",a->inseq,a->inseqlen);
83        if(a->indir!=NULL)
84                if(p==NULL || p->url)
85                        b_char("YES",a->indir,a->indirlen);
86                else    b_char("NO",a->indir,a->indirlen);
87        if(a->infmt!=NULL)
88                if(p!=NULL && p->ufmt==0)
89                        b_char("UNFORMATTED",a->infmt,a->infmtlen);
90                else    b_char("FORMATTED",a->infmt,a->infmtlen);
91        if(a->inform!=NULL)
92                if(p!=NULL && p->ufmt==0)
93                b_char("NO",a->inform,a->informlen);
94                else b_char("YES",a->inform,a->informlen);
95        if(a->inunf)
96                if(p!=NULL && p->ufmt==0)
97                        b_char("YES",a->inunf,a->inunflen);
98                else if (p!=NULL) b_char("NO",a->inunf,a->inunflen);
99                else b_char("UNKNOWN",a->inunf,a->inunflen);
100        if(a->inrecl!=NULL && p!=NULL)
101                *a->inrecl=p->url;
102        if(a->innrec!=NULL && p!=NULL && p->url>0)
103                *a->innrec=FTELL(p->ufd)/p->url+1;
104        if(a->inblank && p!=NULL && p->ufmt)
105                if(p->ublnk)
106                        b_char("ZERO",a->inblank,a->inblanklen);
107                else    b_char("NULL",a->inblank,a->inblanklen);
108        return(0);
109}
Note: See TracBrowser for help on using the repository browser.