summaryrefslogtreecommitdiffstats
path: root/profile.c
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2014-01-15 13:34:55 -0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-01-16 10:12:31 +0700
commitdd64f1792d853e4d3e124ccd9b9600990880f50e (patch)
treeeaa0a6ba33c8b60e7b88a90f23475a45a2b1119d /profile.c
parent52064d9e02a6ca559beb8f8e64e28e2ef77c5e44 (diff)
downloadsubsurface-dd64f1792d853e4d3e124ccd9b9600990880f50e.tar.gz
Reworked the calculate_max_limits and plotted the dive.
Created a new version of calculate_max_limits that doesn't have a graphics_context and returns a plot_info. The code is basically the same as the old calculate_max_limits, so there's not much to talk about. The rest of the code is just boilerplate to plug the Profile code with the axis and model stuff, to be plotted on screen. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'profile.c')
-rw-r--r--profile.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/profile.c b/profile.c
index c43bd083b..528818760 100644
--- a/profile.c
+++ b/profile.c
@@ -717,6 +717,67 @@ static void check_gas_change_events(struct dive *dive, struct divecomputer *dc,
set_cylinder_index(pi, i, cylinderindex, ~0u);
}
+
+struct plot_info calculate_max_limits_new(struct dive *dive, struct divecomputer *dc)
+{
+ struct plot_info pi;
+ int maxdepth = dive->maxdepth.mm;
+ int maxtime = 0;
+ int maxpressure = 0, minpressure = INT_MAX;
+ int mintemp = dive->mintemp.mkelvin;
+ int maxtemp = dive->maxtemp.mkelvin;
+ int cyl;
+
+ /* Get the per-cylinder maximum pressure if they are manual */
+ for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) {
+ unsigned int mbar = dive->cylinder[cyl].start.mbar;
+ if (mbar > maxpressure)
+ maxpressure = mbar;
+ }
+
+ /* Then do all the samples from all the dive computers */
+ do {
+ int i = dc->samples;
+ int lastdepth = 0;
+ struct sample *s = dc->sample;
+
+ while (--i >= 0) {
+ int depth = s->depth.mm;
+ int pressure = s->cylinderpressure.mbar;
+ int temperature = s->temperature.mkelvin;
+
+ if (!mintemp && temperature < mintemp)
+ mintemp = temperature;
+ if (temperature > maxtemp)
+ maxtemp = temperature;
+
+ if (pressure && pressure < minpressure)
+ minpressure = pressure;
+ if (pressure > maxpressure)
+ maxpressure = pressure;
+
+ if (depth > maxdepth)
+ maxdepth = s->depth.mm;
+ if ((depth > SURFACE_THRESHOLD || lastdepth > SURFACE_THRESHOLD) &&
+ s->time.seconds > maxtime)
+ maxtime = s->time.seconds;
+ lastdepth = depth;
+ s++;
+ }
+ } while ((dc = dc->next) != NULL);
+
+ if (minpressure > maxpressure)
+ minpressure = 0;
+
+ pi.maxdepth = maxdepth;
+ pi.maxtime = maxtime;
+ pi.maxpressure = maxpressure;
+ pi.minpressure = minpressure;
+ pi.mintemp = mintemp;
+ pi.maxtemp = maxtemp;
+ return pi;
+}
+
void calculate_max_limits(struct dive *dive, struct divecomputer *dc, struct graphics_context *gc)
{
struct plot_info *pi;