#define	LPDPORT	515		/* TCP */

#define	LOGPORT	514		/* UDP */

#define	LOG_TAG	"<54>"		/* LOG_LPR + LOG_INFO */

#define	JDPORT	9100		/* direct to printer */

enum connstate
{
	INIT,
	WAITING,
	QUEUENAME,
	RECVJOB,
	CONTROLINFO,
	CONTROL,
	DATAINFO,
	DATA,
	PRINTING,
	NAKANDCLOSE,
	CLOSING,
	ABORT
};

struct conn_info
{
	enum connstate	state;			/* of a connection */
	int		controlfirst;		/* control data first? */
	int		printer;		/* 0 to 2 */
	tcp_Socket	sock;			/* connection */
	long		bytelen;		/* of current file */
	char		buffer[2048];		/* for data */
	char		*bufip;			/* input point */
	char		*bufop;			/* output point */
	char		jobname[32];
	char		username[32];
	char		hostname[32];
	time_t		starttime;
	long		joblen;
};

#define	reset_ptrs(c)	(c)->bufip = (c)->bufop = (c)->buffer
#define	data_unseen(c)	((c)->bufip > (c)->buffer)
#define	data_remaining(c)	((c)->bufip != (c)->bufop)
#define	buffer_room(c)	((c)->buffer + sizeof((c)->buffer) - (c)->bufip)

enum pstate
{
	NONESUCH = 0,
	DISABLED,
	FREE,
	BUSY,
};

struct lpt_info
{
	enum pstate	avail;			/* active? */
	int		status;			/* from last biosprint */
	int		hwaddr;			/* port address, != 0 == use */
};

#define	bios_printer_init(i)	biosprint(1,0,i)
#define	bios_printer_status(i)	biosprint(2,0,i)
#define	bios_printer_outch(i,c)	biosprint(0,c,i)

/* printer status bits */
#define	P_TIMEOUT	0x01
#define	P_IOERROR	0x08
#define	P_SELECTED	0x10
#define	P_NOPAPER	0x20
#define	P_ACK		0x40
#define	P_IDLE		0x80

#define	P_CHANGES	(P_TIMEOUT|P_IOERROR|P_SELECTED|P_NOPAPER)
#define	P_READY		(P_SELECTED|P_IDLE)

/* key definitions */
#define	CF1	0x5e				/* CTRL-F1 */
#define	CF2	0x5f
#define	CF3	0x60
