diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-01-03 12:40:25 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-01-03 12:47:19 -0800 |
commit | 3c5ebfe03664ea9a719c9a5071caee63c3d813c2 (patch) | |
tree | b8cb1288d6942aab90d5b7317664c9c247ebe453 /print.c | |
parent | 6f8e9bcff3046dc7abedea731427f7c307ba3258 (diff) | |
download | subsurface-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.c | 46 |
1 files changed, 32 insertions, 14 deletions
@@ -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; } } |