1985-02-04 22:18:16 +00:00
|
|
|
#include "bc_io.h"
|
1984-11-29 14:22:02 +00:00
|
|
|
|
2013-05-14 15:11:29 +00:00
|
|
|
/* dtrg --- this originally used sgtty.h to do clever tty manipulation.
|
|
|
|
* Strictly this should be converted to use termios, but for simplicity
|
|
|
|
* we're going to stick with plain stdio for now. */
|
1984-11-29 14:22:02 +00:00
|
|
|
|
|
|
|
/* BASIC has some nasty io characteristics */
|
|
|
|
|
|
|
|
#define MAXWIDTH 255
|
|
|
|
|
|
|
|
int _width = 75, _pos=0, _zonewidth=15;
|
|
|
|
|
2016-12-12 20:15:25 +00:00
|
|
|
void _out(char* str)
|
1984-11-29 14:22:02 +00:00
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2016-12-12 20:15:25 +00:00
|
|
|
void _outnl(void)
|
1984-11-29 14:22:02 +00:00
|
|
|
{
|
|
|
|
fputc('\n',_chanwr);
|
|
|
|
if( _chann == -1)
|
|
|
|
_pos=0;
|
|
|
|
else
|
|
|
|
_fdtable[_chann].pos=0;
|
|
|
|
}
|
2016-12-12 20:15:25 +00:00
|
|
|
void _zone(void)
|
1984-11-29 14:22:02 +00:00
|
|
|
{
|
|
|
|
/* 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;
|
|
|
|
}
|
2016-12-12 20:15:25 +00:00
|
|
|
void _in(char* buf)
|
1984-11-29 14:22:02 +00:00
|
|
|
{
|
1985-01-21 23:52:19 +00:00
|
|
|
register int holder ;
|
1984-11-29 14:22:02 +00:00
|
|
|
char *c;
|
|
|
|
int pos;
|
|
|
|
if( _chann == -1)
|
|
|
|
{
|
|
|
|
pos= _pos;
|
|
|
|
}else pos= _fdtable[_chann].pos;
|
|
|
|
c= buf;
|
1985-01-21 23:52:19 +00:00
|
|
|
while( (holder = fgetc(_chanrd)) != EOF && holder != '\n'){
|
|
|
|
*c= holder ;
|
|
|
|
if( _chann == -1) putchar(holder);
|
1984-11-29 14:22:02 +00:00
|
|
|
c++; pos++;
|
|
|
|
}
|
|
|
|
*c= 0;
|
|
|
|
if( _chann== -1)
|
|
|
|
{
|
|
|
|
_pos=pos;
|
|
|
|
} else _fdtable[_chann].pos= pos;
|
|
|
|
}
|
2016-12-12 20:15:25 +00:00
|
|
|
void _tab(int x)
|
1984-11-29 14:22:02 +00:00
|
|
|
{
|
|
|
|
if( x> _width) error(3);
|
|
|
|
if( x< _pos) _outnl();
|
|
|
|
_spc(x-_pos);
|
|
|
|
}
|
2016-12-12 20:15:25 +00:00
|
|
|
void _spc(int x)
|
1984-11-29 14:22:02 +00:00
|
|
|
{
|
|
|
|
while(x-->0) _out(" ");
|
|
|
|
}
|