Blame ext/posix/termio.c

Packit 437b5e
/*
Packit 437b5e
 * POSIX library for Lua 5.1, 5.2 & 5.3.
Packit 437b5e
 * (c) Gary V. Vaughan <gary@vaughan.pe>, 2013-2015
Packit 437b5e
 * (c) Reuben Thomas <rrt@sc3d.org> 2010-2013
Packit 437b5e
 * (c) Natanael Copa <natanael.copa@gmail.com> 2008-2010
Packit 437b5e
 * Clean up and bug fixes by Leo Razoumov <slonik.az@gmail.com> 2006-10-11
Packit 437b5e
 * Luiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br> 07 Apr 2006 23:17:49
Packit 437b5e
 * Based on original by Claudio Terra for Lua 3.x.
Packit 437b5e
 * With contributions by Roberto Ierusalimschy.
Packit 437b5e
 * With documentation from Steve Donovan 2012
Packit 437b5e
 */
Packit 437b5e
/***
Packit 437b5e
 Control Terminal I/O.
Packit 437b5e
Packit 437b5e
 Functions and constants for controlling terminal behaviour.
Packit 437b5e
Packit 437b5e
@module posix.termio
Packit 437b5e
*/
Packit 437b5e
Packit 437b5e
#include <config.h>
Packit 437b5e
Packit 437b5e
#include <termios.h>
Packit 437b5e
Packit 437b5e
#include "_helpers.c"
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Control characters.
Packit 437b5e
The field names below are not strings, but index constants each
Packit 437b5e
referring to a terminal control character.
Packit 437b5e
@table ccs
Packit 437b5e
@int VINTR interrupt control character
Packit 437b5e
@int VQUIT quit control character
Packit 437b5e
@int WERASE erase control character
Packit 437b5e
@int VKILL kill control character
Packit 437b5e
@int VEOF end-of-file control character
Packit 437b5e
@int VEOL end-of-line control charactor
Packit 437b5e
@int VEOL2 another end-of-line control charactor
Packit 437b5e
@int VMIN 1
Packit 437b5e
@int VTIME 0
Packit 437b5e
@int VSTART xon/xoff start control character
Packit 437b5e
@int VSTOP xon/xoff stop control character
Packit 437b5e
@int VSUSP suspend control character
Packit 437b5e
*/
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Terminal attributes.
Packit 437b5e
The constants named below are all available in this submodule's namespace,
Packit 437b5e
as long as they are supported by the underlying system.
Packit 437b5e
@table termios
Packit 437b5e
@int cflag bitwise OR of zero or more of `B0`, `B50`, `B75`, `B110`,
Packit 437b5e
  `B134`, `B150`, `B200`, `B300`, `B600`, `B1200`, `B1800`, `B2400`,
Packit 437b5e
  `B4800`, `B9600`, `B19200`, `B38400`, `B57600`, `B115200`, `CSIZE`,
Packit 437b5e
  `CS5`, `CS6`, `CS7`, `CS8`, `CSTOPB`, `CREAD`, `PARENB`, `PARODD`,
Packit 437b5e
  `HUPCL`, `CLOCAL` and `CRTSCTS`
Packit 437b5e
@int iflag input flags; bitwise OR of zero or more of `IGNBRK`, `BRKINT`,
Packit 437b5e
  `IGNPAR`, `PARMRK`, `INPCK`, `ISTRIP`, `INLCR`, `IGNCR`, `ICRNL`,
Packit 437b5e
  `IXON`, `IXOFF`, `IXANY`, `IMAXBEL` and `IUTF8`
Packit 437b5e
@int lflags local flags; bitwise OR of zero or more of `ISIG`, `ICANON`,
Packit 437b5e
  `ECHO`, `ECHOE`, `ECHOK', 'ECHONL`, `NOFLSH`, `IEXTEN` and `TOSTOP`
Packit 437b5e
@int oflag output flags; bitwise OR of zero or more of `OPOST`, `ONLCR`,
Packit 437b5e
  `OXTABS`, `ONOEOT`, `OCRNL`, `ONOCR`, `ONLRET`, `OFILL`, `NLDLY`,
