]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Merge branch 'mac-fixes' of git://git.hohndel.org/subsurface
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 24 Nov 2011 18:42:37 +0000 (10:42 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 24 Nov 2011 18:42:37 +0000 (10:42 -0800)
* 'mac-fixes' of git://git.hohndel.org/subsurface:
  Split reading/writing preferences into OS specific files

divelist.c
profile.c

index 48a9ea99a5030fd679dd773190fa3405b388f263..a8afd3ac2e5aac5540bd0faef71d3863c33d8c4c 100644 (file)
@@ -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;
index aedea192b3583a85f0945259d7dca193105eb6d6..b01514a574be3001aa80d3f5ee3cff96d846c614 100644 (file)
--- 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;
        }