M acme.h => acme.h +5 -3
@@ 13,8 13,8 @@ struct AWin {
int ctlfd;
int addrfd;
int datafd;
- int eventfd;
int bodyfd;
+ int eventfd;
char buf[512];
char *bufp;
@@ 50,5 50,7 @@ int awinput(AWin *, char *);
int awinaddtag(AWin *, char *);
int awinsettag(AWin *, char *);
-int aeventnext(AWin *, AEvent *);
-int aeventsend(AWin *, AEvent *);
+void aeventopen(AWin *);
+int aeventread(AWin *, AEvent *);
+int aeventwrite(AWin *, AEvent *);
+void aeventclose(AWin *w);
M event.c => event.c +16 -2
@@ 77,8 77,15 @@ getdata(AWin *w, AEvent *e)
return o;
}
+void
+aeventopen(AWin *w)
+{
+ if(w->eventfd < 0)
+ w->eventfd = awinfsopen(w, "event", ORDWR);
+}
+
int
-aeventnext(AWin *w, AEvent *e)
+aeventread(AWin *w, AEvent *e)
{
int flags;
@@ 107,10 114,17 @@ loop:
}
int
-aeventsend(AWin *w, AEvent *e)
+aeventwrite(AWin *w, AEvent *e)
{
if(e->flags & 0x2)
return fprint(w->eventfd, "%c%c%d %d\n", e->origin, e->type, e->p, e->p);
else
return fprint(w->eventfd, "%c%c%d %d\n", e->origin, e->type, e->q0, e->q1);
}
+
+void
+aeventclose(AWin *w)
+{
+ close(w->eventfd);
+ w->eventfd = -1;
+}
M libacme.man => libacme.man +15 -7
@@ 28,9 28,13 @@ acme \- functions for interacting with acme's filesystem interface
.B void awinsettag(AWin *w, char *tag);
.br
.PP
-.B void aeventstop(AWin *w);
+.B void aeventlisten(AWin *w);
+.br
+.B void aeventnext(AWin *w);
.br
.B void aeventsend(AWin *w, AEvent *ev);
+.br
+.B void aeventstop(AWin *w);
.SH DESCRIPTION
.PP
These routines provide a C interface to
@@ 63,15 67,19 @@ into
to the end of the window tag.
.I Awinsettag replaces the current window tag.
.PP
-.I Aeventnext reads the next event into
+.I Aeventopen
+opens the window event file. It should be called before using
+.IR aeventnext .
+.I Aeventread
+reads the next event into
.BR ev .
-.I Aventsend writes the event
+.I Aventwrite
+writes the event
.B ev
to the events file.
-They require
-.B w->eventfd
-to be a file descriptor reffering to
-the event file in the window\'s directory.
+.I Aeventclose
+closes the event file. It should be called when the program
+no longer wishes to process events.
.SH FILES
.PP
.B /sys/include/acme.h
M window.c => window.c +1 -0
@@ 36,6 36,7 @@ awincreate(void)
w->addrfd = awinfsopen(w, "addr", ORDWR);
w->datafd = awinfsopen(w, "data", ORDWR);
w->bodyfd = awinfsopen(w, "body", OWRITE);
+ w->eventfd = -1;
w->next = awins;
awins = w;