Packit 437b5e
  `TABDLY`, `CRDLY`, `FFDLY`, `BSDLY`, `VTDLY` and `OFDEL`
Packit 437b5e
@tfield ccs cc array of terminal control characters
Packit 437b5e
*/
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Wait for all written output to reach the terminal.
Packit 437b5e
@function tcdrain
Packit 437b5e
@int fd terminal descriptor to act on
Packit 437b5e
@treturn[1] int `0`, if successful
Packit 437b5e
@return[2] nil
Packit 437b5e
@treturn[2] string error message
Packit 437b5e
@treturn[2] int errnum
Packit 437b5e
@see tcdrain(3)
Packit 437b5e
*/
Packit 437b5e
static int
Packit 437b5e
Ptcdrain(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	int fd = checkint(L, 1);
Packit 437b5e
	checknargs(L, 1);
Packit 437b5e
	return pushresult(L, tcdrain(fd), NULL);
Packit 437b5e
}
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Suspend transmission or receipt of data.
Packit 437b5e
@function tcflow
Packit 437b5e
@int fd terminal descriptor to act on
Packit 437b5e
@int action one of `TCOOFF`, `TCOON`, `TCIOFF` or `TCION`
Packit 437b5e
@treturn[1] int `0`, if successful
Packit 437b5e
@return[2] nil
Packit 437b5e
@treturn[2] string error message
Packit 437b5e
@treturn[2] int errnum
Packit 437b5e
@see tcflow(3)
Packit 437b5e
*/
Packit 437b5e
static int
Packit 437b5e
Ptcflow(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	int fd = checkint(L, 1);
Packit 437b5e
	int action = checkint(L, 2);
Packit 437b5e
	checknargs(L, 2);
Packit 437b5e
	return pushresult(L, tcflow(fd, action), NULL);
Packit 437b5e
}
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Discard any data already written but not yet sent to the terminal.
Packit 437b5e
@function tcflush
Packit 437b5e
@int fd terminal descriptor to act on
Packit 437b5e
@int action one of `TCIFLUSH`, `TCOFLUSH`, `TCIOFLUSH`
Packit 437b5e
@treturn[1] int `0`, if successful
Packit 437b5e
@return[2] nil
Packit 437b5e
@treturn[2] string error message
Packit 437b5e
@treturn[2] int errnum
Packit 437b5e
@see tcflush(3)
Packit 437b5e
*/
Packit 437b5e
static int
Packit 437b5e
Ptcflush(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	int fd = checkint(L, 1);
Packit 437b5e
	int qs = checkint(L, 2);
Packit 437b5e
	checknargs(L, 2);
Packit 437b5e
	return pushresult(L, tcflush(fd, qs), NULL);
Packit 437b5e
}
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Get termios state.
Packit 437b5e
@function tcgetattr
Packit 437b5e
@int fd terminal descriptor
Packit 437b5e
@treturn[1] termios terminal attributes, if successful
Packit 437b5e
@return[2] nil
Packit 437b5e
@treturn[2] string error message
Packit 437b5e
@treturn[2] int errnum
Packit 437b5e
@return error message if failed
Packit 437b5e
@see tcgetattr(3)
Packit 437b5e
@usage
Packit 437b5e
local termios, errmsg = tcgetattr (fd)
Packit 437b5e
*/
Packit 437b5e
static int
Packit 437b5e
Ptcgetattr(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	int r, i;
Packit 437b5e
	struct termios t;
Packit 437b5e
	int fd = checkint(L, 1);
Packit 437b5e
Packit 437b5e
	checknargs(L, 1);
Packit 437b5e
	r = tcgetattr(fd, &t);
Packit 437b5e
	if (r == -1) return pusherror(L, NULL);
Packit 437b5e
Packit 437b5e
	lua_newtable(L);
Packit 437b5e
	pushintegerfield("iflag", t.c_iflag);
Packit 437b5e
	pushintegerfield("oflag", t.c_oflag);
Packit 437b5e
	pushintegerfield("lflag", t.c_lflag);
Packit 437b5e
	pushintegerfield("cflag", t.c_cflag);
Packit 437b5e
Packit 437b5e
	lua_newtable(L);
Packit 437b5e
	for (i=0; i
Packit 437b5e
	{
Packit 437b5e
		lua_pushinteger(L, i);
Packit 437b5e
		lua_pushinteger(L, t.c_cc[i]);
Packit 437b5e
		lua_settable(L, -3);
Packit 437b5e
	}
Packit 437b5e
	lua_setfield(L, -2, "cc");
Packit 437b5e
Packit 437b5e
	return 1;
Packit 437b5e
}
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Send a stream of zero valued bits.
Packit 437b5e
@function tcsendbreak
Packit 437b5e
@see tcsendbreak(3)
Packit 437b5e
@int fd terminal descriptor
Packit 437b5e
@int duration if non-zero, stream for some implementation defined time
Packit 437b5e
@return 0 if successful, otherwise nil
Packit 437b5e
@return error message if failed
Packit 437b5e
*/
Packit 437b5e
static int
Packit 437b5e
Ptcsendbreak(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	int fd = checkint(L, 1);
Packit 437b5e
	int duration = checkint(L, 2);
Packit 437b5e
	checknargs(L, 2);
Packit 437b5e
	return pushresult(L, tcsendbreak(fd, duration), NULL);
Packit 437b5e
}
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Set termios state.
Packit 437b5e
@function tcsetattr
Packit 437b5e
@int fd terminal descriptor to act on
Packit 437b5e
@int actions bitwise OR of one or more of `TCSANOW`, `TCSADRAIN`,
Packit 437b5e
  `TCSAFLUSH` and `TSASOFT`
Packit 437b5e
@tparam termios a table with fields from iflag, oflag, cflag, lflag and cc,
Packit 437b5e
 each formed by `bor` operations with various posix constants
Packit 437b5e
@return 0 if successful, otherwise nil
Packit 437b5e
@return error message if failed
Packit 437b5e
@see tcsetattr(3)
Packit 437b5e
@usage
Packit 437b5e
ok, errmsg = tcsetattr (fd, 0, { cc = { [P.VTIME] = 0, [P.VMIN] = 1 })
Packit 437b5e
*/
Packit 437b5e
static int
Packit 437b5e
Ptcsetattr(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	struct termios t;
Packit 437b5e
	int i;
Packit 437b5e
	int fd = checkint(L, 1);
Packit 437b5e
	int act = checkint(L, 2);
Packit 437b5e
	luaL_checktype(L, 3, LUA_TTABLE);
Packit 437b5e
	checknargs(L, 3);
Packit 437b5e
Packit 437b5e
	lua_getfield(L, 3, "iflag"); t.c_iflag = optint(L, -1, 0); lua_pop(L, 1);
Packit 437b5e
	lua_getfield(L, 3, "oflag"); t.c_oflag = optint(L, -1, 0); lua_pop(L, 1);
Packit 437b5e
	lua_getfield(L, 3, "cflag"); t.c_cflag = optint(L, -1, 0); lua_pop(L, 1);
Packit 437b5e
	lua_getfield(L, 3, "lflag"); t.c_lflag = optint(L, -1, 0); lua_pop(L, 1);
Packit 437b5e
Packit 437b5e
	lua_getfield(L, 3, "cc");
Packit 437b5e
	for (i=0; i
Packit 437b5e
	{
Packit 437b5e
		lua_pushinteger(L, i);
Packit 437b5e
		lua_gettable(L, -2);
Packit 437b5e
		t.c_cc[i] = optint(L, -1, 0);
Packit 437b5e
		lua_pop(L, 1);
Packit 437b5e
	}
Packit 437b5e
Packit 437b5e
	return pushresult(L, tcsetattr(fd, act, &t), NULL);
Packit 437b5e
}
Packit 437b5e
Packit 437b5e
Packit 437b5e
static const luaL_Reg posix_termio_fns[] =
Packit 437b5e
{
Packit 437b5e
	LPOSIX_FUNC( Ptcdrain		),
Packit 437b5e
	LPOSIX_FUNC( Ptcflow		),
Packit 437b5e
	LPOSIX_FUNC( Ptcflush		),
Packit 437b5e
	LPOSIX_FUNC( Ptcgetattr		),
Packit 437b5e
	LPOSIX_FUNC( Ptcsendbreak	),
Packit 437b5e
	LPOSIX_FUNC( Ptcsetattr		),
Packit 437b5e
	{NULL, NULL}
Packit 437b5e
};
Packit 437b5e
Packit 437b5e
Packit 437b5e
LUALIB_API int
Packit 437b5e
luaopen_posix_termio(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	luaL_register(L, "posix.termio", posix_termio_fns);
Packit 437b5e
	lua_pushliteral(L, "posix.termio for " LUA_VERSION " / " PACKAGE_STRING);
Packit 437b5e
	lua_setfield(L, -2, "version");
Packit 437b5e
Packit 437b5e
	/* tcsetattr */
Packit 437b5e
	LPOSIX_CONST( TCSANOW		);
Packit 437b5e
	LPOSIX_CONST( TCSADRAIN		);
Packit 437b5e
	LPOSIX_CONST( TCSAFLUSH		);
Packit 437b5e
Packit 437b5e
	/* tcflush */
Packit 437b5e
	LPOSIX_CONST( TCIFLUSH		);
Packit 437b5e
	LPOSIX_CONST( TCOFLUSH		);
Packit 437b5e
	LPOSIX_CONST( TCIOFLUSH		);
Packit 437b5e
Packit 437b5e
	/* tcflow() */
Packit 437b5e
	LPOSIX_CONST( TCOOFF		);
Packit 437b5e
	LPOSIX_CONST( TCOON		);
Packit 437b5e
	LPOSIX_CONST( TCIOFF		);
Packit 437b5e
	LPOSIX_CONST( TCION		);
Packit 437b5e
Packit 437b5e
	/* cflag */
Packit 437b5e
#ifdef B0
Packit 437b5e
	LPOSIX_CONST( B0		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B50
Packit 437b5e
	LPOSIX_CONST( B50		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B75
Packit 437b5e
	LPOSIX_CONST( B75		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B110
Packit 437b5e
	LPOSIX_CONST( B110		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B134
Packit 437b5e
	LPOSIX_CONST( B134		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B150
Packit 437b5e
	LPOSIX_CONST( B150		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B200
Packit 437b5e
	LPOSIX_CONST( B200		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B300
Packit 437b5e
	LPOSIX_CONST( B300		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B600
Packit 437b5e
	LPOSIX_CONST( B600		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B1200
Packit 437b5e
	LPOSIX_CONST( B1200		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B1800
Packit 437b5e
	LPOSIX_CONST( B1800		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B2400
Packit 437b5e
	LPOSIX_CONST( B2400		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B4800
Packit 437b5e
	LPOSIX_CONST( B4800		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B9600
Packit 437b5e
	LPOSIX_CONST( B9600		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B19200
Packit 437b5e
	LPOSIX_CONST( B19200		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B38400
Packit 437b5e
	LPOSIX_CONST( B38400		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B57600
Packit 437b5e
	LPOSIX_CONST( B57600		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef B115200
Packit 437b5e
	LPOSIX_CONST( B115200		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CSIZE
Packit 437b5e
	LPOSIX_CONST( CSIZE		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef BS5
Packit 437b5e
	LPOSIX_CONST( CS5		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CS6
Packit 437b5e
	LPOSIX_CONST( CS6		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CS7
Packit 437b5e
	LPOSIX_CONST( CS7		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CS8
Packit 437b5e
	LPOSIX_CONST( CS8		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CSTOPB
Packit 437b5e
	LPOSIX_CONST( CSTOPB		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CREAD
Packit 437b5e
	LPOSIX_CONST( CREAD		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef PARENB
Packit 437b5e
	LPOSIX_CONST( PARENB		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef PARODD
Packit 437b5e
	LPOSIX_CONST( PARODD		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef HUPCL
Packit 437b5e
	LPOSIX_CONST( HUPCL		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CLOCAL
Packit 437b5e
	LPOSIX_CONST( CLOCAL		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CRTSCTS
Packit 437b5e
	LPOSIX_CONST( CRTSCTS		);
Packit 437b5e
#endif
Packit 437b5e
Packit 437b5e
	/* lflag */
Packit 437b5e
#ifdef ISIG
Packit 437b5e
	LPOSIX_CONST( ISIG		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ICANON
Packit 437b5e
	LPOSIX_CONST( ICANON		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ECHO
Packit 437b5e
	LPOSIX_CONST( ECHO		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ECHOE
Packit 437b5e
	LPOSIX_CONST( ECHOE		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ECHOK
Packit 437b5e
	LPOSIX_CONST( ECHOK		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ECHONL
Packit 437b5e
	LPOSIX_CONST( ECHONL		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef NOFLSH
Packit 437b5e
	LPOSIX_CONST( NOFLSH		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef IEXTEN
Packit 437b5e
	LPOSIX_CONST( IEXTEN		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef TOSTOP
Packit 437b5e
	LPOSIX_CONST( TOSTOP		);
Packit 437b5e
#endif
Packit 437b5e
Packit 437b5e
	/* iflag */
Packit 437b5e
#ifdef INPCK
Packit 437b5e
	LPOSIX_CONST( INPCK		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef IGNPAR
Packit 437b5e
	LPOSIX_CONST( IGNPAR		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef PARMRK
Packit 437b5e
	LPOSIX_CONST( PARMRK		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ISTRIP
Packit 437b5e
	LPOSIX_CONST( ISTRIP		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef IXON
Packit 437b5e
	LPOSIX_CONST( IXON		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef IXOFF
Packit 437b5e
	LPOSIX_CONST( IXOFF		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef IXANY
Packit 437b5e
	LPOSIX_CONST( IXANY		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef IGNBRK
Packit 437b5e
	LPOSIX_CONST( IGNBRK		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef BRKINT
Packit 437b5e
	LPOSIX_CONST( BRKINT		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef INLCR
Packit 437b5e
	LPOSIX_CONST( INLCR		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef IGNCR
Packit 437b5e
	LPOSIX_CONST( IGNCR		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ICRNL
Packit 437b5e
	LPOSIX_CONST( ICRNL		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef IMAXBEL
Packit 437b5e
	LPOSIX_CONST( IMAXBEL		);
Packit 437b5e
#endif
Packit 437b5e
Packit 437b5e
	/* oflag */
Packit 437b5e
#ifdef OPOST
Packit 437b5e
	LPOSIX_CONST( OPOST		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ONLCR
Packit 437b5e
	LPOSIX_CONST( ONLCR		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef OCRNL
Packit 437b5e
	LPOSIX_CONST( OCRNL		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ONLRET
Packit 437b5e
	LPOSIX_CONST( ONLRET		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef OFILL
Packit 437b5e
	LPOSIX_CONST( OFILL		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef OFDEL
Packit 437b5e
	LPOSIX_CONST( OFDEL		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef NLDLY
Packit 437b5e
	LPOSIX_CONST( NLDLY		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef NL0
Packit 437b5e
	LPOSIX_CONST( NL0		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef NL1
Packit 437b5e
	LPOSIX_CONST( NL1		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CRDLY
Packit 437b5e
	LPOSIX_CONST( CRDLY		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CR0
Packit 437b5e
	LPOSIX_CONST( CR0		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CR1
Packit 437b5e
	LPOSIX_CONST( CR1		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CR2
Packit 437b5e
	LPOSIX_CONST( CR2		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef CR3
Packit 437b5e
	LPOSIX_CONST( CR3		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef TABDLY
Packit 437b5e
	LPOSIX_CONST( TABDLY		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef TAB0
Packit 437b5e
	LPOSIX_CONST( TAB0		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef TAB1
Packit 437b5e
	LPOSIX_CONST( TAB1		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef TAB2
Packit 437b5e
	LPOSIX_CONST( TAB2		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef TAB3
Packit 437b5e
	LPOSIX_CONST( TAB3		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef BSDLY
Packit 437b5e
	LPOSIX_CONST( BSDLY		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef BS0
Packit 437b5e
	LPOSIX_CONST( BS0		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef BS1
Packit 437b5e
	LPOSIX_CONST( BS1		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VTDLY
Packit 437b5e
	LPOSIX_CONST( VTDLY		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VT0
Packit 437b5e
	LPOSIX_CONST( VT0		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VT1
Packit 437b5e
	LPOSIX_CONST( VT1		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef FFDLY
Packit 437b5e
	LPOSIX_CONST( FFDLY		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef FF0
Packit 437b5e
	LPOSIX_CONST( FF0		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef FF1
Packit 437b5e
	LPOSIX_CONST( FF1		);
Packit 437b5e
#endif
Packit 437b5e
Packit 437b5e
	/* cc */
Packit 437b5e
#ifdef VINTR
Packit 437b5e
	LPOSIX_CONST( VINTR		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VQUIT
Packit 437b5e
	LPOSIX_CONST( VQUIT		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VERASE
Packit 437b5e
	LPOSIX_CONST( VERASE		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VKILL
Packit 437b5e
	LPOSIX_CONST( VKILL		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VEOF
Packit 437b5e
	LPOSIX_CONST( VEOF		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VEOL
Packit 437b5e
	LPOSIX_CONST( VEOL		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VEOL2
Packit 437b5e
	LPOSIX_CONST( VEOL2		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VMIN
Packit 437b5e
	LPOSIX_CONST( VMIN		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VTIME
Packit 437b5e
	LPOSIX_CONST( VTIME		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VSTART
Packit 437b5e
	LPOSIX_CONST( VSTART		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VSTOP
Packit 437b5e
	LPOSIX_CONST( VSTOP		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VSUSP
Packit 437b5e
	LPOSIX_CONST( VSUSP		);
Packit 437b5e
#endif
Packit 437b5e
Packit 437b5e
	/* XSI extensions - don't use these if you care about portability
Packit 437b5e
	 * to strict POSIX conforming machines, such as Mac OS X.
Packit 437b5e
	 */
Packit 437b5e
#ifdef CBAUD
Packit 437b5e
	LPOSIX_CONST( CBAUD		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef EXTA
Packit 437b5e
	LPOSIX_CONST( EXTA		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef EXTB
Packit 437b5e
	LPOSIX_CONST( EXTB		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef DEFECHO
Packit 437b5e
	LPOSIX_CONST( DEFECHO		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ECHOCTL
Packit 437b5e
	LPOSIX_CONST( ECHOCTL		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ECHOPRT
Packit 437b5e
	LPOSIX_CONST( ECHOPRT		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef ECHOKE
Packit 437b5e
	LPOSIX_CONST( ECHOKE		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef FLUSHO
Packit 437b5e
	LPOSIX_CONST( FLUSHO		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef PENDIN
Packit 437b5e
	LPOSIX_CONST( PENDIN		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef LOBLK
Packit 437b5e
	LPOSIX_CONST( LOBLK		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef SWTCH
Packit 437b5e
	LPOSIX_CONST( SWTCH		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VDISCARD
Packit 437b5e
	LPOSIX_CONST( VDISCARD		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VDSUSP
Packit 437b5e
	LPOSIX_CONST( VDSUSP		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VLNEXT
Packit 437b5e
	LPOSIX_CONST( VLNEXT		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VREPRINT
Packit 437b5e
	LPOSIX_CONST( VREPRINT		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VSTATUS
Packit 437b5e
	LPOSIX_CONST( VSTATUS		);
Packit 437b5e
#endif
Packit 437b5e
#ifdef VWERASE
Packit 437b5e
	LPOSIX_CONST( VWERASE		);
Packit 437b5e
#endif
Packit 437b5e
Packit 437b5e
	return 1;
Packit 437b5e
}