116 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "f2c.h"
 | |
| #include "fio.h"
 | |
| #include "fmt.h"
 | |
| extern char *icptr;
 | |
| char *icend;
 | |
| extern icilist *svic;
 | |
| extern int rd_ed(),rd_ned(),w_ed(),w_ned(),y_ierr();
 | |
| extern int z_wnew();
 | |
| int icnum;
 | |
| extern int hiwater;
 | |
| z_getc()
 | |
| {
 | |
| 	if(icptr >= icend) err(svic->iciend,(EOF),"endfile");
 | |
| 	if(recpos++ < svic->icirlen)
 | |
| 		return(*icptr++);
 | |
| 	else	err(svic->icierr,110,"recend");
 | |
| }
 | |
| z_putc(c)
 | |
| {
 | |
| 	if(icptr >= icend) err(svic->icierr,110,"inwrite");
 | |
| 	if(recpos++ < svic->icirlen)
 | |
| 		*icptr++ = c;
 | |
| 	else	err(svic->icierr,110,"recend");
 | |
| 	return 0;
 | |
| }
 | |
| z_rnew()
 | |
| {
 | |
| 	icptr = svic->iciunit + (++icnum)*svic->icirlen;
 | |
| 	recpos = 0;
 | |
| 	cursor = 0;
 | |
| 	hiwater = 0;
 | |
| 	return 1;
 | |
| }
 | |
| 
 | |
|  static int
 | |
| z_endp(a) icilist *a;
 | |
| {
 | |
| 	(*donewrec)();
 | |
| 	return 0;
 | |
| 	}
 | |
| 
 | |
| integer s_rsfi(a) icilist *a;
 | |
| {	int n;
 | |
| 	if(n=c_si(a)) return(n);
 | |
| 	reading=1;
 | |
| 	doed=rd_ed;
 | |
| 	doned=rd_ned;
 | |
| 	getn=z_getc;
 | |
| 	dorevert = y_ierr;
 | |
| 	donewrec = z_rnew;
 | |
| 	doend = z_endp;
 | |
| 	return(0);
 | |
| }
 | |
| 
 | |
| integer s_wsfi(a) icilist *a;
 | |
| {	int n;
 | |
| 	if(n=c_si(a)) return(n);
 | |
| 	reading=0;
 | |
| 	doed=w_ed;
 | |
| 	doned=w_ned;
 | |
| 	putn=z_putc;
 | |
| 	dorevert = y_ierr;
 | |
| 	donewrec = z_wnew;
 | |
| 	doend = z_endp;
 | |
| 	return(0);
 | |
| }
 | |
| c_si(a) icilist *a;
 | |
| {
 | |
| 	elist = (cilist *)a;
 | |
| 	fmtbuf=a->icifmt;
 | |
| 	if(pars_f(fmtbuf)<0)
 | |
| 		err(a->icierr,100,"startint");
 | |
| 	fmt_bg();
 | |
| 	sequential=formatted=1;
 | |
| 	external=0;
 | |
| 	cblank=cplus=scale=0;
 | |
| 	svic=a;
 | |
| 	icnum=recpos=0;
 | |
| 	cursor = 0;
 | |
| 	hiwater = 0;
 | |
| 	icptr = a->iciunit;
 | |
| 	icend = icptr + a->icirlen*a->icirnum;
 | |
| 	curunit = 0;
 | |
| 	return(0);
 | |
| }
 | |
| z_wnew()
 | |
| {
 | |
| 	while(recpos++ < svic->icirlen)
 | |
| 		*icptr++ = ' ';
 | |
| 	recpos = 0;
 | |
| 	cursor = 0;
 | |
| 	hiwater = 0;
 | |
| 	icnum++;
 | |
| 	return 1;
 | |
| }
 | |
| integer e_rsfi()
 | |
| {	int n;
 | |
| 	n = en_fio();
 | |
| 	fmtbuf = NULL;
 | |
| 	return(n);
 | |
| }
 | |
| integer e_wsfi()
 | |
| {
 | |
| 	int n;
 | |
| 	n = en_fio();
 | |
| 	fmtbuf = NULL;
 | |
| 	if(icnum >= svic->icirnum)
 | |
| 		return(n);
 | |
| 	while(recpos++ < svic->icirlen)
 | |
| 		*icptr++ = ' ';
 | |
| 	return(n);
 | |
| }
 | |
| y_ierr()
 | |
| {
 | |
| 	err(elist->cierr, 110, "iio");
 | |
| }
 |