summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.h3
-rw-r--r--divelist.h3
-rw-r--r--main.c4
-rw-r--r--parse-xml.c15
-rw-r--r--save-xml.c2
5 files changed, 15 insertions, 12 deletions
diff --git a/dive.h b/dive.h
index 3ed233ddb..9e5d2c49e 100644
--- a/dive.h
+++ b/dive.h
@@ -166,6 +166,9 @@ struct dive_table {
extern struct dive_table dive_table;
+extern int selected_dive;
+#define current_dive (get_dive(selected_dive))
+
static inline struct dive *get_dive(unsigned int nr)
{
if (nr >= dive_table.nr)
diff --git a/divelist.h b/divelist.h
index 2d6c5dce6..797a89641 100644
--- a/divelist.h
+++ b/divelist.h
@@ -10,9 +10,6 @@ struct DiveList {
GtkTreeViewColumn *date, *depth, *duration;
};
-extern int selected_dive;
-#define current_dive (get_dive(selected_dive))
-
extern struct DiveList dive_list_create(void);
extern void dive_list_update_dives(struct DiveList);
extern void update_dive_list_units(struct DiveList *);
diff --git a/main.c b/main.c
index 5367571ad..138de29ec 100644
--- a/main.c
+++ b/main.c
@@ -98,9 +98,9 @@ void update_dive(struct dive *new_dive)
if (old_dive) {
flush_dive_info_changes(old_dive);
flush_dive_equipment_changes(old_dive);
+ buffered_dive = new_dive;
}
if (new_dive) {
- buffered_dive = new_dive;
show_dive_info(new_dive);
show_dive_equipment(new_dive);
}
@@ -312,6 +312,8 @@ static void unit_dialog(GtkWidget *w, gpointer data)
gtk_widget_show_all(dialog);
result = gtk_dialog_run(GTK_DIALOG(dialog));
if (result == GTK_RESPONSE_ACCEPT) {
+ /* Make sure to flush any modified old dive data with old units */
+ update_dive(NULL);
output_units = menu_units;
update_dive_list_units(&dive_list);
repaint_dive();
diff --git a/parse-xml.c b/parse-xml.c
index 14c21972c..91bcced6e 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -639,7 +639,6 @@ static int divinglog_dive_match(struct dive *dive, const char *name, int len, ch
MATCH(".depth", depth, &dive->maxdepth) ||
MATCH(".tanksize", cylindersize, &dive->cylinder[0].type.size) ||
MATCH(".presw", pressure, &dive->cylinder[0].type.workingpressure) ||
- MATCH(".tanktype", utf8_string, &dive->cylinder[0].type.description) ||
MATCH(".comments", utf8_string, &dive->notes) ||
MATCH(".country.name", utf8_string, &country) ||
MATCH(".city.name", utf8_string, &city) ||
@@ -1017,7 +1016,8 @@ static void sanitize_gasmix(gasmix_t *mix)
*/
static void match_standard_cylinder(cylinder_type_t *type)
{
- int psi, cuft, len;
+ double cuft;
+ int psi, len;
const char *fmt;
char buffer[20], *p;
@@ -1025,7 +1025,8 @@ static void match_standard_cylinder(cylinder_type_t *type)
if (type->description)
return;
- cuft = type->size.mliter / 1000;
+ cuft = type->size.mliter / 28317.0;
+ cuft *= type->workingpressure.mbar / 1013.25;
psi = type->workingpressure.mbar / 68.95;
switch (psi) {
@@ -1047,7 +1048,7 @@ static void match_standard_cylinder(cylinder_type_t *type)
default:
return;
}
- len = snprintf(buffer, sizeof(buffer), fmt, cuft);
+ len = snprintf(buffer, sizeof(buffer), fmt, (int) (cuft+0.5));
p = malloc(len+1);
if (!p)
return;
@@ -1078,15 +1079,15 @@ static void sanitize_cylinder_type(cylinder_type_t *type)
if (!type->size.mliter)
return;
- /* Ok, we have both size and pressure: try to match a description */
- match_standard_cylinder(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 */
volume = volume_of_air / atm; /* milliliters at 1 atm: "true size" */
type->size.mliter = volume + 0.5;
}
+
+ /* Ok, we have both size and pressure: try to match a description */
+ match_standard_cylinder(type);
}
static void sanitize_cylinder_info(struct dive *dive)
diff --git a/save-xml.c b/save-xml.c
index 3ed67fe39..a9800d001 100644
--- a/save-xml.c
+++ b/save-xml.c
@@ -232,7 +232,7 @@ void save_dives(const char *filename)
return;
/* Flush any edits of current dives back to the dives! */
- update_dive(NULL);
+ update_dive(current_dive);
fprintf(f, "<dives>\n<program name='diveclog' version='%d'></program>\n", VERSION);
for (i = 0; i < dive_table.nr; i++)