diff options
-rw-r--r-- | dive.h | 2 | ||||
-rw-r--r-- | equipment.c | 17 | ||||
-rw-r--r-- | save-xml.c | 23 |
3 files changed, 31 insertions, 11 deletions
@@ -93,6 +93,8 @@ typedef struct { const char *description; /* "integrated", "belt", "ankle" */ } weightsystem_t; +extern gboolean cylinder_nodata(cylinder_t *cyl); +extern gboolean cylinder_nosamples(cylinder_t *cyl); extern gboolean cylinder_none(void *_data); extern gboolean no_cylinders(cylinder_t *cyl); extern gboolean cylinders_equal(cylinder_t *cyl1, cylinder_t *cyl2); diff --git a/equipment.c b/equipment.c index fc31d9729..7c473f6df 100644 --- a/equipment.c +++ b/equipment.c @@ -444,20 +444,29 @@ static void show_weightsystem(weightsystem_t *ws, struct ws_widget *weightsystem set_weight_weight_spinbutton(weightsystem_widget, ws->weight.grams); } -gboolean cylinder_none(void *_data) +gboolean cylinder_nodata(cylinder_t *cyl) { - cylinder_t *cyl = _data; return !cyl->type.size.mliter && !cyl->type.workingpressure.mbar && !cyl->type.description && !cyl->gasmix.o2.permille && !cyl->gasmix.he.permille && - !cyl->sample_start.mbar && - !cyl->sample_end.mbar && !cyl->start.mbar && !cyl->end.mbar; } +gboolean cylinder_nosamples(cylinder_t *cyl) +{ + return !cyl->sample_start.mbar && + !cyl->sample_end.mbar; +} + +gboolean cylinder_none(void *_data) +{ + cylinder_t *cyl = _data; + return cylinder_nodata(cyl) && cylinder_nosamples(cyl); +} + gboolean no_cylinders(cylinder_t *cyl) { int i; diff --git a/save-xml.c b/save-xml.c index cd5ccf94c..63e5a9ae3 100644 --- a/save-xml.c +++ b/save-xml.c @@ -193,22 +193,31 @@ static void save_overview(FILE *f, struct dive *dive) show_utf8(f, dive->suit, " <suit>","</suit>\n", 0); } +static int nr_cylinders(struct dive *dive) +{ + int nr; + + for (nr = MAX_CYLINDERS; nr; --nr) { + cylinder_t *cylinder = dive->cylinder+nr-1; + if (!cylinder_nodata(cylinder)) + break; + } + return nr; +} + static void save_cylinder_info(FILE *f, struct dive *dive) { - int i; + int i, nr; - for (i = 0; i < MAX_CYLINDERS; i++) { + nr = nr_cylinders(dive); + + for (i = 0; i < nr; i++) { cylinder_t *cylinder = dive->cylinder+i; int volume = cylinder->type.size.mliter; const char *description = cylinder->type.description; int o2 = cylinder->gasmix.o2.permille; int he = cylinder->gasmix.he.permille; - int start = cylinder->start.mbar; - int end = cylinder->end.mbar; - /* No cylinder information at all? */ - if (!o2 && !volume && !start && !end) - return; fprintf(f, " <cylinder"); if (volume) show_milli(f, " size='", volume, " l", "'"); |