00001 /* read sequential formatted external */ 00002 #include "f2c.h" 00003 #include "fio.h" 00004 #include "fmt.h" 00005 #ifdef __cplusplus 00006 extern "C" { 00007 #endif 00008 00009 int 00010 xrd_SL(Void) 00011 { int ch; 00012 if(!f__curunit->uend) 00013 while((ch=getc(f__cf))!='\n') 00014 if (ch == EOF) { 00015 f__curunit->uend = 1; 00016 break; 00017 } 00018 f__cursor=f__recpos=0; 00019 return(1); 00020 } 00021 00022 int 00023 x_getc(Void) 00024 { int ch; 00025 if(f__curunit->uend) return(EOF); 00026 ch = getc(f__cf); 00027 if(ch!=EOF && ch!='\n') 00028 { f__recpos++; 00029 return(ch); 00030 } 00031 if(ch=='\n') 00032 { (void) ungetc(ch,f__cf); 00033 return(ch); 00034 } 00035 if(f__curunit->uend || feof(f__cf)) 00036 { errno=0; 00037 f__curunit->uend=1; 00038 return(-1); 00039 } 00040 return(-1); 00041 } 00042 00043 int 00044 x_endp(Void) 00045 { 00046 xrd_SL(); 00047 return f__curunit->uend == 1 ? EOF : 0; 00048 } 00049 00050 int 00051 x_rev(Void) 00052 { 00053 (void) xrd_SL(); 00054 return(0); 00055 } 00056 #ifdef KR_headers 00057 integer s_rsfe(a) cilist *a; /* start */ 00058 #else 00059 integer s_rsfe(cilist *a) /* start */ 00060 #endif 00061 { int n; 00062 if(!f__init) f_init(); 00063 f__reading=1; 00064 f__sequential=1; 00065 f__formatted=1; 00066 f__external=1; 00067 if(n=c_sfe(a)) return(n); 00068 f__elist=a; 00069 f__cursor=f__recpos=0; 00070 f__scale=0; 00071 f__fmtbuf=a->cifmt; 00072 f__cf=f__curunit->ufd; 00073 if(pars_f(f__fmtbuf)<0) err(a->cierr,100,"startio"); 00074 f__getn= x_getc; 00075 f__doed= rd_ed; 00076 f__doned= rd_ned; 00077 fmt_bg(); 00078 f__doend=x_endp; 00079 f__donewrec=xrd_SL; 00080 f__dorevert=x_rev; 00081 f__cblank=f__curunit->ublnk; 00082 f__cplus=0; 00083 if(f__curunit->uwrt && f__nowreading(f__curunit)) 00084 err(a->cierr,errno,"read start"); 00085 if(f__curunit->uend) 00086 err(f__elist->ciend,(EOF),"read start"); 00087 return(0); 00088 } 00089 #ifdef __cplusplus 00090 } 00091 #endif