123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- enum
- {
- Qdir, /* /dev for this window */
- Qcons,
- Qconsctl,
- Qcursor,
- Qwdir,
- Qwinid,
- Qwinname,
- Qkbdin,
- Qlabel,
- Qmouse,
- Qnew,
- Qscreen,
- Qsnarf,
- Qtext,
- Qwctl,
- Qwindow,
- Qwsys, /* directory of window directories */
- Qwsysdir, /* window directory, child of wsys */
- QMAX,
- };
- enum
- {
- Kscrolloneup = KF|0x20,
- Kscrollonedown = KF|0x21,
- };
- #define STACK 8192
- typedef struct Consreadmesg Consreadmesg;
- typedef struct Conswritemesg Conswritemesg;
- 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,
- Moved,
- Refresh,
- Movemouse,
- Rawon,
- Rawoff,
- Holdon,
- Holdoff,
- Deleted,
- Exited,
- };
- struct Wctlmesg
- {
- int type;
- Rectangle r;
- Image *image;
- };
- 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;
- Mousectl mc;
- Mouseinfo mouse;
- Channel *ck; /* chan(Rune[10]) */
- Channel *cctl; /* chan(Wctlmesg)[20] */
- Channel *conswrite; /* chan(Conswritemesg) */
- Channel *consread; /* chan(Consreadmesg) */
- Channel *mouseread; /* chan(Mousereadmesg) */
- Channel *wctlread; /* chan(Consreadmesg) */
- 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;
- char *label;
- int pid;
- char *dir;
- };
- int winborder(Window*, Point);
- 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, Image*);
- int wctlmesg(Window*, int, Rectangle, Image*);
- uint wbacknl(Window*, uint, uint);
- uint winsert(Window*, Rune*, int, uint);
- void waddraw(Window*, Rune*, int);
- void wborder(Window*, int);
- 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 wrefresh(Window*, Rectangle);
- void wrepaint(Window*);
- void wresize(Window*, Image*, int);
- void wscrdraw(Window*);
- void wscroll(Window*, int);
- void wselect(Window*);
- void wsendctlmesg(Window*, int, Rectangle, Image*);
- 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*);
- 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;
- QLock active;
- int flushing; /* another Xfid is trying to flush us */
- 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*) */
- 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;
- Keyboardctl *keyboardctl;
- Display *display;
- Image *view;
- Screen *wscreen;
- Cursor boxcursor;
- Cursor crosscursor;
- Cursor sightcursor;
- Cursor whitearrow;
- Cursor query;
- Cursor *corners[9];
- Image *background;
- Image *lightgrey;
- Image *red;
- Window **window;
- Window *wkeyboard; /* window of simulated keyboard */
- int nwindow;
- int snarffd;
- Window *input;
- QLock all; /* BUG */
- Filsys *filsys;
- Window *hidden[100];
- int nhidden;
- int nsnarf;
- Rune* snarf;
- int scrolling;
- int maxtab;
- Channel* winclosechan;
- Channel* deletechan;
- 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 snarfversion; /* updated each time it is written */
- int messagesize; /* negotiated in 9P version setup */
|