]> git.tdb.fi Git - ext/subsurface.git/commitdiff
gasmix: stop tracking nitrogen percentages
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 1 Sep 2011 23:26:11 +0000 (16:26 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 1 Sep 2011 23:26:11 +0000 (16:26 -0700)
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>
dive.h
parse-xml.c

diff --git a/dive.h b/dive.h
index 0bac6b2b9eeb580727c2c7cddbf6efc71f19e89f..bce1fe669549c6ab134570cac581c61613f8879d 100644 (file)
--- a/dive.h
+++ b/dive.h
@@ -66,7 +66,6 @@ typedef struct {
 
 typedef struct {
        fraction_t o2;
-       fraction_t n2;
        fraction_t he;
 } gasmix_t;
 
index e0231ce465498b61f03adbdaaf2406c54303f499..9b0797ea03f3f0dffa995e45967ed7c8f844d093 100644 (file)
@@ -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;