ack/lang/basic/lib/io.c

88 lines
1.4 KiB
C
Raw Normal View History

#include "bc_io.h"
1984-11-29 14:22:02 +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
{
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;
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(" ");
}