new libacme
diff --git a/include/acme.h b/include/acme.h
new file mode 100644
index 0000000..372a909
--- /dev/null
+++ b/include/acme.h
@@ -0,0 +1,76 @@
+AUTOLIB(acme);
+
+typedef struct Event Event;
+typedef struct Win Win;
+
+#define	EVENTSIZE	256
+struct Event
+{
+	int	c1;
+	int	c2;
+	int	oq0;
+	int	oq1;
+	int	q0;
+	int	q1;
+	int	flag;
+	int	nb;
+	int	nr;
+	char	text[EVENTSIZE*UTFmax+1];
+	char	arg[EVENTSIZE*UTFmax+1];
+	char	loc[EVENTSIZE*UTFmax+1];
+};
+
+struct Win
+{
+	int id;
+	CFid *ctl;
+	CFid *tag;
+	CFid *body;
+	CFid *addr;
+	CFid *event;
+	CFid *data;
+	CFid *xdata;
+	Channel *c;	/* chan(Event) */
+	Win *next;
+	Win *prev;
+	
+	/* events */
+	int nbuf;
+	char buf[1024];
+	char *bufp;
+	jmp_buf jmp;
+	Event e2;
+	Event e3;
+	Event e4;
+};
+
+Win *newwin(void);
+Win *openwin(int, CFid*);
+
+int eventfmt(Fmt*);
+int pipewinto(Win *w, char *name, int, char *fmt, ...);
+int pipetowin(Win *w, char *name, int, char *fmt, ...);
+char *sysrun(char*, ...);
+int winaddr(Win *w, char *fmt, ...);
+int winctl(Win *w, char *fmt, ...);
+int windel(Win *w, int sure);
+int winfd(Win *w, char *name, int);
+char *winmread(Win *w, char *file);
+int winname(Win *w, char *fmt, ...);
+int winprint(Win *w, char *name, char *fmt, ...);
+int winread(Win *w, char *file, void *a, int n);
+int winseek(Win *w, char *file, int n, int off);
+int winreadaddr(Win *w, uint*);
+int winreadevent(Win *w, Event *e);
+int winwrite(Win *w, char *file, void *a, int n);
+int winwriteevent(Win *w, Event *e);
+int winopenfd(Win *w, char *name, int mode);
+void windeleteall(void);
+void winfree(Win *w);
+void winclosefiles(Win *w);
+Channel *wineventchan(Win *w);
+
+void *erealloc(void*, uint);
+void *emalloc(uint);
+char *estrdup(char*);
+char *evsmprint(char*, va_list);