summaryrefslogtreecommitdiffstats
path: root/core/parse-xml.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/parse-xml.c')
-rw-r--r--core/parse-xml.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/core/parse-xml.c b/core/parse-xml.c
index 47358865b..fa7572ac9 100644
--- a/core/parse-xml.c
+++ b/core/parse-xml.c
@@ -428,7 +428,7 @@ static void event_name(char *buffer, char *name)
{
int size = trimspace(buffer);
if (size >= MAX_EVENT_NAME)
- size = MAX_EVENT_NAME-1;
+ size = MAX_EVENT_NAME - 1;
memcpy(name, buffer, size);
name[size] = 0;
}
@@ -449,6 +449,24 @@ static void get_dc_type(char *buffer, enum dive_comp_type *dct)
}
}
+/* For divemode_text[] (defined in dive.h) determine the index of
+ * the string contained in the xml divemode attribute and passed
+ * in buffer, below. Typical xml input would be:
+ * <event name='modechange' divemode='OC' /> */
+static void event_divemode(char *buffer, int *value)
+{
+ int size = trimspace(buffer);
+ if (size >= MAX_EVENT_NAME)
+ size = MAX_EVENT_NAME - 1;
+ buffer[size] = 0x0;
+ for (int i = 0; i < NUM_DC_TYPE; i++) {
+ if (!strcmp(buffer,divemode_text[i])) {
+ *value = i;
+ break;
+ }
+ }
+}
+
#define MATCH(pattern, fn, dest) ({ \
/* Silly type compatibility test */ \
if (0) (fn)("test", dest); \
@@ -708,6 +726,8 @@ static void try_to_fill_event(const char *name, char *buf)
return;
if (MATCH("value", get_index, &cur_event.value))
return;
+ if (MATCH("divemode", event_divemode, &cur_event.value))
+ return;
if (MATCH("cylinder", get_index, &cur_event.gas.index)) {
/* We add one to indicate that we got an actual cylinder index value */
cur_event.gas.index++;