From: robertl Date: Fri, 3 Dec 2004 23:51:26 +0000 (+0000) Subject: Add/fix track support for GPilotS. From Bernhard Spinnler. X-Git-Tag: archive/raspbian/1.10.0+ds-2+rpi1~1^2~12^2~11^2~3851 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d2adcb3214435cfee6c50f34593a4803e4a1414c;p=gpsbabel.git Add/fix track support for GPilotS. From Bernhard Spinnler. --- diff --git a/gpsbabel/Makefile b/gpsbabel/Makefile index f0fc695e7..5b51336ea 100644 --- a/gpsbabel/Makefile +++ b/gpsbabel/Makefile @@ -89,8 +89,8 @@ dep: (echo -n "internal_styles.c: mkstyle.sh " ; echo style/*.style ; /bin/echo -e '\t./mkstyle.sh > internal_styles.c || (rm -f internal_styles.c ; exit 1)' ) >> /tmp/dep echo Edit Makefile and bring in /tmp/dep -VERSIONU=1_2_5_beta11192004 -VERSIOND=1.2.5_beta11192004 +VERSIONU=1_2_5_beta11302004-bob +VERSIOND=1.2.5_beta11302004-bob #VERSIONU=1_2_4 #VERSIOND=1.2.4 diff --git a/gpsbabel/gpilots.c b/gpsbabel/gpilots.c index 0a95644fb..a5fe7fe52 100644 --- a/gpsbabel/gpilots.c +++ b/gpsbabel/gpilots.c @@ -232,7 +232,11 @@ data_read(void) int lon; int sz; fi_t fi; - + int trk_num = 0; + int trk_seg_num = 1; + char trk_seg_num_buf[10]; + char *trk_name = ""; + wpt_tmp = waypt_new(); rec = (struct record *) pdb_rec->data; @@ -282,9 +286,7 @@ data_read(void) * CustomTrkHdr */ case 101: - track_head = route_head_alloc(); - track_add_head(track_head); - track_head->rte_name = xstrndup(rec->wpt.CustTrkHdr.name, sizeof(rec->wpt.CustTrkHdr.name)); + trk_name = rec->wpt.CustTrkHdr.name; sz = be_read16(&rec->wpt.CustTrkHdr.number); /* switch between custom track points and compact track points. @@ -294,7 +296,27 @@ data_read(void) case 102: tp_cust = (Custom_Trk_Point_Type *) ((char *) pdb_rec->data + sizeof(rec->header) + sizeof(rec->wpt.CustTrkHdr)); while (sz--) { + if ((int)(tp_cust->new_trk) == 1 || trk_seg_num == 1) { + /* + * Start a new track segment + */ + track_head = route_head_alloc(); + if (trk_seg_num == 1) { + track_head->rte_name = xstrdup(trk_name); + } else { + /* name in the form TRACKNAME #n */ + snprintf(trk_seg_num_buf, sizeof(trk_seg_num_buf), "%d", trk_seg_num); + track_head->rte_name = xmalloc(strlen(trk_name)+strlen(trk_seg_num_buf)+3); + sprintf(track_head->rte_name, "%s #%s", trk_name, trk_seg_num_buf); + } + trk_seg_num++; + track_head->rte_num = trk_num; + trk_num++; + track_add_head(track_head); + } + wpt_tmp = waypt_new(); + /* This is even more odd. * Track data is stored as big endian while * waypoint data is little endian!? @@ -318,6 +340,25 @@ data_read(void) case 104: tp_comp = (Compact_Trk_Point_Type *) ((char *) pdb_rec->data + sizeof(rec->header) + sizeof(rec->wpt.CustTrkHdr)); while (sz--) { + if ((int)(tp_comp->new_trk) == 1 || trk_seg_num == 1) { + /* + * Start a new track segment + */ + track_head = route_head_alloc(); + if (trk_seg_num == 1) { + track_head->rte_name = xstrdup(trk_name); + } else { + /* name in the form TRACKNAME #n */ + snprintf(trk_seg_num_buf, sizeof(trk_seg_num_buf), "%d", trk_seg_num); + track_head->rte_name = xmalloc(strlen(trk_name)+strlen(trk_seg_num_buf)+3); + sprintf(track_head->rte_name, "%s #%s", trk_name, trk_seg_num_buf); + } + trk_seg_num++; + track_head->rte_num = trk_num; + trk_num++; + track_add_head(track_head); + } + wpt_tmp = waypt_new(); lon = be_read32(&tp_comp->lon); lat = be_read32(&tp_comp->lat); diff --git a/gpsbabel/mingw/wintesto.cmd b/gpsbabel/mingw/wintesto.cmd index e58576b30..174479214 100644 --- a/gpsbabel/mingw/wintesto.cmd +++ b/gpsbabel/mingw/wintesto.cmd @@ -582,6 +582,34 @@ REM Navicache. CALL :COMPARE %TMPDIR%\navi.wpt reference\navicache.ref REM +REM +REM CoastalExplorer.. +@echo on +@echo Testing... +%PNAME% -r -i coastexp -f reference\coastexp.nob -o gpx -F %TMPDIR%\coastexp.gpx +@echo off +@echo. +CALL :COMPARE %TMPDIR%\coastexp.gpx reference\coastexp.ref +@echo on +@echo Testing... +%PNAME% -r -i gpx -f %TMPDIR%\coastexp.gpx -o coastexp -F %TMPDIR%\coastexp.nob +@echo off +@echo. +CALL :COMPARE %TMPDIR%\coastexp.nob reference\coastexp.ref2 +@echo on +@echo Testing... +%PNAME% -w -i coastexp -f reference\coastexp.nob -o gpx -F %TMPDIR%\coastexp.gpx +@echo off +@echo. +CALL :COMPARE %TMPDIR%\coastexp.gpx reference\coastexp.ref3 +@echo on +@echo Testing... +%PNAME% -w -i gpx -f %TMPDIR%\coastexp.gpx -o coastexp -F %TMPDIR%\coastexp.nob +@echo off +@echo. +CALL :COMPARE %TMPDIR%\coastexp.nob reference\coastexp.ref4 +REM + REM PsiTrex. A text format that can't be handled by XCSV due to context of REM data based on other data values in the file REM Waypoints first diff --git a/gpsbabel/reference/track/TrkDB-GPil.pdb b/gpsbabel/reference/track/TrkDB-GPil.pdb new file mode 100644 index 000000000..00c091233 Binary files /dev/null and b/gpsbabel/reference/track/TrkDB-GPil.pdb differ