 	display_wind(f.wind_degrees, f.ave_wind);
 }
 
+static char *hms(unsigned t) {
+	static char buf[16];
+	t /= 1000;
+	unsigned s = t % 60;
+	t /= 60;
+	unsigned m = t % 60;
+	t /= 60;
+	unsigned h = t;
+	snprintf(buf, sizeof(buf), "%d:%02d:%02d", h, m, s);
+	return buf;
+}
+
+void display_about(struct Statistics &s) {
+	tft.fillScreen(TFT_BLACK);
+	tft.setTextColor(TFT_WHITE);
+	tft.setCursor(1, 1);
+
+	tft.println(F("Weather Guy (c)2018"));
+	tft.print(F("Version: "));
+	tft.println(VERSION);
+	tft.print(F("Up: "));
+	tft.println(hms(millis()));
+	tft.println();
+	tft.print(F("Updates: "));
+	tft.println(s.num_updates);
+	tft.print(F("Last: "));
+	tft.println(hms(s.last_update));
+	tft.print(F("Max: "));
+	tft.println(hms(s.max_update));
+	tft.println();
+	tft.println(F("Failures"));
+	tft.print("Connect: ");
+	tft.println(s.connect_failures);
+	tft.print("Parse:   ");
+	tft.println(s.parse_failures);
+	tft.print("Memory:  ");
+	tft.println(s.mem_failures);
+}
+
 void update_display(int screen) {
 	switch (screen) {
 	case 0:

	case 4:
	case 5:
		display_forecast(forecasts[screen - 2]);
		break;
	}
}

			fade = cfg.dim;
		}
	} else if (swtch && now - last_switch > 250) {
		if (screen >= 6)
			screen = 0;
		else
			screen++;
