120989Slibs /* 2*23064Skre * Copyright (c) 1980 Regents of the University of California. 3*23064Skre * All rights reserved. The Berkeley software License Agreement 4*23064Skre * specifies the terms and conditions for redistribution. 520989Slibs * 6*23064Skre * @(#)c_dfe.c 5.1 06/07/85 7*23064Skre */ 8*23064Skre 9*23064Skre /* 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; 1820989Slibs external = formatted = FORMATTED; 1920989Slibs lfname = NULL; 2020989Slibs elist = NO; 2120989Slibs cursor=scale=recpos=reclen=0; 2220989Slibs radix = 10; 2320989Slibs signit = YES; 2420989Slibs fmtbuf = a->cifmt; 2520989Slibs errflag = a->cierr; 2620989Slibs endflag = a->ciend; 2720989Slibs lunit = a->ciunit; 2820989Slibs if(not_legal(lunit)) err(errflag,F_ERUNIT,str); 2920989Slibs curunit = &units[lunit]; 3020989Slibs if(!curunit->ufd && (n=fk_open(flag,DIR,FMT,(ftnint)lunit))) 3120989Slibs err(errflag,n,str) 3220989Slibs cf = curunit->ufd; 3320989Slibs elist = YES; 3420989Slibs lfname = curunit->ufnm; 3520989Slibs if(!curunit->ufmt) err(errflag,F_ERNOFIO,str) 3620989Slibs if(!curunit->useek || !curunit->url) err(errflag,F_ERNODIO,str) 3720989Slibs recnum = a->cirec - 1; 3820989Slibs fseek(cf, (long)curunit->url * recnum, 0); 3920989Slibs cblank = curunit->ublnk; 4020989Slibs cplus = NO; 4120989Slibs return(OK); 4220989Slibs } 4320989Slibs 4420989Slibs y_tab() 4520989Slibs { int n; 4620989Slibs if(curunit->url==1) 4720989Slibs { 4820989Slibs if(cursor < 0 && -cursor > ftell(cf)) rewind(cf); 4920989Slibs else fseek(cf,(long)cursor,1); 5020989Slibs return(cursor=0); 5120989Slibs } 5220989Slibs else 5320989Slibs { if(reclen < recpos) reclen = recpos; 5420989Slibs if((recpos + cursor) < 0) cursor = -recpos; /* BOR */ 5520989Slibs n = reclen - recpos; /* n >= 0 */ 5620989Slibs if(!reading && (cursor-n) > 0) 5720989Slibs { recpos = reclen; 5820989Slibs cursor -= n; 5920989Slibs fseek(cf,(long)n,1); 6020989Slibs while(cursor--) if(n=(*putn)(' ')) return(n); 6120989Slibs return(cursor=0); 6220989Slibs } 6320989Slibs recpos += cursor; 6420989Slibs if(recpos >= curunit->url) err(errflag,F_EREREC,"dfe") 6520989Slibs } 6620989Slibs fseek(cf,(long)cursor,1); 6720989Slibs return(cursor=0); 6820989Slibs } 69