imap-based new upas/fs
diff --git a/src/cmd/upas/nfs/mbox.c b/src/cmd/upas/nfs/mbox.c
new file mode 100644
index 0000000..5f90f0a
--- /dev/null
+++ b/src/cmd/upas/nfs/mbox.c
@@ -0,0 +1,68 @@
+#include "a.h"
+
+Mailbox *hash[123];
+Mailbox **box;
+uint nbox;
+
+static void
+markboxes(int mark)
+{
+	Mailbox *b;
+	
+	for(i=0; i<nbox; i++)
+		if(box[i])
+			box[i]->mark = mark;
+}
+
+static void
+sweepboxes(void)
+{
+	Mailbox *b;
+	
+	for(i=0; i<nbox; i++)
+		if(box[i] && box[i]->mark){
+			freembox(box[i]);
+			box[i] = nil;
+		}
+}
+
+static Mailbox*
+mboxbyname(char *name)
+{
+	int i;
+	
+	for(i=0; i<nbox; i++)
+		if(box[i] && strcmp(box[i]->name, name) == 0)
+			return box[i];
+	return nil;
+}
+
+static Mailbox*
+mboxbyid(int id)
+{
+	if(id < 0 || id >= nbox)
+		return nil;
+	return box[id];
+}
+
+static Mailbox*
+mboxcreate(char *name)
+{
+	Mailbox *b;
+	
+	b = emalloc(sizeof *b);
+	b->name = estrdup(name);
+	if(nbox%64 == 0)
+		box = erealloc(box, (nbox+64)*sizeof box[0]);
+	box[nbox++] = b;
+	return b;
+}
+
+void
+mboxupdate(void)
+{
+	markboxes();
+	if(imapcmd("LIST \"\" *") < 0)
+		return;
+	sweepboxes();
+}