]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Merge branch 'more-divelist-goodness' of https://github.com/nathansamson/diveclog
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 4 Sep 2011 22:15:46 +0000 (15:15 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 4 Sep 2011 22:15:46 +0000 (15:15 -0700)
* 'more-divelist-goodness' of https://github.com/nathansamson/diveclog:
  Right align the numbers

dive.h
parse-xml.c
save-xml.c

diff --git a/dive.h b/dive.h
index 1386a3bf8d8b7a999e08bcf4fcb6b99faeae47e5..08194f6a91caceec9692934b97fb1be67507e7bc 100644 (file)
--- a/dive.h
+++ b/dive.h
@@ -108,7 +108,7 @@ struct sample {
        int cylinderindex;
 };
 
-#define MAX_CYLINDERS (4)
+#define MAX_CYLINDERS (8)
 
 struct dive {
        time_t when;
index 1ca046db7a62f2e0391e8f89e896df0c34dd06d8..b123bb39f6998862bf794644cd9f31fbb791de83 100644 (file)
@@ -587,6 +587,7 @@ static void uemis_time_zone(char *buffer, void *_when)
        *when += tz * 3600;
 }
 
+/* Christ. Uemis tank data is a total mess. */
 static int uemis_dive_match(struct dive *dive, const char *name, int len, char *buf)
 {
        return  MATCH(".units.length", uemis_length_unit, &units) ||
@@ -599,6 +600,20 @@ static int uemis_dive_match(struct dive *dive, const char *name, int len, char *
                MATCH(".date_time", uemis_date_time, &dive->when) ||
                MATCH(".time_zone", uemis_time_zone, &dive->when) ||
                MATCH(".ambient.temperature", decicelsius, &dive->airtemp) ||
+               MATCH(".air.bottom_tank.size", cylindersize, &dive->cylinder[0].type.size) ||
+               MATCH(".air.bottom_tank.oxygen", percent, &dive->cylinder[0].gasmix.o2) ||
+               MATCH(".nitrox_1.bottom_tank.size", cylindersize, &dive->cylinder[1].type.size) ||
+               MATCH(".nitrox_1.bottom_tank.oxygen", percent, &dive->cylinder[1].gasmix.o2) ||
+               MATCH(".nitrox_2.bottom_tank.size", cylindersize, &dive->cylinder[2].type.size) ||
+               MATCH(".nitrox_2.bottom_tank.oxygen", percent, &dive->cylinder[2].gasmix.o2) ||
+               MATCH(".nitrox_2.deco_tank.size", cylindersize, &dive->cylinder[3].type.size) ||
+               MATCH(".nitrox_2.deco_tank.oxygen", percent, &dive->cylinder[3].gasmix.o2) ||
+               MATCH(".nitrox_3.bottom_tank.size", cylindersize, &dive->cylinder[4].type.size) ||
+               MATCH(".nitrox_3.bottom_tank.oxygen", percent, &dive->cylinder[4].gasmix.o2) ||
+               MATCH(".nitrox_3.deco_tank.size", cylindersize, &dive->cylinder[5].type.size) ||
+               MATCH(".nitrox_3.deco_tank.oxygen", percent, &dive->cylinder[5].gasmix.o2) ||
+               MATCH(".nitrox_3.travel_tank.size", cylindersize, &dive->cylinder[6].type.size) ||
+               MATCH(".nitrox_3.travel_tank.oxygen", percent, &dive->cylinder[6].gasmix.o2) ||
                0;
 }
 
@@ -643,6 +658,8 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf)
                return;
        if (MATCH(".cylinder.workpressure", pressure, &dive->cylinder[cylinder_index].type.workingpressure))
                return;
+       if (MATCH(".cylinder.description", utf8_string, &dive->cylinder[cylinder_index].type.description))
+               return;
 
        if (MATCH(".o2", gasmix, &dive->cylinder[cylinder_index].gasmix.o2))
                return;
index 46bcec0a18b3bbbe13b08c6f2ecc96f93ab95db7..f629b452e1960760a3d61380b3f5733c7b767fdf 100644 (file)
@@ -9,23 +9,42 @@
 
 #define FRACTION(n,x) ((unsigned)(n)/(x)),((unsigned)(n)%(x))
 
-static void show_temperature(FILE *f, temperature_t temp, const char *pre, const char *post)
+static void show_milli(FILE *f, const char *pre, int value, const char *unit, const char *post)
 {
-       if (temp.mkelvin) {
-               int mcelsius = temp.mkelvin - 273150;
-               const char *sign ="";
-               if (mcelsius < 0) {
-                       sign = "-";
-                       mcelsius = - mcelsius;
-               }
-               fprintf(f, "%s%s%u.%03u C%s", pre, sign, FRACTION(mcelsius, 1000), post);
+       int i;
+       char buf[4];
+       unsigned v;
+
+       fputs(pre, f);
+       v = value;
+       if (value < 0) {
+               putc('-', f);
+               v = -value;
+       }
+       for (i = 2; i >= 0; i--) {
+               buf[i] = (v % 10) + '0';
+               v /= 10;
        }
+       buf[3] = 0;
+       if (buf[2] == '0') {
+               buf[2] = 0;
+               if (buf[1] == '0')
+                       buf[1] = 0;
+       }
+
+       fprintf(f, "%u.%s%s%s", v, buf, unit, post);
+}
+
+static void show_temperature(FILE *f, temperature_t temp, const char *pre, const char *post)
+{
+       if (temp.mkelvin)
+               show_milli(f, pre, temp.mkelvin - 273150, " C", post);
 }
 
 static void show_depth(FILE *f, depth_t depth, const char *pre, const char *post)
 {
        if (depth.mm)
-               fprintf(f, "%s%u.%03u m%s", pre, FRACTION(depth.mm, 1000), post);
+               show_milli(f, pre, depth.mm, " m", post);
 }
 
 static void show_duration(FILE *f, duration_t duration, const char *pre, const char *post)
@@ -37,7 +56,7 @@ static void show_duration(FILE *f, duration_t duration, const char *pre, const c
 static void show_pressure(FILE *f, pressure_t pressure, const char *pre, const char *post)
 {
        if (pressure.mbar)
-               fprintf(f, "%s%u.%03u bar%s", pre, FRACTION(pressure.mbar, 1000), post);
+               show_milli(f, pre, pressure.mbar, " bar", post);
 }
 
 /*
@@ -141,18 +160,17 @@ static void save_cylinder_info(FILE *f, struct dive *dive)
                                fprintf(f, " he='%u.%u%%'", FRACTION(he, 10));
                }
                if (volume)
-                       fprintf(f, " size='%u.%03u l'", FRACTION(volume, 1000));
+                       show_milli(f, " size='", volume, " l", "'");
                if (description)
-                       fprintf(f, " name='%s'", description);
+                       fprintf(f, " description='%s'", description);
                fprintf(f, " />\n");
        }
 }
 
 static void save_sample(FILE *f, struct sample *sample)
 {
-       fprintf(f, "  <sample time='%u:%02u min' depth='%u.%03u m'",
-               FRACTION(sample->time.seconds,60),
-               FRACTION(sample->depth.mm, 1000));
+       fprintf(f, "  <sample time='%u:%02u min'", FRACTION(sample->time.seconds,60));
+       show_milli(f, " depth='", sample->depth.mm, " m", "'");
        show_temperature(f, sample->temperature, " temp='", "'");
        show_pressure(f, sample->cylinderpressure, " pressure='", "'");
        if (sample->cylinderindex)