xref: /plan9/sys/src/cmd/rio/dat.h (revision a84536681645e23c630ce4ef2e5c3b284d4c590b)
17dd7cddfSDavid du Colombier enum
27dd7cddfSDavid du Colombier {
37dd7cddfSDavid du Colombier 	Qdir,			/* /dev for this window */
47dd7cddfSDavid du Colombier 	Qcons,
57dd7cddfSDavid du Colombier 	Qconsctl,
67dd7cddfSDavid du Colombier 	Qcursor,
77dd7cddfSDavid du Colombier 	Qwdir,
87dd7cddfSDavid du Colombier 	Qwinid,
97dd7cddfSDavid du Colombier 	Qwinname,
1080ee5cbfSDavid du Colombier 	Qkbdin,
117dd7cddfSDavid du Colombier 	Qlabel,
127dd7cddfSDavid du Colombier 	Qmouse,
137dd7cddfSDavid du Colombier 	Qnew,
147dd7cddfSDavid du Colombier 	Qscreen,
157dd7cddfSDavid du Colombier 	Qsnarf,
167dd7cddfSDavid du Colombier 	Qtext,
177dd7cddfSDavid du Colombier 	Qwctl,
187dd7cddfSDavid du Colombier 	Qwindow,
197dd7cddfSDavid du Colombier 	Qwsys,		/* directory of window directories */
207dd7cddfSDavid du Colombier 	Qwsysdir,		/* window directory, child of wsys */
217dd7cddfSDavid du Colombier 
227dd7cddfSDavid du Colombier 	QMAX,
237dd7cddfSDavid du Colombier };
247dd7cddfSDavid du Colombier 
25*a8453668SDavid du Colombier enum
26*a8453668SDavid du Colombier {
27*a8453668SDavid du Colombier 	Kscrolloneup = KF|0x20,
28*a8453668SDavid du Colombier 	Kscrollonedown = KF|0x21,
29*a8453668SDavid du Colombier };
30*a8453668SDavid du Colombier 
317dd7cddfSDavid du Colombier #define	STACK	8192
327dd7cddfSDavid du Colombier 
337dd7cddfSDavid du Colombier typedef	struct	Consreadmesg Consreadmesg;
347dd7cddfSDavid du Colombier typedef	struct	Conswritemesg Conswritemesg;
357dd7cddfSDavid du Colombier typedef	struct	Stringpair Stringpair;
367dd7cddfSDavid du Colombier typedef	struct	Dirtab Dirtab;
377dd7cddfSDavid du Colombier typedef	struct	Fid Fid;
387dd7cddfSDavid du Colombier typedef	struct	Filsys Filsys;
397dd7cddfSDavid du Colombier typedef	struct	Mouseinfo	Mouseinfo;
407dd7cddfSDavid du Colombier typedef	struct	Mousereadmesg Mousereadmesg;
417dd7cddfSDavid du Colombier typedef	struct	Mousestate	Mousestate;
427dd7cddfSDavid du Colombier typedef	struct	Ref Ref;
437dd7cddfSDavid du Colombier typedef	struct	Timer Timer;
447dd7cddfSDavid du Colombier typedef	struct	Wctlmesg Wctlmesg;
457dd7cddfSDavid du Colombier typedef	struct	Window Window;
467dd7cddfSDavid du Colombier typedef	struct	Xfid Xfid;
477dd7cddfSDavid du Colombier 
487dd7cddfSDavid du Colombier enum
497dd7cddfSDavid du Colombier {
507dd7cddfSDavid du Colombier 	Selborder		= 4,		/* border of selected window */
517dd7cddfSDavid du Colombier 	Unselborder	= 1,		/* border of unselected window */
527dd7cddfSDavid du Colombier 	Scrollwid 		= 12,		/* width of scroll bar */
537dd7cddfSDavid du Colombier 	Scrollgap 		= 4,		/* gap right of scroll bar */
5459cc4ca5SDavid du Colombier 	BIG			= 3,		/* factor by which window dimension can exceed screen */
557dd7cddfSDavid du Colombier 	TRUE		= 1,
567dd7cddfSDavid du Colombier 	FALSE		= 0,
577dd7cddfSDavid du Colombier };
587dd7cddfSDavid du Colombier 
597dd7cddfSDavid du Colombier #define	QID(w,q)	((w<<8)|(q))
609a747e4fSDavid du Colombier #define	WIN(q)	((((ulong)(q).path)>>8) & 0xFFFFFF)
619a747e4fSDavid du Colombier #define	FILE(q)	(((ulong)(q).path) & 0xFF)
627dd7cddfSDavid du Colombier 
637dd7cddfSDavid du Colombier enum	/* control messages */
647dd7cddfSDavid du Colombier {
657dd7cddfSDavid du Colombier 	Wakeup,
667dd7cddfSDavid du Colombier 	Reshaped,
677dd7cddfSDavid du Colombier 	Moved,
687dd7cddfSDavid du Colombier 	Refresh,
697dd7cddfSDavid du Colombier 	Movemouse,
707dd7cddfSDavid du Colombier 	Rawon,
717dd7cddfSDavid du Colombier 	Rawoff,
727dd7cddfSDavid du Colombier 	Holdon,
737dd7cddfSDavid du Colombier 	Holdoff,
747dd7cddfSDavid du Colombier 	Deleted,
757dd7cddfSDavid du Colombier 	Exited,
767dd7cddfSDavid du Colombier };
777dd7cddfSDavid du Colombier 
787dd7cddfSDavid du Colombier struct Wctlmesg
797dd7cddfSDavid du Colombier {
807dd7cddfSDavid du Colombier 	int		type;
817dd7cddfSDavid du Colombier 	Rectangle	r;
827dd7cddfSDavid du Colombier 	Image	*image;
837dd7cddfSDavid du Colombier };
847dd7cddfSDavid du Colombier 
857dd7cddfSDavid du Colombier struct Conswritemesg
867dd7cddfSDavid du Colombier {
877dd7cddfSDavid du Colombier 	Channel	*cw;		/* chan(Stringpair) */
887dd7cddfSDavid du Colombier };
897dd7cddfSDavid du Colombier 
907dd7cddfSDavid du Colombier struct Consreadmesg
917dd7cddfSDavid du Colombier {
927dd7cddfSDavid du Colombier 	Channel	*c1;		/* chan(tuple(char*, int) == Stringpair) */
937dd7cddfSDavid du Colombier 	Channel	*c2;		/* chan(tuple(char*, int) == Stringpair) */
947dd7cddfSDavid du Colombier };
957dd7cddfSDavid du Colombier 
967dd7cddfSDavid du Colombier struct Mousereadmesg
977dd7cddfSDavid du Colombier {
987dd7cddfSDavid du Colombier 	Channel	*cm;		/* chan(Mouse) */
997dd7cddfSDavid du Colombier };
1007dd7cddfSDavid du Colombier 
1017dd7cddfSDavid du Colombier struct Stringpair	/* rune and nrune or byte and nbyte */
1027dd7cddfSDavid du Colombier {
1037dd7cddfSDavid du Colombier 	void		*s;
1047dd7cddfSDavid du Colombier 	int		ns;
1057dd7cddfSDavid du Colombier };
1067dd7cddfSDavid du Colombier 
1077dd7cddfSDavid du Colombier struct Mousestate
1087dd7cddfSDavid du Colombier {
1097dd7cddfSDavid du Colombier 	Mouse;
1107dd7cddfSDavid du Colombier 	ulong	counter;	/* serial no. of mouse event */
1117dd7cddfSDavid du Colombier };
1127dd7cddfSDavid du Colombier 
1137dd7cddfSDavid du Colombier struct Mouseinfo
1147dd7cddfSDavid du Colombier {
1157dd7cddfSDavid du Colombier 	Mousestate	queue[16];
1167dd7cddfSDavid du Colombier 	int	ri;	/* read index into queue */
1177dd7cddfSDavid du Colombier 	int	wi;	/* write index */
1187dd7cddfSDavid du Colombier 	ulong	counter;	/* serial no. of last mouse event we received */
1197dd7cddfSDavid du Colombier 	ulong	lastcounter;	/* serial no. of last mouse event sent to client */
1207dd7cddfSDavid du Colombier 	int	lastb;	/* last button state we received */
1217dd7cddfSDavid du Colombier 	uchar	qfull;	/* filled the queue; no more recording until client comes back */
1227dd7cddfSDavid du Colombier };
1237dd7cddfSDavid du Colombier 
1247dd7cddfSDavid du Colombier struct Window
1257dd7cddfSDavid du Colombier {
1267dd7cddfSDavid du Colombier 	Ref;
1277dd7cddfSDavid du Colombier 	QLock;
1287dd7cddfSDavid du Colombier 	Frame;
1297dd7cddfSDavid du Colombier 	Image		*i;
1307dd7cddfSDavid du Colombier 	Mousectl		mc;
1317dd7cddfSDavid du Colombier 	Mouseinfo	mouse;
1327dd7cddfSDavid du Colombier 	Channel		*ck;			/* chan(Rune[10]) */
1337dd7cddfSDavid du Colombier 	Channel		*cctl;		/* chan(Wctlmesg)[20] */
1347dd7cddfSDavid du Colombier 	Channel		*conswrite;	/* chan(Conswritemesg) */
1357dd7cddfSDavid du Colombier 	Channel		*consread;	/* chan(Consreadmesg) */
1367dd7cddfSDavid du Colombier 	Channel		*mouseread;	/* chan(Mousereadmesg) */
13759cc4ca5SDavid du Colombier 	Channel		*wctlread;		/* chan(Consreadmesg) */
1387dd7cddfSDavid du Colombier 	uint			nr;			/* number of runes in window */
1397dd7cddfSDavid du Colombier 	uint			maxr;		/* number of runes allocated in r */
1407dd7cddfSDavid du Colombier 	Rune			*r;
1417dd7cddfSDavid du Colombier 	uint			nraw;
1427dd7cddfSDavid du Colombier 	Rune			*raw;
1437dd7cddfSDavid du Colombier 	uint			org;
1447dd7cddfSDavid du Colombier 	uint			q0;
1457dd7cddfSDavid du Colombier 	uint			q1;
1467dd7cddfSDavid du Colombier 	uint			qh;
1477dd7cddfSDavid du Colombier 	int			id;
1487dd7cddfSDavid du Colombier 	char			name[32];
1497dd7cddfSDavid du Colombier 	uint			namecount;
1507dd7cddfSDavid du Colombier 	Rectangle		scrollr;
1517dd7cddfSDavid du Colombier 	/*
1527dd7cddfSDavid du Colombier 	 * Rio once used originwindow, so screenr could be different from i->r.
1537dd7cddfSDavid du Colombier 	 * Now they're always the same but the code doesn't assume so.
1547dd7cddfSDavid du Colombier 	*/
1557dd7cddfSDavid du Colombier 	Rectangle		screenr;	/* screen coordinates of window */
1567dd7cddfSDavid du Colombier 	int			resized;
15759cc4ca5SDavid du Colombier 	int			wctlready;
1587dd7cddfSDavid du Colombier 	Rectangle		lastsr;
1597dd7cddfSDavid du Colombier 	int			topped;
1607dd7cddfSDavid du Colombier 	int			notefd;
1617dd7cddfSDavid du Colombier 	uchar		scrolling;
1627dd7cddfSDavid du Colombier 	Cursor		cursor;
1637dd7cddfSDavid du Colombier 	Cursor		*cursorp;
1647dd7cddfSDavid du Colombier 	uchar		holding;
1657dd7cddfSDavid du Colombier 	uchar		rawing;
1667dd7cddfSDavid du Colombier 	uchar		ctlopen;
16759cc4ca5SDavid du Colombier 	uchar		wctlopen;
1687dd7cddfSDavid du Colombier 	uchar		deleted;
1697dd7cddfSDavid du Colombier 	uchar		mouseopen;
1709a747e4fSDavid du Colombier 	char			*label;
1717dd7cddfSDavid du Colombier 	int			pid;
1727dd7cddfSDavid du Colombier 	char			*dir;
1737dd7cddfSDavid du Colombier };
1747dd7cddfSDavid du Colombier 
1757dd7cddfSDavid du Colombier int		winborder(Window*, Point);
1767dd7cddfSDavid du Colombier void		winctl(void*);
1777dd7cddfSDavid du Colombier void		winshell(void*);
1787dd7cddfSDavid du Colombier Window*	wlookid(int);
1793ff48bf5SDavid du Colombier Window*	wmk(Image*, Mousectl*, Channel*, Channel*, int);
1807dd7cddfSDavid du Colombier Window*	wpointto(Point);
1817dd7cddfSDavid du Colombier Window*	wtop(Point);
1827dd7cddfSDavid du Colombier void		wtopme(Window*);
1837dd7cddfSDavid du Colombier void		wbottomme(Window*);
1847dd7cddfSDavid du Colombier char*	wcontents(Window*, int*);
1857dd7cddfSDavid du Colombier int		wbswidth(Window*, Rune);
1867dd7cddfSDavid du Colombier int		wclickmatch(Window*, int, int, int, uint*);
1877dd7cddfSDavid du Colombier int		wclose(Window*);
1887dd7cddfSDavid du Colombier int		wctlmesg(Window*, int, Rectangle, Image*);
1897dd7cddfSDavid du Colombier int		wctlmesg(Window*, int, Rectangle, Image*);
1907dd7cddfSDavid du Colombier uint		wbacknl(Window*, uint, uint);
1917dd7cddfSDavid du Colombier uint		winsert(Window*, Rune*, int, uint);
1927dd7cddfSDavid du Colombier void		waddraw(Window*, Rune*, int);
1937dd7cddfSDavid du Colombier void		wborder(Window*, int);
1947dd7cddfSDavid du Colombier void		wclosewin(Window*);
1957dd7cddfSDavid du Colombier void		wcurrent(Window*);
1967dd7cddfSDavid du Colombier void		wcut(Window*);
1977dd7cddfSDavid du Colombier void		wdelete(Window*, uint, uint);
1987dd7cddfSDavid du Colombier void		wdoubleclick(Window*, uint*, uint*);
1997dd7cddfSDavid du Colombier void		wfill(Window*);
2007dd7cddfSDavid du Colombier void		wframescroll(Window*, int);
2017dd7cddfSDavid du Colombier void		wkeyctl(Window*, Rune);
2027dd7cddfSDavid du Colombier void		wmousectl(Window*);
2037dd7cddfSDavid du Colombier void		wmovemouse(Window*, Point);
2047dd7cddfSDavid du Colombier void		wpaste(Window*);
2057dd7cddfSDavid du Colombier void		wplumb(Window*);
2067dd7cddfSDavid du Colombier void		wrefresh(Window*, Rectangle);
2077dd7cddfSDavid du Colombier void		wrepaint(Window*);
2087dd7cddfSDavid du Colombier void		wresize(Window*, Image*, int);
2097dd7cddfSDavid du Colombier void		wscrdraw(Window*);
2107dd7cddfSDavid du Colombier void		wscroll(Window*, int);
2117dd7cddfSDavid du Colombier void		wselect(Window*);
2127dd7cddfSDavid du Colombier void		wsendctlmesg(Window*, int, Rectangle, Image*);
2137dd7cddfSDavid du Colombier void		wsetcursor(Window*, int);
2147dd7cddfSDavid du Colombier void		wsetname(Window*);
2157dd7cddfSDavid du Colombier void		wsetorigin(Window*, uint, int);
2169a747e4fSDavid du Colombier void		wsetpid(Window*, int, int);
2177dd7cddfSDavid du Colombier void		wsetselect(Window*, uint, uint);
2187dd7cddfSDavid du Colombier void		wshow(Window*, uint);
2197dd7cddfSDavid du Colombier void		wsnarf(Window*);
2207dd7cddfSDavid du Colombier void 		wscrsleep(Window*, uint);
2217dd7cddfSDavid du Colombier void		wsetcols(Window*);
2227dd7cddfSDavid du Colombier 
2237dd7cddfSDavid du Colombier struct Dirtab
2247dd7cddfSDavid du Colombier {
2257dd7cddfSDavid du Colombier 	char		*name;
2269a747e4fSDavid du Colombier 	uchar	type;
2277dd7cddfSDavid du Colombier 	uint		qid;
2287dd7cddfSDavid du Colombier 	uint		perm;
2297dd7cddfSDavid du Colombier };
2307dd7cddfSDavid du Colombier 
2317dd7cddfSDavid du Colombier struct Fid
2327dd7cddfSDavid du Colombier {
2337dd7cddfSDavid du Colombier 	int		fid;
2347dd7cddfSDavid du Colombier 	int		busy;
2357dd7cddfSDavid du Colombier 	int		open;
2367dd7cddfSDavid du Colombier 	int		mode;
2377dd7cddfSDavid du Colombier 	Qid		qid;
2387dd7cddfSDavid du Colombier 	Window	*w;
2397dd7cddfSDavid du Colombier 	Dirtab	*dir;
2407dd7cddfSDavid du Colombier 	Fid		*next;
2417dd7cddfSDavid du Colombier 	int		nrpart;
2427dd7cddfSDavid du Colombier 	uchar	rpart[UTFmax];
2437dd7cddfSDavid du Colombier };
2447dd7cddfSDavid du Colombier 
2457dd7cddfSDavid du Colombier struct Xfid
2467dd7cddfSDavid du Colombier {
2477dd7cddfSDavid du Colombier 		Ref;
2487dd7cddfSDavid du Colombier 		Xfid		*next;
2497dd7cddfSDavid du Colombier 		Xfid		*free;
2507dd7cddfSDavid du Colombier 		Fcall;
2517dd7cddfSDavid du Colombier 		Channel	*c;	/* chan(void(*)(Xfid*)) */
2527dd7cddfSDavid du Colombier 		Fid		*f;
2539a747e4fSDavid du Colombier 		uchar	*buf;
2547dd7cddfSDavid du Colombier 		Filsys	*fs;
2557dd7cddfSDavid du Colombier 		QLock	active;
25680ee5cbfSDavid du Colombier 		int		flushing;	/* another Xfid is trying to flush us */
25780ee5cbfSDavid du Colombier 		int		flushtag;	/* our tag, so flush can find us */
25880ee5cbfSDavid du Colombier 		Channel	*flushc;	/* channel(int) to notify us we're being flushed */
2597dd7cddfSDavid du Colombier };
2607dd7cddfSDavid du Colombier 
2617dd7cddfSDavid du Colombier Channel*	xfidinit(void);
2627dd7cddfSDavid du Colombier void		xfidctl(void*);
2637dd7cddfSDavid du Colombier void		xfidflush(Xfid*);
2647dd7cddfSDavid du Colombier void		xfidattach(Xfid*);
2657dd7cddfSDavid du Colombier void		xfidopen(Xfid*);
2667dd7cddfSDavid du Colombier void		xfidclose(Xfid*);
2677dd7cddfSDavid du Colombier void		xfidread(Xfid*);
2687dd7cddfSDavid du Colombier void		xfidwrite(Xfid*);
2697dd7cddfSDavid du Colombier 
2707dd7cddfSDavid du Colombier enum
2717dd7cddfSDavid du Colombier {
2727dd7cddfSDavid du Colombier 	Nhash	= 16,
2737dd7cddfSDavid du Colombier };
2747dd7cddfSDavid du Colombier 
2757dd7cddfSDavid du Colombier struct Filsys
2767dd7cddfSDavid du Colombier {
2777dd7cddfSDavid du Colombier 		int		cfd;
2787dd7cddfSDavid du Colombier 		int		sfd;
2797dd7cddfSDavid du Colombier 		int		pid;
2809a747e4fSDavid du Colombier 		char		*user;
2817dd7cddfSDavid du Colombier 		Channel	*cxfidalloc;	/* chan(Xfid*) */
2827dd7cddfSDavid du Colombier 		Fid		*fids[Nhash];
2837dd7cddfSDavid du Colombier };
2847dd7cddfSDavid du Colombier 
2857dd7cddfSDavid du Colombier Filsys*	filsysinit(Channel*);
2867dd7cddfSDavid du Colombier int		filsysmount(Filsys*, int);
2877dd7cddfSDavid du Colombier Xfid*		filsysrespond(Filsys*, Xfid*, Fcall*, char*);
2887dd7cddfSDavid du Colombier void		filsyscancel(Xfid*);
2897dd7cddfSDavid du Colombier 
2907dd7cddfSDavid du Colombier void		wctlproc(void*);
2917dd7cddfSDavid du Colombier void		wctlthread(void*);
2927dd7cddfSDavid du Colombier 
2937dd7cddfSDavid du Colombier void		deletetimeoutproc(void*);
2947dd7cddfSDavid du Colombier 
2957dd7cddfSDavid du Colombier struct Timer
2967dd7cddfSDavid du Colombier {
2977dd7cddfSDavid du Colombier 	int		dt;
2987dd7cddfSDavid du Colombier 	int		cancel;
2997dd7cddfSDavid du Colombier 	Channel	*c;	/* chan(int) */
3007dd7cddfSDavid du Colombier 	Timer	*next;
3017dd7cddfSDavid du Colombier };
3027dd7cddfSDavid du Colombier 
3037dd7cddfSDavid du Colombier Font		*font;
3047dd7cddfSDavid du Colombier Mousectl	*mousectl;
3057dd7cddfSDavid du Colombier Mouse	*mouse;
3067dd7cddfSDavid du Colombier Keyboardctl	*keyboardctl;
3077dd7cddfSDavid du Colombier Display	*display;
3087dd7cddfSDavid du Colombier Image	*view;
3097dd7cddfSDavid du Colombier Screen	*wscreen;
3107dd7cddfSDavid du Colombier Cursor	boxcursor;
3117dd7cddfSDavid du Colombier Cursor	crosscursor;
3127dd7cddfSDavid du Colombier Cursor	sightcursor;
3137dd7cddfSDavid du Colombier Cursor	whitearrow;
3147dd7cddfSDavid du Colombier Cursor	query;
3157dd7cddfSDavid du Colombier Cursor	*corners[9];
3167dd7cddfSDavid du Colombier Image	*background;
3177dd7cddfSDavid du Colombier Image	*lightgrey;
3187dd7cddfSDavid du Colombier Image	*red;
3197dd7cddfSDavid du Colombier Window	**window;
32080ee5cbfSDavid du Colombier Window	*wkeyboard;	/* window of simulated keyboard */
3217dd7cddfSDavid du Colombier int		nwindow;
3227dd7cddfSDavid du Colombier int		snarffd;
3237dd7cddfSDavid du Colombier Window	*input;
3247dd7cddfSDavid du Colombier QLock	all;			/* BUG */
3257dd7cddfSDavid du Colombier Filsys	*filsys;
3267dd7cddfSDavid du Colombier Window	*hidden[100];
3277dd7cddfSDavid du Colombier int		nhidden;
3287dd7cddfSDavid du Colombier int		nsnarf;
3297dd7cddfSDavid du Colombier Rune*	snarf;
3307dd7cddfSDavid du Colombier int		scrolling;
3317dd7cddfSDavid du Colombier int		maxtab;
3327dd7cddfSDavid du Colombier Channel*	winclosechan;
3337dd7cddfSDavid du Colombier Channel*	deletechan;
3347dd7cddfSDavid du Colombier char		*startdir;
3357dd7cddfSDavid du Colombier int		sweeping;
3367dd7cddfSDavid du Colombier int		wctlfd;
3377dd7cddfSDavid du Colombier char		srvpipe[];
3387dd7cddfSDavid du Colombier char		srvwctl[];
3397dd7cddfSDavid du Colombier int		errorshouldabort;
34059cc4ca5SDavid du Colombier int		menuing;		/* menu action is pending; waiting for window to be indicated */
34180ee5cbfSDavid du Colombier int		snarfversion;	/* updated each time it is written */
3429a747e4fSDavid du Colombier int		messagesize;		/* negotiated in 9P version setup */
343