X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=parse-xml.c;h=34afdb9f690dc22fa83d6f08a94aaaddd13f1ce4;hb=854bd0269c05adc56caf9667fd68f676520a2941;hp=82b10a47e741113428f20e7c671ee595e1442885;hpb=b5139aeb22c8a28cac89b7f9a561bd9d4e2bb358;p=ext%2Fsubsurface.git diff --git a/parse-xml.c b/parse-xml.c index 82b10a4..34afdb9 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -76,6 +76,7 @@ struct units input_units; * technically the SI unit for pressure is Pascal, but * we default to bar (10^5 pascal), which people * actually use. Similarly, C instead of Kelvin. + * And kg instead of g. */ const struct units SI_units = { .length = METERS, @@ -105,7 +106,7 @@ static struct { const char *name; } event; static struct tm tm; -static int cylinder_index; +static int cylinder_index, ws_index; static enum import_source { UNKNOWN, @@ -298,6 +299,27 @@ static void depth(char *buffer, void *_depth) free(buffer); } +static void weight(char *buffer, void *_weight) +{ + weight_t *weight = _weight; + union int_or_float val; + + switch (integer_or_float(buffer, &val)) { + case FLOAT: + switch (input_units.weight) { + case KG: + weight->grams = val.fp * 1000 + 0.5; + break; + case LBS: + weight->grams = val.fp * 453.6 + 0.5; + break; + } + break; + default: + printf("Strange depth reading %s\n", buffer); + } +} + static void temperature(char *buffer, void *_temperature) { temperature_t *temperature = _temperature; @@ -1036,7 +1058,12 @@ static void try_to_fill_dive(struct dive **divep, const char *name, char *buf) return; if (MATCH(".cylinder.end", pressure, &dive->cylinder[cylinder_index].end)) return; - + if (MATCH(".weightsystem.description", utf8_string, &dive->weightsystem[ws_index].description)) + return; + if (MATCH(".weightsystem.weight", weight, &dive->weightsystem[ws_index].weight)) + return; + if (MATCH("weight", weight, &dive->weightsystem[ws_index].weight)) + return; if (MATCH(".o2", gasmix, &dive->cylinder[cylinder_index].gasmix.o2)) return; if (MATCH(".n2", gasmix_nitrogen, &dive->cylinder[cylinder_index].gasmix)) @@ -1185,6 +1212,7 @@ static void dive_end(void) record_dive(dive); dive = NULL; cylinder_index = 0; + ws_index = 0; } static void event_start(void) @@ -1209,6 +1237,15 @@ static void cylinder_end(void) cylinder_index++; } +static void ws_start(void) +{ +} + +static void ws_end(void) +{ + ws_index++; +} + static void sample_start(void) { sample = prepare_sample(&dive); @@ -1371,6 +1408,7 @@ static struct nesting { { "event", event_start, event_end }, { "gasmix", cylinder_start, cylinder_end }, { "cylinder", cylinder_start, cylinder_end }, + { "weightsystem", ws_start, ws_end }, { "P", sample_start, sample_end }, /* Import type recognition */