ack/lang/basic/lib/io.c

111 lines
1.6 KiB
C
Raw Permalink Normal View History

#include "bc_io.h"
#include "lib.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;
1984-11-29 14:22:02 +00:00
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)
1984-11-29 14:22:02 +00:00
{
if (pos >= _width)
{
_outnl();
pos = 0;
}
1984-11-29 14:22:02 +00:00
fputc(*str++, _chanwr);
pos++;
}
if (_chann == -1)
_pos = pos;
else
_fdtable[_chann].pos = pos;
1984-11-29 14:22:02 +00:00
}
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;
1984-11-29 14:22:02 +00:00
else
_fdtable[_chann].pos = 0;
1984-11-29 14:22:02 +00:00
}
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);
1984-11-29 14:22:02 +00:00
pos++;
if (pos == _width)
1984-11-29 14:22:02 +00:00
{
_outnl();
pos = 0;
1984-11-29 14:22:02 +00:00
break;
}
} while (pos % _zonewidth != 0);
if (_chann == -1)
_pos = pos;
else
_fdtable[_chann].pos = pos;
1984-11-29 14:22:02 +00:00
}
2016-12-12 20:15:25 +00:00
void _in(char* buf)
1984-11-29 14:22:02 +00:00
{
register int holder;
char* c;
1984-11-29 14:22:02 +00:00
int pos;
if (_chann == -1)
1984-11-29 14:22:02 +00:00
{
pos = _pos;
1984-11-29 14:22:02 +00:00
}
else
pos = _fdtable[_chann].pos;
c = buf;
while ((holder = fgetc(_chanrd)) != EOF && holder != '\n')
1984-11-29 14:22:02 +00:00
{
*c = holder;
if (_chann == -1)
putchar(holder);
c++;
pos++;
}
*c = 0;
if (_chann == -1)
{
_pos = pos;
}
else
_fdtable[_chann].pos = pos;
1984-11-29 14:22:02 +00:00
}
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);
1984-11-29 14:22:02 +00:00
}
2016-12-12 20:15:25 +00:00
void _spc(int x)
1984-11-29 14:22:02 +00:00
{
while (x-- > 0)
_out(" ");
1984-11-29 14:22:02 +00:00
}