summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.c25
-rw-r--r--dive.h8
-rw-r--r--divelist.c14
3 files changed, 38 insertions, 9 deletions
diff --git a/dive.c b/dive.c
index c913e9476..53a874b9b 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 97654dc52..5eec6f170 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 3ddfb6582..ca984b4eb 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,