# include <sys/types.h>
# include <poll.h>
# include <stdarg.h>
# include <stropts.h>
#if !defined(_LP_MSGS_H)
# define _LP_MSGS_H
# define R_BAD_MESSAGE 0
# define S_ALLOC_FILES 3
# define R_ALLOC_FILES 4
# define S_PRINT_REQUEST 5
# define R_PRINT_REQUEST 6
# define S_START_CHANGE_REQUEST 7
# define R_START_CHANGE_REQUEST 8
# define S_END_CHANGE_REQUEST 9
# define R_END_CHANGE_REQUEST 10
# define S_CANCEL_REQUEST 11
# define R_CANCEL_REQUEST 12
# define S_LOAD_PRINTER 15
# define R_LOAD_PRINTER 16
# define S_UNLOAD_PRINTER 17
# define R_UNLOAD_PRINTER 18
# define S_INQUIRE_PRINTER_STATUS 19
# define R_INQUIRE_PRINTER_STATUS 20
# define S_LOAD_CLASS 21
# define R_LOAD_CLASS 22
# define S_UNLOAD_CLASS 23
# define R_UNLOAD_CLASS 24
# define S_INQUIRE_CLASS 25
# define R_INQUIRE_CLASS 26
# define S_MOUNT 27
# define R_MOUNT 28
# define S_UNMOUNT 29
# define R_UNMOUNT 30
# define S_MOVE_REQUEST 31
# define R_MOVE_REQUEST 32
# define S_MOVE_DEST 33
# define R_MOVE_DEST 34
# define S_ACCEPT_DEST 35
# define R_ACCEPT_DEST 36
# define S_REJECT_DEST 37
# define R_REJECT_DEST 38
# define S_ENABLE_DEST 39
# define R_ENABLE_DEST 40
# define S_DISABLE_DEST 41
# define R_DISABLE_DEST 42
# define S_LOAD_FILTER_TABLE 43
# define R_LOAD_FILTER_TABLE 44
# define S_UNLOAD_FILTER_TABLE 45
# define R_UNLOAD_FILTER_TABLE 46
# define S_LOAD_PRINTWHEEL 47
# define R_LOAD_PRINTWHEEL 48
# define S_UNLOAD_PRINTWHEEL 49
# define R_UNLOAD_PRINTWHEEL 50
# define S_LOAD_USER_FILE 51
# define R_LOAD_USER_FILE 52
# define S_UNLOAD_USER_FILE 53
# define R_UNLOAD_USER_FILE 54
# define S_LOAD_FORM 55
# define R_LOAD_FORM 56
# define S_UNLOAD_FORM 57
# define R_UNLOAD_FORM 58
# define S_QUIET_ALERT 61
# define R_QUIET_ALERT 62
# define S_SEND_FAULT 63
# define R_SEND_FAULT 64
# define S_SHUTDOWN 65
# define R_SHUTDOWN 66
# define S_GOODBYE 67
# define S_CHILD_DONE 68
# define I_GET_TYPE 69
# define I_QUEUE_CHK 70
# define S_INQUIRE_REQUEST_RANK 74
# define R_INQUIRE_REQUEST_RANK 75
# define S_CANCEL 76
# define R_CANCEL 77
# define S_CLEAR_FAULT 90
# define R_CLEAR_FAULT 91
# define S_MOUNT_TRAY 92
# define R_MOUNT_TRAY 93
# define S_UNMOUNT_TRAY 94
# define R_UNMOUNT_TRAY 95
# define S_MAX_TRAYS 96
# define R_MAX_TRAYS 97
# define S_PAPER_CHANGED 98
# define R_PAPER_CHANGED 99
# define S_PAPER_ALLOWED 100
# define R_PAPER_ALLOWED 101
# define S_PASS_PEER_CONNECTION 102
# define R_PASS_PEER_CONNECTION 103
# define LAST_MESSAGE 104
# define MOK 0
# define MOKMORE 1
# define MOKREMOTE 2
# define MMORERR 3
# define MNODEST 4
# define MERRDEST 5
# define MDENYDEST 6
# define MNOMEDIA 7
# define MDENYMEDIA 8
# define MNOFILTER 9
# define MNOINFO 10
# define MNOMEM 11
# define MNOMOUNT 12
# define MNOOPEN 13
# define MNOPERM 14
# define MNOSTART 15
# define MUNKNOWN 16
# define M2LATE 17
# define MNOSPACE 18
# define MBUSY 19
# define MTRANSMITERR 20
# define MNOMORE 21
# define MGONEREMOTE 22
# define MNOTRAY 23
#define HEAD_RESYNC (0)
#define HEAD_RESYNC_LEN 2
#define HEAD_AUTHCODE (HEAD_RESYNC + HEAD_RESYNC_LEN)
#define HEAD_AUTHCODE_LEN (sizeof(short) + sizeof(long))
#define HEAD_SIZE (HEAD_AUTHCODE + HEAD_AUTHCODE_LEN)
#define HEAD_SIZE_LEN 4
#define HEAD_TYPE (HEAD_SIZE + HEAD_SIZE_LEN)
#define HEAD_TYPE_LEN 4
#define HEAD_DATA (HEAD_TYPE + HEAD_TYPE_LEN)
#define HEAD_LEN HEAD_DATA
#define MESG_SIZE (0)
#define MESG_SIZE_LEN 4
#define MESG_TYPE (MESG_SIZE + MESG_SIZE_LEN)
#define MESG_TYPE_LEN 4
#define MESG_DATA (MESG_TYPE + MESG_TYPE_LEN)
#define MESG_LEN MESG_DATA
#define TAIL_ENDSYNC_LEN 2
#define TAIL_ENDSYNC(N) (N - TAIL_ENDSYNC_LEN)
#define TAIL_CHKSUM_LEN 4
#define TAIL_CHKSUM(N) (TAIL_ENDSYNC(N) - TAIL_CHKSUM_LEN)
#define TAIL_LEN (TAIL_CHKSUM_LEN + TAIL_ENDSYNC_LEN)
#define CONTROL_LEN (HEAD_LEN + TAIL_LEN)
#define EXCESS_3_2_LEN (HEAD_SIZE + TAIL_LEN)
#define CALC_CHKSUM(B,SZ,RC) \
if (SZ >= CONTROL_LEN) \
{ \
register unsigned char *p = (unsigned char *)B, \
*pend = p + SZ - TAIL_LEN; \
RC = 0; \
while (p < pend) \
RC += *p++; \
} \
else \
return ((errno = EINVAL, -1))
# define MSGMAX 2048
# define QA_FORM 1
# define QA_PRINTER 2
# define QA_PRINTWHEEL 3
typedef struct strbuf strbuf_t;
typedef struct mque
{
struct mque *next;
struct strbuf *dat;
} MQUE;
typedef struct
{
short type;
int readfd;
int writefd;
int wait;
char *file;
short state;
short admin;
short event;
MQUE * mque;
uid_t uid;
gid_t gid;
char * slabel;
void (**on_discon)();
} MESG;
# define MDSIZE (sizeof(MESG))
# define MDS_IDLE 0
# define MDS_32PROTO 320
# define MDS_32CONNECT 321
# define MD_UNKNOWN 0
# define MD_STREAM 1
# define MD_BOUND 2
# define MD_SYS_FIFO 3
# define MD_USR_FIFO 4
# define MD_MASTER 5
# define MD_CHILD 6
typedef struct
{
int full;
char save [MSGMAX],
*psave,
*psave_end;
} fifobuffer_t;
MESG * mcreate ( char * );
int mlisteninit ( MESG * );
MESG * mlisten ( void );
int mlistenadd ( MESG *, short );
int mon_discon ( MESG *, void (*)());
MESG * mlistenreset ( void );
int mdestroy ( MESG * );
MESG * mconnect ( char *, int, int );
int mgetm ( MESG *, int, ... );
int mwrite ( MESG *, char * );
int mputm ( MESG *, int, ... );
int mread ( MESG *, char *, int );
short msize ( char * );
short mpeek ( MESG * );
int mdisconnect ( MESG * );
void __mbfree ( void );
int mclose ( void );
int mneeds ( void );
int mopen ( void );
int mrecv ( char *, int );
int msend ( char * );
int Putmsg (MESG *, strbuf_t *, strbuf_t *, int);
int Getmsg (MESG *, strbuf_t *, strbuf_t *, int *);
int read3_2 (MESG * md, char *msgbuf, int size);
int write3_2 (MESG *, char *, int);
int read_fifo (int, char *, unsigned int);
int write_fifo (int, char *, unsigned int);
int ResetFifoBuffer (int);
fifobuffer_t *GetFifoBuffer (int);
char * htos ( char *, unsigned short );
char * ltos ( char *, unsigned long );
unsigned long stol ( char * );
unsigned short stoh ( char * );
int _getmessage ( char *, short, va_list );
int _putmessage ( char *, short, va_list );
int getmessage ( char *, short, ... );
int putmessage ( char *, short, ... );
# define mtype(buffer) (getmessage(buffer, I_GET_TYPE))
# define msize(buffer) (stoh(buffer))
# define CURRENT_REQ "current"
#endif