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>
7 b2ad2ef1 2005-01-04 devnull getn(Biobuf *b)
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;
20 b2ad2ef1 2005-01-04 devnull getrune(Biobuf *b, char *p)
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");
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;
38 b2ad2ef1 2005-01-04 devnull return q;
42 b2ad2ef1 2005-01-04 devnull getevent(Biobuf *b, int *c1, int *c2, int *q0, int *q1, int *flag, int *nr, char *buf)
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");
58 b2ad2ef1 2005-01-04 devnull for(i=0; i<*nr; i++)
59 b2ad2ef1 2005-01-04 devnull p = getrune(b, p);
61 b2ad2ef1 2005-01-04 devnull if(Bgetc(b) != '\n')
62 b2ad2ef1 2005-01-04 devnull sysfatal("expected newline");
66 b2ad2ef1 2005-01-04 devnull main(void)
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];
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);
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);
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);
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);