| /* Copyright (c) 2006 Russ Cox */ | 
 |  | 
 | /* | 
 |  | 
 | tag[1] Rerror error[s] | 
 |  | 
 | tag[1] Trdmouse | 
 | tag[1] Rrdmouse x[4] y[4] button[4] msec[4] resized[1] | 
 |  | 
 | tag[1] Tmoveto x[4] y[4] | 
 | tag[1] Rmoveto | 
 |  | 
 | tag[1] Tcursor cursor[] | 
 | tag[1] Rcursor | 
 |  | 
 | tag[1] Tbouncemouse x[4] y[4] button[4] | 
 | tag[1] Rbouncemouse | 
 |  | 
 | tag[1] Trdkbd | 
 | tag[1] Rrdkbd rune[2] | 
 |  | 
 | tag[1] Tlabel label[s] | 
 | tag[1] Rlabel  | 
 |  | 
 | tag[1] Tinit winsize[s] label[s] font[s] | 
 | tag[1] Rinit | 
 |  | 
 | tag[1] Trdsnarf  | 
 | tag[1] Rrdsnarf snarf[s] | 
 |  | 
 | tag[1] Twrsnarf snarf[s] | 
 | tag[1] Rwrsnarf | 
 |  | 
 | tag[1] Trddraw count[4] | 
 | tag[1] Rrddraw count[4] data[count] | 
 |  | 
 | tag[1] Twrdraw count[4] data[count] | 
 | tag[1] Rwrdraw count[4] | 
 |  | 
 | tag[1] Ttop | 
 | tag[1] Rtop | 
 |  | 
 | tag[1] Tresize rect[4*4] | 
 | tag[1] Rresize  | 
 | */ | 
 |  | 
 |  | 
 | #define PUT(p, x) \ | 
 | 	(p)[0] = ((x) >> 24)&0xFF, \ | 
 | 	(p)[1] = ((x) >> 16)&0xFF, \ | 
 | 	(p)[2] = ((x) >> 8)&0xFF, \ | 
 | 	(p)[3] = (x)&0xFF | 
 |  | 
 | #define GET(p, x) \ | 
 | 	((x) = (u32int)(((p)[0] << 24) | ((p)[1] << 16) | ((p)[2] << 8) | ((p)[3]))) | 
 |  | 
 | #define PUT2(p, x) \ | 
 | 	(p)[0] = ((x) >> 8)&0xFF, \ | 
 | 	(p)[1] = (x)&0xFF | 
 |  | 
 | #define GET2(p, x) \ | 
 | 	((x) = (((p)[0] << 8) | ((p)[1]))) | 
 |  | 
 | enum { | 
 | 	Rerror = 1, | 
 | 	Trdmouse = 2, | 
 | 	Rrdmouse, | 
 | 	Tmoveto = 4, | 
 | 	Rmoveto, | 
 | 	Tcursor = 6, | 
 | 	Rcursor, | 
 | 	Tbouncemouse = 8, | 
 | 	Rbouncemouse, | 
 | 	Trdkbd = 10, | 
 | 	Rrdkbd, | 
 | 	Tlabel = 12, | 
 | 	Rlabel, | 
 | 	Tinit = 14, | 
 | 	Rinit, | 
 | 	Trdsnarf = 16, | 
 | 	Rrdsnarf, | 
 | 	Twrsnarf = 18, | 
 | 	Rwrsnarf, | 
 | 	Trddraw = 20, | 
 | 	Rrddraw, | 
 | 	Twrdraw = 22, | 
 | 	Rwrdraw, | 
 | 	Ttop = 24, | 
 | 	Rtop, | 
 | 	Tresize = 26, | 
 | 	Rresize, | 
 | 	Tmax, | 
 | }; | 
 |  | 
 | enum { | 
 | 	MAXWMSG = 4*1024*1024 | 
 | }; | 
 |  | 
 | typedef struct Wsysmsg Wsysmsg; | 
 | struct Wsysmsg | 
 | { | 
 | 	uchar type; | 
 | 	uchar tag; | 
 | 	Mouse mouse; | 
 | 	int resized; | 
 | 	Cursor cursor; | 
 | 	int arrowcursor; | 
 | 	Rune rune; | 
 | 	char *winsize; | 
 | 	char *label; | 
 | 	char *snarf; | 
 | 	char *error; | 
 | 	uchar *data; | 
 | 	uint count; | 
 | 	Rectangle rect; | 
 | }; | 
 |  | 
 | uint	convW2M(Wsysmsg*, uchar*, uint); | 
 | uint	convM2W(uchar*, uint, Wsysmsg*); | 
 | uint	sizeW2M(Wsysmsg*); | 
 | int	readwsysmsg(int, uchar*, uint); | 
 |  | 
 | int	drawfcallfmt(Fmt*); |