From: robertl Date: Sun, 9 Jan 2011 04:50:01 +0000 (+0000) Subject: Rick Richardson adds read/write support for enhanced loc format from Groundspeak... X-Git-Tag: archive/raspbian/1.10.0+ds-2+rpi1~1^2~12^2~11^2~905 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=824c6de6548de962de8c84ee2d9739bb7e9a7149;p=gpsbabel.git Rick Richardson adds read/write support for enhanced loc format from Groundspeak that adds diff, terrain, and container.. --- diff --git a/gpsbabel/geo.c b/gpsbabel/geo.c index 55ea7955b..c2a0bec0e 100644 --- a/gpsbabel/geo.c +++ b/gpsbabel/geo.c @@ -52,6 +52,7 @@ geo_read(void) static xg_callback wpt_s, wpt_e; static xg_callback wpt_link_s, wpt_link; static xg_callback wpt_name, wpt_name_s, wpt_type, wpt_coord; +static xg_callback wpt_diff, wpt_terr, wpt_container; static xg_tag_mapping loc_map[] = { @@ -63,6 +64,9 @@ xg_tag_mapping loc_map[] = { { wpt_link_s, cb_start, "/loc/waypoint/link" }, { wpt_link, cb_cdata, "/loc/waypoint/link" }, { wpt_coord, cb_start, "/loc/waypoint/coord" }, + { wpt_diff, cb_cdata, "/loc/waypoint/difficulty" }, + { wpt_terr, cb_cdata, "/loc/waypoint/terrain" }, + { wpt_container,cb_cdata, "/loc/waypoint/container" }, { NULL, 0, NULL } }; @@ -148,6 +152,37 @@ void wpt_coord(const char *args, const char **attrv) } } +void wpt_container(const char *args, const char **unused) +{ + int v; + + if (!args) return; + switch ( atoi(args) ) + { + case 1: v = gc_unknown; break; + case 2: v = gc_micro; break; + case 3: v = gc_regular; break; + case 4: v = gc_large; break; + case 5: v = gc_virtual;; break; + case 6: v = gc_other; break; + case 8: v = gc_small; break; + default: v = gc_unknown; break; + } + waypt_alloc_gc_data(wpt_tmp)->container = v; +} + +void wpt_diff(const char *args, const char **unused) +{ + if (!args) return; + waypt_alloc_gc_data(wpt_tmp)->diff = atof(args) * 10; +} + +void wpt_terr(const char *args, const char **unused) +{ + if (!args) return; + waypt_alloc_gc_data(wpt_tmp)->terr = atof(args) * 10; +} + static void geo_rd_init(const char *fname) { @@ -203,6 +238,27 @@ geo_waypt_pr(const waypoint *waypointp) tmp); xfree(tmp); } + if (waypointp->gc_data) + { + int v; + + gbfprintf(ofd, "%.1lf\n", + waypointp->gc_data->diff / 10.0); + gbfprintf(ofd, "%.1lf\n", + waypointp->gc_data->terr / 10.0); + switch (waypointp->gc_data->container) + { + case gc_unknown: v = 1; break; + case gc_micro: v = 2; break; + case gc_regular: v = 3; break; + case gc_large: v = 4; break; + case gc_virtual: v = 5; break; + case gc_other: v = 6; break; + case gc_small: v = 8; break; + default: v = 1; break; + } + gbfprintf(ofd, "%d\n", v); + } gbfprintf(ofd, "\n"); }