#ifndef _STROPTS_H
#define _STROPTS_H

#ifdef __cplusplus
extern "C" {
#endif

#define __SID		('S' << 8)

#define I_NREAD		(__SID | 1)
#define I_PUSH		(__SID | 2)
#define I_POP		(__SID | 3)
#define I_LOOK		(__SID | 4)
#define I_FLUSH		(__SID | 5)
#define I_SRDOPT	(__SID | 6)
#define I_GRDOPT	(__SID | 7)
#define I_STR		(__SID | 8)
#define I_SETSIG	(__SID | 9)
#define I_GETSIG	(__SID |10)
#define I_FIND		(__SID |11)
#define I_LINK		(__SID |12)
#define I_UNLINK	(__SID |13)
#define I_PEEK		(__SID |15)
#define I_FDINSERT	(__SID |16)
#define I_SENDFD	(__SID |17)
#define I_RECVFD	(__SID |14)
#define I_SWROPT	(__SID |19)
#define I_GWROPT	(__SID |20)
#define I_LIST		(__SID |21)
#define I_PLINK		(__SID |22)
#define I_PUNLINK	(__SID |23)
#define I_FLUSHBAND	(__SID |28)
#define I_CKBAND	(__SID |29)
#define I_GETBAND	(__SID |30)
#define I_ATMARK	(__SID |31)
#define I_SETCLTIME	(__SID |32)
#define I_GETCLTIME	(__SID |33)
#define I_CANPUT	(__SID |34)

#define FMNAMESZ	8

#define FLUSHR		0x01
#define FLUSHW		0x02
#define FLUSHRW		0x03
#define FLUSHBAND	0x04

#define S_INPUT		0x0001
#define S_HIPRI		0x0002
#define S_OUTPUT	0x0004
#define S_MSG		0x0008
#define S_ERROR		0x0010
#define S_HANGUP	0x0020
#define S_RDNORM	0x0040
#define S_WRNORM	S_OUTPUT
#define S_RDBAND	0x0080
#define S_WRBAND	0x0100
#define S_BANDURG	0x0200

#define RS_HIPRI	0x01

#define RNORM		0x0000
#define RMSGD		0x0001
#define RMSGN		0x0002
#define RPROTDAT	0x0004
#define RPROTDIS	0x0008
#define RPROTNORM	0x0010
#define RPROTMASK	0x001C

#define SNDZERO		0x001
#define SNDPIPE		0x002

#define ANYMARK		0x01
#define LASTMARK	0x02

#define MUXID_ALL	(-1)

#define MSG_HIPRI	0x01
#define MSG_ANY		0x02
#define MSG_BAND	0x04

#define MORECTL		1
#define MOREDATA	2

struct bandinfo {
	unsigned char bi_pri;
	int bi_flag;
};

struct strbuf {
	int maxlen;
	int len;
	char *buf;
};

struct strpeek {
	struct strbuf ctlbuf;
	struct strbuf databuf;
	unsigned flags;
};

struct strfdinsert {
	struct strbuf ctlbuf;
	struct strbuf databuf;
	unsigned flags;
	int fildes;
	int offset;
};

struct strioctl {
	int ic_cmd;
	int ic_timout;
	int ic_len;
	char *ic_dp;
};

struct strrecvfd {
	int fd;
	int uid;
	int gid;
	char __fill[8];
};

struct str_mlist {
	char l_name[FMNAMESZ + 1];
};

struct str_list {
	int sl_nmods;
	struct str_mlist *sl_modlist;
};

int isastream(int);
int ioctl(int, int, ...);

#ifdef __cplusplus
}
#endif

#endif