/*	$NetBSD: ibcs2_termios.h,v 1.4 2000/08/11 22:20:10 matt Exp $	*/

/*
 * Copyright (c) 1994 Scott Bartram
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed by Scott Bartram.
 * 4. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef	_IBCS2_TERMIOS_H
#define	_IBCS2_TERMIOS_H	1

#include <compat/ibcs2/ibcs2_types.h>

#define IBCS2_NCC	8
#define IBCS2_NCCS	13

typedef u_short	ibcs2_tcflag_t;
typedef u_char	ibcs2_cc_t;
typedef u_long	ibcs2_speed_t;

struct ibcs2_termio {
	u_short	c_iflag;
	u_short	c_oflag;
	u_short	c_cflag;
	u_short	c_lflag;
	char	c_line;
	u_char	c_cc[IBCS2_NCC];
};

struct ibcs2_termios {
	ibcs2_tcflag_t	c_iflag;
	ibcs2_tcflag_t	c_oflag;
	ibcs2_tcflag_t	c_cflag;
	ibcs2_tcflag_t	c_lflag;
	char		c_line;
	ibcs2_cc_t	c_cc[IBCS2_NCCS];
	char		c_ispeed;
	char		c_ospeed;
};

#define IBCS2_VINTR		0
#define IBCS2_VQUIT		1
#define IBCS2_VERASE		2
#define IBCS2_VKILL		3
#define IBCS2_VEOF		4
#define IBCS2_VEOL		5
#define IBCS2_VEOL2		6
#define IBCS2_VMIN		4
#define IBCS2_VTIME		5
#define IBCS2_VSWTCH		7
#define IBCS2_VSUSP		10
#define IBCS2_VSTART		11
#define IBCS2_VSTOP		12

#define IBCS2_CNUL		0
#define IBCS2_CDEL		0377
#define IBCS2_CESC		'\\'
#define IBCS2_CINTR		0177
#define IBCS2_CQUIT		034
#define IBCS2_CERASE		'#'
#define IBCS2_CKILL		'@'
#define IBCS2_CSTART		021
#define IBCS2_CSTOP		023
#define IBCS2_CSWTCH		032
#define IBCS2_CNSWTCH		0
#define IBCS2_CSUSP		032

#define IBCS2_IGNBRK		0000001
#define IBCS2_BRKINT		0000002
#define IBCS2_IGNPAR		0000004
#define IBCS2_PARMRK		0000010
#define IBCS2_INPCK		0000020
#define IBCS2_ISTRIP		0000040
#define IBCS2_INLCR		0000100
#define IBCS2_IGNCR		0000200
#define IBCS2_ICRNL		0000400
#define IBCS2_IUCLC		0001000
#define IBCS2_IXON		0002000
#define IBCS2_IXANY		0004000
#define IBCS2_IXOFF		0010000
#define IBCS2_IMAXBEL		0020000
#define IBCS2_DOSMODE		0100000

#define IBCS2_OPOST		0000001
#define IBCS2_OLCUC		0000002
#define IBCS2_ONLCR		0000004
#define IBCS2_OCRNL		0000010
#define IBCS2_ONOCR		0000020
#define IBCS2_ONLRET		0000040
#define IBCS2_OFILL		0000100
#define IBCS2_OFDEL		0000200
#define IBCS2_NLDLY		0000400
#define IBCS2_NL0		0000000
#define IBCS2_NL1		0000400
#define IBCS2_CRDLY		0003000
#define IBCS2_CR0		0000000
#define IBCS2_CR1		0001000
#define IBCS2_CR2		0002000
#define IBCS2_CR3		0003000
#define IBCS2_TABDLY		0014000
#define IBCS2_TAB0		0000000
#define IBCS2_TAB1		0004000
#define IBCS2_TAB2		0010000
#define IBCS2_TAB3		0014000
#define IBCS2_BSDLY		0020000
#define IBCS2_BS0		0000000
#define IBCS2_BS1		0020000
#define IBCS2_VTDLY		0040000
#define IBCS2_VT0		0000000
#define IBCS2_VT1		0040000
#define IBCS2_FFDLY		0100000
#define IBCS2_FF0		0000000
#define IBCS2_FF1		0100000

#define IBCS2_CBAUD		0000017
#define IBCS2_CSIZE		0000060
#define IBCS2_CS5		0000000
#define IBCS2_CS6		0000020
#define IBCS2_CS7		0000040
#define IBCS2_CS8		0000060
#define IBCS2_CSTOPB		0000100
#define IBCS2_CREAD		0000200
#define IBCS2_PARENB		0000400
#define IBCS2_PARODD		0001000
#define IBCS2_HUPCL		0002000
#define IBCS2_CLOCAL		0004000
#define IBCS2_RCV1EN		0010000
#define IBCS2_XMT1EN		0020000
#define IBCS2_LOBLK		0040000
#define IBCS2_XCLUDE		0100000

#define IBCS2_ISIG		0000001
#define IBCS2_ICANON		0000002
#define IBCS2_XCASE		0000004
#define IBCS2_ECHO		0000010
#define IBCS2_ECHOE		0000020
#define IBCS2_ECHOK		0000040
#define IBCS2_ECHONL		0000100
#define IBCS2_NOFLSH		0000200
#define IBCS2_IEXTEN		0000400
#define IBCS2_TOSTOP		0001000

#define IBCS2_XIOC		(('i'<<24)|('X'<<16))
#define IBCS2_XCGETA  		(IBCS2_XIOC|1)
#define IBCS2_XCSETA  		(IBCS2_XIOC|2)
#define IBCS2_XCSETAW 		(IBCS2_XIOC|3)
#define IBCS2_XCSETAF 		(IBCS2_XIOC|4)

#define IBCS2_OXIOC		('x'<<8)
#define IBCS2_OXCGETA  		(IBCS2_OXIOC|1)
#define IBCS2_OXCSETA  		(IBCS2_OXIOC|2)
#define IBCS2_OXCSETAW 		(IBCS2_OXIOC|3)
#define IBCS2_OXCSETAF 		(IBCS2_OXIOC|4)

#define IBCS2_TIOC		('T'<<8)
#define IBCS2_TCGETA  		(IBCS2_TIOC|1)
#define IBCS2_TCSETA  		(IBCS2_TIOC|2)
#define IBCS2_TCSETAW 		(IBCS2_TIOC|3)
#define IBCS2_TCSETAF 		(IBCS2_TIOC|4)
#define IBCS2_TCSBRK  		(IBCS2_TIOC|5)
#define IBCS2_TCXONC  		(IBCS2_TIOC|6)
#define IBCS2_TCFLSH  		(IBCS2_TIOC|7)

#define IBCS2_TCGETSC		(IBCS2_TIOC|34)
#define IBCS2_TCSETSC		(IBCS2_TIOC|35)

#define IBCS2_TIOCSWINSZ	(IBCS2_TIOC|103)
#define IBCS2_TIOCGWINSZ	(IBCS2_TIOC|104)
#define IBCS2_TIOCSPGRP		(IBCS2_TIOC|118)
#define IBCS2_TIOCGPGRP		(IBCS2_TIOC|119)

#define IBCS2_TCSANOW		IBCS2_XCSETA
#define IBCS2_TCSADRAIN		IBCS2_XCSETAW
#define IBCS2_TCSAFLUSH		IBCS2_XCSETAF
#define IBCS2_TCSADFLUSH	IBCS2_XCSETAF

#define IBCS2_TCIFLUSH		0
#define IBCS2_TCOFLUSH		1
#define IBCS2_TCIOFLUSH		2

#define IBCS2_TCOOFF		0
#define IBCS2_TCOON		1
#define IBCS2_TCIOFF		2
#define IBCS2_TCION		3

#define IBCS2_B0		0
#define IBCS2_B50		1
#define IBCS2_B75		2
#define IBCS2_B110		3
#define IBCS2_B134		4
#define IBCS2_B150		5
#define IBCS2_B200		6
#define IBCS2_B300		7
#define IBCS2_B600		8
#define IBCS2_B1200		9
#define IBCS2_B1800		10
#define IBCS2_B2400		11
#define IBCS2_B4800		12
#define IBCS2_B9600		13
#define IBCS2_B19200		14
#define IBCS2_B38400		15

struct ibcs2_winsize {
        u_short ws_row;
        u_short ws_col;
        u_short ws_xpixel;
        u_short ws_ypixel;
};

#define	IBCS2_GHUPCL		0x0001
#define	IBCS2_GXTABS		0x0002
#define	IBCS2_GLCASE		0x0004
#define	IBCS2_GECHO		0x0008
#define	IBCS2_GCRMOD		0x0010
#define	IBCS2_GRAW		0x0020
#define	IBCS2_GODDP		0x0040
#define	IBCS2_GEVENP		0x0080
#define	IBCS2_GANYP		0x00C0
#define	IBCS2_GNLDELAY		0x0300
#define	IBCS2_GTBDELAY		0x0400
#define	IBCS2_GCRDELAY		0x3000
#define	IBCS2_GVTDELAY		0x4000
#define	IBCS2_GBSDELAY		0x8000
#define	IBCS2_GALLDELAY		0xFF00

struct ibcs2_sgttyb {
	char sg_ispeed;
	char sg_ospeed;
	char sg_erase;
	char sg_kill;
	int sg_flags;
};

#endif /* _IBCS2_H_ */
