summaryrefslogtreecommitdiffstats
path: root/uemis.c
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2011-10-03 08:27:36 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2011-10-03 08:34:56 -0700
commitc15f798a85db53dae404a9113266a4d2bc72fbc6 (patch)
tree366ec7354c48324e76b6f58593e03bd039fc78c3 /uemis.c
parent254b851e44a31e2028a2fdddfb4f6989a8e59374 (diff)
downloadsubsurface-c15f798a85db53dae404a9113266a4d2bc72fbc6.tar.gz
Remove the ability to 'Import' .SDA files
We can instead 'Open' these files as they are just bastardized XML files. This gets us back to a more consistent point where 'Import' gets data directly from the dive computer (and hopefully soon we will add the ability to load a dive directly from a uemis SDA to libdivecomputer), and 'Open' loads a file from the filesystem of the computer we are running on (this last sentence phrased so awkwardly as the uemis Zurich SDA is a computer and presents a file system when connected via USB - it just doesn't have the dive data in an accessible format in that file system). As a bonus we get to throw away quite a bit of code (the uemis specific file handling, mini-XML parser with helper functions, the file open dialog in the importer). Yay! Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'uemis.c')
-rw-r--r--uemis.c113
1 files changed, 0 insertions, 113 deletions
diff --git a/uemis.c b/uemis.c
index 769752915..1be48f33e 100644
--- a/uemis.c
+++ b/uemis.c
@@ -73,64 +73,6 @@ static void decode( uint8_t *inbuf, uint8_t *outbuf, int inbuf_len ) {
}
/* end code from Bob Trower */
-/* small helper functions */
-/* simpleregex allocates (and reallocates) the found buffer
- * don't forget to free it when you are done
- */
-static int simpleregex(char *buffer, char *regex, char **found) {
- int status;
- regex_t re;
- regmatch_t match[5];
-
- if (regcomp(&re, regex, 0) !=0) {
- fprintf(stderr,"internal error, regex failed!\n");
- exit(1);
- }
- status = regexec(&re,buffer,5,match,0);
- if(status == 0) {
- *found = realloc(*found,match[1].rm_eo-match[1].rm_so + 1);
- strncpy(*found,buffer+match[1].rm_so,match[1].rm_eo-match[1].rm_so);
- (*found)[match[1].rm_eo-match[1].rm_so] = '\0';
- }
- return(status == 0);
-}
-
-/* read in line of arbitrary length (important for SDA files that can
- * have lines that are tens of kB long
- * don't forget to free it when you are done
- */
-#define MYGETL_INCR 1024
-static char * mygetline(FILE * f) {
- size_t size = 0;
- size_t len = 0;
- char * buf = NULL;
-
- do {
- size += MYGETL_INCR;
- if ((buf = realloc(buf,size)) == NULL)
- break;
- fgets(buf+len,MYGETL_INCR,f);
- len = strlen(buf);
- } while (!feof(f) && buf[len-1]!='\n');
- return buf;
-}
-
-/* text matching, used to build very poor man's XML parser */
-int matchit(FILE *infd, char *regex, char *typeregex, char **found) {
- char *buffer;
-
- while (!feof(infd)) {
- buffer = mygetline(infd);
- if (buffer && simpleregex(buffer,regex,found)) {
- buffer = mygetline(infd);
- if (buffer && simpleregex(buffer,typeregex,found)) {
- return 1;
- }
- }
- }
- return 0;
-}
-
/*
* pressure_to_depth: In centibar. And when converting to
* depth, I'm just going to always use saltwater, because I
@@ -233,58 +175,3 @@ void uemis_parse_divelog_binary(char *base64, void *datap) {
dive->duration.seconds = sample->time.seconds - 1;
return;
}
-
-/* parse a single file
- * TODO: we don't report any errors when the parse fails - we simply don't add them to the list
- */
-void
-parse_uemis_file(char *divelogfilename) {
- char *found=NULL;
- struct tm tm;
- struct dive *dive;
-
- FILE *divelogfile = fopen(divelogfilename,"r");
-
- dive = alloc_dive();
-
- if (! matchit(divelogfile,"val key=\"date\"","<ts>\\([^<]*\\)</ts>",&found)) {
- /* some error handling */
- goto bail;
- }
- strptime(found, "%Y-%m-%dT%H:%M:%S", &tm);
- dive->when = utc_mktime(&tm);
- if (! matchit(divelogfile,"<val key=\"duration\">",
- "<float>\\([0-9.]*\\)</float>", &found)) {
- /* some error handling */
- goto bail;
- }
- dive->duration.seconds = 60.0 * atof(found);
-
- if (! matchit(divelogfile,"<val key=\"depth\">",
- "<int>\\([0-9.]*\\)</int>", &found)) {
- /* some error handling */
- goto bail;
- }
- dive->maxdepth.mm = pressure_to_depth(atoi(found));
-
- if (! matchit(divelogfile,"<val key=\"file_content\">",
- ">\\([a-zA-Z0-9+/=]*\\)<", &found)) {
- /* some error handling */
- goto bail;
- }
- uemis_parse_divelog_binary(found,&dive);
- record_dive(dive);
-bail:
- if (found)
- free(found);
-}
-
-/*
- * parse the two files extracted from the SDA
- */
-void
-uemis_import() {
- if (open_import_file_dialog("*.SDA","uemis Zurich SDA files",
- &parse_uemis_file))
- report_dives();
-}