97 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "bc_io.h"
 | |
| #include <sgtty.h>
 | |
| 
 | |
| /* $Header$ */
 | |
| 
 | |
| struct sgttyb _ttydef;
 | |
| 
 | |
| /* BASIC has some nasty io characteristics */
 | |
| 
 | |
| #define MAXWIDTH 255
 | |
| 
 | |
| int	_width = 75, _pos=0, _zonewidth=15;
 | |
| 
 | |
| _out(str)
 | |
| char *str;
 | |
| {
 | |
| 	int pos;
 | |
| 
 | |
| 	if( _chann== -1) pos= _pos;
 | |
| 	else pos= _fdtable[_chann].pos;
 | |
| 	while( *str) 
 | |
| 	{
 | |
| 		if( pos>= _width){ _outnl(); pos=0;}
 | |
| 		fputc(*str++, _chanwr);
 | |
| 		pos++;
 | |
| 	}
 | |
| 	if( _chann== -1) _pos=pos;
 | |
| 	else _fdtable[_chann].pos= pos;
 | |
| }
 | |
| 
 | |
| _outnl()
 | |
| {
 | |
| 	fputc('\n',_chanwr);
 | |
| 	if( _chann == -1)
 | |
| 		_pos=0;
 | |
| 	else
 | |
| 		_fdtable[_chann].pos=0;
 | |
| }
 | |
| _zone()
 | |
| {
 | |
| 	/* go to next zone */
 | |
| 	int pos;
 | |
| 	if( _chann == -1)
 | |
| 		pos= _pos;
 | |
| 	else pos= _fdtable[_chann].pos;
 | |
| 	do{
 | |
| 		fputc(' ',_chanwr);
 | |
| 		pos++;
 | |
| 		if( pos==_width)
 | |
| 		{
 | |
| 			_outnl();
 | |
| 			pos=0;
 | |
| 			break;
 | |
| 		}
 | |
| 	} while( pos % _zonewidth != 0);
 | |
| 	if( _chann== -1) _pos=pos;
 | |
| 	else _fdtable[_chann].pos= pos;
 | |
| }
 | |
| _in(buf)
 | |
| char *buf;
 | |
| {
 | |
| 	register int holder ;
 | |
| 	char *c;
 | |
| 	int pos;
 | |
| 	if( _chann == -1)
 | |
| 	{
 | |
| 		pos= _pos;
 | |
| 		gtty(0,_ttydef);
 | |
| 		_ttydef.sg_flags &= ~ECHO;
 | |
| 		stty(0,_ttydef);
 | |
| 	}else pos= _fdtable[_chann].pos;
 | |
| 	c= buf;
 | |
| 	while( (holder = fgetc(_chanrd)) != EOF && holder != '\n'){
 | |
| 		*c= holder ;
 | |
| 		if( _chann == -1) putchar(holder);
 | |
| 		c++; pos++;
 | |
| 	}
 | |
| 	*c= 0;
 | |
| 	if( _chann== -1) 
 | |
| 	{
 | |
| 		_pos=pos;
 | |
| 		_ttydef.sg_flags |= ECHO;
 | |
| 		stty(0,_ttydef);
 | |
| 	} else _fdtable[_chann].pos= pos;
 | |
| }
 | |
| _tab(x)
 | |
| int x;
 | |
| {
 | |
| 	if( x> _width) error(3);
 | |
| 	if( x< _pos) _outnl();
 | |
| 	_spc(x-_pos);
 | |
| }
 | |
| _spc(x)
 | |
| int x;
 | |
| {
 | |
| 	while(x-->0) _out(" ");
 | |
| }
 |