home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- * Copyright 1990, 1992 Free Software Foundation, Inc.
- *
- * This code was donated by Intel Corp.
- *
- * This include file provides BSD/USG-compatible tty control for a host utility
- * that interacts with NINDY. As of this writing, it is used by the gdb960
- * remote communications module (remote.c) and the comm960 utility.
- *
- * It is assumed that 'USG' is defined on the compiler invocation line if the
- * code should compile and run on a USG/SysV system. Otherwise, BSD is assumed.
- *
- * The application code has access to these macros:
- *
- * TTY_STRUCT Data type used by tty functions (ioctls and the
- * following macros).
- *
- * TTY_NINDYTERM(tty)
- * 'tty' is assumed to be a TTY_STRUCT describing the
- * terminal. It is modified as appropriate to allow
- * all user input to be passed through unmodified to NINDY
- * as soon as it is typed, and to allow all NINDY output
- * to be passed through unmodified to the display as soon
- * as it is received.
- *
- * TTY_REMOTE(tty,baud)
- * 'tty' is assumed to be a TTY_STRUCT describing the
- * serial connection between the host and NINDY. It is
- * initialized as appropriate to allow communications
- * between the host and NINDY at the specified baud rate
- * (which must be one of the "B..." defined constants).
- *
- * TTY_FLUSH(fd) flush all pending input and output on the tty whose
- * file descriptor is 'fd'.
- *
- * TTY_NBREAD(fd,n,bufptr)
- * Performs non-blocking read of 'n' characters on the
- * file descriptor 'fd'. Sets the integer 'n' to the
- * number of characters actually read. The characters
- * are read into the buffer pointed at by bufptr.
- *
- * In addition, the BSD ioctl commands TIOCGETP and TIOCSETP are defined to
- * have the same meanings under USG: retrieve and set (respectively) the
- * parameters of a tty.
- ******************************************************************************/
-
- #ifdef USG
-
- # include <termio.h>
- # define TTY_STRUCT struct termio
- # define TIOCGETP TCGETA
- # define TIOCSETP TCSETAF
-
- /* NOTE!:
- * Remove CLOCAL from following macro if you will be accessing
- * the i960 system via a modem.
- */
- # define TTY_REMOTE(tty,baud) { \
- tty.c_iflag = IXON | IXOFF; \
- tty.c_oflag = 0; \
- tty.c_cflag = baud|CS8|CREAD|CLOCAL; \
- tty.c_lflag = 0; \
- tty.c_cc[VEOF] = 1; \
- tty.c_cc[VEOL] = 0; \
- }
-
- # define TTY_NINDYTERM(tty) { \
- tty.c_iflag = 0; \
- tty.c_oflag = 0; \
- tty.c_lflag = ISIG; \
- tty.c_cc[VEOF] = 1; \
- tty.c_cc[VEOL] = 0; \
- }
-
- # define TTY_FLUSH(fd) ioctl(fd,TCFLSH,2);
-
- # define TTY_NBREAD(fd,n,bufptr) { \
- int _saveflags_; \
- _saveflags_ = fcntl( fd, F_GETFL, 0 ); \
- fcntl( fd, F_SETFL, _saveflags_ | O_NDELAY ); \
- n = read( fd, bufptr, n ); \
- fcntl( fd, F_SETFL, _saveflags_ ); \
- }
-
- #else /* BSD */
-
- # include <sys/ioctl.h>
- # define TTY_STRUCT struct sgttyb
- # define TTY_REMOTE(tty,baud){ \
- tty.sg_flags = RAW | TANDEM; \
- tty.sg_ispeed = baud; \
- tty.sg_ospeed = baud; \
- }
-
- # define TTY_NINDYTERM(tty) { \
- tty.sg_flags |= CBREAK; \
- tty.sg_flags &= ~(ECHO|CRMOD); \
- }
-
- # define TTY_FLUSH(fd) { int _i_ = 0; ioctl(fd,TIOCFLUSH,&_i_); }
-
- # define TTY_NBREAD(fd,n,bufptr) { \
- int _n_; \
- ioctl(fd,FIONREAD,&_n_); \
- n = (_n_>0) ? read(fd,bufptr,n) : 0; \
- }
- #endif
-
-
-
- #ifndef B19200
- # define B19200 EXTA
- #endif
- #ifndef B38400
- # define B38400 EXTB
- #endif
-