1*219b2ee8SDavid du Colombier enum 2*219b2ee8SDavid du Colombier { 3*219b2ee8SDavid du Colombier Qdir, 4*219b2ee8SDavid du Colombier Qacme, 5*219b2ee8SDavid du Colombier Qcons, 6*219b2ee8SDavid du Colombier Qconsctl, 7*219b2ee8SDavid du Colombier Qindex, 8*219b2ee8SDavid du Colombier Qlabel, 9*219b2ee8SDavid du Colombier Qnew, 10*219b2ee8SDavid du Colombier 11*219b2ee8SDavid du Colombier QWaddr, 12*219b2ee8SDavid du Colombier QWbody, 13*219b2ee8SDavid du Colombier QWctl, 14*219b2ee8SDavid du Colombier QWdata, 15*219b2ee8SDavid du Colombier QWevent, 16*219b2ee8SDavid du Colombier QWtag, 17*219b2ee8SDavid du Colombier QMAX, 18*219b2ee8SDavid du Colombier }; 19*219b2ee8SDavid du Colombier 20*219b2ee8SDavid du Colombier enum 21*219b2ee8SDavid du Colombier { 22*219b2ee8SDavid du Colombier Blockincr = 256, 23*219b2ee8SDavid du Colombier Maxblock = 8*1024, 24*219b2ee8SDavid du Colombier NRange = 10, 25*219b2ee8SDavid du Colombier Infinity = 0x7FFFFFFF, /* huge value for regexp address */ 26*219b2ee8SDavid du Colombier }; 27*219b2ee8SDavid du Colombier 28*219b2ee8SDavid du Colombier typedef adt Column; 29*219b2ee8SDavid du Colombier typedef adt Row; 30*219b2ee8SDavid du Colombier typedef adt Text; 31*219b2ee8SDavid du Colombier typedef adt Window; 32*219b2ee8SDavid du Colombier typedef adt Xfid; 33*219b2ee8SDavid du Colombier typedef adt Reffont; 34*219b2ee8SDavid du Colombier typedef aggr Dirlist; 35*219b2ee8SDavid du Colombier typedef aggr Range; 36*219b2ee8SDavid du Colombier typedef aggr Mntdir; 37*219b2ee8SDavid du Colombier 38*219b2ee8SDavid du Colombier aggr Range 39*219b2ee8SDavid du Colombier { 40*219b2ee8SDavid du Colombier int q0; 41*219b2ee8SDavid du Colombier int q1; 42*219b2ee8SDavid du Colombier }; 43*219b2ee8SDavid du Colombier 44*219b2ee8SDavid du Colombier aggr Block 45*219b2ee8SDavid du Colombier { 46*219b2ee8SDavid du Colombier uint addr; /* disk address in bytes */ 47*219b2ee8SDavid du Colombier union 48*219b2ee8SDavid du Colombier { 49*219b2ee8SDavid du Colombier uint n; /* number of used runes in block */ 50*219b2ee8SDavid du Colombier Block *next; /* pointer to next in free list */ 51*219b2ee8SDavid du Colombier }; 52*219b2ee8SDavid du Colombier }; 53*219b2ee8SDavid du Colombier 54*219b2ee8SDavid du Colombier adt Disk 55*219b2ee8SDavid du Colombier { 56*219b2ee8SDavid du Colombier int fd; 57*219b2ee8SDavid du Colombier uint addr; /* length of temp file */ 58*219b2ee8SDavid du Colombier Block *free[Maxblock/Blockincr+1]; 59*219b2ee8SDavid du Colombier 60*219b2ee8SDavid du Colombier Disk* init(); 61*219b2ee8SDavid du Colombier Block* new(*Disk, uint); 62*219b2ee8SDavid du Colombier void release(*Disk, Block*); 63*219b2ee8SDavid du Colombier void read(*Disk, Block*, Rune*, uint); 64*219b2ee8SDavid du Colombier void write(*Disk, Block**, Rune*, uint); 65*219b2ee8SDavid du Colombier }; 66*219b2ee8SDavid du Colombier 67*219b2ee8SDavid du Colombier adt Buffer 68*219b2ee8SDavid du Colombier { 69*219b2ee8SDavid du Colombier extern uint nc; 70*219b2ee8SDavid du Colombier Rune *c; /* cache */ 71*219b2ee8SDavid du Colombier uint cnc; /* bytes in cache */ 72*219b2ee8SDavid du Colombier uint cmax; /* size of allocated cache */ 73*219b2ee8SDavid du Colombier uint cq; /* position of cache */ 74*219b2ee8SDavid du Colombier int cdirty; /* cache needs to be written */ 75*219b2ee8SDavid du Colombier uint cbi; /* index of cache Block */ 76*219b2ee8SDavid du Colombier Block **bl; /* array of blocks */ 77*219b2ee8SDavid du Colombier uint nbl; /* number of blocks */ 78*219b2ee8SDavid du Colombier 79*219b2ee8SDavid du Colombier void insert(*Buffer, uint, Rune*, uint); 80*219b2ee8SDavid du Colombier void delete(*Buffer, uint, uint); 81*219b2ee8SDavid du Colombier uint load(*Buffer, uint, int, int*); 82*219b2ee8SDavid du Colombier void read(*Buffer, uint, Rune*, uint); 83*219b2ee8SDavid du Colombier void close(*Buffer); 84*219b2ee8SDavid du Colombier void reset(*Buffer); 85*219b2ee8SDavid du Colombier intern void sizecache(*Buffer, uint); 86*219b2ee8SDavid du Colombier intern void flush(*Buffer); 87*219b2ee8SDavid du Colombier intern void setcache(*Buffer, uint); 88*219b2ee8SDavid du Colombier intern void addblock(*Buffer, uint, uint); 89*219b2ee8SDavid du Colombier intern void delblock(*Buffer, uint); 90*219b2ee8SDavid du Colombier }; 91*219b2ee8SDavid du Colombier 92*219b2ee8SDavid du Colombier adt File 93*219b2ee8SDavid du Colombier { 94*219b2ee8SDavid du Colombier extern Buffer; /* the data */ 95*219b2ee8SDavid du Colombier extern Buffer delta; /* transcript of changes */ 96*219b2ee8SDavid du Colombier extern Buffer epsilon;/* inversion of delta for redo */ 97*219b2ee8SDavid du Colombier extern Rune *name; /* name of associated file */ 98*219b2ee8SDavid du Colombier extern int nname; /* size of name */ 99*219b2ee8SDavid du Colombier 100*219b2ee8SDavid du Colombier extern int seq; /* if seq==0, File acts like Buffer */ 101*219b2ee8SDavid du Colombier extern int mod; 102*219b2ee8SDavid du Colombier extern Text *curtext; /* most recently used associated text */ 103*219b2ee8SDavid du Colombier extern Text **text; /* list of associated texts */ 104*219b2ee8SDavid du Colombier extern int ntext; 105*219b2ee8SDavid du Colombier extern int dumpid; /* used in dumping zeroxed windows */ 106*219b2ee8SDavid du Colombier 107*219b2ee8SDavid du Colombier File* addtext(*File, Text*); 108*219b2ee8SDavid du Colombier void deltext(*File, Text*); 109*219b2ee8SDavid du Colombier void insert(*File, uint, Rune*, uint); 110*219b2ee8SDavid du Colombier void delete(*File, uint, uint); 111*219b2ee8SDavid du Colombier uint load(*File, uint, int, int*); 112*219b2ee8SDavid du Colombier void setname(*File, Rune*, int); 113*219b2ee8SDavid du Colombier (uint, uint) undo(*File, int, uint, uint); 114*219b2ee8SDavid du Colombier void mark(*File); 115*219b2ee8SDavid du Colombier void reset(*File); 116*219b2ee8SDavid du Colombier intern void close(*File); 117*219b2ee8SDavid du Colombier intern void undelete(*File, Buffer*, uint, uint); 118*219b2ee8SDavid du Colombier intern void uninsert(*File, Buffer*, uint, uint); 119*219b2ee8SDavid du Colombier intern void unsetname(*File, Buffer*); 120*219b2ee8SDavid du Colombier }; 121*219b2ee8SDavid du Colombier 122*219b2ee8SDavid du Colombier enum /* Text.what */ 123*219b2ee8SDavid du Colombier { 124*219b2ee8SDavid du Colombier Columntag, 125*219b2ee8SDavid du Colombier Rowtag, 126*219b2ee8SDavid du Colombier Tag, 127*219b2ee8SDavid du Colombier Body, 128*219b2ee8SDavid du Colombier }; 129*219b2ee8SDavid du Colombier 130*219b2ee8SDavid du Colombier adt Text 131*219b2ee8SDavid du Colombier { 132*219b2ee8SDavid du Colombier extern File *file; 133*219b2ee8SDavid du Colombier extern Frame; 134*219b2ee8SDavid du Colombier extern Reffont *reffont; 135*219b2ee8SDavid du Colombier extern uint org; 136*219b2ee8SDavid du Colombier extern uint q0; 137*219b2ee8SDavid du Colombier extern uint q1; 138*219b2ee8SDavid du Colombier extern int what; 139*219b2ee8SDavid du Colombier extern Window *w; 140*219b2ee8SDavid du Colombier extern Rectangle scrollr; 141*219b2ee8SDavid du Colombier extern Rectangle lastsr; 142*219b2ee8SDavid du Colombier extern Rectangle all; 143*219b2ee8SDavid du Colombier extern Row *row; 144*219b2ee8SDavid du Colombier extern Column *col; 145*219b2ee8SDavid du Colombier 146*219b2ee8SDavid du Colombier extern uint eq0; /* start of typing for ESC */ 147*219b2ee8SDavid du Colombier uint cq0; /* cache position */ 148*219b2ee8SDavid du Colombier extern int ncache; /* storage for insert */ 149*219b2ee8SDavid du Colombier int ncachealloc; 150*219b2ee8SDavid du Colombier Rune *cache; 151*219b2ee8SDavid du Colombier int nofill; 152*219b2ee8SDavid du Colombier 153*219b2ee8SDavid du Colombier void init(*Text, File*, Rectangle, Reffont*); 154*219b2ee8SDavid du Colombier void redraw(*Text, Rectangle, Font*, Bitmap*, int); 155*219b2ee8SDavid du Colombier void insert(*Text, uint, Rune*, uint, int); 156*219b2ee8SDavid du Colombier (uint, int) bsinsert(*Text, uint, Rune*, uint, int); 157*219b2ee8SDavid du Colombier void delete(*Text, uint, uint, int); 158*219b2ee8SDavid du Colombier uint load(*Text, uint, byte*); 159*219b2ee8SDavid du Colombier void type(*Text, Rune); 160*219b2ee8SDavid du Colombier void select(*Text); 161*219b2ee8SDavid du Colombier (int, Text*) select2(*Text, uint*, uint*); 162*219b2ee8SDavid du Colombier int select3(*Text, uint*, uint*); 163*219b2ee8SDavid du Colombier void setselect(*Text, uint, uint); 164*219b2ee8SDavid du Colombier void show(*Text, uint, uint); 165*219b2ee8SDavid du Colombier void fill(*Text); 166*219b2ee8SDavid du Colombier void commit(*Text, int); 167*219b2ee8SDavid du Colombier void scroll(*Text, int); 168*219b2ee8SDavid du Colombier void setorigin(*Text, uint, int); 169*219b2ee8SDavid du Colombier void scrdraw(*Text); 170*219b2ee8SDavid du Colombier Rune readc(*Text, uint); 171*219b2ee8SDavid du Colombier void reset(*Text); 172*219b2ee8SDavid du Colombier int reshape(*Text, Rectangle); 173*219b2ee8SDavid du Colombier void close(*Text); 174*219b2ee8SDavid du Colombier void framescroll(*Text, int); 175*219b2ee8SDavid du Colombier intern int select23(*Text, uint*, uint*, Bitmap*, int); 176*219b2ee8SDavid du Colombier intern uint backnl(*Text, uint, uint); 177*219b2ee8SDavid du Colombier intern int bswidth(*Text, Rune); 178*219b2ee8SDavid du Colombier intern void doubleclick(*Text, uint*, uint*); 179*219b2ee8SDavid du Colombier intern int clickmatch(*Text, int, int, int, uint*); 180*219b2ee8SDavid du Colombier intern void columnate(*Text, Dirlist**, int); 181*219b2ee8SDavid du Colombier }; 182*219b2ee8SDavid du Colombier 183*219b2ee8SDavid du Colombier adt Window 184*219b2ee8SDavid du Colombier { 185*219b2ee8SDavid du Colombier QLock; 186*219b2ee8SDavid du Colombier Ref; 187*219b2ee8SDavid du Colombier extern Text tag; 188*219b2ee8SDavid du Colombier extern Text body; 189*219b2ee8SDavid du Colombier extern Rectangle r; 190*219b2ee8SDavid du Colombier extern byte isdir; 191*219b2ee8SDavid du Colombier extern byte isscratch; 192*219b2ee8SDavid du Colombier extern byte filemenu; 193*219b2ee8SDavid du Colombier extern byte dirty; 194*219b2ee8SDavid du Colombier extern int id; 195*219b2ee8SDavid du Colombier extern Range addr; 196*219b2ee8SDavid du Colombier extern Range limit; 197*219b2ee8SDavid du Colombier extern byte nopen[QMAX]; 198*219b2ee8SDavid du Colombier extern byte nomark; 199*219b2ee8SDavid du Colombier extern byte noscroll; 200*219b2ee8SDavid du Colombier extern Column *col; 201*219b2ee8SDavid du Colombier extern Xfid *eventx; 202*219b2ee8SDavid du Colombier extern byte *events; 203*219b2ee8SDavid du Colombier extern int nevents; 204*219b2ee8SDavid du Colombier extern int owner; 205*219b2ee8SDavid du Colombier extern int maxlines; 206*219b2ee8SDavid du Colombier extern Dirlist **dlp; 207*219b2ee8SDavid du Colombier extern int ndl; 208*219b2ee8SDavid du Colombier extern int putseq; 209*219b2ee8SDavid du Colombier extern int nincl; 210*219b2ee8SDavid du Colombier extern Rune **incl; 211*219b2ee8SDavid du Colombier extern Reffont *reffont; 212*219b2ee8SDavid du Colombier extern QLock ctllock; 213*219b2ee8SDavid du Colombier extern uint ctlfid; 214*219b2ee8SDavid du Colombier extern byte *dumpstr; 215*219b2ee8SDavid du Colombier extern byte *dumpdir; 216*219b2ee8SDavid du Colombier extern int dumpid; 217*219b2ee8SDavid du Colombier 218*219b2ee8SDavid du Colombier void init(*Window, Window*, Rectangle); 219*219b2ee8SDavid du Colombier void lock(*Window, int); 220*219b2ee8SDavid du Colombier void lock1(*Window, int); 221*219b2ee8SDavid du Colombier void unlock(*Window); 222*219b2ee8SDavid du Colombier void type(*Window, Text*, Rune); 223*219b2ee8SDavid du Colombier void undo(*Window, int); 224*219b2ee8SDavid du Colombier void setname(*Window, Rune*, int); 225*219b2ee8SDavid du Colombier void settag(*Window); 226*219b2ee8SDavid du Colombier void settag1(*Window); 227*219b2ee8SDavid du Colombier void commit(*Window, Text*); 228*219b2ee8SDavid du Colombier int reshape(*Window, Rectangle, int); 229*219b2ee8SDavid du Colombier void close(*Window); 230*219b2ee8SDavid du Colombier void delete(*Window); 231*219b2ee8SDavid du Colombier int clean(*Window, int); 232*219b2ee8SDavid du Colombier void dirfree(*Window); 233*219b2ee8SDavid du Colombier void event(*Window, byte*, ...); 234*219b2ee8SDavid du Colombier void mousebut(*Window); 235*219b2ee8SDavid du Colombier void addincl(*Window, Rune*, int); 236*219b2ee8SDavid du Colombier void cleartag(*Window); 237*219b2ee8SDavid du Colombier void ctlprint(*Window, byte*); 238*219b2ee8SDavid du Colombier }; 239*219b2ee8SDavid du Colombier 240*219b2ee8SDavid du Colombier adt Column 241*219b2ee8SDavid du Colombier { 242*219b2ee8SDavid du Colombier extern Rectangle r; 243*219b2ee8SDavid du Colombier extern Text tag; 244*219b2ee8SDavid du Colombier extern Row *row; 245*219b2ee8SDavid du Colombier extern Window **w; 246*219b2ee8SDavid du Colombier extern int nw; 247*219b2ee8SDavid du Colombier int safe; 248*219b2ee8SDavid du Colombier 249*219b2ee8SDavid du Colombier void init(*Column, Rectangle); 250*219b2ee8SDavid du Colombier Window* add(*Column, Window*, Window*, int); 251*219b2ee8SDavid du Colombier void close(*Column, Window*, int); 252*219b2ee8SDavid du Colombier void closeall(*Column); 253*219b2ee8SDavid du Colombier void reshape(*Column, Rectangle); 254*219b2ee8SDavid du Colombier Text* which(*Column, Point); 255*219b2ee8SDavid du Colombier void dragwin(*Column, Window*, int); 256*219b2ee8SDavid du Colombier void grow(*Column, Window*, int); 257*219b2ee8SDavid du Colombier int clean(*Column); 258*219b2ee8SDavid du Colombier void sort(*Column); 259*219b2ee8SDavid du Colombier void mousebut(*Column); 260*219b2ee8SDavid du Colombier }; 261*219b2ee8SDavid du Colombier 262*219b2ee8SDavid du Colombier adt Row 263*219b2ee8SDavid du Colombier { 264*219b2ee8SDavid du Colombier QLock; 265*219b2ee8SDavid du Colombier extern Rectangle r; 266*219b2ee8SDavid du Colombier extern Text tag; 267*219b2ee8SDavid du Colombier extern Column **col; 268*219b2ee8SDavid du Colombier extern int ncol; 269*219b2ee8SDavid du Colombier 270*219b2ee8SDavid du Colombier void init(*Row, Rectangle); 271*219b2ee8SDavid du Colombier Column* add(*Row, Column *c, int); 272*219b2ee8SDavid du Colombier void close(*Row, Column*, int); 273*219b2ee8SDavid du Colombier Text* which(*Row, Point); 274*219b2ee8SDavid du Colombier Column* whichcol(*Row, Point); 275*219b2ee8SDavid du Colombier void reshape(*Row, Rectangle); 276*219b2ee8SDavid du Colombier Text* type(*Row, Rune, Point); 277*219b2ee8SDavid du Colombier void dragcol(*Row, Column*, int but); 278*219b2ee8SDavid du Colombier int clean(*Row); 279*219b2ee8SDavid du Colombier void dump(*Row, byte*); 280*219b2ee8SDavid du Colombier void load(*Row, byte*, int); 281*219b2ee8SDavid du Colombier }; 282*219b2ee8SDavid du Colombier 283*219b2ee8SDavid du Colombier aggr Timer 284*219b2ee8SDavid du Colombier { 285*219b2ee8SDavid du Colombier int dt; 286*219b2ee8SDavid du Colombier chan(int) c; 287*219b2ee8SDavid du Colombier Timer *next; 288*219b2ee8SDavid du Colombier }; 289*219b2ee8SDavid du Colombier 290*219b2ee8SDavid du Colombier aggr Command 291*219b2ee8SDavid du Colombier { 292*219b2ee8SDavid du Colombier int pid; 293*219b2ee8SDavid du Colombier Rune *name; 294*219b2ee8SDavid du Colombier int nname; 295*219b2ee8SDavid du Colombier byte *text; 296*219b2ee8SDavid du Colombier byte **av; 297*219b2ee8SDavid du Colombier Mntdir *md; 298*219b2ee8SDavid du Colombier Command *next; 299*219b2ee8SDavid du Colombier }; 300*219b2ee8SDavid du Colombier 301*219b2ee8SDavid du Colombier aggr Dirtab 302*219b2ee8SDavid du Colombier { 303*219b2ee8SDavid du Colombier byte *name; 304*219b2ee8SDavid du Colombier uint qid; 305*219b2ee8SDavid du Colombier uint perm; 306*219b2ee8SDavid du Colombier }; 307*219b2ee8SDavid du Colombier 308*219b2ee8SDavid du Colombier aggr Mntdir 309*219b2ee8SDavid du Colombier { 310*219b2ee8SDavid du Colombier int id; 311*219b2ee8SDavid du Colombier int ref; 312*219b2ee8SDavid du Colombier Rune *dir; 313*219b2ee8SDavid du Colombier int ndir; 314*219b2ee8SDavid du Colombier Mntdir *next; 315*219b2ee8SDavid du Colombier int nincl; 316*219b2ee8SDavid du Colombier Rune **incl; 317*219b2ee8SDavid du Colombier }; 318*219b2ee8SDavid du Colombier 319*219b2ee8SDavid du Colombier aggr Fid 320*219b2ee8SDavid du Colombier { 321*219b2ee8SDavid du Colombier uint fid; 322*219b2ee8SDavid du Colombier int busy; 323*219b2ee8SDavid du Colombier int open; 324*219b2ee8SDavid du Colombier Qid qid; 325*219b2ee8SDavid du Colombier Window *w; 326*219b2ee8SDavid du Colombier Dirtab *dir; 327*219b2ee8SDavid du Colombier Fid *next; 328*219b2ee8SDavid du Colombier Mntdir *mntdir; 329*219b2ee8SDavid du Colombier int nrpart; 330*219b2ee8SDavid du Colombier byte rpart[UTFmax]; 331*219b2ee8SDavid du Colombier }; 332*219b2ee8SDavid du Colombier 333*219b2ee8SDavid du Colombier adt Xfid 334*219b2ee8SDavid du Colombier { 335*219b2ee8SDavid du Colombier uint tid; 336*219b2ee8SDavid du Colombier extern Fcall; 337*219b2ee8SDavid du Colombier extern Xfid *next; 338*219b2ee8SDavid du Colombier extern chan(void(*)(Xfid*)) c; 339*219b2ee8SDavid du Colombier extern Fid *f; 340*219b2ee8SDavid du Colombier extern byte *buf; 341*219b2ee8SDavid du Colombier int flushed; 342*219b2ee8SDavid du Colombier 343*219b2ee8SDavid du Colombier void ctl(*Xfid); 344*219b2ee8SDavid du Colombier void flush(*Xfid); 345*219b2ee8SDavid du Colombier void walk(*Xfid); 346*219b2ee8SDavid du Colombier void open(*Xfid); 347*219b2ee8SDavid du Colombier void close(*Xfid); 348*219b2ee8SDavid du Colombier void read(*Xfid); 349*219b2ee8SDavid du Colombier void write(*Xfid); 350*219b2ee8SDavid du Colombier 351*219b2ee8SDavid du Colombier void ctlwrite(*Xfid, Window*); 352*219b2ee8SDavid du Colombier void eventread(*Xfid, Window*); 353*219b2ee8SDavid du Colombier void eventwrite(*Xfid, Window*); 354*219b2ee8SDavid du Colombier void indexread(*Xfid); 355*219b2ee8SDavid du Colombier void utfread(*Xfid, Text*, uint, uint); 356*219b2ee8SDavid du Colombier int runeread(*Xfid, Text*, uint, uint); 357*219b2ee8SDavid du Colombier }; 358*219b2ee8SDavid du Colombier 359*219b2ee8SDavid du Colombier adt 360*219b2ee8SDavid du Colombier Reffont 361*219b2ee8SDavid du Colombier { 362*219b2ee8SDavid du Colombier Ref; 363*219b2ee8SDavid du Colombier extern Font *f; 364*219b2ee8SDavid du Colombier 365*219b2ee8SDavid du Colombier Reffont* get(int, int, int, byte*); 366*219b2ee8SDavid du Colombier void close(*Reffont); 367*219b2ee8SDavid du Colombier }; 368*219b2ee8SDavid du Colombier 369*219b2ee8SDavid du Colombier aggr Rangeset 370*219b2ee8SDavid du Colombier { 371*219b2ee8SDavid du Colombier Range r[NRange]; 372*219b2ee8SDavid du Colombier }; 373*219b2ee8SDavid du Colombier 374*219b2ee8SDavid du Colombier aggr Dirlist 375*219b2ee8SDavid du Colombier { 376*219b2ee8SDavid du Colombier Rune *r; 377*219b2ee8SDavid du Colombier int nr; 378*219b2ee8SDavid du Colombier int wid; 379*219b2ee8SDavid du Colombier }; 380*219b2ee8SDavid du Colombier 381*219b2ee8SDavid du Colombier aggr Expand 382*219b2ee8SDavid du Colombier { 383*219b2ee8SDavid du Colombier uint q0; 384*219b2ee8SDavid du Colombier uint q1; 385*219b2ee8SDavid du Colombier Rune *name; 386*219b2ee8SDavid du Colombier int nname; 387*219b2ee8SDavid du Colombier byte *bname; 388*219b2ee8SDavid du Colombier int jump; 389*219b2ee8SDavid du Colombier Text *at; 390*219b2ee8SDavid du Colombier int a0; 391*219b2ee8SDavid du Colombier int a1; 392*219b2ee8SDavid du Colombier }; 393*219b2ee8SDavid du Colombier 394*219b2ee8SDavid du Colombier enum 395*219b2ee8SDavid du Colombier { 396*219b2ee8SDavid du Colombier /* fbufalloc() guarantees room off end of BUFSIZE */ 397*219b2ee8SDavid du Colombier BUFSIZE = MAXRPC, /* size from fbufalloc() */ 398*219b2ee8SDavid du Colombier RBUFSIZE = BUFSIZE/sizeof(Rune), 399*219b2ee8SDavid du Colombier EVENTSIZE = 256, 400*219b2ee8SDavid du Colombier Scrollwid = 12, /* width of scroll bar */ 401*219b2ee8SDavid du Colombier Scrollgap = 4, /* gap right of scroll bar */ 402*219b2ee8SDavid du Colombier Margin = 4, /* margin around text */ 403*219b2ee8SDavid du Colombier Border = 2, /* line between rows, cols, windows */ 404*219b2ee8SDavid du Colombier Maxtab = 4, /* size of a tab, in units of the '0' character */ 405*219b2ee8SDavid du Colombier }; 406*219b2ee8SDavid du Colombier 407*219b2ee8SDavid du Colombier #define QID(w,q) ((w<<8)|(q)) 408*219b2ee8SDavid du Colombier #define WIN(q) ((((q).path&~CHDIR)>>8) & 0xFFFFFF) 409*219b2ee8SDavid du Colombier #define FILE(q) ((q).path & 0xFF) 410*219b2ee8SDavid du Colombier 411*219b2ee8SDavid du Colombier enum 412*219b2ee8SDavid du Colombier { 413*219b2ee8SDavid du Colombier FALSE, 414*219b2ee8SDavid du Colombier TRUE, 415*219b2ee8SDavid du Colombier XXX, 416*219b2ee8SDavid du Colombier }; 417*219b2ee8SDavid du Colombier 418*219b2ee8SDavid du Colombier enum 419*219b2ee8SDavid du Colombier { 420*219b2ee8SDavid du Colombier Null = '-', 421*219b2ee8SDavid du Colombier Delete = 'd', 422*219b2ee8SDavid du Colombier Insert = 'i', 423*219b2ee8SDavid du Colombier Filename = 'f', 424*219b2ee8SDavid du Colombier }; 425*219b2ee8SDavid du Colombier 426*219b2ee8SDavid du Colombier uint seq; 427*219b2ee8SDavid du Colombier 428*219b2ee8SDavid du Colombier Mouse mouse; 429*219b2ee8SDavid du Colombier Bitmap *darkgrey; 430*219b2ee8SDavid du Colombier Bitmap *lightgrey; 431*219b2ee8SDavid du Colombier Reffont reffont; 432*219b2ee8SDavid du Colombier Bitmap *modbutton; 433*219b2ee8SDavid du Colombier Bitmap *colbutton; 434*219b2ee8SDavid du Colombier Bitmap *button; 435*219b2ee8SDavid du Colombier Cursor boxcursor; 436*219b2ee8SDavid du Colombier Row row; 437*219b2ee8SDavid du Colombier int timerpid; 438*219b2ee8SDavid du Colombier Disk *disk; 439*219b2ee8SDavid du Colombier Text *seltext; 440*219b2ee8SDavid du Colombier Text *argtext; 441*219b2ee8SDavid du Colombier Text *mousetext; /* global because Text.close needs to clear it */ 442*219b2ee8SDavid du Colombier Text *typetext; /* global because Text.close needs to clear it */ 443*219b2ee8SDavid du Colombier Text *barttext; /* shared between mousetask and keyboardtask */ 444*219b2ee8SDavid du Colombier int bartflag; 445*219b2ee8SDavid du Colombier Column *activecol; 446*219b2ee8SDavid du Colombier Rectangle nullrect; 447*219b2ee8SDavid du Colombier int fsyspid; 448*219b2ee8SDavid du Colombier byte *cputype; 449*219b2ee8SDavid du Colombier byte *objtype; 450*219b2ee8SDavid du Colombier byte *home; 451*219b2ee8SDavid du Colombier byte *fontnames[2]; 452*219b2ee8SDavid du Colombier 453*219b2ee8SDavid du Colombier chan(Rune)[10] ckeyboard; 454*219b2ee8SDavid du Colombier chan(Mouse) cmouse; 455*219b2ee8SDavid du Colombier chan(Waitmsg) cwait; 456*219b2ee8SDavid du Colombier chan(Command*) ccommand; 457*219b2ee8SDavid du Colombier chan(Rune*) ckill; 458*219b2ee8SDavid du Colombier chan(Xfid*) cxfidalloc; 459*219b2ee8SDavid du Colombier chan(Xfid*) cxfidfree; 460*219b2ee8SDavid du Colombier chan(int) *mouseexit0; 461*219b2ee8SDavid du Colombier chan(int) *mouseexit1; 462*219b2ee8SDavid du Colombier chan(byte*) cerr; 463