Blob


1 #define STACK 32768
2 #undef Borderwidth
3 #define Borderwidth 0
5 #undef TRUE /* OS X */
6 #undef FALSE
8 typedef struct Consreadmesg Consreadmesg;
9 typedef struct Conswritemesg Conswritemesg;
10 typedef struct Stringpair Stringpair;
11 typedef struct Dirtab Dirtab;
12 typedef struct Mouseinfo Mouseinfo;
13 typedef struct Mousereadmesg Mousereadmesg;
14 typedef struct Mousestate Mousestate;
15 typedef struct Timer Timer;
16 typedef struct Wctlmesg Wctlmesg;
17 typedef struct Window Window;
19 enum
20 {
21 Selborder = 0, /* border of selected window */
22 Unselborder = 0, /* border of unselected window */
23 Scrollwid = 12, /* width of scroll bar */
24 Scrollgap = 4, /* gap right of scroll bar */
25 BIG = 3, /* factor by which window dimension can exceed screen */
26 TRUE = 1,
27 FALSE = 0
28 };
30 enum
31 {
32 Kscrolloneup = KF|0x20,
33 Kscrollonedown = KF|0x21
34 };
36 enum /* control messages */
37 {
38 Wakeup,
39 Reshaped,
40 Moved,
41 Refresh,
42 Movemouse,
43 Rawon,
44 Rawoff,
45 Holdon,
46 Holdoff,
47 Deleted,
48 Exited
49 };
51 struct Wctlmesg
52 {
53 int type;
54 Rectangle r;
55 Image *image;
56 };
58 struct Conswritemesg
59 {
60 Channel *cw; /* chan(Stringpair) */
61 };
63 struct Consreadmesg
64 {
65 Channel *c1; /* chan(tuple(char*, int) == Stringpair) */
66 Channel *c2; /* chan(tuple(char*, int) == Stringpair) */
67 };
69 struct Mousereadmesg
70 {
71 Channel *cm; /* chan(Mouse) */
72 };
74 struct Stringpair /* rune and nrune or byte and nbyte */
75 {
76 void *s;
77 int ns;
78 };
80 struct Mousestate
81 {
82 Mouse m;
83 ulong counter; /* serial no. of mouse event */
84 };
86 struct Mouseinfo
87 {
88 Mousestate queue[16];
89 int ri; /* read index into queue */
90 int wi; /* write index */
91 ulong counter; /* serial no. of last mouse event we received */
92 ulong lastcounter; /* serial no. of last mouse event sent to client */
93 int lastb; /* last button state we received */
94 uchar qfull; /* filled the queue; no more recording until client comes back */
95 };
97 struct Window
98 {
99 Ref ref;
100 QLock lk;
101 Frame f;
102 Image *i;
103 Mousectl mc;
104 Mouseinfo mouse;
105 Channel *ck; /* chan(Rune[10]) */
106 Channel *cctl; /* chan(Wctlmesg)[20] */
107 Channel *conswrite; /* chan(Conswritemesg) */
108 Channel *consread; /* chan(Consreadmesg) */
109 Channel *mouseread; /* chan(Mousereadmesg) */
110 Channel *wctlread; /* chan(Consreadmesg) */
111 uint nr; /* number of runes in window */
112 uint maxr; /* number of runes allocated in r */
113 Rune *r;
114 uint nraw;
115 Rune *raw;
116 uint org;
117 uint q0;
118 uint q1;
119 uint qh;
120 int id;
121 char name[32];
122 uint namecount;
123 Rectangle scrollr;
124 /*
125 * Rio once used originwindow, so screenr could be different from i->r.
126 * Now they're always the same but the code doesn't assume so.
127 */
128 Rectangle screenr; /* screen coordinates of window */
129 int resized;
130 int wctlready;
131 Rectangle lastsr;
132 int topped;
133 int notefd;
134 uchar scrolling;
135 Cursor cursor;
136 Cursor *cursorp;
137 uchar holding;
138 uchar rawing;
139 uchar ctlopen;
140 uchar wctlopen;
141 uchar deleted;
142 uchar mouseopen;
143 char *label;
144 int pid;
145 char *dir;
146 };
148 int winborder(Window*, Point);
149 void winctl(void*);
150 void winshell(void*);
151 Window* wlookid(int);
152 Window* wmk(Image*, Mousectl*, Channel*, Channel*, int);
153 Window* wpointto(Point);
154 Window* wtop(Point);
155 void wtopme(Window*);
156 void wbottomme(Window*);
157 char* wcontents(Window*, int*);
158 int wbswidth(Window*, Rune);
159 int wclickmatch(Window*, int, int, int, uint*);
160 int wclose(Window*);
161 int wctlmesg(Window*, int, Rectangle, Image*);
162 int wctlmesg(Window*, int, Rectangle, Image*);
163 uint wbacknl(Window*, uint, uint);
164 uint winsert(Window*, Rune*, int, uint);
165 void waddraw(Window*, Rune*, int);
166 void wborder(Window*, int);
167 void wclosewin(Window*);
168 void wcurrent(Window*);
169 void wcut(Window*);
170 void wdelete(Window*, uint, uint);
171 void wdoubleclick(Window*, uint*, uint*);
172 void wfill(Window*);
173 void wframescroll(Window*, int);
174 void wkeyctl(Window*, Rune);
175 void wmousectl(Window*);
176 void wmovemouse(Window*, Point);
177 void wpaste(Window*);
178 void wplumb(Window*);
179 void wrefresh(Window*, Rectangle);
180 void wrepaint(Window*);
181 void wresize(Window*, Image*, int);
182 void wscrdraw(Window*);
183 void wscroll(Window*, int);
184 void wselect(Window*);
185 void wsendctlmesg(Window*, int, Rectangle, Image*);
186 void wsetcursor(Window*, int);
187 void wsetname(Window*);
188 void wsetorigin(Window*, uint, int);
189 void wsetpid(Window*, int, int);
190 void wsetselect(Window*, uint, uint);
191 void wshow(Window*, uint);
192 void wsnarf(Window*);
193 void wscrsleep(Window*, uint);
194 void wsetcols(Window*);
196 void deletetimeoutproc(void*);
198 struct Timer
200 int dt;
201 int cancel;
202 Channel *c; /* chan(int) */
203 Timer *next;
204 };
206 #ifndef Extern
207 #define Extern extern
208 #endif
210 Extern Font *font;
211 Extern Mousectl *mousectl;
212 Extern Mouse *mouse;
213 Extern Keyboardctl *keyboardctl;
214 Extern Display *display;
215 Extern Image *view;
216 Extern Screen *wscreen;
217 Extern Cursor boxcursor;
218 Extern Cursor crosscursor;
219 Extern Cursor sightcursor;
220 Extern Cursor whitearrow;
221 Extern Cursor query;
222 Extern Cursor *corners[9];
223 Extern Image *background;
224 Extern Image *lightgrey;
225 Extern Image *red;
226 Extern Window **window;
227 Extern Window *wkeyboard; /* window of simulated keyboard */
228 Extern int nwindow;
229 Extern int snarffd;
230 Extern Window *input;
231 Extern QLock all; /* BUG */
232 Extern Window *hidden[100];
233 Extern int nhidden;
234 Extern int nsnarf;
235 Extern Rune* snarf;
236 Extern int scrolling;
237 Extern int maxtab;
238 Extern Channel* winclosechan;
239 Extern Channel* deletechan;
240 Extern char *startdir;
241 Extern int sweeping;
242 Extern int wctlfd;
243 Extern int errorshouldabort;
244 Extern int menuing; /* menu action is pending; waiting for window to be indicated */
245 Extern int snarfversion; /* updated each time it is written */
246 Extern int messagesize; /* negotiated in 9P version setup */