1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 * 6 * @(#)wsfe.c 5.3 06/11/86 7 */ 8 9 /* 10 * write sequential formatted external 11 */ 12 13 #include "fio.h" 14 15 LOCAL char wsfe[] = "write sfe"; 16 17 extern int w_ed(),w_ned(); 18 int x_putc(),pr_put(),x_wend(),x_wnew(),x_tab(); 19 LOCAL ioflag new; 20 21 s_wsfe(a) cilist *a; /*start*/ 22 { int n; 23 reading = NO; 24 sequential = YES; 25 if(n=c_sfe(a,WRITE,SEQ,wsfe)) return(n); 26 if(curunit->url) err(errflag,F_ERNOSIO,wsfe) 27 if(!curunit->uwrt && ! nowwriting(curunit)) err(errflag, errno, wsfe) 28 curunit->uend = NO; 29 if (curunit->uprnt) putn = pr_put; 30 else putn = x_putc; 31 new = YES; 32 doed= w_ed; 33 doned= w_ned; 34 doend = x_wend; 35 dorevert = donewrec = x_wnew; 36 dotab = x_tab; 37 if(pars_f()) err(errflag,F_ERFMT,wsfe) 38 fmt_bg(); 39 return(OK); 40 } 41 42 LOCAL 43 x_putc(c) 44 { 45 if(c=='\n') recpos = reclen = cursor = 0; 46 else recpos++; 47 putc(c,cf); 48 return(OK); 49 } 50 51 LOCAL 52 pr_put(c) 53 { 54 if(c=='\n') 55 { new = YES; 56 recpos = reclen = cursor = 0; 57 } 58 else if(new) 59 { new = NO; 60 if(c=='0') c = '\n'; 61 else if(c=='1') c = '\f'; 62 else return(OK); 63 } 64 else recpos++; 65 putc(c,cf); 66 return(OK); 67 } 68 69 LOCAL 70 x_wnew() 71 { 72 if(reclen>recpos) fseek(cf,(long)(reclen-recpos),1); 73 return((*putn)('\n')); 74 } 75 76 LOCAL 77 x_wend(last) char last; 78 { 79 if(reclen>recpos) fseek(cf,(long)(reclen-recpos),1); 80 if(last) 81 return((*putn)(last)); 82 else 83 return(OK); 84 } 85 86 e_wsfe() 87 { int n; 88 n=en_fio(); 89 fmtbuf=NULL; 90 return(n); 91 } 92