ack/lang/basic/lib/io.c

96 lines
1.3 KiB
C

#include "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;
{
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( (*c = fgetc(_chanrd)) != EOF && *c != '\n'){
if( _chann == -1) putchar(*c);
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(" ");
}