*** empty log message ***
This commit is contained in:
187
sys/share/ioctl.c
Normal file
187
sys/share/ioctl.c
Normal file
@@ -0,0 +1,187 @@
|
||||
/* SCCS Id: @(#)ioctl.c 3.3 90/22/02 */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
/* This cannot be part of hack.tty.c (as it was earlier) since on some
|
||||
systems (e.g. MUNIX) the include files <termio.h> and <sgtty.h>
|
||||
define the same constants, and the C preprocessor complains. */
|
||||
|
||||
#include "hack.h"
|
||||
|
||||
#if defined(BSD_JOB_CONTROL) || defined(_BULL_SOURCE)
|
||||
# ifdef HPUX
|
||||
#include <bsdtty.h>
|
||||
# else
|
||||
# if defined(AIX_31) && !defined(_ALL_SOURCE)
|
||||
# define _ALL_SOURCE /* causes struct winsize to be present */
|
||||
# ifdef _AIX32
|
||||
# include <sys/ioctl.h>
|
||||
# endif
|
||||
# endif
|
||||
# if defined(_BULL_SOURCE)
|
||||
# include <termios.h>
|
||||
struct termios termio;
|
||||
# undef TIMEOUT /* defined in you.h and sys/tty.h */
|
||||
# include <sys/tty.h> /* define winsize */
|
||||
# include <sys/ttold.h> /* define struct ltchars */
|
||||
# include <sys/bsdioctl.h> /* define TIOGWINSZ */
|
||||
# else
|
||||
# ifdef LINUX
|
||||
# include <bsd/sgtty.h>
|
||||
# else
|
||||
# include <sgtty.h>
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
struct ltchars ltchars;
|
||||
struct ltchars ltchars0 = { -1, -1, -1, -1, -1, -1 }; /* turn all off */
|
||||
#else
|
||||
|
||||
# ifdef POSIX_TYPES
|
||||
#include <termios.h>
|
||||
struct termios termio;
|
||||
# if defined(BSD) || defined(_AIX32)
|
||||
# if defined(_AIX32) && !defined(_ALL_SOURCE)
|
||||
# define _ALL_SOURCE
|
||||
# endif
|
||||
#include <sys/ioctl.h>
|
||||
# endif
|
||||
# else
|
||||
#include <termio.h> /* also includes part of <sgtty.h> */
|
||||
# if defined(TCSETS) && !defined(AIX_31)
|
||||
struct termios termio;
|
||||
# else
|
||||
struct termio termio;
|
||||
# endif
|
||||
# endif
|
||||
# ifdef AMIX
|
||||
#include <sys/ioctl.h>
|
||||
# endif /* AMIX */
|
||||
#endif
|
||||
|
||||
#ifdef SUSPEND /* BSD isn't alone anymore... */
|
||||
#include <signal.h>
|
||||
#endif
|
||||
|
||||
#if defined(TIOCGWINSZ) && (defined(BSD) || defined(ULTRIX) || defined(AIX_31) || defined(_BULL_SOURCE) || defined(SVR4))
|
||||
#define USE_WIN_IOCTL
|
||||
#include "tcap.h" /* for LI and CO */
|
||||
#endif
|
||||
|
||||
#ifdef _M_UNIX
|
||||
extern void NDECL(sco_mapon);
|
||||
extern void NDECL(sco_mapoff);
|
||||
#endif
|
||||
#ifdef __linux__
|
||||
extern void NDECL(linux_mapon);
|
||||
extern void NDECL(linux_mapoff);
|
||||
#endif
|
||||
|
||||
#ifdef AUX
|
||||
void
|
||||
catch_stp()
|
||||
{
|
||||
signal(SIGTSTP, SIG_DFL);
|
||||
dosuspend();
|
||||
}
|
||||
#endif /* AUX */
|
||||
|
||||
void
|
||||
getwindowsz()
|
||||
{
|
||||
#ifdef USE_WIN_IOCTL
|
||||
/*
|
||||
* ttysize is found on Suns and BSD
|
||||
* winsize is found on Suns, BSD, and Ultrix
|
||||
*/
|
||||
struct winsize ttsz;
|
||||
|
||||
if (ioctl(fileno(stdin), (int)TIOCGWINSZ, (char *)&ttsz) != -1) {
|
||||
/*
|
||||
* Use the kernel's values for lines and columns if it has
|
||||
* any idea.
|
||||
*/
|
||||
if (ttsz.ws_row)
|
||||
LI = ttsz.ws_row;
|
||||
if (ttsz.ws_col)
|
||||
CO = ttsz.ws_col;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
getioctls()
|
||||
{
|
||||
#ifdef BSD_JOB_CONTROL
|
||||
(void) ioctl(fileno(stdin), (int) TIOCGLTC, (char *) <chars);
|
||||
(void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) <chars0);
|
||||
#else
|
||||
# ifdef POSIX_TYPES
|
||||
(void) tcgetattr(fileno(stdin), &termio);
|
||||
# else
|
||||
# if defined(TCSETS) && !defined(AIX_31)
|
||||
(void) ioctl(fileno(stdin), (int) TCGETS, &termio);
|
||||
# else
|
||||
(void) ioctl(fileno(stdin), (int) TCGETA, &termio);
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
getwindowsz();
|
||||
#ifdef AUX
|
||||
( void ) signal ( SIGTSTP , catch_stp ) ;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
setioctls()
|
||||
{
|
||||
#ifdef BSD_JOB_CONTROL
|
||||
(void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) <chars);
|
||||
#else
|
||||
# ifdef POSIX_TYPES
|
||||
(void) tcsetattr(fileno(stdin), TCSADRAIN, &termio);
|
||||
# else
|
||||
# if defined(TCSETS) && !defined(AIX_31)
|
||||
(void) ioctl(fileno(stdin), (int) TCSETSW, &termio);
|
||||
# else
|
||||
(void) ioctl(fileno(stdin), (int) TCSETAW, &termio);
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef SUSPEND /* No longer implies BSD */
|
||||
int
|
||||
dosuspend()
|
||||
{
|
||||
# ifdef SIGTSTP
|
||||
if(signal(SIGTSTP, SIG_IGN) == SIG_DFL) {
|
||||
suspend_nhwindows((char *)0);
|
||||
# ifdef _M_UNIX
|
||||
sco_mapon();
|
||||
# endif
|
||||
# ifdef __linux__
|
||||
linux_mapon();
|
||||
# endif
|
||||
(void) signal(SIGTSTP, SIG_DFL);
|
||||
# ifdef AUX
|
||||
( void ) kill ( 0 , SIGSTOP ) ;
|
||||
# else
|
||||
(void) kill(0, SIGTSTP);
|
||||
# endif
|
||||
# ifdef _M_UNIX
|
||||
sco_mapoff();
|
||||
# endif
|
||||
# ifdef __linux__
|
||||
linux_mapoff();
|
||||
# endif
|
||||
resume_nhwindows();
|
||||
} else {
|
||||
pline("I don't think your shell has job control.");
|
||||
}
|
||||
# else
|
||||
pline("Sorry, it seems we have no SIGTSTP here. Try ! or S.");
|
||||
# endif
|
||||
return(0);
|
||||
}
|
||||
#endif /* SUSPEND */
|
||||
Reference in New Issue
Block a user