From: Linus Torvalds Date: Thu, 24 Nov 2011 18:42:37 +0000 (-0800) Subject: Merge branch 'mac-fixes' of git://git.hohndel.org/subsurface X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=290ce56d0181c0c7e7d6e1af3eb27d3015cffca7;hp=671f6544ac8b4a6eb68576b37344e84808511eb8;p=ext%2Fsubsurface.git Merge branch 'mac-fixes' of git://git.hohndel.org/subsurface * 'mac-fixes' of git://git.hohndel.org/subsurface: Split reading/writing preferences into OS specific files --- diff --git a/divelist.c b/divelist.c index 48a9ea9..a8afd3a 100644 --- a/divelist.c +++ b/divelist.c @@ -320,6 +320,7 @@ static double calculate_airuse(struct dive *dive) static int calculate_sac(struct dive *dive) { double airuse, pressure, sac; + int duration, i; airuse = calculate_airuse(dive); if (!airuse) @@ -327,9 +328,25 @@ static int calculate_sac(struct dive *dive) if (!dive->duration.seconds) return 0; + /* find and eliminate long surface intervals */ + duration = dive->duration.seconds; + for (i = 0; i < dive->samples; i++) { + if (dive->sample[i].depth.mm < 100) { /* less than 10cm */ + int end = i + 1; + while (end < dive->samples && dive->sample[end].depth.mm < 100) + end++; + /* we only want the actual surface time during a dive */ + if (end < dive->samples) { + end--; + duration -= dive->sample[end].time.seconds - + dive->sample[i].time.seconds; + i = end + 1; + } + } + } /* Mean pressure in atm: 1 atm per 10m */ pressure = 1 + (dive->meandepth.mm / 10000.0); - sac = airuse / pressure * 60 / dive->duration.seconds; + sac = airuse / pressure * 60 / duration; /* milliliters per minute.. */ return sac * 1000; diff --git a/profile.c b/profile.c index aedea19..b01514a 100644 --- a/profile.c +++ b/profile.c @@ -622,12 +622,16 @@ static void set_sac_color(struct graphics_context *gc, int sac, int avg_sac) int sac_index = 0; int delta = sac - avg_sac + 7000; - sac_index = delta / 2000; - if (sac_index < 0) - sac_index = 0; - if (sac_index > SAC_COLORS - 1) - sac_index = SAC_COLORS - 1; - set_source_rgb_struct(gc, &sac_color[sac_index]); + if (!gc->printer) { + sac_index = delta / 2000; + if (sac_index < 0) + sac_index = 0; + if (sac_index > SAC_COLORS - 1) + sac_index = SAC_COLORS - 1; + set_source_rgb_struct(gc, &sac_color[sac_index]); + } else { + set_source_rgb(gc, 1.0, 1.0, 1.0); + } } /* calculate the current SAC in ml/min and convert to int */ @@ -946,6 +950,21 @@ static void list_free(pr_track_t *list) free(list); } +static void dump_pr_track(pr_track_t **track_pr) +{ + int cyl; + pr_track_t *list; + + for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) { + list = track_pr[cyl]; + while (list) { + printf("cyl%d: start %d end %d t_start %d t_end %d pt %6.3f\n", cyl, + list->start, list->end, list->t_start, list->t_end, list->pressure_time); + list = list->next; + } + } +} + static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, pr_track_t **track_pr) { @@ -956,6 +975,10 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, struct plot_data *entry; int cur_pr[MAX_CYLINDERS]; + if (0) { + /* another great debugging tool */ + dump_pr_track(track_pr); + } for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) { cur_pr[cyl] = track_pr[cyl]->start; }