+static void save_depths(FILE *f, struct dive *dive)
+{
+ /* What's the point of this dive entry again? */
+ if (!dive->maxdepth.mm && !dive->meandepth.mm)
+ return;
+
+ fputs(" <depth", f);
+ show_depth(f, dive->maxdepth, " max='", "'");
+ show_depth(f, dive->meandepth, " mean='", "'");
+ fputs(" />\n", f);
+}
+
+static void save_temperatures(FILE *f, struct dive *dive)
+{
+ if (!dive->airtemp.mkelvin && !dive->watertemp.mkelvin)
+ return;
+ fputs(" <temperature", f);
+ show_temperature(f, dive->airtemp, " air='", "'");
+ show_temperature(f, dive->watertemp, " water='", "'");
+ fputs(" />\n", f);
+}
+
+static void show_location(FILE *f, struct dive *dive)
+{
+ char buffer[80];
+ const char *prefix = " <location>";
+ double latitude = dive->latitude;
+ double longitude = dive->longitude;
+
+ /*
+ * Ok, theoretically I guess you could dive at
+ * exactly 0,0. But we don't support that. So
+ * if you do, just fudge it a bit, and say that
+ * you dove a few meters away.
+ */
+ if (latitude || longitude) {
+ int len = snprintf(buffer, sizeof(buffer)-4,
+ " <location gps='%.12g %.12g'>",
+ latitude, longitude);
+ if (!dive->location) {
+ memcpy(&buffer[len-1], "/>\n", 4);
+ fputs(buffer, f);
+ return;
+ }
+ prefix = buffer;
+ }
+ show_utf8(f, dive->location, prefix,"</location>\n", 0);
+}
+