Blame


1 b2ad2ef1 2005-01-04 devnull #include <u.h>
2 b2ad2ef1 2005-01-04 devnull #include <libc.h>
3 b2ad2ef1 2005-01-04 devnull #include <bio.h>
4 b2ad2ef1 2005-01-04 devnull
5 b2ad2ef1 2005-01-04 devnull
6 b2ad2ef1 2005-01-04 devnull int
7 b2ad2ef1 2005-01-04 devnull getn(Biobuf *b)
8 b2ad2ef1 2005-01-04 devnull {
9 b2ad2ef1 2005-01-04 devnull int c, n;
10 b2ad2ef1 2005-01-04 devnull
11 b2ad2ef1 2005-01-04 devnull n = 0;
12 b2ad2ef1 2005-01-04 devnull while((c = Bgetc(b)) != -1 && '0'<=c && c<='9')
13 b2ad2ef1 2005-01-04 devnull n = n*10+c-'0';
14 b2ad2ef1 2005-01-04 devnull if(c != ' ')
15 b2ad2ef1 2005-01-04 devnull sysfatal("bad number syntax");
16 b2ad2ef1 2005-01-04 devnull return n;
17 b2ad2ef1 2005-01-04 devnull }
18 b2ad2ef1 2005-01-04 devnull
19 b2ad2ef1 2005-01-04 devnull char*
20 b2ad2ef1 2005-01-04 devnull getrune(Biobuf *b, char *p)
21 b2ad2ef1 2005-01-04 devnull {
22 b2ad2ef1 2005-01-04 devnull int c;
23 b2ad2ef1 2005-01-04 devnull char *q;
24 b2ad2ef1 2005-01-04 devnull
25 b2ad2ef1 2005-01-04 devnull c = Bgetc(b);
26 b2ad2ef1 2005-01-04 devnull if(c == -1)
27 b2ad2ef1 2005-01-04 devnull sysfatal("eof");
28 b2ad2ef1 2005-01-04 devnull q = p;
29 b2ad2ef1 2005-01-04 devnull *q++ = c;
30 b2ad2ef1 2005-01-04 devnull if(c >= Runeself){
31 b2ad2ef1 2005-01-04 devnull while(!fullrune(p, q-p)){
32 b2ad2ef1 2005-01-04 devnull c = Bgetc(b);
33 b2ad2ef1 2005-01-04 devnull if(c == -1)
34 b2ad2ef1 2005-01-04 devnull sysfatal("eof");
35 b2ad2ef1 2005-01-04 devnull *q++ = c;
36 b2ad2ef1 2005-01-04 devnull }
37 b2ad2ef1 2005-01-04 devnull }
38 b2ad2ef1 2005-01-04 devnull return q;
39 b2ad2ef1 2005-01-04 devnull }
40 b2ad2ef1 2005-01-04 devnull
41 b2ad2ef1 2005-01-04 devnull void
42 b2ad2ef1 2005-01-04 devnull getevent(Biobuf *b, int *c1, int *c2, int *q0, int *q1, int *flag, int *nr, char *buf)
43 b2ad2ef1 2005-01-04 devnull {
44 b2ad2ef1 2005-01-04 devnull int i;
45 b2ad2ef1 2005-01-04 devnull char *p;
46 b2ad2ef1 2005-01-04 devnull
47 b2ad2ef1 2005-01-04 devnull *c1 = Bgetc(b);
48 b2ad2ef1 2005-01-04 devnull if(*c1 == -1)
49 b2ad2ef1 2005-01-04 devnull exits(0);
50 b2ad2ef1 2005-01-04 devnull *c2 = Bgetc(b);
51 b2ad2ef1 2005-01-04 devnull *q0 = getn(b);
52 b2ad2ef1 2005-01-04 devnull *q1 = getn(b);
53 b2ad2ef1 2005-01-04 devnull *flag = getn(b);
54 b2ad2ef1 2005-01-04 devnull *nr = getn(b);
55 b2ad2ef1 2005-01-04 devnull if(*nr >= 256)
56 b2ad2ef1 2005-01-04 devnull sysfatal("event string too long");
57 b2ad2ef1 2005-01-04 devnull p = buf;
58 b2ad2ef1 2005-01-04 devnull for(i=0; i<*nr; i++)
59 b2ad2ef1 2005-01-04 devnull p = getrune(b, p);
60 b2ad2ef1 2005-01-04 devnull *p = 0;
61 b2ad2ef1 2005-01-04 devnull if(Bgetc(b) != '\n')
62 b2ad2ef1 2005-01-04 devnull sysfatal("expected newline");
63 b2ad2ef1 2005-01-04 devnull }
64 b2ad2ef1 2005-01-04 devnull
65 b2ad2ef1 2005-01-04 devnull void
66 b2ad2ef1 2005-01-04 devnull main(void)
67 b2ad2ef1 2005-01-04 devnull {
68 b2ad2ef1 2005-01-04 devnull int c1, c2, q0, q1, eq0, eq1, flag, nr, x;
69 b2ad2ef1 2005-01-04 devnull Biobuf b;
70 b2ad2ef1 2005-01-04 devnull char buf[2000], buf2[2000], buf3[2000];
71 b2ad2ef1 2005-01-04 devnull
72 b2ad2ef1 2005-01-04 devnull doquote = needsrcquote;
73 b2ad2ef1 2005-01-04 devnull quotefmtinstall();
74 b2ad2ef1 2005-01-04 devnull Binit(&b, 0, OREAD);
75 b2ad2ef1 2005-01-04 devnull for(;;){
76 b2ad2ef1 2005-01-04 devnull getevent(&b, &c1, &c2, &q0, &q1, &flag, &nr, buf);
77 b2ad2ef1 2005-01-04 devnull eq0 = q0;
78 b2ad2ef1 2005-01-04 devnull eq1 = q1;
79 b2ad2ef1 2005-01-04 devnull buf2[0] = 0;
80 b2ad2ef1 2005-01-04 devnull buf3[0] = 0;
81 b2ad2ef1 2005-01-04 devnull if(flag & 2){
82 b2ad2ef1 2005-01-04 devnull /* null string with non-null expansion */
83 b2ad2ef1 2005-01-04 devnull getevent(&b, &x, &x, &eq0, &eq1, &x, &nr, buf);
84 b2ad2ef1 2005-01-04 devnull }
85 b2ad2ef1 2005-01-04 devnull if(flag & 8){
86 b2ad2ef1 2005-01-04 devnull /* chorded argument */
87 b2ad2ef1 2005-01-04 devnull getevent(&b, &x, &x, &x, &x, &x, &x, buf2);
88 b2ad2ef1 2005-01-04 devnull getevent(&b, &x, &x, &x, &x, &x, &x, buf3);
89 b2ad2ef1 2005-01-04 devnull }
90 b2ad2ef1 2005-01-04 devnull print("event %c %c %d %d %d %d %d %d %q %q %q\n",
91 b2ad2ef1 2005-01-04 devnull c1, c2, q0, q1, eq0, eq1, flag, nr, buf, buf2, buf3);
92 b2ad2ef1 2005-01-04 devnull }
93 b2ad2ef1 2005-01-04 devnull }