summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.h2
-rw-r--r--equipment.c17
-rw-r--r--save-xml.c23
3 files changed, 31 insertions, 11 deletions
diff --git a/dive.h b/dive.h
index cab6eec29..e202279af 100644
--- a/dive.h
+++ b/dive.h
@@ -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", "'");