 // Code to handle the menus.
 ////////////////////////////////////////////////////////////////////////////////
 
-const char *Menu0[] = {"Save", "Restore", "Exit"};
-
-void show_menu()
-{
-  Serial.println("show_menu()");
+typedef void (*MenuDisplay)(int slot_num);
+typedef void (*MenuAction)(int slot_num);
+
+struct Menu
+{
+  const char *title;
+  int num_items;
+  MenuDisplay display;
+  MenuAction action;
+  const char **items;
+};
+
+void show_menu(struct Menu *menu)
+{
+  Serial.print("show_menu("); Serial.print(menu->title); Serial.println(")");
+
+  lcd.clear();
+  lcd.setCursor(0, 0);
+  lcd.write(menu->title);
+  menu->display(0);
 
   while (true)
   {

  interrupts();
}

byte pop_event()
{
  // Must protect from RE code fiddling with queue
  noInterrupts();

  }
}

void pinB_isr(void)
{
  byte reading = PIND & 0xC;
  
