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 cc3d97d5 2020-01-13 rsc #include <drawfcall.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 cc3d97d5 2020-01-13 rsc execl("./o.devdraw", "o.devdraw", "-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 cc3d97d5 2020-01-13 rsc if(m->type == 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 cc3d97d5 2020-01-13 rsc m.type = 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 if(domsg(&m) < 0)
65 c66b5250 2006-06-25 devnull sysfatal("domsg");
69 c66b5250 2006-06-25 devnull cmdmouse(int argc, char **argv)
71 c66b5250 2006-06-25 devnull Wsysmsg m;
73 c66b5250 2006-06-25 devnull memset(&m, 0, sizeof m);
74 cc3d97d5 2020-01-13 rsc m.type = Trdmouse;
75 c66b5250 2006-06-25 devnull if(domsg(&m) < 0)
76 c66b5250 2006-06-25 devnull sysfatal("domsg");
77 c66b5250 2006-06-25 devnull print("%c %d %d %d\n",
78 c66b5250 2006-06-25 devnull m.resized ? 'r' : 'm',
79 c66b5250 2006-06-25 devnull m.mouse.xy.x,
80 c66b5250 2006-06-25 devnull m.mouse.xy.y,
81 c66b5250 2006-06-25 devnull m.mouse.buttons);
85 c66b5250 2006-06-25 devnull cmdkbd(int argc, char **argv)
87 c66b5250 2006-06-25 devnull Wsysmsg m;
89 c66b5250 2006-06-25 devnull memset(&m, 0, sizeof m);
90 cc3d97d5 2020-01-13 rsc m.type = Trdkbd;
91 c66b5250 2006-06-25 devnull if(domsg(&m) < 0)
92 c66b5250 2006-06-25 devnull sysfatal("domsg");
93 cc3d97d5 2020-01-13 rsc print("%d\n", m.rune);
96 c66b5250 2006-06-25 devnull Cmd cmdtab[] = {
97 c66b5250 2006-06-25 devnull { "init", cmdinit, },
98 c66b5250 2006-06-25 devnull { "mouse", cmdmouse, },
99 c66b5250 2006-06-25 devnull { "kbd", cmdkbd, },
103 c66b5250 2006-06-25 devnull main(int argc, char **argv)
105 c66b5250 2006-06-25 devnull char *p, *f[20];
106 c66b5250 2006-06-25 devnull int i, nf;
108 c66b5250 2006-06-25 devnull startsrv();
110 c66b5250 2006-06-25 devnull fprint(2, "started...\n");
111 c66b5250 2006-06-25 devnull Binit(&b, 0, OREAD);
112 c66b5250 2006-06-25 devnull while((p = Brdstr(&b, '\n', 1)) != nil){
113 c66b5250 2006-06-25 devnull fprint(2, "%s...\n", p);
114 c66b5250 2006-06-25 devnull nf = tokenize(p, f, nelem(f));
115 c66b5250 2006-06-25 devnull for(i=0; i<nelem(cmdtab); i++){
116 c66b5250 2006-06-25 devnull if(strcmp(cmdtab[i].cmd, f[0]) == 0){
117 c66b5250 2006-06-25 devnull cmdtab[i].fn(nf, f);
121 c66b5250 2006-06-25 devnull if(i == nelem(cmdtab))
122 c66b5250 2006-06-25 devnull print("! unrecognized command %s\n", f[0]);
123 c66b5250 2006-06-25 devnull free(p);
125 c66b5250 2006-06-25 devnull exits(0);