]> git.tdb.fi Git - ext/subsurface.git/blobdiff - parse-xml.c
Store options in gconf
[ext/subsurface.git] / parse-xml.c
index 6bb78fdf6077e1db2a85ee6ee194e5793c8ae802..8f916b09aea3ed02b2d7ebb7c927263eb2bd7a83 100644 (file)
@@ -882,6 +882,20 @@ static int uddf_dive_match(struct dive *dive, const char *name, int len, char *b
                0;
 }
 
+static void gps_location(char *buffer, void *_dive)
+{
+       int i;
+       struct dive *dive = _dive;
+       double latitude, longitude;
+
+       i = sscanf(buffer, "%lf %lf", &latitude, &longitude);
+       if (i == 2) {
+               dive->latitude = latitude;
+               dive->longitude = longitude;
+       }
+       free(buffer);
+}
+
 /* We're in the top-level dive xml. Try to convert whatever value to a dive value */
 static void try_to_fill_dive(struct dive *dive, const char *name, char *buf)
 {
@@ -950,6 +964,8 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf)
                return;
        if (MATCH(".cylinderendpressure", pressure, &dive->cylinder[0].end))
                return;
+       if (MATCH(".gps", gps_location, dive))
+               return;
        if (MATCH(".location", utf8_string, &dive->location))
                return;
        if (MATCH(".notes", utf8_string, &dive->notes))
@@ -1035,7 +1051,7 @@ static void match_standard_cylinder(cylinder_type_t *type)
                return;
 
        cuft = type->size.mliter / 28317.0;
-       cuft *= type->workingpressure.mbar / 1013.25;
+       cuft *= to_ATM(type->workingpressure);
        psi = type->workingpressure.mbar / 68.95;
 
        switch (psi) {
@@ -1090,7 +1106,7 @@ static void sanitize_cylinder_type(cylinder_type_t *type)
 
        if (input_units.volume == CUFT || import_source == SUUNTO) {
                volume_of_air = type->size.mliter * 28.317;     /* milli-cu ft to milliliter */
-               atm = type->workingpressure.mbar / 1013.25;     /* working pressure in atm */
+               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;
        }
@@ -1364,7 +1380,9 @@ void parse_xml_file(const char *filename, GError **error)
                }
                return;
        }
-
+       /* we assume that the last (or only) filename passed as argument is a 
+        * great filename to use as default when saving the dives */ 
+       set_filename(filename);
        reset_all();
        dive_start();
        traverse(xmlDocGetRootElement(doc));