1*20989Slibs /* 2*20989Slibs char id_c_dfe[] = "@(#)c_dfe.c 1.1"; 3*20989Slibs * 4*20989Slibs * direct formatted external i/o - common read/write routines 5*20989Slibs */ 6*20989Slibs 7*20989Slibs #include "fio.h" 8*20989Slibs 9*20989Slibs c_dfe(a,flag,str) cilist *a; char *str; 10*20989Slibs { int n; 11*20989Slibs sequential = NO; 12*20989Slibs external = formatted = FORMATTED; 13*20989Slibs lfname = NULL; 14*20989Slibs elist = NO; 15*20989Slibs cursor=scale=recpos=reclen=0; 16*20989Slibs radix = 10; 17*20989Slibs signit = YES; 18*20989Slibs fmtbuf = a->cifmt; 19*20989Slibs errflag = a->cierr; 20*20989Slibs endflag = a->ciend; 21*20989Slibs lunit = a->ciunit; 22*20989Slibs if(not_legal(lunit)) err(errflag,F_ERUNIT,str); 23*20989Slibs curunit = &units[lunit]; 24*20989Slibs if(!curunit->ufd && (n=fk_open(flag,DIR,FMT,(ftnint)lunit))) 25*20989Slibs err(errflag,n,str) 26*20989Slibs cf = curunit->ufd; 27*20989Slibs elist = YES; 28*20989Slibs lfname = curunit->ufnm; 29*20989Slibs if(!curunit->ufmt) err(errflag,F_ERNOFIO,str) 30*20989Slibs if(!curunit->useek || !curunit->url) err(errflag,F_ERNODIO,str) 31*20989Slibs recnum = a->cirec - 1; 32*20989Slibs fseek(cf, (long)curunit->url * recnum, 0); 33*20989Slibs cblank = curunit->ublnk; 34*20989Slibs cplus = NO; 35*20989Slibs return(OK); 36*20989Slibs } 37*20989Slibs 38*20989Slibs y_tab() 39*20989Slibs { int n; 40*20989Slibs if(curunit->url==1) 41*20989Slibs { 42*20989Slibs if(cursor < 0 && -cursor > ftell(cf)) rewind(cf); 43*20989Slibs else fseek(cf,(long)cursor,1); 44*20989Slibs return(cursor=0); 45*20989Slibs } 46*20989Slibs else 47*20989Slibs { if(reclen < recpos) reclen = recpos; 48*20989Slibs if((recpos + cursor) < 0) cursor = -recpos; /* BOR */ 49*20989Slibs n = reclen - recpos; /* n >= 0 */ 50*20989Slibs if(!reading && (cursor-n) > 0) 51*20989Slibs { recpos = reclen; 52*20989Slibs cursor -= n; 53*20989Slibs fseek(cf,(long)n,1); 54*20989Slibs while(cursor--) if(n=(*putn)(' ')) return(n); 55*20989Slibs return(cursor=0); 56*20989Slibs } 57*20989Slibs recpos += cursor; 58*20989Slibs if(recpos >= curunit->url) err(errflag,F_EREREC,"dfe") 59*20989Slibs } 60*20989Slibs fseek(cf,(long)cursor,1); 61*20989Slibs return(cursor=0); 62*20989Slibs } 63