home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 January
/
usenetsourcesnewsgroupsinfomagicjanuary1994.iso
/
sources
/
misc
/
volume32
/
xbbs
/
part09
/
bbscio.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-09-08
|
2KB
|
145 lines
/* Version Feb 2 1988 */
#define DEBUG 1
typedef enum {FALSE, TRUE} BOOLEAN;
#include <termio.h>
#define lowbyte(w) ((w) & 0377)
#define highbyte(w) lowbyte((w)>>8)
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#ifdef BUFSIZ
#undef BUFSIZ
#endif
#define BUFSIZ 256
#define EMPTY '\0'
static char cbuf=EMPTY;
static struct termio tbufsave;
BOOLEAN cready()
{
int c;
c = (int)cbuf;
if (c != EMPTY)
return(TRUE);
cready_loop:
c = bufread();
switch (c) {
case -1:
if(errno == EINTR || errno == EPIPE)goto cready_loop;
syserr("read");
case 0:
cbuf = (char)EMPTY;
return(FALSE);
default:
cbuf = (char)c;
return(TRUE);
}
}
int cget()
{
int c;
char c1;
c = (int) cbuf;
if (c != EMPTY) {
c=(int)cbuf;
cbuf=(char)EMPTY;
return(c & 0377);
}
cget_loop:
c = bufread() ;
switch(c) {
case -1:
if(errno == EINTR || errno == EPIPE)goto cget_loop;
syserr("read");
case 0:
goto cget_loop;
default:
return(c & 0377);
}
}
int cget_chat()
{
int c;
char c1;
c = (int) cbuf;
if (c != EMPTY) {
c=(int)cbuf;
cbuf=(char)EMPTY;
return(c & 0377);
}
cget_loops:
c = bufread();
switch(c) {
case -1:
if(errno == EINTR || errno == EPIPE)return('\0');
syserr("read");
case 0:
goto cget_loops;
default:
return(c & 0377);
}
}
syserr(msg)
char *msg;
{
extern int errno,sys_nerr;
extern char *sys_errlist[];
fprintf(stderr,"ERROR:%s (%d",msg,errno);
if (errno>0 && errno < sys_nerr)
fprintf(stderr,";%s)\n",sys_errlist[errno]);
else
fprintf(stderr,")\n");
exit(1);
}
fatal(msg)
char *msg;
{
fprintf(stderr,"ERROR:%s\n",msg);
exit(1);
}
setraw()
{
struct termio tbuf;
if(ioctl(0,TCGETA,&tbuf) == -1)
syserr("ioctl");
tbufsave=tbuf;
tbuf.c_iflag = (IXANY | IGNPAR | IXON | ISTRIP);
tbuf.c_lflag = ISIG;
tbuf.c_oflag = 0;
tbuf.c_cc[VINTR] = 0x0b; /* Control K */
tbuf.c_cc[4] =1;
tbuf.c_cc[5] =5;
if(ioctl(0,TCSETA,&tbuf) == -1)
syserr("ioctl2");
if(ioctl(1,TCSETA,&tbuf) == -1)
syserr("ioctl2");
}
restore()
{
if (ioctl(0,TCSETAF,&tbufsave) == -1)
syserr("ioctl3");
}
int bufread()
{
static char sTdbuf[BUFSIZ+1];
static char *bufp = sTdbuf;
static int nb = 0;
int n;
if( nb == 0 )
{
n = read(0, sTdbuf, BUFSIZ);
if ( n <= 0 ) return(n);
nb = n;
bufp = sTdbuf;
}
--nb;
return(*bufp++);
}