X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=parse-xml.c;h=ddf93a4b1ad58ff45fdc4790dfe5d5ad005f82dd;hb=350462949d2dc205355e5c94ccaacf83a0775257;hp=1b0c4498507be702ab88054ff98497ef0fbb0991;hpb=04f372f8aa5b4f9ba462e0e93b76f3dde6af00f1;p=ext%2Fsubsurface.git diff --git a/parse-xml.c b/parse-xml.c index 1b0c449..ddf93a4 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -7,6 +7,9 @@ #include #include #include +#ifdef XSLT +#include +#endif #include "dive.h" #include "uemis.h" @@ -425,7 +428,7 @@ static void water_pressure(char *buffer, void *_depth) if (!val.fp) break; /* cbar to atm */ - atm = (val.fp / 100) / 1.01325; + atm = bar_to_atm(val.fp * 10); /* * atm to cm. Why not mm? The precision just isn't * there. @@ -783,8 +786,14 @@ static void uemis_ts(char *buffer, void *_when) struct tm tm; time_t *when = _when; - strptime(buffer, "%Y-%m-%dT%H:%M:%S", &tm); + memset(&tm, 0, sizeof(tm)); + sscanf(buffer,"%d-%d-%dT%d:%d:%d", + &tm.tm_year, &tm.tm_mon, &tm.tm_mday, + &tm.tm_hour, &tm.tm_min, &tm.tm_sec); + tm.tm_mon -= 1; + tm.tm_year -= 1900; *when = utc_mktime(&tm); + } static void uemis_duration(char *buffer, void *_duration) @@ -1116,9 +1125,9 @@ static void match_standard_cylinder(cylinder_type_t *type) if (type->description) return; - cuft = type->size.mliter / 28317.0; + cuft = ml_to_cuft(type->size.mliter); cuft *= to_ATM(type->workingpressure); - psi = type->workingpressure.mbar / 68.95; + psi = to_PSI(type->workingpressure); switch (psi) { case 2300 ... 2500: /* 2400 psi: LP tank */ @@ -1171,7 +1180,8 @@ static void sanitize_cylinder_type(cylinder_type_t *type) return; if (input_units.volume == CUFT || import_source == SUUNTO) { - volume_of_air = type->size.mliter * 28.317; /* milli-cu ft to milliliter */ + /* confusing - we don't really start from ml but millicuft !*/ + volume_of_air = cuft_to_l(type->size.mliter); atm = to_ATM(type->workingpressure); /* working pressure in atm */ volume = volume_of_air / atm; /* milliliters at 1 atm: "true size" */ type->size.mliter = volume + 0.5; @@ -1459,6 +1469,9 @@ void parse_xml_file(const char *filename, GError **error) set_filename(filename); reset_all(); dive_start(); +#ifdef XSLT + doc = test_xslt_transforms(doc); +#endif traverse(xmlDocGetRootElement(doc)); dive_end(); xmlFreeDoc(doc); @@ -1469,3 +1482,23 @@ void parse_xml_init(void) { LIBXML_TEST_VERSION } + +#ifdef XSLT +xmlDoc *test_xslt_transforms(xmlDoc *doc) +{ + xmlDoc *transformed; + xsltStylesheetPtr xslt = NULL; + xmlNode *root_element = xmlDocGetRootElement(doc); + if (strcasecmp(root_element->name, "JDiveLog") == 0) { + xmlSubstituteEntitiesDefault(1); + xslt = xsltParseStylesheetFile(XSLT G_DIR_SEPARATOR_S "jdivelog2subsurface.xslt"); + if (xslt == NULL) + return doc; + transformed = xsltApplyStylesheet(xslt, doc, NULL); + xmlFreeDoc(doc); + xsltFreeStylesheet(xslt); + return transformed; + } + return doc; +} +#endif