1 #define STACK 32768 2 #undef Borderwidth 3 #define Borderwidth 0 4 5 #undef TRUE /* OS X */ 6 #undef FALSE 7 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; 18 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 }; 29 30 enum 31 { 32 Kscrolloneup = KF|0x20, 33 Kscrollonedown = KF|0x21 34 }; 35 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 }; 50 51 struct Wctlmesg 52 { 53 int type; 54 Rectangle r; 55 Image *image; 56 }; 57 58 struct Conswritemesg 59 { 60 Channel *cw; /* chan(Stringpair) */ 61 }; 62 63 struct Consreadmesg 64 { 65 Channel *c1; /* chan(tuple(char*, int) == Stringpair) */ 66 Channel *c2; /* chan(tuple(char*, int) == Stringpair) */ 67 }; 68 69 struct Mousereadmesg 70 { 71 Channel *cm; /* chan(Mouse) */ 72 }; 73 74 struct Stringpair /* rune and nrune or byte and nbyte */ 75 { 76 void *s; 77 int ns; 78 }; 79 80 struct Mousestate 81 { 82 Mouse m; 83 ulong counter; /* serial no. of mouse event */ 84 }; 85 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 }; 96 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 uint iq1; /* last input position */ 121 int id; 122 char name[32]; 123 uint namecount; 124 Rectangle scrollr; 125 /* 126 * Rio once used originwindow, so screenr could be different from i->r. 127 * Now they're always the same but the code doesn't assume so. 128 */ 129 Rectangle screenr; /* screen coordinates of window */ 130 int resized; 131 int wctlready; 132 Rectangle lastsr; 133 int topped; 134 int notefd; 135 uchar scrolling; 136 Cursor cursor; 137 Cursor *cursorp; 138 uchar holding; 139 uchar rawing; 140 uchar ctlopen; 141 uchar wctlopen; 142 uchar deleted; 143 uchar mouseopen; 144 char *label; 145 int pid; 146 char *dir; 147 }; 148 149 int winborder(Window*, Point); 150 void winctl(void*); 151 void winshell(void*); 152 Window* wlookid(int); 153 Window* wmk(Image*, Mousectl*, Channel*, Channel*, int); 154 Window* wpointto(Point); 155 Window* wtop(Point); 156 void wtopme(Window*); 157 void wbottomme(Window*); 158 char* wcontents(Window*, int*); 159 int wbswidth(Window*, Rune); 160 int wclickmatch(Window*, int, int, int, uint*); 161 int wclose(Window*); 162 int wctlmesg(Window*, int, Rectangle, Image*); 163 int wctlmesg(Window*, int, Rectangle, Image*); 164 uint wbacknl(Window*, uint, uint); 165 uint winsert(Window*, Rune*, int, uint); 166 void waddraw(Window*, Rune*, int); 167 void wborder(Window*, int); 168 void wclosewin(Window*); 169 void wcurrent(Window*); 170 void wcut(Window*); 171 void wdelete(Window*, uint, uint); 172 void wdoubleclick(Window*, uint*, uint*); 173 void wfill(Window*); 174 void wframescroll(Window*, int); 175 void wkeyctl(Window*, Rune); 176 void wmousectl(Window*); 177 void wmovemouse(Window*, Point); 178 void wpaste(Window*); 179 void wplumb(Window*); 180 void wlook(Window*); 181 void wrefresh(Window*, Rectangle); 182 void wrepaint(Window*); 183 void wresize(Window*, Image*, int); 184 void wscrdraw(Window*); 185 void wscroll(Window*, int); 186 void wselect(Window*); 187 void wsendctlmesg(Window*, int, Rectangle, Image*); 188 void wsetcursor(Window*, int); 189 void wsetname(Window*); 190 void wsetorigin(Window*, uint, int); 191 void wsetpid(Window*, int, int); 192 void wsetselect(Window*, uint, uint); 193 void wshow(Window*, uint); 194 void wsnarf(Window*); 195 void wscrsleep(Window*, uint); 196 void wsetcols(Window*); 197 198 void deletetimeoutproc(void*); 199 200 struct Timer 201 { 202 int dt; 203 int cancel; 204 Channel *c; /* chan(int) */ 205 Timer *next; 206 }; 207 208 #ifndef Extern 209 #define Extern extern 210 #endif 211 212 Extern Font *font; 213 Extern Mousectl *mousectl; 214 Extern Mouse *mouse; 215 Extern Keyboardctl *keyboardctl; 216 Extern Display *display; 217 Extern Image *view; 218 Extern Screen *wscreen; 219 Extern Cursor boxcursor; 220 Extern Cursor crosscursor; 221 Extern Cursor sightcursor; 222 Extern Cursor whitearrow; 223 Extern Cursor query; 224 Extern Cursor *corners[9]; 225 Extern Image *background; 226 Extern Image *lightgrey; 227 Extern Image *red; 228 Extern Window **window; 229 Extern Window *wkeyboard; /* window of simulated keyboard */ 230 Extern int nwindow; 231 Extern int snarffd; 232 Extern Window *input; 233 Extern QLock all; /* BUG */ 234 Extern Window *hidden[100]; 235 Extern int nhidden; 236 Extern int nsnarf; 237 Extern Rune* snarf; 238 Extern int scrolling; 239 Extern int maxtab; 240 Extern Channel* winclosechan; 241 Extern Channel* deletechan; 242 Extern char *startdir; 243 Extern int sweeping; 244 Extern int wctlfd; 245 Extern int errorshouldabort; 246 Extern int menuing; /* menu action is pending; waiting for window to be indicated */ 247 Extern int snarfversion; /* updated each time it is written */ 248 Extern int messagesize; /* negotiated in 9P version setup */ 249