Ignore Nitrox/He seetings when editing cylinders for multiple dives

When figuring out which cylinders to change in a multi-dive edit, we
already ignored the beginning and end pressures. But it turns out to make
more sense to also ignore the Nitrox / Helium settings.

Imagine you do a number of dives - for some reason your dive computer
records the wrong cylinder size in the downloaded logfile (like my uemis
does all the time). Dives will likely have different Nitrox percentage,
but you should still be able to simply fix the cylinder size for all dives
at once.

Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2012-08-26 12:25:51 -07:00
parent 666538ec77
commit 21fd73515f
3 changed files with 18 additions and 4 deletions

1
dive.h
View file

@ -95,6 +95,7 @@ typedef struct {
extern gboolean cylinder_none(void *_data);
extern gboolean no_cylinders(cylinder_t *cyl);
extern gboolean cylinders_equal(cylinder_t *cyl1, cylinder_t *cyl2);
extern void copy_cylinders(cylinder_t *cyl1, cylinder_t *cyl2);
extern gboolean no_weightsystems(weightsystem_t *ws);
extern gboolean weightsystems_equal(weightsystem_t *ws1, weightsystem_t *ws2);

View file

@ -461,13 +461,11 @@ gboolean description_equal(const char *desc1, const char *desc2)
}
/* when checking for the same cylinder we want the size and description to match
but don't compare the start and end pressures */
but don't compare the start and end pressures, nor the Nitrox/He values */
static gboolean one_cylinder_equal(cylinder_t *cyl1, cylinder_t *cyl2)
{
return cyl1->type.size.mliter == cyl2->type.size.mliter &&
cyl1->type.workingpressure.mbar == cyl2->type.workingpressure.mbar &&
cyl1->gasmix.o2.permille == cyl2->gasmix.o2.permille &&
cyl1->gasmix.he.permille == cyl2->gasmix.he.permille &&
description_equal(cyl1->type.description, cyl2->type.description);
}
@ -481,6 +479,21 @@ gboolean cylinders_equal(cylinder_t *cyl1, cylinder_t *cyl2)
return TRUE;
}
/* copy size and description of all cylinders from cyl1 to cyl2 */
void copy_cylinders(cylinder_t *cyl1, cylinder_t *cyl2)
{
int i;
for (i = 0; i < MAX_CYLINDERS; i++) {
cyl2[i].type.size.mliter = cyl1[i].type.size.mliter;
cyl2[i].type.workingpressure.mbar = cyl1[i].type.workingpressure.mbar;
if (cyl1[i].type.description)
cyl2[i].type.description = strdup(cyl1[i].type.description);
else
cyl2[i].type.description = NULL;
}
}
static gboolean weightsystem_none(void *_data)
{
weightsystem_t *ws = _data;

2
info.c
View file

@ -482,7 +482,7 @@ void update_equipment_data(struct dive *dive, struct dive *master)
if ( ! cylinders_equal(remember_cyl, master->cylinder) &&
(no_cylinders(dive->cylinder) ||
cylinders_equal(dive->cylinder, remember_cyl)))
memcpy(dive->cylinder, master->cylinder, CYL_BYTES);
copy_cylinders(master->cylinder, dive->cylinder);
if (! weightsystems_equal(remember_ws, master->weightsystem) &&
(no_weightsystems(dive->weightsystem) ||
weightsystems_equal(dive->weightsystem, remember_ws)))