]> git.tdb.fi Git - ext/subsurface.git/blobdiff - save-xml.c
Add preference option to chose if SAC and/or OTU should be in divelist
[ext/subsurface.git] / save-xml.c
index 3ed67fe3972f6d6d788279d1a2e7de0678a17046..e64b380a48076ccbee46a0f7075b14c93675133f 100644 (file)
@@ -147,12 +147,41 @@ static void save_temperatures(FILE *f, struct dive *dive)
        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='%f %f'>",
+                       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");
+}
+
 static void save_overview(FILE *f, struct dive *dive)
 {
        save_depths(f, dive);
        save_temperatures(f, dive);
        show_duration(f, dive->surfacetime, "  <surfacetime>", "</surfacetime>\n");
-       show_utf8(f, dive->location, "  <location>","</location>\n");
+       show_location(f, dive);
+       show_utf8(f, dive->divemaster, "  <divemaster>","</divemaster>\n");
+       show_utf8(f, dive->buddy, "  <buddy>","</buddy>\n");
        show_utf8(f, dive->notes, "  <notes>","</notes>\n");
 }
 
@@ -181,7 +210,7 @@ static void save_cylinder_info(FILE *f, struct dive *dive)
                if (volume)
                        show_milli(f, " size='", volume, " l", "'");
                show_pressure(f, cylinder->type.workingpressure, " workpressure='", "'");
-               if (description)
+               if (description && *description)
                        fprintf(f, " description='%s'", description);
                show_pressure(f, cylinder->start, " start='", "'");
                show_pressure(f, cylinder->end, " end='", "'");
@@ -232,9 +261,9 @@ void save_dives(const char *filename)
                return;
 
        /* Flush any edits of current dives back to the dives! */
-       update_dive(NULL);
+       update_dive(current_dive);
 
-       fprintf(f, "<dives>\n<program name='diveclog' version='%d'></program>\n", VERSION);
+       fprintf(f, "<dives>\n<program name='subsurface' version='%d'></program>\n", VERSION);
        for (i = 0; i < dive_table.nr; i++)
                save_dive(f, get_dive(i));
        fprintf(f, "</dives>\n");