]> git.tdb.fi Git - ext/subsurface.git/blobdiff - save-xml.c
Might as well free current_file
[ext/subsurface.git] / save-xml.c
index 4183b1c51ade4cb9fb36c0f2727d56a3b601fbbb..37d6d062eabf836f188b8cfc2bcd0b6feae0c6a4 100644 (file)
@@ -183,6 +183,7 @@ static void save_overview(FILE *f, struct dive *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");
+       show_utf8(f, dive->suit, "  <suit>","</suit>\n");
 }
 
 static void save_cylinder_info(FILE *f, struct dive *dive)
@@ -202,22 +203,42 @@ static void save_cylinder_info(FILE *f, struct dive *dive)
                if (!o2 && !volume && !start && !end)
                        return;
                fprintf(f, "  <cylinder");
-               if (o2) {
-                       fprintf(f, " o2='%u.%u%%'", FRACTION(o2, 10));
-                       if (he)
-                               fprintf(f, " he='%u.%u%%'", FRACTION(he, 10));
-               }
                if (volume)
                        show_milli(f, " size='", volume, " l", "'");
                show_pressure(f, cylinder->type.workingpressure, " workpressure='", "'");
                if (description && *description)
                        fprintf(f, " description='%s'", description);
+               if (o2) {
+                       fprintf(f, " o2='%u.%u%%'", FRACTION(o2, 10));
+                       if (he)
+                               fprintf(f, " he='%u.%u%%'", FRACTION(he, 10));
+               }
                show_pressure(f, cylinder->start, " start='", "'");
                show_pressure(f, cylinder->end, " end='", "'");
                fprintf(f, " />\n");
        }
 }
 
+static void save_weightsystem_info(FILE *f, struct dive *dive)
+{
+       int i;
+
+       for (i = 0; i < MAX_WEIGHTSYSTEMS; i++) {
+               weightsystem_t *ws = dive->weightsystem+i;
+               int grams = ws->weight.grams;
+               const char *description = ws->description;
+
+               /* No weight information at all? */
+               if (grams == 0)
+                       return;
+               fprintf(f, "  <weightsystem");
+               show_milli(f, " weight='", grams, " kg", "'");
+               if (description && *description)
+                       fprintf(f, " description='%s'", description);
+               fprintf(f, " />\n");
+       }
+}
+
 static void show_index(FILE *f, int value, const char *pre, const char *post)
 {
        if (value)
@@ -262,6 +283,8 @@ static void save_dive(FILE *f, struct dive *dive)
        fputs("<dive", f);
        if (dive->number)
                fprintf(f, " number='%d'", dive->number);
+       if (dive->rating)
+               fprintf(f, " rating='%d'", dive->rating);
        fprintf(f, " date='%04u-%02u-%02u'",
                tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday);
        fprintf(f, " time='%02u:%02u:%02u'",
@@ -270,6 +293,7 @@ static void save_dive(FILE *f, struct dive *dive)
                FRACTION(dive->duration.seconds, 60));
        save_overview(f, dive);
        save_cylinder_info(f, dive);
+       save_weightsystem_info(f, dive);
        save_events(f, dive->events);
        for (i = 0; i < dive->samples; i++)
                save_sample(f, dive->sample+i);