X-Git-Url: http://git.tdb.fi/?p=ext%2Fsubsurface.git;a=blobdiff_plain;f=save-xml.c;h=37d6d062eabf836f188b8cfc2bcd0b6feae0c6a4;hp=e64b380a48076ccbee46a0f7075b14c93675133f;hb=589589c707262920a4c9ffc258704e30fa62b8fa;hpb=5804c2970eaaf0215b9862f767cf7aa745083744 diff --git a/save-xml.c b/save-xml.c index e64b380..37d6d06 100644 --- a/save-xml.c +++ b/save-xml.c @@ -162,7 +162,7 @@ static void show_location(FILE *f, struct dive *dive) */ if (latitude || longitude) { int len = snprintf(buffer, sizeof(buffer)-4, - " ", + " ", latitude, longitude); if (!dive->location) { memcpy(&buffer[len-1], "/>\n", 4); @@ -183,6 +183,7 @@ static void save_overview(FILE *f, struct dive *dive) show_utf8(f, dive->divemaster, " ","\n"); show_utf8(f, dive->buddy, " ","\n"); show_utf8(f, dive->notes, " ","\n"); + show_utf8(f, dive->suit, " ","\n"); } static void save_cylinder_info(FILE *f, struct dive *dive) @@ -202,22 +203,48 @@ static void save_cylinder_info(FILE *f, struct dive *dive) if (!o2 && !volume && !start && !end) return; fprintf(f, " 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, " \n"); + } +} + +static void show_index(FILE *f, int value, const char *pre, const char *post) +{ + if (value) + fprintf(f, " %s%d%s", pre, value, post); +} + static void save_sample(FILE *f, struct sample *sample) { fprintf(f, " time.seconds,60)); @@ -229,6 +256,25 @@ static void save_sample(FILE *f, struct sample *sample) fprintf(f, " />\n"); } +static void save_one_event(FILE *f, struct event *ev) +{ + fprintf(f, " time.seconds,60)); + show_index(f, ev->type, "type='", "'"); + show_index(f, ev->flags, "flags='", "'"); + show_index(f, ev->value, "value='", "'"); + show_utf8(f, ev->name, " name='", "'"); + fprintf(f, " />\n"); +} + + +static void save_events(FILE *f, struct event *ev) +{ + while (ev) { + save_one_event(f, ev); + ev = ev->next; + } +} + static void save_dive(FILE *f, struct dive *dive) { int i; @@ -237,6 +283,8 @@ static void save_dive(FILE *f, struct dive *dive) fputs("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'", @@ -245,6 +293,8 @@ 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); fprintf(f, "\n");