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