Index: main/menu2.c
===================================================================
--- main/menu2.c	(revision main,1)
+++ main/menu2.c	(revision main,2)
@@ -12,5 +12,8 @@
 	char *item_names[_MAX_ITEMS];
 	char *item_descriptions[_MAX_ITEMS];
+	ITEM *item_structs[_MAX_ITEMS + 1];
 	int item_count;
+
+	MENU *menu_struct; /* Only set when posted. */
 };
 
@@ -43,13 +46,17 @@
 {
 	struct menu2_t *m = _menus[menu - 1];
+	int *i;
+
 	if(!m) return 0;
 
-	if(m->item_count == _MAX_ITEMS) return 0;
+	i = &(m->item_count);
+	if(*i == _MAX_ITEMS) return 0;
 
-	m->item_names[m->item_count] = strdup(name);
-	m->item_descriptions[m->item_count] =
-		strdup(description ? description : name);
+	m->item_names[*i] = strdup(name);
+	m->item_descriptions[*i] = strdup(description ? description : name);
+	m->item_structs[*i] =
+		new_item(m->item_names[*i], m->item_descriptions[*i]);
 	
-	++m->item_count;
+	++(*i);
 
 	return 1;
@@ -64,6 +71,7 @@
 
 	for(i = 0; i < m->item_count; i++) {
+		free_item(m->item_structs[i]);
+		free(m->item_descriptions[i]);
 		free(m->item_names[i]);
-		free(m->item_descriptions[i]);
 	}
 
@@ -79,7 +87,35 @@
 
 	if(!m) return 0;
+	if(m->menu_struct) return 0;
 
-	blah
+	m->menu_struct = new_menu(m->item_structs);
+	post_menu(m->menu_struct);
+
+	return 1;
 }
 
-menu2_drive(int, int);
+int menu2_drive(menu2_h menu, int c)
+{
+	struct menu2_t *m = _menus[menu - 1];
+
+	if(!m) return 0;
+	if(!m->menu_struct) return 0;
+
+	menu_driver(m->menu_struct, c);
+
+	return 1;
+}
+
+int menu2_unpost(menu2_h menu)
+{
+	struct menu2_t *m = _menus[menu - 1];
+
+	if(!m) return 0;
+	if(!m->menu_struct) return 0;
+
+	unpost_menu(m->menu_struct);
+	free_menu(m->menu_struct);
+	m->menu_struct = NULL;
+
+	return 1;
+}
