This is terminal.c in view mode; [Download] [Up]
#ifdef TENT_Z #define I_IOCTL #endif #define I_TTY #include "includes.h" void lose_ctty(void) { #ifdef USE_TIOCNOTTY { int slavefd; if ((slavefd = open ("/dev/tty", O_RDWR, 0)) >= 0) { ioctl (slavefd, TIOCNOTTY, (char *) 0); close (slavefd); } } #endif #ifdef USE_SETSID setsid(); #endif #ifdef USE_SETPGRP #ifdef SYSV setpgrp(); #else { int mypid; mypid = getpid(); setpgrp(mypid, 0); } #endif #endif #ifdef USE_BSDJOBS { int mypid; mypid = getpid(); tcsetpgrp(0, mypid); } #endif } #ifdef USE_TERMIOS #ifdef ultrix #include <sys/ioctl.h> #define TCSETS TCSANOW #define TCGETS TCGETP #endif static struct termios oldterm; void terminal_save(int fd) { #ifdef USE_TCATTR tcgetattr(fd, &oldterm); #else ioctl( fd, TCGETS, &oldterm); #endif } void terminal_raw(int fd) { struct termios tempio; #ifdef USE_TCATTR tcgetattr(fd, &tempio); #else ioctl( fd, TCGETS, &tempio); #endif tempio.c_iflag = 0; tempio.c_oflag = 0; tempio.c_lflag = 0; tempio.c_cc[VMIN] = 1; tempio.c_cc[VTIME] = 0; #ifdef USE_TCATTR tcsetattr(fd, TCSANOW, &tempio); #else ioctl( fd, TCSETS, &tempio); #endif } void terminal_restore(int fd) { #ifdef USE_TCATTR tcsetattr(fd, TCSANOW, &oldterm); #else ioctl( fd, TCSETS, &oldterm); #endif } static struct termios newterm = { BRKINT|IGNPAR|ICRNL|IXON|IXANY, /* iflag */ OPOST|ONLCR, /* oflag */ B38400|CS8|CREAD|HUPCL, /* cflag */ ISIG|ICANON|ECHO|ECHOE|ECHOCTL|IEXTEN, /* lflag */ N_TTY, { 3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22, 0,0,0 } }; void terminal_new(int fd) { #ifdef USE_TCATTR tcsetattr(fd, TCSANOW, &newterm); #else ioctl( fd, TCSETS, &newterm); #endif } #else /* bsd */ static int o_ldisc; static struct sgttyb o_ttyb; static struct tchars o_tchars; static int o_lmode; static struct ltchars o_ltchars; void terminal_save(int fd) { ioctl(fd, TIOCGETD, &o_ldisc); ioctl(fd, TIOCGETP, &o_ttyb); ioctl(fd, TIOCGETC, &o_tchars); ioctl(fd, TIOCLGET, &o_lmode); ioctl(fd, TIOCGLTC, &o_ltchars); } void terminal_restore(int fd) { ioctl(fd, TIOCSETD, &o_ldisc); ioctl(fd, TIOCSETP, &o_ttyb); ioctl(fd, TIOCSETC, &o_tchars); ioctl(fd, TIOCLSET, &o_lmode); ioctl(fd, TIOCSLTC, &o_ltchars); } void terminal_raw(int fd) { struct sgttyb m_ttyb; struct tchars m_tchars; struct ltchars m_ltchars; int m_ldisc; int m_lmode; /* initialize structures */ ioctl(fd, TIOCGETP, &m_ttyb); ioctl(fd, TIOCGETC, &m_tchars); ioctl(fd, TIOCGLTC, &m_ltchars); m_ldisc = NTTYDISC; m_lmode = LLITOUT; /* modify structures */ /* HSW 93/02/03, these shouldn't be set! m_ttyb.sg_ispeed = B9600; m_ttyb.sg_ospeed = B9600; */ m_ttyb.sg_erase = -1; m_ttyb.sg_kill = -1; m_ttyb.sg_flags = RAW; m_tchars.t_quitc = -1; m_ltchars.t_suspc = -1; m_ltchars.t_dsuspc = -1; m_ltchars.t_flushc = -1; m_ltchars.t_lnextc = -1; /* update terminal */ ioctl(fd, TIOCSETD, &m_ldisc); ioctl(fd, TIOCSETP, &m_ttyb); ioctl(fd, TIOCSETC, &m_tchars); ioctl(fd, TIOCLSET, &m_lmode); ioctl(fd, TIOCSLTC, &m_ltchars); } #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.