xref: /csrg-svn/usr.bin/f77/libI77/inquire.c (revision 23077)
12495Sdlw /*
2*23077Skre  * Copyright (c) 1980 Regents of the University of California.
3*23077Skre  * All rights reserved.  The Berkeley software License Agreement
4*23077Skre  * specifies the terms and conditions for redistribution.
52495Sdlw  *
6*23077Skre  *	@(#)inquire.c	5.1	06/07/85
7*23077Skre  */
8*23077Skre 
9*23077Skre /*
102495Sdlw  * inquire.c - f77 i/o inquire statement routine
112495Sdlw  */
122495Sdlw 
132495Sdlw #include "fio.h"
142495Sdlw 
152495Sdlw f_inqu(a) inlist *a;
162495Sdlw {	char *byfile;
172495Sdlw 	int i;
182495Sdlw 	unit *p;
192495Sdlw 	char buf[256], *s;
202495Sdlw 	long x_inode;
212495Sdlw 
222495Sdlw 	elist = NO;
232495Sdlw 	lfname = a->infile;
242495Sdlw 	lunit = a->inunit;
252495Sdlw 	external = YES;
262495Sdlw 	p = NULL;
272495Sdlw 	if(byfile=a->infile)
282495Sdlw 	{
292495Sdlw 		g_char(a->infile,a->infilen,buf);
302495Sdlw 		if((x_inode=inode(buf))==-1)
312495Sdlw 		{	if(a->inex) *a->inex = NO;  /* doesn't exist */
322495Sdlw 			return(OK);
332495Sdlw 		}
342495Sdlw 		for(i=0;i<MXUNIT;i++)
352495Sdlw 			if(units[i].ufd && (units[i].uinode==x_inode))
362495Sdlw 			{
372495Sdlw 				p = &units[i];
382495Sdlw 				break;
392495Sdlw 			}
402495Sdlw 	}
412495Sdlw 	else
422495Sdlw 	{
432594Sdlw 		if (not_legal(lunit)) err(a->inerr,F_ERUNIT,"inquire")
442495Sdlw 		else
452495Sdlw 			if (units[lunit].ufd)
462495Sdlw 			{	p= &units[lunit];
472495Sdlw 				lfname = p->ufnm;
482495Sdlw 			}
492495Sdlw 	}
502495Sdlw 	if(a->inex) *a->inex= ((byfile && x_inode) || (!byfile && p));
512495Sdlw 	if(a->inopen) *a->inopen=(p!=NULL);
522495Sdlw 	if(a->innum) *a->innum= (p?(p-units):-1);
532495Sdlw 	if(a->innamed) *a->innamed= (byfile || (p && p->ufnm));
542495Sdlw 	if(a->inname)
552495Sdlw 	{
562495Sdlw 		if(byfile) s = buf;
572495Sdlw 		else if(p && p->ufnm) s = p->ufnm;
582495Sdlw 		else s="";
592495Sdlw 		b_char(s,a->inname,a->innamlen);
602495Sdlw 	}
612495Sdlw 	if(a->inacc && p)
622495Sdlw 	{
632495Sdlw 		if(p->url) s = "direct";
642495Sdlw 		else	s = "sequential";
652495Sdlw 		b_char(s,a->inacc,a->inacclen);
662495Sdlw 	}
672495Sdlw 	if(a->inseq)
682495Sdlw 	{
692495Sdlw 		s= ((byfile && !p) || (p && !p->url))? "yes" : "no";
702495Sdlw 		b_char(s,a->inseq,a->inseqlen);
712495Sdlw 	}
722495Sdlw 	if(a->indir)
732495Sdlw 	{
742495Sdlw 		s= ((byfile && !p) || (p && p->useek && p->url))? "yes" : "no";
752495Sdlw 		b_char(s,a->indir,a->indirlen);
762495Sdlw 	}
772495Sdlw 	if(a->inform)
782495Sdlw 	{	if(p)
792495Sdlw 		{
802495Sdlw #ifndef KOSHER
812495Sdlw 			if(p->uprnt) s = "print"; /*** NOT STANDARD FORTRAN ***/
822495Sdlw 			else
832495Sdlw #endif
842495Sdlw 				s = p->ufmt?"formatted":"unformatted";
852495Sdlw 		}
862495Sdlw 		else s = "unknown";
872495Sdlw 		b_char(s,a->inform,a->informlen);
882495Sdlw 	}
892495Sdlw 	if(a->infmt)
902495Sdlw 	{
912495Sdlw 		if (p) s= p->ufmt? "yes" : "no";
922495Sdlw 		else s= "unknown";
932495Sdlw 		b_char(s,a->infmt,a->infmtlen);
942495Sdlw 	}
952495Sdlw 	if(a->inunf)
962495Sdlw 	{
972495Sdlw 		if (p) s= p->ufmt? "no" : "yes";
982495Sdlw 		else s= "unknown";
992495Sdlw 		b_char(s,a->inunf,a->inunflen);
1002495Sdlw 	}
1012495Sdlw 	if(a->inrecl && p) *a->inrecl=p->url;
1022495Sdlw 	if(a->innrec && p && p->url)
10312336Sdlw 		*a->innrec=((ftell(p->ufd) + p->url - 1)/p->url) + 1;
1042495Sdlw 	if(a->inblank && p && p->ufmt)
1052495Sdlw 	{
10612336Sdlw 		b_char(p->ublnk? "zero" : "null",a->inblank,a->inblanklen);
1072495Sdlw 	}
1082495Sdlw 	return(OK);
1092495Sdlw }
110