in with the new
This commit is contained in:
parent
48bfee4e5b
commit
b2ad2ef138
5 changed files with 310 additions and 144 deletions
93
src/cmd/acmeevent.c
Normal file
93
src/cmd/acmeevent.c
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <bio.h>
|
||||
|
||||
|
||||
int
|
||||
getn(Biobuf *b)
|
||||
{
|
||||
int c, n;
|
||||
|
||||
n = 0;
|
||||
while((c = Bgetc(b)) != -1 && '0'<=c && c<='9')
|
||||
n = n*10+c-'0';
|
||||
if(c != ' ')
|
||||
sysfatal("bad number syntax");
|
||||
return n;
|
||||
}
|
||||
|
||||
char*
|
||||
getrune(Biobuf *b, char *p)
|
||||
{
|
||||
int c;
|
||||
char *q;
|
||||
|
||||
c = Bgetc(b);
|
||||
if(c == -1)
|
||||
sysfatal("eof");
|
||||
q = p;
|
||||
*q++ = c;
|
||||
if(c >= Runeself){
|
||||
while(!fullrune(p, q-p)){
|
||||
c = Bgetc(b);
|
||||
if(c == -1)
|
||||
sysfatal("eof");
|
||||
*q++ = c;
|
||||
}
|
||||
}
|
||||
return q;
|
||||
}
|
||||
|
||||
void
|
||||
getevent(Biobuf *b, int *c1, int *c2, int *q0, int *q1, int *flag, int *nr, char *buf)
|
||||
{
|
||||
int i;
|
||||
char *p;
|
||||
|
||||
*c1 = Bgetc(b);
|
||||
if(*c1 == -1)
|
||||
exits(0);
|
||||
*c2 = Bgetc(b);
|
||||
*q0 = getn(b);
|
||||
*q1 = getn(b);
|
||||
*flag = getn(b);
|
||||
*nr = getn(b);
|
||||
if(*nr >= 256)
|
||||
sysfatal("event string too long");
|
||||
p = buf;
|
||||
for(i=0; i<*nr; i++)
|
||||
p = getrune(b, p);
|
||||
*p = 0;
|
||||
if(Bgetc(b) != '\n')
|
||||
sysfatal("expected newline");
|
||||
}
|
||||
|
||||
void
|
||||
main(void)
|
||||
{
|
||||
int c1, c2, q0, q1, eq0, eq1, flag, nr, x;
|
||||
Biobuf b;
|
||||
char buf[2000], buf2[2000], buf3[2000];
|
||||
|
||||
doquote = needsrcquote;
|
||||
quotefmtinstall();
|
||||
Binit(&b, 0, OREAD);
|
||||
for(;;){
|
||||
getevent(&b, &c1, &c2, &q0, &q1, &flag, &nr, buf);
|
||||
eq0 = q0;
|
||||
eq1 = q1;
|
||||
buf2[0] = 0;
|
||||
buf3[0] = 0;
|
||||
if(flag & 2){
|
||||
/* null string with non-null expansion */
|
||||
getevent(&b, &x, &x, &eq0, &eq1, &x, &nr, buf);
|
||||
}
|
||||
if(flag & 8){
|
||||
/* chorded argument */
|
||||
getevent(&b, &x, &x, &x, &x, &x, &x, buf2);
|
||||
getevent(&b, &x, &x, &x, &x, &x, &x, buf3);
|
||||
}
|
||||
print("event %c %c %d %d %d %d %d %d %q %q %q\n",
|
||||
c1, c2, q0, q1, eq0, eq1, flag, nr, buf, buf2, buf3);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue