diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-15 18:16:07 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-15 18:16:07 -0700 |
commit | 5804c2970eaaf0215b9862f767cf7aa745083744 (patch) | |
tree | 4965a588e186f18a4eb75080f856ff711def6b8d /parse-xml.c | |
parent | 3a6652634b2152352f6f5a2b9ee3d549140ae337 (diff) | |
download | subsurface-5804c2970eaaf0215b9862f767cf7aa745083744.tar.gz |
Support gps coordinates for the location info
Sadly, no way to show them yet. But it would be nice to let people
enter them (and it would be doubly nice to have a dive computer that
does it at the surface), and then perhaps just do the "point browser at
google maps" thing.
Saving/parsing tested by hand-feeding the location of Enenui (Molokini
Crater) from google maps by hand into my divelog.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'parse-xml.c')
-rw-r--r-- | parse-xml.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/parse-xml.c b/parse-xml.c index 6bb78fdf6..22ab8458e 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -882,6 +882,20 @@ static int uddf_dive_match(struct dive *dive, const char *name, int len, char *b 0; } +static void gps_location(char *buffer, void *_dive) +{ + int i; + struct dive *dive = _dive; + double latitude, longitude; + + i = sscanf(buffer, "%lf %lf", &latitude, &longitude); + if (i == 2) { + dive->latitude = latitude; + dive->longitude = longitude; + } + free(buffer); +} + /* We're in the top-level dive xml. Try to convert whatever value to a dive value */ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf) { @@ -950,6 +964,8 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf) return; if (MATCH(".cylinderendpressure", pressure, &dive->cylinder[0].end)) return; + if (MATCH(".gps", gps_location, dive)) + return; if (MATCH(".location", utf8_string, &dive->location)) return; if (MATCH(".notes", utf8_string, &dive->notes)) |