summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.c1
-rw-r--r--dive.h3
-rw-r--r--load-git.c14
-rw-r--r--parse-xml.c61
-rw-r--r--save-git.c2
-rw-r--r--save-xml.c5
6 files changed, 56 insertions, 30 deletions
diff --git a/dive.c b/dive.c
index a361ce003..e1d6bb3d8 100644
--- a/dive.c
+++ b/dive.c
@@ -27,6 +27,7 @@ static const char *default_tags[] = {
};
const char *cylinderuse_text[] = { "OC-gas", "diluent", "oxygen" };
+const char *dctype_text[] = { "OC", "CCR", "PSCR" };
int event_is_gaschange(struct event *ev)
diff --git a/dive.h b/dive.h
index 0848905e7..f687d2868 100644
--- a/dive.h
+++ b/dive.h
@@ -47,10 +47,11 @@ extern "C" {
#include <stdbool.h>
#endif
-enum dive_comp_type {OC, CCR, PSCR}; // Flags (Open-circuit and Closed-circuit-rebreather) for setting dive computer type
+enum dive_comp_type {OC, CCR, PSCR, NUM_DC_TYPE}; // Flags (Open-circuit and Closed-circuit-rebreather) for setting dive computer type
enum cylinderuse {OC_GAS, DILUENT, OXYGEN, NUM_GAS_USE}; // The different uses for cylinders
extern const char *cylinderuse_text[];
+extern const char *dctype_text[];
struct gasmix {
fraction_t o2;
diff --git a/load-git.c b/load-git.c
index 9cf6baf6c..54d349bd0 100644
--- a/load-git.c
+++ b/load-git.c
@@ -130,6 +130,15 @@ static duration_t get_duration(const char *line)
return d;
}
+static enum dive_comp_type get_dctype(const char *line)
+{
+ for (enum dive_comp_type i = 0; i < NUM_DC_TYPE; i++) {
+ if (strcmp(line, dctype_text[i]) == 0)
+ return i;
+ }
+ return 0;
+}
+
static int get_index(const char *line)
{ return atoi(line); }
static int get_hex(const char *line)
@@ -500,6 +509,9 @@ static void parse_dc_diveid(char *line, struct membuffer *str, void *_dc)
static void parse_dc_duration(char *line, struct membuffer *str, void *_dc)
{ struct divecomputer *dc = _dc; dc->duration = get_duration(line); }
+static void parse_dc_dctype(char *line, struct membuffer *str, void *_dc)
+{ struct divecomputer *dc = _dc; dc->dctype = get_dctype(line); }
+
static void parse_dc_maxdepth(char *line, struct membuffer *str, void *_dc)
{ struct divecomputer *dc = _dc; dc->maxdepth = get_depth(line); }
@@ -732,7 +744,7 @@ static void parse_picture_gps(char *line, struct membuffer *str, void *_pic)
struct keyword_action dc_action[] = {
#undef D
#define D(x) { #x, parse_dc_ ## x }
- D(airtemp), D(date), D(deviceid), D(diveid), D(duration),
+ D(airtemp), D(date), D(dctype), D(deviceid), D(diveid), D(duration),
D(event), D(keyvalue), D(maxdepth), D(meandepth), D(model), D(salinity),
D(surfacepressure), D(surfacetime), D(time), D(watertemp),
};
diff --git a/parse-xml.c b/parse-xml.c
index 70ac63ee2..c8feac1c8 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -29,6 +29,25 @@ static xmlDoc *test_xslt_transforms(xmlDoc *doc, const char **params);
struct dive_table dive_table;
struct dive_table *target_table = NULL;
+/* Trim a character string by removing leading and trailing white space characters.
+ * Parameter: a pointer to a null-terminated character string (buffer);
+ * Return value: length of the trimmed string, excluding the terminal 0x0 byte
+ * The original pointer (buffer) remains valid after this function has been called
+ * and points to the trimmed string */
+int trimspace(char *buffer) {
+ int i, size, start, end;
+ size = strlen(buffer);
+ for(start = 0; isspace(buffer[start]); start++)
+ if (start >= size) return 0; // Find 1st character following leading whitespace
+ for(end = size - 1; isspace(buffer[end]); end--) // Find last character before trailing whitespace
+ if (end <= 0) return 0;
+ for(i = start; i <= end; i++) // Move the nonspace characters to the start of the string
+ buffer[i-start] = buffer[i];
+ size = end - start + 1;
+ buffer[size] = 0x0; // then terminate the string
+ return size; // return string length
+}
+
/*
* Add a dive into the dive_table array
*/
@@ -319,10 +338,12 @@ static void pressure(char *buffer, pressure_t *pressure)
static void cylinder_use(char *buffer, enum cylinderuse *cyl_use)
{
- for (enum cylinderuse i = 0; i < NUM_GAS_USE; i++) {
- if (same_string(buffer, cylinderuse_text[i])) {
- *cyl_use = i;
- return;
+ if (trimspace(buffer)) {
+ for (enum cylinderuse i = 0; i < NUM_GAS_USE; i++) {
+ if (same_string(buffer, cylinderuse_text[i])) {
+ *cyl_use = i;
+ return;
+ }
}
}
}
@@ -522,26 +543,6 @@ static void cylindersize(char *buffer, volume_t *volume)
}
}
-/* Trim a character string by removing leading and trailing white space characters.
- * Parameter: a pointer to a null-terminated character string (buffer);
- * Return value: length of the trimmed string, excluding the terminal 0x0 byte
- * The original pointer (buffer) remains valid after this function has been called
- * and points to the trimmed string */
-int trimspace(char *buffer) {
- int i, size, start, end;
- size = strlen(buffer);
- for(start = 0; isspace(buffer[start]); start++)
- if (start >= size) return 0; // Find 1st character following leading whitespace
- for(end = size - 1; isspace(buffer[end]); end--) // Find last character before trailing whitespace
- if (end <= 0) return 0;
- for(i = start; i <= end; i++) // Move the nonspace characters to the start of the string
- buffer[i-start] = buffer[i];
- size = end - start + 1;
- buffer[size] = 0x0; // then terminate the string
- return size; // return string length
-}
-
-
static void utf8_string(char *buffer, void *_res)
{
char **res = _res;
@@ -561,11 +562,15 @@ static void event_name(char *buffer, char *name)
}
/* Extract the dive computer type from the xml text buffer */
-static void get_dc_type(char *buffer, enum dive_comp_type *i)
+static void get_dc_type(char *buffer, enum dive_comp_type *dct)
{
- if((trimspace(buffer)) && (strcmp(buffer,"CCR") == 0))
- *i = CCR; // if the xml string = "CCR", set dc-type to CCR
-} // otherwise the default dc-type is used (OC)
+ if (trimspace(buffer)) {
+ for (enum dive_comp_type i = 0; i < NUM_DC_TYPE; i++) {
+ if (strcmp(buffer, dctype_text[i]) == 0)
+ *dct = i;
+ }
+ }
+}
#define MATCH(pattern, fn, dest) ({ \
/* Silly type compatibility test */ \
diff --git a/save-git.c b/save-git.c
index 68fc52637..288917a29 100644
--- a/save-git.c
+++ b/save-git.c
@@ -339,6 +339,8 @@ static void save_dc(struct membuffer *b, struct dive *dive, struct divecomputer
show_date(b, dc->when);
if (dc->duration.seconds && dc->duration.seconds != dive->dc.duration.seconds)
put_duration(b, dc->duration, "duration ", "min\n");
+ if (dc->dctype != OC)
+ put_format(b, "dctype %s\n", dctype_text[dc->dctype]);
save_depths(b, dc);
save_temperatures(b, dc);
diff --git a/save-xml.c b/save-xml.c
index 31ad436bc..736e6a4db 100644
--- a/save-xml.c
+++ b/save-xml.c
@@ -351,6 +351,11 @@ static void save_dc(struct membuffer *b, struct dive *dive, struct divecomputer
show_date(b, dc->when);
if (dc->duration.seconds && dc->duration.seconds != dive->dc.duration.seconds)
put_duration(b, dc->duration, " duration='", " min'");
+ if (dc->dctype != OC) {
+ for (enum dive_comp_type i = 0; i < NUM_DC_TYPE; i++)
+ if (dc->dctype == i)
+ show_utf8(b, dctype_text[i], " dctype='", "'", 1);
+ }
put_format(b, ">\n");
save_depths(b, dc);
save_temperatures(b, dc);