363 lines · 7.3 KB · C
RawDownload
enum{	Qdir,			/* /dev for this window */	Qcons,	Qconsctl,	Qcursor,	Qwdir,	Qwinid,	Qwinname,	Qlabel,	Qkbd,	Qmouse,	Qnew,	Qscreen,	Qsnarf,	Qtext,	Qwctl,	Qwindow,	Qwsys,		/* directory of window directories */	Qwsysdir,		/* window directory, child of wsys */ 	QMAX,}; #define	STACK	8192#define	MAXSNARF	100*1024 typedef	struct	Consreadmesg Consreadmesg;typedef	struct	Conswritemesg Conswritemesg;typedef struct	Kbdreadmesg Kbdreadmesg;typedef	struct	Stringpair Stringpair;typedef	struct	Dirtab Dirtab;typedef	struct	Fid Fid;typedef	struct	Filsys Filsys;typedef	struct	Mouseinfo	Mouseinfo;typedef	struct	Mousereadmesg Mousereadmesg;typedef	struct	Mousestate	Mousestate;typedef	struct	Ref Ref;typedef	struct	Timer Timer;typedef	struct	Wctlmesg Wctlmesg;typedef	struct	Window Window;typedef	struct	Xfid Xfid; enum{//	Selborder		= 4,		/* border of selected window */	Unselborder	= 1,		/* border of unselected window */	Scrollwid 		= 12,		/* width of scroll bar */	Scrollgap 		= 4,		/* gap right of scroll bar */	BIG			= 3,		/* factor by which window dimension can exceed screen */	TRUE		= 1,	FALSE		= 0,}; #define	QID(w,q)	((w<<8)|(q))#define	WIN(q)	((((ulong)(q).path)>>8) & 0xFFFFFF)#define	FILE(q)	(((ulong)(q).path) & 0xFF) enum	/* control messages */{	Wakeup,	Reshaped,	Topped,	Repaint,	Refresh,	Movemouse,	Rawon,	Rawoff,	Holdon,	Holdoff,	Truncate,	Deleted,	Exited,}; struct Wctlmesg{	int		type;	Rectangle	r;	void		*p;}; struct Conswritemesg{	Channel	*cw;		/* chan(Stringpair) */}; struct Consreadmesg{	Channel	*c1;		/* chan(tuple(char*, int) == Stringpair) */	Channel	*c2;		/* chan(tuple(char*, int) == Stringpair) */}; struct Mousereadmesg{	Channel	*cm;		/* chan(Mouse) */}; struct Stringpair	/* rune and nrune or byte and nbyte */{	void		*s;	int		ns;}; struct Mousestate{	Mouse;	ulong	counter;	/* serial no. of mouse event */}; struct Mouseinfo{	Mousestate	queue[16];	int	ri;	/* read index into queue */	int	wi;	/* write index */	ulong	counter;	/* serial no. of last mouse event we received */	ulong	lastcounter;	/* serial no. of last mouse event sent to client */	int	lastb;	/* last button state we received */	uchar	qfull;	/* filled the queue; no more recording until client comes back */	};	 struct Window{	Ref;	QLock;	Frame;	Image		*i;		/* window image, nil when deleted */	Mousectl	mc;	Mouseinfo	mouse;	Channel		*ck;		/* chan(char*) */	Channel		*cctl;		/* chan(Wctlmesg)[4] */	Channel		*conswrite;	/* chan(Conswritemesg) */	Channel		*consread;	/* chan(Consreadmesg) */	Channel		*mouseread;	/* chan(Mousereadmesg) */	Channel		*wctlread;	/* chan(Consreadmesg) */	Channel		*kbdread;	/* chan(Consreadmesg) */	Channel		*complete;	/* chan(Completion*) */	Channel		*gone;		/* chan(char*) */	uint			nr;			/* number of runes in window */	uint			maxr;		/* number of runes allocated in r */	Rune			*r;	uint			nraw;	Rune			*raw;	uint			org;	uint			q0;	uint			q1;	uint			qh;	int			id;	char			name[32];	uint			namecount;	Rectangle		scrollr;	/*	 * Rio once used originwindow, so screenr could be different from i->r.	 * Now they're always the same but the code doesn't assume so.	*/	Rectangle		screenr;	/* screen coordinates of window */	int			resized;	int			wctlready;	Rectangle		lastsr;	int			topped;	int			notefd;	uchar		scrolling;	Cursor		cursor;	Cursor		*cursorp;	uchar		holding;	uchar		rawing;	uchar		ctlopen;	uchar		wctlopen;	uchar		deleted;	uchar		mouseopen;	uchar		kbdopen;	char			*label;	char			*dir;}; int		Selborder;ulong	bgtrans;ulong	borderactivecolor;ulong	borderbgcolor;ulong	textcolor;ulong	winbgcolor;ulong	scrollbarcolor;void		winctl(void*);void		winshell(void*);Window*	wlookid(int);Window*	wmk(Image*, Mousectl*, Channel*, Channel*, int);Window*	wpointto(Point);Window*	wtop(Point);void		wtopme(Window*);void		wbottomme(Window*);char*	wcontents(Window*, int*);int		wbswidth(Window*, Rune);int		wclickmatch(Window*, int, int, int, uint*);int		wclose(Window*);int		wctlmesg(Window*, int, Rectangle, void*);uint		wbacknl(Window*, uint, uint);uint		winsert(Window*, Rune*, int, uint);void		waddraw(Window*, Rune*, int);void		wborder(Window*, int);void		wclunk(Window*);void		wclosewin(Window*);void		wcurrent(Window*);void		wcut(Window*);void		wdelete(Window*, uint, uint);void		wdoubleclick(Window*, uint*, uint*);void		wfill(Window*);void		wframescroll(Window*, int);void		wkeyctl(Window*, Rune);void		wmousectl(Window*);void		wmovemouse(Window*, Point);void		wpaste(Window*);void		wplumb(Window*);void		wlook(Window*);void		wrefresh(Window*);void		wrepaint(Window*);void		wresize(Window*, Image*);void		wscrdraw(Window*);void		wscroll(Window*, int);void		wselect(Window*);void		wsendctlmesg(Window*, int, Rectangle, void*);void		wsetcursor(Window*, int);void		wsetname(Window*);void		wsetorigin(Window*, uint, int);void		wsetpid(Window*, int, int);void		wsetselect(Window*, uint, uint);void		wshow(Window*, uint);void		wsnarf(Window*);void 		wscrsleep(Window*, uint);void		wsetcols(Window*, int); struct Dirtab{	char		*name;	uchar	type;	uint		qid;	uint		perm;}; struct Fid{	int		fid;	int		busy;	int		open;	int		mode;	Qid		qid;	Window	*w;	Dirtab	*dir;	Fid		*next;	int		nrpart;	uchar	rpart[UTFmax];}; struct Xfid{		Ref;		Xfid		*next;		Xfid		*free;		Fcall;		Channel	*c;	/* chan(void(*)(Xfid*)) */		Fid		*f;		uchar	*buf;		Filsys	*fs;		int		flushtag;	/* our tag, so flush can find us */		Channel	*flushc;	/* channel(int) to notify us we're being flushed */}; Channel*	xfidinit(void);void		xfidctl(void*);void		xfidflush(Xfid*);void		xfidattach(Xfid*);void		xfidopen(Xfid*);void		xfidclose(Xfid*);void		xfidread(Xfid*);void		xfidwrite(Xfid*); enum{	Nhash	= 16,}; struct Filsys{		int		cfd;		int		sfd;		int		pid;		char		*user;		Channel	*cxfidalloc;	/* chan(Xfid*) */		Channel	*csyncflush;	/* chan(int) */		Fid		*fids[Nhash];}; Filsys*	filsysinit(Channel*);int		filsysmount(Filsys*, int);Xfid*		filsysrespond(Filsys*, Xfid*, Fcall*, char*);void		filsyscancel(Xfid*); void		wctlproc(void*);void		wctlthread(void*); void		deletetimeoutproc(void*); struct Timer{	int		dt;	int		cancel;	Channel	*c;	/* chan(int) */	Timer	*next;}; Font		*font;Mousectl	*mousectl;Mouse	*mouse;Display	*display;Image	*view;Screen	*wscreen;Cursor	boxcursor;Cursor	crosscursor;Cursor	sightcursor;Cursor	deletecursor;Cursor	whitearrow;Cursor	query;Cursor	*corners[9]; Image	*background;Image	*cols[NCOL];Image	*titlecol;Image	*lighttitlecol;Image	*dholdcol;Image	*holdcol;Image	*lightholdcol;Image	*paleholdcol;Image	*paletextcol;Image	*sizecol;int	reverse;	/* there are no pastel paints in the dungeons and dragons world -- rob pike */ Window	**window;Window	*wkeyboard;	/* window of simulated keyboard */int		nwindow;int		snarffd;int		gotscreen;int		servekbd;Window	*input;QLock	all;			/* BUG */Filsys	*filsys;Window	*hidden[100];int		nhidden;int		nsnarf;Rune*	snarf;int		scrolling;int		maxtab;Channel*	winclosechan;char		*startdir;int		sweeping;int		wctlfd;char		srvpipe[];char		srvwctl[];int		errorshouldabort;int		menuing;		/* menu action is pending; waiting for window to be indicated */int		deleting;		/* for changing cursor in pointto() */int		snarfversion;	/* updated each time it is written */int		messagesize;		/* negotiated in 9P version setup */int		shiftdown;int		debug;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t