summaryrefslogtreecommitdiffstats
path: root/parse-xml.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-01 16:26:11 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-01 16:26:11 -0700
commitd5e42d485e6c4a62b78281aac900bb447d811ab1 (patch)
tree29f958ad62d29bf9cd92fef9985a361377b89deb /parse-xml.c
parentadc7280c025e68f6d55d779ad56712cb17aa3ae7 (diff)
downloadsubsurface-d5e42d485e6c4a62b78281aac900bb447d811ab1.tar.gz
gasmix: stop tracking nitrogen percentages
The only thing you can do with that thing is screw things up (like libdivecomputer did). There's no value in tracking the "filler" gas, since you can always just calculate it from the gases that actually matter. So just track Oxygen and Helium - and make sure they have sane values. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'parse-xml.c')
-rw-r--r--parse-xml.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/parse-xml.c b/parse-xml.c
index e0231ce46..9b0797ea0 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -333,6 +333,10 @@ static void gasmix(char *buffer, void *_fraction)
percent(buffer, _fraction);
}
+static void gasmix_nitrogen(char *buffer, void *_gasmix)
+{
+ /* Ignore n2 percentages. There's no value in them. */
+}
#define MATCH(pattern, fn, dest) \
match(pattern, strlen(pattern), name, len, fn, buf, dest)
@@ -407,7 +411,7 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf)
if (MATCH(".o2", gasmix, &dive->gasmix[gasmix_index].o2))
return;
- if (MATCH(".n2", gasmix, &dive->gasmix[gasmix_index].n2))
+ if (MATCH(".n2", gasmix_nitrogen, &dive->gasmix[gasmix_index]))
return;
if (MATCH(".he", gasmix, &dive->gasmix[gasmix_index].he))
return;
@@ -468,12 +472,43 @@ static char *generate_name(struct dive *dive)
return p;
}
+static void sanitize_gasmix(struct dive *dive)
+{
+ int i;
+
+ for (i = 0; i < MAX_MIXES; i++) {
+ gasmix_t *mix = dive->gasmix+i;
+ unsigned int o2, he;
+
+ o2 = mix->o2.permille;
+ he = mix->he.permille;
+
+ /* Regular air: leave empty */
+ if (!he) {
+ if (!o2)
+ continue;
+ /* 20.9% or 21% O2 is just air */
+ if (o2 >= 209 && o2 <= 210) {
+ mix->o2.permille = 0;
+ continue;
+ }
+ }
+
+ /* Sane mix? */
+ if (o2 <= 1000 && he <= 1000 && o2+he <= 1000)
+ continue;
+ fprintf(stderr, "Odd gasmix: %d O2 %d He\n", o2, he);
+ memset(mix, 0, sizeof(*mix));
+ }
+}
+
static void dive_end(void)
{
if (!dive)
return;
if (!dive->name)
dive->name = generate_name(dive);
+ sanitize_gasmix(dive);
record_dive(dive);
dive = NULL;
gasmix_index = 0;