xref: /csrg-svn/usr.bin/f77/libI77/inquire.c (revision 2594)
12495Sdlw /*
2*2594Sdlw char id_inquire[] = "@(#)inquire.c	1.2";
32495Sdlw  *
42495Sdlw  * inquire.c - f77 i/o inquire statement routine
52495Sdlw  */
62495Sdlw 
72495Sdlw #include "fio.h"
82495Sdlw 
92495Sdlw f_inqu(a) inlist *a;
102495Sdlw {	char *byfile;
112495Sdlw 	int i;
122495Sdlw 	unit *p;
132495Sdlw 	char buf[256], *s;
142495Sdlw 	long x_inode;
152495Sdlw 
162495Sdlw 	elist = NO;
172495Sdlw 	lfname = a->infile;
182495Sdlw 	lunit = a->inunit;
192495Sdlw 	external = YES;
202495Sdlw 	p = NULL;
212495Sdlw 	if(byfile=a->infile)
222495Sdlw 	{
232495Sdlw 		g_char(a->infile,a->infilen,buf);
242495Sdlw 		if((x_inode=inode(buf))==-1)
252495Sdlw 		{	if(a->inex) *a->inex = NO;  /* doesn't exist */
262495Sdlw 			return(OK);
272495Sdlw 		}
282495Sdlw 		for(i=0;i<MXUNIT;i++)
292495Sdlw 			if(units[i].ufd && (units[i].uinode==x_inode))
302495Sdlw 			{
312495Sdlw 				p = &units[i];
322495Sdlw 				break;
332495Sdlw 			}
342495Sdlw 	}
352495Sdlw 	else
362495Sdlw 	{
37*2594Sdlw 		if (not_legal(lunit)) err(a->inerr,F_ERUNIT,"inquire")
382495Sdlw 		else
392495Sdlw 			if (units[lunit].ufd)
402495Sdlw 			{	p= &units[lunit];
412495Sdlw 				lfname = p->ufnm;
422495Sdlw 			}
432495Sdlw 	}
442495Sdlw 	if(a->inex) *a->inex= ((byfile && x_inode) || (!byfile && p));
452495Sdlw 	if(a->inopen) *a->inopen=(p!=NULL);
462495Sdlw 	if(a->innum) *a->innum= (p?(p-units):-1);
472495Sdlw 	if(a->innamed) *a->innamed= (byfile || (p && p->ufnm));
482495Sdlw 	if(a->inname)
492495Sdlw 	{
502495Sdlw 		if(byfile) s = buf;
512495Sdlw 		else if(p && p->ufnm) s = p->ufnm;
522495Sdlw 		else s="";
532495Sdlw 		b_char(s,a->inname,a->innamlen);
542495Sdlw 	}
552495Sdlw 	if(a->inacc && p)
562495Sdlw 	{
572495Sdlw 		if(p->url) s = "direct";
582495Sdlw 		else	s = "sequential";
592495Sdlw 		b_char(s,a->inacc,a->inacclen);
602495Sdlw 	}
612495Sdlw 	if(a->inseq)
622495Sdlw 	{
632495Sdlw 		s= ((byfile && !p) || (p && !p->url))? "yes" : "no";
642495Sdlw 		b_char(s,a->inseq,a->inseqlen);
652495Sdlw 	}
662495Sdlw 	if(a->indir)
672495Sdlw 	{
682495Sdlw 		s= ((byfile && !p) || (p && p->useek && p->url))? "yes" : "no";
692495Sdlw 		b_char(s,a->indir,a->indirlen);
702495Sdlw 	}
712495Sdlw 	if(a->inform)
722495Sdlw 	{	if(p)
732495Sdlw 		{
742495Sdlw #ifndef KOSHER
752495Sdlw 			if(p->uprnt) s = "print"; /*** NOT STANDARD FORTRAN ***/
762495Sdlw 			else
772495Sdlw #endif
782495Sdlw 				s = p->ufmt?"formatted":"unformatted";
792495Sdlw 		}
802495Sdlw 		else s = "unknown";
812495Sdlw 		b_char(s,a->inform,a->informlen);
822495Sdlw 	}
832495Sdlw 	if(a->infmt)
842495Sdlw 	{
852495Sdlw 		if (p) s= p->ufmt? "yes" : "no";
862495Sdlw 		else s= "unknown";
872495Sdlw 		b_char(s,a->infmt,a->infmtlen);
882495Sdlw 	}
892495Sdlw 	if(a->inunf)
902495Sdlw 	{
912495Sdlw 		if (p) s= p->ufmt? "no" : "yes";
922495Sdlw 		else s= "unknown";
932495Sdlw 		b_char(s,a->inunf,a->inunflen);
942495Sdlw 	}
952495Sdlw 	if(a->inrecl && p) *a->inrecl=p->url;
962495Sdlw 	if(a->innrec && p && p->url)
972495Sdlw 		*a->innrec=(ftell(p->ufd)/p->url)+1;
982495Sdlw 	if(a->inblank && p && p->ufmt)
992495Sdlw 	{
1002495Sdlw 		b_char(p->ublnk? "zero" : "blank",a->inblank,a->inblanklen);
1012495Sdlw 	}
1022495Sdlw 	return(OK);
1032495Sdlw }
104