X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=parse-xml.c;h=6c93ad1a534e1f6fc7e5bf4dae944eeb7032fd75;hb=adc92d6de2ee1c71e88b66fb9c41e52de8cf4ea1;hp=9b0797ea03f3f0dffa995e45967ed7c8f844d093;hpb=d5e42d485e6c4a62b78281aac900bb447d811ab1;p=ext%2Fsubsurface.git diff --git a/parse-xml.c b/parse-xml.c index 9b0797e..6c93ad1 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -106,14 +106,25 @@ static void divedate(char *buffer, void *_when) { int d,m,y; time_t *when = _when; + int success = 0; + success = tm.tm_sec | tm.tm_min | tm.tm_hour; if (sscanf(buffer, "%d.%d.%d", &d, &m, &y) == 3) { tm.tm_year = y; tm.tm_mon = m-1; tm.tm_mday = d; - if (tm.tm_sec | tm.tm_min | tm.tm_hour) - *when = utc_mktime(&tm); + } else if (sscanf(buffer, "%d-%d-%d", &y, &m, &d) == 3) { + tm.tm_year = y; + tm.tm_mon = m-1; + tm.tm_mday = d; + } else { + fprintf(stderr, "Unable to parse date '%s'\n", buffer); + success = 0; } + + if (success) + *when = utc_mktime(&tm); + free(buffer); } @@ -197,7 +208,7 @@ static void pressure(char *buffer, void *_press) case FLOAT: /* Maybe it's in Bar? */ if (val.fp < 500.0) { - pressure->mbar = val.fp * 1000; + pressure->mbar = val.fp * 1000 + 0.5; break; } printf("Unknown fractional pressure reading %s\n", buffer); @@ -233,7 +244,7 @@ static void depth(char *buffer, void *_depth) val.fp = val.i; /* fallthrough */ case FLOAT: - depth->mm = val.fp * 1000; + depth->mm = val.fp * 1000 + 0.5; break; default: printf("Strange depth reading %s\n", buffer); @@ -257,7 +268,7 @@ static void temperature(char *buffer, void *_temperature) break; /* Celsius */ if (val.fp < 50.0) { - temperature->mkelvin = (val.fp + 273.16) * 1000; + temperature->mkelvin = (val.fp + 273.15) * 1000 + 0.5; break; } /* Fahrenheit */ @@ -353,6 +364,8 @@ static void try_to_fill_sample(struct sample *sample, const char *name, char *bu return; if (MATCH(".sample.depth", depth, &sample->depth)) return; + if (MATCH(".sample.temp", temperature, &sample->temperature)) + return; if (MATCH(".sample.temperature", temperature, &sample->temperature)) return; if (MATCH(".sample.sampletime", sampletime, &sample->time)) @@ -394,6 +407,8 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf) return; if (MATCH(".meandepth", depth, &dive->meandepth)) return; + if (MATCH(".duration", duration, &dive->duration)) + return; if (MATCH(".divetime", duration, &dive->duration)) return; if (MATCH(".divetimesec", duration, &dive->duration))