120989Slibs /* 223064Skre * Copyright (c) 1980 Regents of the University of California. 323064Skre * All rights reserved. The Berkeley software License Agreement 423064Skre * specifies the terms and conditions for redistribution. 520989Slibs * 6*24097Sjerry * @(#)c_dfe.c 5.2 07/30/85 723064Skre */ 823064Skre 923064Skre /* 1020989Slibs * direct formatted external i/o - common read/write routines 1120989Slibs */ 1220989Slibs 1320989Slibs #include "fio.h" 1420989Slibs 1520989Slibs c_dfe(a,flag,str) cilist *a; char *str; 1620989Slibs { int n; 1720989Slibs sequential = NO; 18*24097Sjerry external = YES; 19*24097Sjerry formatted = FORMATTED; 2020989Slibs lfname = NULL; 2120989Slibs elist = NO; 2220989Slibs cursor=scale=recpos=reclen=0; 2320989Slibs radix = 10; 2420989Slibs signit = YES; 2520989Slibs fmtbuf = a->cifmt; 2620989Slibs errflag = a->cierr; 2720989Slibs endflag = a->ciend; 2820989Slibs lunit = a->ciunit; 2920989Slibs if(not_legal(lunit)) err(errflag,F_ERUNIT,str); 3020989Slibs curunit = &units[lunit]; 3120989Slibs if(!curunit->ufd && (n=fk_open(flag,DIR,FMT,(ftnint)lunit))) 3220989Slibs err(errflag,n,str) 3320989Slibs cf = curunit->ufd; 3420989Slibs elist = YES; 3520989Slibs lfname = curunit->ufnm; 3620989Slibs if(!curunit->ufmt) err(errflag,F_ERNOFIO,str) 3720989Slibs if(!curunit->useek || !curunit->url) err(errflag,F_ERNODIO,str) 3820989Slibs recnum = a->cirec - 1; 3920989Slibs fseek(cf, (long)curunit->url * recnum, 0); 4020989Slibs cblank = curunit->ublnk; 4120989Slibs cplus = NO; 4220989Slibs return(OK); 4320989Slibs } 4420989Slibs 4520989Slibs y_tab() 4620989Slibs { int n; 4720989Slibs if(curunit->url==1) 4820989Slibs { 4920989Slibs if(cursor < 0 && -cursor > ftell(cf)) rewind(cf); 5020989Slibs else fseek(cf,(long)cursor,1); 5120989Slibs return(cursor=0); 5220989Slibs } 5320989Slibs else 5420989Slibs { if(reclen < recpos) reclen = recpos; 5520989Slibs if((recpos + cursor) < 0) cursor = -recpos; /* BOR */ 5620989Slibs n = reclen - recpos; /* n >= 0 */ 5720989Slibs if(!reading && (cursor-n) > 0) 5820989Slibs { recpos = reclen; 5920989Slibs cursor -= n; 6020989Slibs fseek(cf,(long)n,1); 6120989Slibs while(cursor--) if(n=(*putn)(' ')) return(n); 6220989Slibs return(cursor=0); 6320989Slibs } 6420989Slibs recpos += cursor; 6520989Slibs if(recpos >= curunit->url) err(errflag,F_EREREC,"dfe") 6620989Slibs } 6720989Slibs fseek(cf,(long)cursor,1); 6820989Slibs return(cursor=0); 6920989Slibs } 70