X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=parse-xml.c;h=dfe6a616e6e9042152fccc59ac61fcad35dab141;hb=2cd2cafdf4fc1ea37872f172a62d3d38220adf64;hp=9b0797ea03f3f0dffa995e45967ed7c8f844d093;hpb=d5e42d485e6c4a62b78281aac900bb447d811ab1;p=ext%2Fsubsurface.git diff --git a/parse-xml.c b/parse-xml.c index 9b0797e..dfe6a61 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 */ @@ -338,6 +349,11 @@ static void gasmix_nitrogen(char *buffer, void *_gasmix) /* Ignore n2 percentages. There's no value in them. */ } +static void utf8_string(char *buffer, void *_res) +{ + *(char **)_res = buffer; +} + #define MATCH(pattern, fn, dest) \ match(pattern, strlen(pattern), name, len, fn, buf, dest) @@ -353,6 +369,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 +412,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)) @@ -408,6 +428,10 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf) return; if (MATCH(".cylinderendpressure", pressure, &dive->end_pressure)) return; + if (MATCH(".location", utf8_string, &dive->location)) + return; + if (MATCH(".notes", utf8_string, &dive->notes)) + return; if (MATCH(".o2", gasmix, &dive->gasmix[gasmix_index].o2)) return; @@ -576,6 +600,11 @@ static void sample_end(void) if (sample->depth.mm > dive->maxdepth.mm) dive->maxdepth.mm = sample->depth.mm; + if (sample->temperature.mkelvin) { + if (!dive->watertemp.mkelvin || dive->watertemp.mkelvin > sample->temperature.mkelvin) + dive->watertemp = sample->temperature; + } + sample = NULL; dive->samples++; }