diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-09 07:37:25 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-09 08:13:17 -0800 |
commit | 0089dd8819b7b28ad5c48dbfc881f4011f18014e (patch) | |
tree | f6e511bc42d7db27531f6ad33d185eae070f9273 | |
parent | 2b26b6433f77cb4bf7523a90148a0087549e30e5 (diff) | |
download | subsurface-0089dd8819b7b28ad5c48dbfc881f4011f18014e.tar.gz |
Don't save cylinder start/end pressures unless set by hand
Keep the sample pressure start/end data separate from the overall
cylinder start/end data - and clean the overall cylinder start/end data
if it matches the samples exactly to avoid the redundancy.
This breaks all the SAC calculations etc, which expect the cylinder
pressures to always be in the cylinder data. I'll fix that up
separately.
The reason for this is that we really want to keep the manually entered
data separate: the pressure plotting doesn't need the confusion, and
considers end-point data (with interpolation) very different from sample
data. Also, we do not want to pollute the xml save-file with data that
is computed.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | dive.c | 48 | ||||
-rw-r--r-- | dive.h | 2 |
2 files changed, 14 insertions, 36 deletions
@@ -207,46 +207,21 @@ static void update_temperature(temperature_t *temperature, int new) } } -/* - * If you have more than 32 cylinders, you'd better have a 64-bit build. - * And if you have more than 64 cylinders, you need to use another tool, - * or fix this up to do something odd. - */ -static unsigned long fixup_pressure(struct dive *dive, struct sample *sample, unsigned long flags) +static void fixup_pressure(struct dive *dive, struct sample *sample) { - unsigned long mask; unsigned int pressure, index; cylinder_t *cyl; pressure = sample->cylinderpressure.mbar; if (!pressure) - return flags; + return; index = sample->cylinderindex; if (index >= MAX_CYLINDERS) - return flags; + return; cyl = dive->cylinder + index; - if (!cyl->start.mbar) - cyl->start.mbar = pressure; - /* - * If we already have an end pressure, without - * ever having seen a sample for this cylinder, - * that means that somebody set the end pressure - * by hand - */ - mask = 1ul << index; - if (cyl->end.mbar) { - if (!(flags & mask)) - return flags; - } - flags |= mask; - - /* we need to handle the user entering beginning and end tank pressures - * - maybe even IF we have samples. But for now if we have air pressure - * data in the samples, we use that instead of the minimum - * if (!cyl->end.mbar || pressure < cyl->end.mbar) - */ - cyl->end.mbar = pressure; - return flags; + if (!cyl->sample_start.mbar) + cyl->sample_start.mbar = pressure; + cyl->sample_end.mbar = pressure; } struct dive *fixup_dive(struct dive *dive) @@ -258,7 +233,6 @@ struct dive *fixup_dive(struct dive *dive) int maxdepth = 0, mintemp = 0; int lastdepth = 0; int lasttemp = 0; - unsigned long flags = 0; for (i = 0; i < dive->samples; i++) { struct sample *sample = dive->sample + i; @@ -276,7 +250,7 @@ struct dive *fixup_dive(struct dive *dive) maxdepth = depth; } - flags = fixup_pressure(dive, sample, flags); + fixup_pressure(dive, sample); if (temp) { /* @@ -311,8 +285,12 @@ struct dive *fixup_dive(struct dive *dive) add_people(dive->divemaster); add_location(dive->location); for (i = 0; i < MAX_CYLINDERS; i++) { - cylinder_type_t *type = &dive->cylinder[i].type; - add_cylinder_description(type); + cylinder_t *cyl = dive->cylinder + i; + add_cylinder_description(&cyl->type); + if (cyl->sample_start.mbar == cyl->start.mbar) + cyl->start.mbar = 0; + if (cyl->sample_end.mbar == cyl->end.mbar) + cyl->end.mbar = 0; } return dive; @@ -84,7 +84,7 @@ typedef struct { typedef struct { cylinder_type_t type; struct gasmix gasmix; - pressure_t start, end; + pressure_t start, end, sample_start, sample_end; } cylinder_t; extern int get_pressure_units(unsigned int mb, const char **units); |