12495Sdlw /* 223077Skre * Copyright (c) 1980 Regents of the University of California. 323077Skre * All rights reserved. The Berkeley software License Agreement 423077Skre * specifies the terms and conditions for redistribution. 52495Sdlw * 6*24096Sjerry * @(#)inquire.c 5.2 07/30/85 723077Skre */ 823077Skre 923077Skre /* 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; 18*24096Sjerry int exist; 192495Sdlw unit *p; 202495Sdlw char buf[256], *s; 212495Sdlw long x_inode; 222495Sdlw 232495Sdlw elist = NO; 242495Sdlw lfname = a->infile; 252495Sdlw lunit = a->inunit; 262495Sdlw external = YES; 272495Sdlw p = NULL; 282495Sdlw if(byfile=a->infile) 292495Sdlw { 302495Sdlw g_char(a->infile,a->infilen,buf); 312495Sdlw if((x_inode=inode(buf))==-1) 32*24096Sjerry { exist = NO; /* file doesn't exist */ 332495Sdlw } 34*24096Sjerry else 35*24096Sjerry { exist = YES; /* file does exist */ 36*24096Sjerry for(i=0;i<MXUNIT;i++) 37*24096Sjerry if(units[i].ufd && (units[i].uinode==x_inode)) 38*24096Sjerry { 39*24096Sjerry p = &units[i]; 40*24096Sjerry break; 41*24096Sjerry } 42*24096Sjerry } 432495Sdlw } 442495Sdlw else 452495Sdlw { 46*24096Sjerry if (not_legal(lunit)) 47*24096Sjerry { exist = NO; /* unit doesn't exist */ 48*24096Sjerry } 492495Sdlw else 50*24096Sjerry { exist = YES; 512495Sdlw if (units[lunit].ufd) 522495Sdlw { p= &units[lunit]; 532495Sdlw lfname = p->ufnm; 542495Sdlw } 55*24096Sjerry } 562495Sdlw } 57*24096Sjerry if(a->inex) *a->inex = exist; 582495Sdlw if(a->inopen) *a->inopen=(p!=NULL); 59*24096Sjerry if(a->innum) *a->innum = byfile?(p?(p-units):-1):lunit; 602495Sdlw if(a->innamed) *a->innamed= (byfile || (p && p->ufnm)); 612495Sdlw if(a->inname) 622495Sdlw { 632495Sdlw if(byfile) s = buf; 642495Sdlw else if(p && p->ufnm) s = p->ufnm; 652495Sdlw else s=""; 662495Sdlw b_char(s,a->inname,a->innamlen); 672495Sdlw } 68*24096Sjerry if(a->inacc) 692495Sdlw { 70*24096Sjerry if(!p) s = "unknown"; 71*24096Sjerry else if(p->url) s = "direct"; 722495Sdlw else s = "sequential"; 732495Sdlw b_char(s,a->inacc,a->inacclen); 742495Sdlw } 752495Sdlw if(a->inseq) 762495Sdlw { 77*24096Sjerry if(!p) s = "unknown"; 78*24096Sjerry else s = (p && !p->url)? "yes" : "no"; 792495Sdlw b_char(s,a->inseq,a->inseqlen); 802495Sdlw } 812495Sdlw if(a->indir) 822495Sdlw { 83*24096Sjerry if(!p) s = "unknown"; 84*24096Sjerry else s = (p && p->useek && p->url)? "yes" : "no"; 852495Sdlw b_char(s,a->indir,a->indirlen); 862495Sdlw } 872495Sdlw if(a->inform) 882495Sdlw { if(p) 892495Sdlw { 902495Sdlw #ifndef KOSHER 912495Sdlw if(p->uprnt) s = "print"; /*** NOT STANDARD FORTRAN ***/ 922495Sdlw else 932495Sdlw #endif 942495Sdlw s = p->ufmt?"formatted":"unformatted"; 952495Sdlw } 962495Sdlw else s = "unknown"; 972495Sdlw b_char(s,a->inform,a->informlen); 982495Sdlw } 992495Sdlw if(a->infmt) 1002495Sdlw { 1012495Sdlw if (p) s= p->ufmt? "yes" : "no"; 1022495Sdlw else s= "unknown"; 1032495Sdlw b_char(s,a->infmt,a->infmtlen); 1042495Sdlw } 1052495Sdlw if(a->inunf) 1062495Sdlw { 1072495Sdlw if (p) s= p->ufmt? "no" : "yes"; 1082495Sdlw else s= "unknown"; 1092495Sdlw b_char(s,a->inunf,a->inunflen); 1102495Sdlw } 111*24096Sjerry if(a->inrecl) *a->inrecl = p ? p->url : -1; 112*24096Sjerry if(a->innrec) { 113*24096Sjerry if(p && p->url) 114*24096Sjerry *a->innrec = ((ftell(p->ufd) + p->url - 1)/p->url) + 1; 115*24096Sjerry else 116*24096Sjerry *a->innrec = -1; 117*24096Sjerry } 118*24096Sjerry if(a->inblank) 1192495Sdlw { 120*24096Sjerry if( p && p->ufmt) 121*24096Sjerry s = p->ublnk ? "zero" : "null" ; 122*24096Sjerry else 123*24096Sjerry s = "unknown"; 124*24096Sjerry b_char(s,a->inblank,a->inblanklen); 1252495Sdlw } 1262495Sdlw return(OK); 1272495Sdlw } 128