summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-11-09 07:37:25 -0800
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-11-09 08:13:17 -0800
commit0089dd8819b7b28ad5c48dbfc881f4011f18014e (patch)
treef6e511bc42d7db27531f6ad33d185eae070f9273
parent2b26b6433f77cb4bf7523a90148a0087549e30e5 (diff)
downloadsubsurface-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.c48
-rw-r--r--dive.h2
2 files changed, 14 insertions, 36 deletions
diff --git a/dive.c b/dive.c
index cb94e7925..bd1b92619 100644
--- a/dive.c
+++ b/dive.c
@@ -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;
diff --git a/dive.h b/dive.h
index 36a406c25..0116a1cf7 100644
--- a/dive.h
+++ b/dive.h
@@ -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);