80 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "f2c.h"
 | |
| #include "fio.h"
 | |
| #include "lio.h"
 | |
| 
 | |
| extern flag lquit;
 | |
| extern int lcount;
 | |
| extern int l_read();
 | |
| extern char *icptr;
 | |
| extern char *icend;
 | |
| extern icilist *svic;
 | |
| extern int icnum, recpos;
 | |
| extern int (*l_getc)(), (*l_ungetc)();
 | |
| 
 | |
| int i_getc()
 | |
| {
 | |
| 	if(++recpos >= svic->icirlen) {
 | |
| 		if (recpos == svic->icirlen)
 | |
| 			return '\n';
 | |
| 		z_rnew();
 | |
| 		}
 | |
| 	if(icptr >= icend) err(svic->iciend,(EOF),"endfile");
 | |
| 	return(*icptr++);
 | |
| 	}
 | |
| 
 | |
| int i_ungetc(ch)
 | |
|  int ch;
 | |
| {
 | |
| 	if (--recpos == svic->icirlen)
 | |
| 		return '\n';
 | |
| 	if (recpos < -1)
 | |
| 		err(svic->icierr,110,"recend");
 | |
| 	/* *--icptr == ch, and icptr may point to read-only memory */
 | |
| 	return *--icptr /* = ch */;
 | |
| 	}
 | |
| 
 | |
|  static void
 | |
| c_lir(a)
 | |
|  icilist *a;
 | |
| {
 | |
| 	extern int l_eof;
 | |
| 	reading = 1;
 | |
| 	external = 0;
 | |
| 	formatted = 1;
 | |
| 	svic = a;
 | |
| 	L_len = a->icirlen;
 | |
| 	recpos = -1;
 | |
| 	icnum = recpos = 0;
 | |
| 	cursor = 0;
 | |
| 	l_getc = i_getc;
 | |
| 	l_ungetc = i_ungetc;
 | |
| 	l_eof = 0;
 | |
| 	icptr = a->iciunit;
 | |
| 	icend = icptr + a->icirlen*a->icirnum;
 | |
| 	cf = 0;
 | |
| 	curunit = 0;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| integer s_rsli(a) icilist *a;
 | |
| {
 | |
| 	lioproc = l_read;
 | |
| 	lquit = 0;
 | |
| 	lcount = 0;
 | |
| 	c_lir(a);
 | |
| 	return(0);
 | |
| 	}
 | |
| 
 | |
| integer e_rsli()
 | |
| { return 0; }
 | |
| 
 | |
| s_rsni(a)
 | |
|  icilist *a;
 | |
| {
 | |
| 	cilist ca;
 | |
| 	ca.ciend = a->iciend;
 | |
| 	ca.cierr = a->icierr;
 | |
| 	ca.cifmt = a->icifmt;
 | |
| 	c_lir(a);
 | |
| 	return x_rsne(&ca);
 | |
| 	}
 |