summaryrefslogtreecommitdiffstats
path: root/equipment.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-12-11 11:54:17 -0800
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-12-11 11:54:17 -0800
commitf9bb3f79106baba7cda330e0c04f54a01745581f (patch)
tree61e5c0bf1c27f60358c6afdf94787e081b8ee60c /equipment.c
parentf078bc04e1f55ad9ecd0632fcfa5753440ba2267 (diff)
downloadsubsurface-f9bb3f79106baba7cda330e0c04f54a01745581f.tar.gz
Clean up reference tank information table
This makes the reference tanks ("struct tank_info") use a saner format which specifies explicitly whether the size is in ml or cubic feet, and whether the pressure is in psi or bar. So instead of having magic rules ("size is in cuft if < 1000, otherwise mliter"), just set the size explicitly: { "11.1 l", .ml = 11100 }, { "AL80", .cuft = 80, .psi = 3000 }, and then the code can just convert to standard measurements without any odd rules, and the initialization table becomes self-explanatory too. This is in preparation for doing the metric tanks with pressure: Henrik Aronsen sent a really ugly patch using the previous setup, I just couldn't stand the additional hackery. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'equipment.c')
-rw-r--r--equipment.c57
1 files changed, 31 insertions, 26 deletions
diff --git a/equipment.c b/equipment.c
index 9c2b4054f..f14733f19 100644
--- a/equipment.c
+++ b/equipment.c
@@ -450,35 +450,34 @@ static void record_cylinder_changes(cylinder_t *cyl, struct cylinder_widget *cyl
*/
static struct tank_info {
const char *name;
- int size; /* cuft if < 1000, otherwise mliter */
- int psi; /* If zero, size is in mliter */
+ int cuft, ml, psi, bar;
} tank_info[100] = {
/* Need an empty entry for the no-cylinder case */
- { "", 0, 0 },
+ { "", },
/* Size-only metric cylinders */
- { "10.0 l", 10000 },
- { "11.1 l", 11100 },
+ { "10.0 l", .ml = 10000 },
+ { "11.1 l", .ml = 11100 },
/* Most common AL cylinders */
- { "AL50", 50, 3000 },
- { "AL63", 63, 3000 },
- { "AL72", 72, 3000 },
- { "AL80", 80, 3000 },
- { "AL100", 100, 3300 },
+ { "AL50", .cuft = 50, .psi = 3000 },
+ { "AL63", .cuft = 63, .psi = 3000 },
+ { "AL72", .cuft = 72, .psi = 3000 },
+ { "AL80", .cuft = 80, .psi = 3000 },
+ { "AL100", .cuft = 100, .psi = 3300 },
/* Somewhat common LP steel cylinders */
- { "LP85", 85, 2640 },
- { "LP95", 95, 2640 },
- { "LP108", 108, 2640 },
- { "LP121", 121, 2640 },
+ { "LP85", .cuft = 85, 2640 },
+ { "LP95", .cuft = 95, 2640 },
+ { "LP108", .cuft = 108, 2640 },
+ { "LP121", .cuft = 121, 2640 },
/* Somewhat common HP steel cylinders */
- { "HP65", 65, 3442 },
- { "HP80", 80, 3442 },
- { "HP100", 100, 3442 },
- { "HP119", 119, 3442 },
- { "HP130", 130, 3442 },
+ { "HP65", .cuft = 65, .psi = 3442 },
+ { "HP80", .cuft = 80, .psi = 3442 },
+ { "HP100", .cuft = 100, .psi = 3442 },
+ { "HP119", .cuft = 119, .psi = 3442 },
+ { "HP130", .cuft = 130, .psi = 3442 },
/* We'll fill in more from the dive log dynamically */
{ NULL, }
@@ -490,20 +489,26 @@ static void fill_tank_list(GtkListStore *store)
struct tank_info *info = tank_info;
while (info->name) {
- int size = info->size;
+ int ml = info->ml;
+ int cuft = info->cuft;
int psi = info->psi;
- int mbar = 0, ml = size;
+ int mbar;
+ double bar = info->bar;
/* Is it in cuft and psi? */
if (psi) {
- double bar = psi_to_bar(psi);
- double airvolume = cuft_to_l(size) * 1000.0;
- double atm = bar_to_atm(bar);
+ bar = psi_to_bar(psi);
- ml = airvolume / atm + 0.5;
- mbar = bar*1000 + 0.5;
+ if (cuft) {
+ double airvolume = cuft_to_l(cuft) * 1000.0;
+ double atm = bar_to_atm(bar);
+
+ ml = airvolume / atm + 0.5;
+ }
}
+ mbar = bar * 1000 + 0.5;
+
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, info->name,