From a487f6c9314f0fe5e4173b670d9653067285da21 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Tue, 1 Nov 2011 19:56:14 -0700 Subject: [PATCH] More consistency improvements Treat SAC and OTU consistently: - SAC is now a member of struct dive - it's calculated / populated at the same time with a helper function with consistent API Create get_volume_units function that returns volumes (e.g. used in SAC rates) based on preferred units - make sure we have these conversions just once in the code. Signed-off-by: Dirk Hohndel --- dive.c | 25 +++++++++++++++++++++++++ dive.h | 8 +++++++- divelist.c | 14 ++++++-------- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/dive.c b/dive.c index c913e94..53a874b 100644 --- a/dive.c +++ b/dive.c @@ -46,6 +46,31 @@ double get_temp_units(unsigned int mk, const char **units) return deg; } +double get_volume_units(unsigned int ml, int *frac, const char **units) +{ + int decimals; + double vol; + const char *unit; + + switch (output_units.volume) { + case LITER: + vol = ml / 1000.0; + unit = "l"; + decimals = 1; + break; + case CUFT: + vol = ml_to_cuft(ml); + unit = "cuft"; + decimals = 2; + break; + } + if (frac) + *frac = decimals; + if (units) + *units = unit; + return vol; +} + double get_depth_units(unsigned int mm, int *frac, const char **units) { int decimals; diff --git a/dive.h b/dive.h index 97654dc..5eec6f1 100644 --- a/dive.h +++ b/dive.h @@ -87,8 +87,14 @@ typedef struct { } cylinder_t; extern double get_depth_units(unsigned int mm, int *frac, const char **units); +extern double get_volume_units(unsigned int mm, int *frac, const char **units); extern double get_temp_units(unsigned int mm, const char **units); +static inline double ml_to_cuft(int ml) +{ + return ml / 28317.0; +} + static inline double mm_to_feet(int mm) { return mm * 0.00328084; @@ -177,7 +183,7 @@ struct dive { depth_t visibility; temperature_t airtemp, watertemp; cylinder_t cylinder[MAX_CYLINDERS]; - int otu; + int sac, otu; struct event *events; int samples, alloc_samples; struct sample sample[]; diff --git a/divelist.c b/divelist.c index 3ddfb65..ca984b4 100644 --- a/divelist.c +++ b/divelist.c @@ -315,23 +315,22 @@ static double calculate_airuse(struct dive *dive) return airuse; } -static void get_sac(struct dive *dive, int *val) +static int calculate_sac(struct dive *dive) { double airuse, pressure, sac; - *val = 0; airuse = calculate_airuse(dive); if (!airuse) - return; + return 0; if (!dive->duration.seconds) - return; + return 0; /* Mean pressure in atm: 1 atm per 10m */ pressure = 1 + (dive->meandepth.mm / 10000.0); sac = airuse / pressure * 60 / dive->duration.seconds; /* milliliters per minute.. */ - *val = sac * 1000; + return sac * 1000; } static void get_string(char **str, const char *s) @@ -364,12 +363,10 @@ static void fill_one_dive(struct dive *dive, GtkTreeModel *model, GtkTreeIter *iter) { - int sac; char *location, *cylinder; get_cylinder(dive, &cylinder); get_location(dive, &location); - get_sac(dive, &sac); /* * We only set the fields that changed: the strings. @@ -379,7 +376,7 @@ static void fill_one_dive(struct dive *dive, DIVE_NR, dive->number, DIVE_LOCATION, location, DIVE_CYLINDER, cylinder, - DIVE_SAC, sac, + DIVE_SAC, dive->sac, DIVE_OTU, dive->otu, -1); } @@ -471,6 +468,7 @@ static void fill_dive_list(void) struct dive *dive = dive_table.dives[i]; dive->otu = calculate_otu(dive); + dive->sac = calculate_sac(dive); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, DIVE_INDEX, i, -- 2.45.2