diff options
-rw-r--r-- | dive.h | 1 | ||||
-rw-r--r-- | file.c | 9 | ||||
-rw-r--r-- | parse-xml.c | 28 |
3 files changed, 38 insertions, 0 deletions
@@ -627,6 +627,7 @@ extern int parse_dm4_buffer(sqlite3 *handle, const char *url, const char *buf, i extern int parse_dm5_buffer(sqlite3 *handle, const char *url, const char *buf, int size, struct dive_table *table); extern int parse_shearwater_buffer(sqlite3 *handle, const char *url, const char *buf, int size, struct dive_table *table); extern int parse_cobalt_buffer(sqlite3 *handle, const char *url, const char *buf, int size, struct dive_table *table); +extern int parse_dlf_buffer(char *buffer, size_t size); extern int parse_file(const char *filename); extern int parse_csv_file(const char *filename, int time, int depth, int temp, int po2f, int cnsf, int ndlf, int ttsf, int stopdepthf, int pressuref, int sepidx, const char *csvtemplate, int units); @@ -442,6 +442,15 @@ int parse_file(const char *filename) } } + /* Divesoft Freedom */ + if (fmt && (!strcasecmp(fmt + 1, "DLF"))) { + if (!parse_dlf_buffer(mem.buffer, mem.size)) { + free(mem.buffer); + return 0; + } + return -1; + } + ret = parse_file_buffer(filename, &mem); free(mem.buffer); return ret; diff --git a/parse-xml.c b/parse-xml.c index ac7820971..218268dc3 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -2531,6 +2531,34 @@ int parse_cobalt_buffer(sqlite3 *handle, const char *url, const char *buffer, in return 0; } +int parse_dlf_buffer(char *buffer, size_t size) +{ + char *ptr = (char *)buffer; + bool event; + + /* Skipping the dive header for now */ + ptr += 32; + + dive_start(); + + while (ptr < buffer + size) { + event = ptr[0] & 0x0f; + if (event == 1) { + /* dive event */ + } else { + sample_start(); + cur_sample->time.seconds = ((ptr[0] >> 4) & 0x0f) + + ((ptr[1] << 4) & 0xff0) + + (ptr[2] & 0x0f) * 3600; /* hours */ + cur_sample->depth.mm = ((ptr[4] & 0xff) + ((ptr[5] << 8) & 0xff00)) * 10; + sample_end(); + } + ptr += 16; + } + dive_end(); +} + + void parse_xml_init(void) { LIBXML_TEST_VERSION |