summaryrefslogtreecommitdiffstats
path: root/print.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2013-01-03 12:40:25 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-01-03 12:47:19 -0800
commit3c5ebfe03664ea9a719c9a5071caee63c3d813c2 (patch)
treeb8cb1288d6942aab90d5b7317664c9c247ebe453 /print.c
parent6f8e9bcff3046dc7abedea731427f7c307ba3258 (diff)
downloadsubsurface-3c5ebfe03664ea9a719c9a5071caee63c3d813c2.tar.gz
Fix cylinder printout information
The cylinder information in the printouts was wrong in many ways. As Dirk noted, it didn't work at all for air-integrated computers that had the pressures in the samples, but the math was also confusing and wrong. This should fix it. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'print.c')
-rw-r--r--print.c46
1 files changed, 32 insertions, 14 deletions
diff --git a/print.c b/print.c
index be9a0502b..2d893d186 100644
--- a/print.c
+++ b/print.c
@@ -187,13 +187,21 @@ static void print_ean_trimix (cairo_t *cr, PangoLayout *layout, int O2, int He){
pango_cairo_show_layout(cr, layout);
}
+static unsigned start_pressure(cylinder_t *cyl)
+{
+ return cyl->start.mbar ? : cyl->sample_start.mbar;
+}
+
+static unsigned end_pressure(cylinder_t *cyl)
+{
+ return cyl->end.mbar ? : cyl->sample_end.mbar;
+}
+
/* Print the tank data */
static void print_tanks (struct dive *dive, cairo_t *cr, int maxwidth, int maxheight,
int height, int tank_count, int first_tank, PangoFontDescription *font)
{
- int curwidth, decimals, n, i, counter, cyl_press, cyl_end;
- double cyl_cap, cyl_cons_gas;
- const char *unit_vol, *unit_press;
+ int curwidth, n, i, counter;
char buffer[80], dataheader1[3][80]= { N_("Cylinder"), N_("Gasmix"), N_("Gas Used")};
PangoLayout *layout;
@@ -219,13 +227,26 @@ static void print_tanks (struct dive *dive, cairo_t *cr, int maxwidth, int maxhe
/* Then the cylinder stuff */
n = first_tank;
counter = 0;
- while ( n < tank_count && n < first_tank + 4){
+ while ( n < tank_count && n < first_tank + 4) {
+ int decimals;
+ const char *unit;
+ double gas_usage;
+ cylinder_t *cyl = dive->cylinder + n;
+
cairo_translate (cr, 0, height / (double) PANGO_SCALE);
cairo_move_to(cr, 0, 0);
- cyl_cap = get_volume_units(dive->cylinder[n].type.size.mliter, &decimals, &unit_vol);
- cyl_press= get_pressure_units(dive->cylinder[n].start.mbar, &unit_press);
- cyl_end= get_pressure_units(dive->cylinder[n].end.mbar, &unit_press);
- cyl_cons_gas = (cyl_press - cyl_end) * cyl_cap;
+
+ /* Get the cylinder gas use in mbar */
+ gas_usage = start_pressure(cyl) - end_pressure(cyl);
+
+ /* Can we turn it into a volume? */
+ if (cyl->type.size.mliter) {
+ gas_usage = bar_to_atm(gas_usage / 1000);
+ gas_usage *= dive->cylinder[n].type.size.mliter;
+ gas_usage = get_volume_units(gas_usage, &decimals, &unit);
+ } else {
+ gas_usage = get_pressure_units(gas_usage, &unit);
+ }
curwidth = 0;
cairo_move_to (cr, curwidth / (double) PANGO_SCALE, 0);
@@ -241,13 +262,10 @@ static void print_tanks (struct dive *dive, cairo_t *cr, int maxwidth, int maxhe
curwidth += (maxwidth/ 3);
cairo_move_to(cr, curwidth / (double) PANGO_SCALE, 0);
- if (prefs.output_units.pressure == PSI) {
- cyl_cons_gas = (psi_to_bar(cyl_press) - psi_to_bar(cyl_end)) * cyl_cap;
- }
snprintf(buffer, sizeof(buffer), _("%.*f %s\n"),
decimals,
- cyl_cons_gas,
- unit_vol);
+ gas_usage,
+ unit);
pango_layout_set_text(layout, buffer, -1);
pango_cairo_show_layout(cr, layout);
curwidth += (maxwidth/ 3);
@@ -383,7 +401,7 @@ static void show_dive_tanks(struct dive *dive, cairo_t *cr, double w,
/* We need to know how many cylinders we used*/
for ( tank_count = 0; tank_count < MAX_CYLINDERS; tank_count++ ){
- if (dive->cylinder[tank_count].start.mbar == 0) {
+ if (cylinder_nodata(dive->cylinder+tank_count)) {
break;
}
}