Blame


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>
8 c66b5250 2006-06-25 devnull
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**);
13 c66b5250 2006-06-25 devnull };
14 c66b5250 2006-06-25 devnull
15 c66b5250 2006-06-25 devnull Biobuf b;
16 c66b5250 2006-06-25 devnull int fd;
17 c66b5250 2006-06-25 devnull uchar buf[64*1024];
18 c66b5250 2006-06-25 devnull
19 c66b5250 2006-06-25 devnull void
20 c66b5250 2006-06-25 devnull startsrv(void)
21 c66b5250 2006-06-25 devnull {
22 c66b5250 2006-06-25 devnull int pid, p[2];
23 c66b5250 2006-06-25 devnull
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");
34 c66b5250 2006-06-25 devnull }
35 c66b5250 2006-06-25 devnull close(p[1]);
36 c66b5250 2006-06-25 devnull fd = p[0];
37 c66b5250 2006-06-25 devnull }
38 c66b5250 2006-06-25 devnull
39 c66b5250 2006-06-25 devnull int
40 c66b5250 2006-06-25 devnull domsg(Wsysmsg *m)
41 c66b5250 2006-06-25 devnull {
42 c66b5250 2006-06-25 devnull int n, nn;
43 c66b5250 2006-06-25 devnull
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;
53 c66b5250 2006-06-25 devnull }
54 c66b5250 2006-06-25 devnull
55 c66b5250 2006-06-25 devnull void
56 c66b5250 2006-06-25 devnull cmdinit(int argc, char **argv)
57 c66b5250 2006-06-25 devnull {
58 c66b5250 2006-06-25 devnull Wsysmsg m;
59 c66b5250 2006-06-25 devnull
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");
67 c66b5250 2006-06-25 devnull }
68 c66b5250 2006-06-25 devnull
69 c66b5250 2006-06-25 devnull void
70 c66b5250 2006-06-25 devnull cmdmouse(int argc, char **argv)
71 c66b5250 2006-06-25 devnull {
72 c66b5250 2006-06-25 devnull Wsysmsg m;
73 c66b5250 2006-06-25 devnull
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);
83 c66b5250 2006-06-25 devnull }
84 c66b5250 2006-06-25 devnull
85 c66b5250 2006-06-25 devnull void
86 c66b5250 2006-06-25 devnull cmdkbd(int argc, char **argv)
87 c66b5250 2006-06-25 devnull {
88 c66b5250 2006-06-25 devnull Wsysmsg m;
89 c66b5250 2006-06-25 devnull
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);
95 c66b5250 2006-06-25 devnull }
96 c66b5250 2006-06-25 devnull
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, },
101 c66b5250 2006-06-25 devnull };
102 c66b5250 2006-06-25 devnull
103 c66b5250 2006-06-25 devnull void
104 c66b5250 2006-06-25 devnull main(int argc, char **argv)
105 c66b5250 2006-06-25 devnull {
106 c66b5250 2006-06-25 devnull char *p, *f[20];
107 c66b5250 2006-06-25 devnull int i, nf;
108 c66b5250 2006-06-25 devnull
109 c66b5250 2006-06-25 devnull startsrv();
110 c66b5250 2006-06-25 devnull
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);
119 c66b5250 2006-06-25 devnull break;
120 c66b5250 2006-06-25 devnull }
121 c66b5250 2006-06-25 devnull }
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);
125 c66b5250 2006-06-25 devnull }
126 c66b5250 2006-06-25 devnull exits(0);
127 c66b5250 2006-06-25 devnull }
128 c66b5250 2006-06-25 devnull