From: robertlipe Date: Mon, 17 Jun 2013 05:12:58 +0000 (+0000) Subject: Move more of times into accessors, more modern times. X-Git-Tag: archive/raspbian/1.10.0+ds-2+rpi1~1^2~12^2~11^2~559 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=90144ab5639edc8d7737f155a976c2b76113eea2;p=gpsbabel.git Move more of times into accessors, more modern times. Many of the remaining explicit accesses to wpt->microseconds aren't actually using it as microseconds at all, but rather as a generic integer. :-( --- diff --git a/gpsbabel/GPSBabel.xcodeproj/project.xcworkspace/xcuserdata/robertlipe.xcuserdatad/UserInterfaceState.xcuserstate b/gpsbabel/GPSBabel.xcodeproj/project.xcworkspace/xcuserdata/robertlipe.xcuserdatad/UserInterfaceState.xcuserstate index f504b6e2d..07c201120 100644 Binary files a/gpsbabel/GPSBabel.xcodeproj/project.xcworkspace/xcuserdata/robertlipe.xcuserdatad/UserInterfaceState.xcuserstate and b/gpsbabel/GPSBabel.xcodeproj/project.xcworkspace/xcuserdata/robertlipe.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/gpsbabel/cetus.cc b/gpsbabel/cetus.cc index 022d22cec..fc31bd5a9 100644 --- a/gpsbabel/cetus.cc +++ b/gpsbabel/cetus.cc @@ -210,8 +210,8 @@ read_track_point(cetus_track_point_t* data, const time_t basetime) break; /* no GPS */ } - wpt->creation_time = basetime + - ((data->hour & 0x1F) * 3600) + (data->min * 60) + data->sec; + wpt->SetCreationTime(basetime + + ((data->hour & 0x1F) * 3600) + (data->min * 60) + data->sec); if (data->dsec) { wpt->microseconds = (int)data->dsec * 10000; } diff --git a/gpsbabel/csv_util.cc b/gpsbabel/csv_util.cc index a13028360..56eedd332 100644 --- a/gpsbabel/csv_util.cc +++ b/gpsbabel/csv_util.cc @@ -1220,7 +1220,7 @@ xcsv_parse_val(const char* s, waypoint* wpt, const field_map_t* fmp, break; case XT_ISO_TIME: case XT_ISO_TIME_MS: - wpt->creation_time = xml_parse_time(s, &wpt->microseconds); + wpt->creation_time = xml_parse_time(s); break; case XT_NET_TIME: { time_t tt = wpt->GetCreationTime(); diff --git a/gpsbabel/defs.h b/gpsbabel/defs.h index 7256c5ca9..a75af4bb5 100644 --- a/gpsbabel/defs.h +++ b/gpsbabel/defs.h @@ -34,6 +34,7 @@ #include "inifile.h" #include "session.h" +#include # include "src/core/datetime.h" // Turn on Unicode in expat? @@ -526,11 +527,23 @@ public: wp_flags wpt_flags; QString icon_descr; - gpsbabel::DateTime GetCreationTime() const { return creation_time; } - void SetCreationTime(time_t t) { creation_time = t; } + gpsbabel::DateTime GetCreationTime() const { +//QDateTime dt(creation_time); +//qDebug() << dt.toString("dd.MM.yyyy hh:mm:ss.zzz"); +//fprintf(stderr, "ng %d\n", (int)creation_time); + return creation_time; +} + void SetCreationTime(gpsbabel::DateTime t) { creation_time = t; +//qDebug() << t.toString("dd.MM.yyyy hh:mm:ss.zzz"); +//fprintf(stderr, "ns %d\n", (int)t); +} + void SetCreationTime(time_t t) { creation_time = t; +//fprintf(stderr, "t %d\n", (int)t); +} void SetCreationTime(time_t t, int us) { creation_time = t; microseconds = us; +//fprintf(stderr, "t/us %d %d\n", (int)t, us); } gpsbabel::DateTime creation_time; int microseconds; /* Optional millionths of a second. */ @@ -1017,7 +1030,7 @@ const char* get_filename(const char* fname); /* extract the filename portion * #define str_iso8859_1_to_utf8(str) cet_str_iso8859_1_to_utf8((str)) /* this lives in gpx.c */ -gpsbabel::DateTime xml_parse_time(const char* cdatastr, int* microsecs); +gpsbabel::DateTime xml_parse_time(const char* cdatastr); xml_tag* xml_findfirst(xml_tag* root, const char* tagname); xml_tag* xml_findnext(xml_tag* root, xml_tag* cur, const char* tagname); diff --git a/gpsbabel/delbin.cc b/gpsbabel/delbin.cc index 5fd44609a..bf3f05c3f 100644 --- a/gpsbabel/delbin.cc +++ b/gpsbabel/delbin.cc @@ -1279,7 +1279,7 @@ get_gc_notes(const waypoint* wp, int* symbol, char** notes, unsigned* notes_size } logpart = xml_findfirst(curlog, "groundspeak:date"); if (logpart) { - time_t logtime = xml_parse_time(logpart->cdata, NULL); + time_t logtime = xml_parse_time(logpart->cdata); const struct tm* logtm = gmtime(&logtime); gbfprintf(fd, "%d-%02d-%02d ", logtm->tm_year + 1900, logtm->tm_mon + 1, logtm->tm_mday); } diff --git a/gpsbabel/glogbook.cc b/gpsbabel/glogbook.cc index cbdd07733..698c997bd 100644 --- a/gpsbabel/glogbook.cc +++ b/gpsbabel/glogbook.cc @@ -147,7 +147,7 @@ void gl_trk_pnt_e(const char* args, const char** unused) void gl_trk_utc(const char* args, const char** unused) { - wpt_tmp->SetCreationTime(xml_parse_time(args, &wpt_tmp->microseconds)); + wpt_tmp->SetCreationTime(xml_parse_time(args)); } void gl_trk_lat(const char* args, const char** unused) diff --git a/gpsbabel/gpx.cc b/gpsbabel/gpx.cc index 03fe746b5..594c9f2f7 100644 --- a/gpsbabel/gpx.cc +++ b/gpsbabel/gpx.cc @@ -846,7 +846,7 @@ gs_get_container(geocache_container t) } gpsbabel::DateTime -xml_parse_time(const char* cdatastr, int* microsecs) +xml_parse_time(const char* cdatastr) { int off_hr = 0; int off_min = 0; @@ -884,14 +884,16 @@ xml_parse_time(const char* cdatastr, int* microsecs) } } + double fsec = 0; pointstr = strchr(timestr, '.'); if (pointstr) { + sscanf(pointstr, "%le", &fsec); +#if 0 + /* Round to avoid FP jitter */ if (microsecs) { - double fsec; - sscanf(pointstr, "%le", &fsec); - /* Round to avoid FP jitter */ *microsecs = .5 + (fsec * 1000000.0) ; } +#endif *pointstr = '\0'; } @@ -917,9 +919,9 @@ xml_parse_time(const char* cdatastr, int* microsecs) // 2038 but which we can't replace until Steven upgrades Qt. // Baby steps. QDateTime dt = QDateTime::fromTime_t(rv); - if (microsecs) { - dt = dt.addMSecs(*microsecs / 1000); -// qDebug() << dt.toString("dd.MM.yyyy hh:mm:ss.zzz") << " ZZZ " << *microsecs; + if (fsec) { + dt = dt.addMSecs(fsec * 1000); +// qDebug() << dt.toString("dd.MM.yyyy hh:mm:ss.zzz") << " ZZZ " << fsec; } return dt; } @@ -1025,7 +1027,7 @@ gpx_end(void* data, const XML_Char* xml_el) waypt_alloc_gc_data(wpt_tmp)->placer = xstrdup(cdatastrp); break; case tt_cache_log_date: - gc_log_date = xml_parse_time(cdatastrp, NULL); + gc_log_date = xml_parse_time(cdatastrp); break; /* * "Found it" logs follow the date according to the schema, @@ -1143,7 +1145,7 @@ gpx_end(void* data, const XML_Char* xml_el) case tt_wpt_time: case tt_trk_trkseg_trkpt_time: case tt_rte_rtept_time: - wpt_tmp->SetCreationTime(xml_parse_time(cdatastrp, &wpt_tmp->microseconds)); + wpt_tmp->SetCreationTime(xml_parse_time(cdatastrp)); break; case tt_wpt_cmt: case tt_rte_rtept_cmt: diff --git a/gpsbabel/gtm.cc b/gpsbabel/gtm.cc index 830465f3b..3175ff00d 100644 --- a/gpsbabel/gtm.cc +++ b/gpsbabel/gtm.cc @@ -660,7 +660,7 @@ gtm_read(void) wpt->latitude = fread_double(file_in); wpt->longitude = fread_double(file_in); convert_datum(&wpt->latitude, &wpt->longitude); - wpt->creation_time = fread_long(file_in); + wpt->SetCreationTime(fread_long(file_in)); if (wpt->creation_time) { wpt->creation_time += EPOCH89DIFF; } diff --git a/gpsbabel/gtrnctr.cc b/gpsbabel/gtrnctr.cc index 57e4d8eda..b41d072be 100644 --- a/gpsbabel/gtrnctr.cc +++ b/gpsbabel/gtrnctr.cc @@ -519,7 +519,7 @@ gtc_trk_pnt_e(const char* args, const char** unused) void gtc_trk_utc(const char* args, const char** unused) { - wpt_tmp->creation_time = xml_parse_time(args, NULL); + wpt_tmp->creation_time = xml_parse_time(args); } void diff --git a/gpsbabel/html.cc b/gpsbabel/html.cc index 42c6f7c9d..bf039787b 100644 --- a/gpsbabel/html.cc +++ b/gpsbabel/html.cc @@ -186,7 +186,7 @@ html_disp(const waypoint* wpt) logpart = xml_findfirst(curlog, "groundspeak:date"); if (logpart) { - logtime = xml_parse_time(logpart->cdata, NULL); + logtime = xml_parse_time(logpart->cdata); logtm = localtime(&logtime); if (logtm) { gbfprintf(file_out, diff --git a/gpsbabel/itracku.cc b/gpsbabel/itracku.cc index 8efd03c05..36e1402e0 100644 --- a/gpsbabel/itracku.cc +++ b/gpsbabel/itracku.cc @@ -662,14 +662,12 @@ static void nmea_set_waypoint_time(waypoint* wpt, struct tm* time, int microseconds) { if (time->tm_year == 0) { - wpt->creation_time = ((((time_t)time->tm_hour * 60) + time->tm_min) * 60) + time->tm_sec; - wpt->microseconds = microseconds; + wpt->SetCreationTime(((((time_t)time->tm_hour * 60) + time->tm_min) * 60) + time->tm_sec, microseconds); if (wpt->wpt_flags.fmt_use == 0) { wpt->wpt_flags.fmt_use = 1; } } else { - wpt->creation_time = mkgmtime(time); - wpt->microseconds = microseconds; + wpt->SetCreationTime(mkgmtime(time), microseconds); if (wpt->wpt_flags.fmt_use != 0) { wpt->wpt_flags.fmt_use = 0; } diff --git a/gpsbabel/kml.cc b/gpsbabel/kml.cc index 1bd895ec6..059ced518 100644 --- a/gpsbabel/kml.cc +++ b/gpsbabel/kml.cc @@ -319,7 +319,7 @@ void wpt_desc(const char* args, const char** unused) void wpt_time(const char* args, const char** unused) { - wpt_tmp->creation_time = xml_parse_time(args, &wpt_tmp->microseconds); + wpt_tmp->creation_time = xml_parse_time(args); } void wpt_coord(const char* args, const char** attrv) @@ -1349,7 +1349,7 @@ char* kml_geocache_get_logs(const waypoint* wpt) logpart = xml_findfirst(curlog, "groundspeak:date"); if (logpart) { - logtime = xml_parse_time(logpart->cdata, NULL); + logtime = xml_parse_time(logpart->cdata); struct tm* logtm = localtime(&logtime); if (logtm) { char* temp; diff --git a/gpsbabel/lowranceusr4.cc b/gpsbabel/lowranceusr4.cc index 294ba6c14..db8ccfaa3 100644 --- a/gpsbabel/lowranceusr4.cc +++ b/gpsbabel/lowranceusr4.cc @@ -441,8 +441,8 @@ lowranceusr4_parse_waypoints(void) // with, as a practical matter, we have no date, so don't even compute // or set it. if (create_date > 2440587) { - wpt_tmp->creation_time = lowranceusr4_get_timestamp(create_date, - create_time); + wpt_tmp->SetCreationTime(lowranceusr4_get_timestamp(create_date, + create_time)); } /* Unused byte */ @@ -810,8 +810,8 @@ lowranceusr4_waypt_disp(const waypoint* wpt) gbfputflt(WAYPT_GET(wpt, proximity, 0.0), file_out); /* Creation date/time */ - gbfputint32(lowranceusr4_jd_from_timestamp(wpt->creation_time), file_out); - gbfputint32(wpt->creation_time, file_out); + gbfputint32(lowranceusr4_jd_from_timestamp(wpt->GetCreationTime()), file_out); + gbfputint32(wpt->GetCreationTime(), file_out); /* Unused byte */ gbfputc(0, file_out); @@ -982,7 +982,7 @@ lowranceusr4_write_track_waypt(const waypoint* wpt) gbfputc(0, file_out); /* Timestamp */ - gbfputint32(wpt->creation_time, file_out); + gbfputint32(wpt->GetCreationTime(), file_out); /* Long/Lat */ gbfputdbl(wpt->longitude * DEGREESTORADIANS, file_out); diff --git a/gpsbabel/magnav.cc b/gpsbabel/magnav.cc index 4ec0a6f1c..df2dabf8a 100644 --- a/gpsbabel/magnav.cc +++ b/gpsbabel/magnav.cc @@ -120,7 +120,7 @@ data_read(void) tm.tm_mon = be_read16(&rec->crt_mon) - 1; tm.tm_year = be_read16(&rec->crt_year) - 1900; if (mkgmtime(&tm) > 0) { - wpt_tmp->creation_time = mktime(&tm); + wpt_tmp->SetCreationTime(mktime(&tm)); } waypt_add(wpt_tmp); diff --git a/gpsbabel/mapsend.cc b/gpsbabel/mapsend.cc index 8ae4e2e03..540b040c9 100644 --- a/gpsbabel/mapsend.cc +++ b/gpsbabel/mapsend.cc @@ -214,7 +214,7 @@ mapsend_track_read(void) if (wpt_tmp->altitude < unknown_alt + 1) { wpt_tmp->altitude = unknown_alt; } - wpt_tmp->creation_time = gbfgetint32(mapsend_file_in); + time_t t = gbfgetint32(mapsend_file_in); valid = gbfgetint32(mapsend_file_in); /* centiseconds only in >= version 3.0 */ @@ -223,7 +223,7 @@ mapsend_track_read(void) } else { centisecs = 0; } - wpt_tmp->microseconds = CENTI_TO_MICRO(centisecs); + wpt_tmp->SetCreationTime(t, CENTI_TO_MICRO(centisecs)); track_add_wpt(track_head, wpt_tmp); } diff --git a/gpsbabel/nmea.cc b/gpsbabel/nmea.cc index f939bbf42..d688176d4 100644 --- a/gpsbabel/nmea.cc +++ b/gpsbabel/nmea.cc @@ -359,15 +359,13 @@ static void nmea_set_waypoint_time(waypoint* wpt, struct tm* time, int microseconds) { if (time->tm_year == 0) { - wpt->creation_time = ((((time_t)time->tm_hour * 60) + time->tm_min) * 60) + time->tm_sec; - wpt->microseconds = microseconds; + wpt->SetCreationTime(((((time_t)time->tm_hour * 60) + time->tm_min) * 60) + time->tm_sec, microseconds); if (wpt->wpt_flags.fmt_use == 0) { wpt->wpt_flags.fmt_use = 1; without_date++; } } else { - wpt->creation_time = mkgmtime(time); - wpt->microseconds = microseconds; + wpt->SetCreationTime(mkgmtime(time), microseconds); if (wpt->wpt_flags.fmt_use != 0) { wpt->wpt_flags.fmt_use = 0; without_date--; diff --git a/gpsbabel/osm.cc b/gpsbabel/osm.cc index ea14f9977..fbfa3fa5c 100644 --- a/gpsbabel/osm.cc +++ b/gpsbabel/osm.cc @@ -527,7 +527,7 @@ osm_node(const char* args, const char** attrv) } else if (strcmp(avp[0], "lon") == 0) { wpt->longitude = atof(avp[1]); } else if (strcmp(avp[0], "timestamp") == 0) { - wpt->creation_time = xml_parse_time(avp[1], &wpt->microseconds); + wpt->creation_time = xml_parse_time(avp[1]); } avp += 2; diff --git a/gpsbabel/palmdoc.cc b/gpsbabel/palmdoc.cc index 6cb77fb94..5023dadd9 100644 --- a/gpsbabel/palmdoc.cc +++ b/gpsbabel/palmdoc.cc @@ -507,7 +507,7 @@ palmdoc_disp(const waypoint *wpt) logpart = xml_findfirst(curlog, "groundspeak:date"); if (logpart) { - logtime = xml_parse_time(logpart->cdata, NULL); + logtime = xml_parse_time(logpart->cdata); logtm = localtime(&logtime); if (logtm) { docprintf(15, diff --git a/gpsbabel/pathaway.cc b/gpsbabel/pathaway.cc index 542816071..432d645c6 100644 --- a/gpsbabel/pathaway.cc +++ b/gpsbabel/pathaway.cc @@ -465,7 +465,7 @@ int ppdb_read_wpt(route_head *head, int isRoute) if (ppdb_decode_tm(str, &tm)) { tm.tm_year -= 1900; tm.tm_mon--; - wpt_tmp->creation_time = mkgmtime(&tm); + wpt_tmp->SetCreationTime(mkgmtime(&tm)); } break; case 5: /* name */ diff --git a/gpsbabel/text.cc b/gpsbabel/text.cc index 5eb127a9a..d05948899 100644 --- a/gpsbabel/text.cc +++ b/gpsbabel/text.cc @@ -203,7 +203,7 @@ text_disp(const waypoint *wpt) logpart = xml_findfirst(curlog, "groundspeak:date"); if (logpart) { - logtime = xml_parse_time(logpart->cdata, NULL); + logtime = xml_parse_time(logpart->cdata); logtm = localtime(&logtime); if (logtm) { gbfprintf(file_out, diff --git a/gpsbabel/unicsv.cc b/gpsbabel/unicsv.cc index a55d8254d..7b6de5f67 100644 --- a/gpsbabel/unicsv.cc +++ b/gpsbabel/unicsv.cc @@ -947,7 +947,7 @@ unicsv_parse_one_line(char *ibuf) case fld_iso_time: is_localtime = 2; /* fix result */ - wpt->creation_time = xml_parse_time(s, &wpt->microseconds); + wpt->SetCreationTime(xml_parse_time(s)); break; case fld_time: @@ -1149,17 +1149,17 @@ unicsv_parse_one_line(char *ibuf) struct tm tm; tm = *gmtime(&t); if (opt_utc) { - wpt->creation_time = mkgmtime(&tm); + wpt->SetCreationTime(mkgmtime(&tm)); } else { - wpt->creation_time = mklocaltime(&tm); + wpt->SetCreationTime(mklocaltime(&tm)); } } else { - wpt->creation_time = t; + wpt->SetCreationTime(t); } } else if (time >= 0) { - wpt->creation_time = time; + wpt->SetCreationTime(time); } else if (date >= 0) { - wpt->creation_time = date; + wpt->SetCreationTime(date); } else if (ymd.tm_year || ymd.tm_mon || ymd.tm_mday) { if (ymd.tm_year < 100) { if (ymd.tm_year <= 70) { diff --git a/gpsbabel/waypt.cc b/gpsbabel/waypt.cc index 537a7fbb7..176965ab0 100644 --- a/gpsbabel/waypt.cc +++ b/gpsbabel/waypt.cc @@ -21,6 +21,7 @@ #include #include +#include #include "defs.h" #include "cet_util.h" @@ -667,9 +668,10 @@ waypoint::CreationTimeXML() const return NULL; } - QDateTime dt = QDateTime::fromTime_t(creation_time); + QDateTime dt = GetCreationTime(); dt = dt.addMSecs(MICRO_TO_MILLI(microseconds)); dt = dt.toUTC(); +// qDebug() << dt.toString("dd.MM.yyyy hh:mm:ss.zzz") << " CML " << microseconds; const char* format = "yyyy-MM-ddTHH:mm:ssZ"; if (dt.time().msec()) { diff --git a/gpsbabel/wfff_xml.cc b/gpsbabel/wfff_xml.cc index 5336c72fd..5eab13051 100644 --- a/gpsbabel/wfff_xml.cc +++ b/gpsbabel/wfff_xml.cc @@ -173,7 +173,7 @@ void wfff_chan(const char *args, const char **unused) void wfff_first(const char *args, const char **unused) { if (args) { - ap_first = xml_parse_time(args, NULL); + ap_first = xml_parse_time(args); } } diff --git a/gpsbabel/xol.cc b/gpsbabel/xol.cc index 59efe39fc..e6827716b 100644 --- a/gpsbabel/xol.cc +++ b/gpsbabel/xol.cc @@ -112,7 +112,7 @@ xol_shape(const char *args, const char **attrv) } } else if (strcmp(avp[0], "timestamp") == 0) { if (wpt) { - wpt->creation_time = xml_parse_time(avp[1], &wpt->microseconds); + wpt->creation_time = xml_parse_time(avp[1]); } } else if (strcmp(avp[0], "icon") == 0) { if (wpt) {