diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-01 16:26:11 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-01 16:26:11 -0700 |
commit | d5e42d485e6c4a62b78281aac900bb447d811ab1 (patch) | |
tree | 29f958ad62d29bf9cd92fef9985a361377b89deb /parse-xml.c | |
parent | adc7280c025e68f6d55d779ad56712cb17aa3ae7 (diff) | |
download | subsurface-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.c | 37 |
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; |