98 lines
1.4 KiB
C
98 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(" ");
|
|
}
|