1 c66b5250 2006-06-25 devnull #include <u.h>
2 c66b5250 2006-06-25 devnull #include <libc.h>
3 c66b5250 2006-06-25 devnull #include <bio.h>
4 c66b5250 2006-06-25 devnull #include <draw.h>
5 c66b5250 2006-06-25 devnull #include <mouse.h>
6 c66b5250 2006-06-25 devnull #include <cursor.h>
7 c66b5250 2006-06-25 devnull #include <drawsrv.h>
9 c66b5250 2006-06-25 devnull typedef struct Cmd Cmd;
10 c66b5250 2006-06-25 devnull struct Cmd {
11 c66b5250 2006-06-25 devnull char *cmd;
12 c66b5250 2006-06-25 devnull void (*fn)(int, char**);
15 c66b5250 2006-06-25 devnull Biobuf b;
17 c66b5250 2006-06-25 devnull uchar buf[64*1024];
20 c66b5250 2006-06-25 devnull startsrv(void)
22 c66b5250 2006-06-25 devnull int pid, p[2];
24 c66b5250 2006-06-25 devnull if(pipe(p) < 0)
25 c66b5250 2006-06-25 devnull sysfatal("pipe");
26 c66b5250 2006-06-25 devnull if((pid=fork()) < 0)
27 c66b5250 2006-06-25 devnull sysfatal("fork");
28 c66b5250 2006-06-25 devnull if(pid == 0){
29 c66b5250 2006-06-25 devnull close(p[0]);
30 c66b5250 2006-06-25 devnull dup(p[1], 0);
31 c66b5250 2006-06-25 devnull dup(p[1], 1);
32 c66b5250 2006-06-25 devnull execl("o.drawsrv", "o.drawsrv", "-D", nil);
33 c66b5250 2006-06-25 devnull sysfatal("exec: %r");
35 c66b5250 2006-06-25 devnull close(p[1]);
36 c66b5250 2006-06-25 devnull fd = p[0];
40 c66b5250 2006-06-25 devnull domsg(Wsysmsg *m)
42 c66b5250 2006-06-25 devnull int n, nn;
44 c66b5250 2006-06-25 devnull n = convW2M(m, buf, sizeof buf);
45 c66b5250 2006-06-25 devnull fprint(2, "write %d to %d\n", n, fd);
46 c66b5250 2006-06-25 devnull write(fd, buf, n);
47 c66b5250 2006-06-25 devnull n = readwsysmsg(fd, buf, sizeof buf);
48 c66b5250 2006-06-25 devnull nn = convM2W(buf, n, m);
49 c66b5250 2006-06-25 devnull assert(nn == n);
50 c66b5250 2006-06-25 devnull if(m->op == Rerror)
51 c66b5250 2006-06-25 devnull return -1;
52 c66b5250 2006-06-25 devnull return 0;
56 c66b5250 2006-06-25 devnull cmdinit(int argc, char **argv)
58 c66b5250 2006-06-25 devnull Wsysmsg m;
60 c66b5250 2006-06-25 devnull memset(&m, 0, sizeof m);
61 c66b5250 2006-06-25 devnull m.op = Tinit;
62 c66b5250 2006-06-25 devnull m.winsize = "100x100";
63 c66b5250 2006-06-25 devnull m.label = "label";
64 c66b5250 2006-06-25 devnull m.font = "";
65 c66b5250 2006-06-25 devnull if(domsg(&m) < 0)
66 c66b5250 2006-06-25 devnull sysfatal("domsg");
70 c66b5250 2006-06-25 devnull cmdmouse(int argc, char **argv)
72 c66b5250 2006-06-25 devnull Wsysmsg m;
74 c66b5250 2006-06-25 devnull memset(&m, 0, sizeof m);
75 c66b5250 2006-06-25 devnull m.op = Trdmouse;
76 c66b5250 2006-06-25 devnull if(domsg(&m) < 0)
77 c66b5250 2006-06-25 devnull sysfatal("domsg");
78 c66b5250 2006-06-25 devnull print("%c %d %d %d\n",
79 c66b5250 2006-06-25 devnull m.resized ? 'r' : 'm',
80 c66b5250 2006-06-25 devnull m.mouse.xy.x,
81 c66b5250 2006-06-25 devnull m.mouse.xy.y,
82 c66b5250 2006-06-25 devnull m.mouse.buttons);
86 c66b5250 2006-06-25 devnull cmdkbd(int argc, char **argv)
88 c66b5250 2006-06-25 devnull Wsysmsg m;
90 c66b5250 2006-06-25 devnull memset(&m, 0, sizeof m);
91 c66b5250 2006-06-25 devnull m.op = Trdkbd;
92 c66b5250 2006-06-25 devnull if(domsg(&m) < 0)
93 c66b5250 2006-06-25 devnull sysfatal("domsg");
94 c66b5250 2006-06-25 devnull print("%s\n", m.runes);
97 c66b5250 2006-06-25 devnull Cmd cmdtab[] = {
98 c66b5250 2006-06-25 devnull { "init", cmdinit, },
99 c66b5250 2006-06-25 devnull { "mouse", cmdmouse, },
100 c66b5250 2006-06-25 devnull { "kbd", cmdkbd, },
104 c66b5250 2006-06-25 devnull main(int argc, char **argv)
106 c66b5250 2006-06-25 devnull char *p, *f[20];
107 c66b5250 2006-06-25 devnull int i, nf;
109 c66b5250 2006-06-25 devnull startsrv();
111 c66b5250 2006-06-25 devnull fprint(2, "started...\n");
112 c66b5250 2006-06-25 devnull Binit(&b, 0, OREAD);
113 c66b5250 2006-06-25 devnull while((p = Brdstr(&b, '\n', 1)) != nil){
114 c66b5250 2006-06-25 devnull fprint(2, "%s...\n", p);
115 c66b5250 2006-06-25 devnull nf = tokenize(p, f, nelem(f));
116 c66b5250 2006-06-25 devnull for(i=0; i<nelem(cmdtab); i++){
117 c66b5250 2006-06-25 devnull if(strcmp(cmdtab[i].cmd, f[0]) == 0){
118 c66b5250 2006-06-25 devnull cmdtab[i].fn(nf, f);
122 c66b5250 2006-06-25 devnull if(i == nelem(cmdtab))
123 c66b5250 2006-06-25 devnull print("! unrecognized command %s\n", f[0]);
124 c66b5250 2006-06-25 devnull free(p);
126 c66b5250 2006-06-25 devnull exits(0);