*** empty log message ***
This commit is contained in:
95
lang/basic/lib/io.c
Normal file
95
lang/basic/lib/io.c
Normal file
@@ -0,0 +1,95 @@
|
||||
#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(" ");
|
||||
}
|
||||
Reference in New Issue
Block a user