From bd826de2f539f2e48c8c01d2d7f9f34c7e97104a Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@gmail.com> Date: Fri, 13 May 2016 07:43:27 +0000 Subject: [PATCH] Fix in trisurf output, inhibiting print of successful reconstruction. Multiple fixes and improvements in python module. Added symlinking of tapes into the running directories and dumping tapes from snapshots into tape files. --- src/snapshot.c | 97 +++++++++++++++++++++++++++++------------------- 1 files changed, 58 insertions(+), 39 deletions(-) diff --git a/src/snapshot.c b/src/snapshot.c index e96139b..370ce4c 100644 --- a/src/snapshot.c +++ b/src/snapshot.c @@ -1,3 +1,5 @@ +/* vim: set ts=4 sts=4 sw=4 noet : */ +/* vim: set ts=4 sts=4 sw=4 noet : */ #include<stdio.h> #include<general.h> #include<snapshot.h> @@ -6,7 +8,9 @@ #include <zlib.h> #include<inttypes.h> #include<config.h> - +#include <time.h> +#include "io.h" +/* a helper function that utilizes ts_string data structure and performs same as sprintf */ ts_uint ts_sprintf(ts_string *str, char *fmt, ...){ va_list ap; va_start(ap,fmt); @@ -16,7 +20,7 @@ return n; } - +/* outputs additional data into paraview xml file */ ts_bool xml_trisurf_data(FILE *fh, ts_vesicle *vesicle){ ts_string *data=(ts_string *)malloc(sizeof(ts_sprintf)); @@ -36,20 +40,38 @@ #else fprintf(fh,"%s", data->string); #endif - free(data->string); + free(data->string); /* TODO: valgrind is not ok with this! */ free(data); xml_trisurf_footer(fh); return TS_SUCCESS; } ts_bool xml_trisurf_header(FILE *fh, ts_vesicle *vesicle){ - fprintf(fh, "<trisurfversion>%s</trisurfversion>\n",TS_VERSION); - fprintf(fh, "<trisurfdate></trisurfdate>\n"); - fprintf(fh, "<dumpdate></dumpdate>\n"); +/* format current time */ + time_t current_time; + char *c_time_string; + current_time = time(NULL); + c_time_string = ctime(¤t_time); + int npoly, nfono; + + fprintf(fh, "<trisurfversion>Trisurf (commit %s), compiled on %s %s</trisurfversion>\n",TS_VERSION, __DATE__, __TIME__); + fprintf(fh, "<dumpdate>%s</dumpdate>\n", c_time_string); + fprintf(fh, "<tape>\n"); - + fprintf(fh,"%s",tapetxt); fprintf(fh, "</tape>\n"); - fprintf(fh, "<trisurf nvtx=\"%u\" npoly=\"%u\" nfono=\"%u\">\n", vesicle->vlist->n, vesicle->poly_list->n, vesicle->poly_list->poly[0]->vlist->n); + if(vesicle->poly_list!=NULL){ + npoly=vesicle->poly_list->n; + if(npoly!=0){ + nfono=vesicle->poly_list->poly[0]->vlist->n; + } else { + nfono=0; + } + } else { + npoly=0; + nfono=0; + } + fprintf(fh, "<trisurf nvtx=\"%u\" npoly=\"%u\" nmono=\"%u\" compressed=\"false\">\n", vesicle->vlist->n, npoly, nfono); return TS_SUCCESS; } @@ -62,7 +84,7 @@ ts_uint i; ts_sprintf(data,"<tria>"); for(i=0; i<tlist->n;i++){ - ts_sprintf(data,"%u %u %u",tlist->tria[i]->vertex[0]->idx, tlist->tria[i]->vertex[1]->idx, tlist->tria[i]->vertex[2]->idx); + ts_sprintf(data,"%u %u %u ",tlist->tria[i]->vertex[0]->idx, tlist->tria[i]->vertex[1]->idx, tlist->tria[i]->vertex[2]->idx); } ts_sprintf(data,"</tria>"); return TS_SUCCESS; @@ -72,7 +94,7 @@ ts_uint i; ts_sprintf(data,"<trianeigh>\n"); for(i=0; i<tlist->n;i++){ - ts_sprintf(data,"%u %u %u",tlist->tria[i]->neigh[0]->idx, tlist->tria[i]->neigh[1]->idx, tlist->tria[i]->neigh[2]->idx); + ts_sprintf(data,"%u %u %u ",tlist->tria[i]->neigh[0]->idx, tlist->tria[i]->neigh[1]->idx, tlist->tria[i]->neigh[2]->idx); } ts_sprintf(data,"</trianeigh>\n"); return TS_SUCCESS; @@ -109,6 +131,7 @@ /* zlib compression base64 encoded */ /* compressed must not be pre-malloced */ +/* taken from https://gist.github.com/arq5x/5315739 */ ts_uint ts_compress_string64(char *data, ts_uint data_len, char **compressed){ z_stream defstream; defstream.zalloc = Z_NULL; @@ -130,6 +153,10 @@ return nbase; } +ts_uint ts_decompress_string64(char *b64, ts_uint data_len, char **decompressed){ +return TS_SUCCESS; + +} /* base64 encoding, taken from http://stackoverflow.com/questions/342409/how-do-i-base64-encode-decode-in-c */ static char encoding_table[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', @@ -144,10 +171,7 @@ static int mod_table[] = {0, 2, 1}; -char *base64_encode(const unsigned char *data, - size_t input_length, - size_t *output_length) { - +char *base64_encode(const unsigned char *data, size_t input_length, size_t *output_length) { *output_length = 4 * ((input_length + 2) / 3); int i,j; char *encoded_data = malloc(*output_length); @@ -155,29 +179,25 @@ for (i = 0, j = 0; i < input_length;) { - uint32_t octet_a = i < input_length ? (unsigned char)data[i++] : 0; - uint32_t octet_b = i < input_length ? (unsigned char)data[i++] : 0; - uint32_t octet_c = i < input_length ? (unsigned char)data[i++] : 0; + uint32_t octet_a = i < input_length ? (unsigned char)data[i++] : 0; + uint32_t octet_b = i < input_length ? (unsigned char)data[i++] : 0; + uint32_t octet_c = i < input_length ? (unsigned char)data[i++] : 0; + uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c; - uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c; - - encoded_data[j++] = encoding_table[(triple >> 3 * 6) & 0x3F]; - encoded_data[j++] = encoding_table[(triple >> 2 * 6) & 0x3F]; - encoded_data[j++] = encoding_table[(triple >> 1 * 6) & 0x3F]; - encoded_data[j++] = encoding_table[(triple >> 0 * 6) & 0x3F]; + encoded_data[j++] = encoding_table[(triple >> 3 * 6) & 0x3F]; + encoded_data[j++] = encoding_table[(triple >> 2 * 6) & 0x3F]; + encoded_data[j++] = encoding_table[(triple >> 1 * 6) & 0x3F]; + encoded_data[j++] = encoding_table[(triple >> 0 * 6) & 0x3F]; } for (i = 0; i < mod_table[input_length % 3]; i++) - encoded_data[*output_length - 1 - i] = '='; + encoded_data[*output_length - 1 - i] = '='; return encoded_data; } -unsigned char *base64_decode(const char *data, - size_t input_length, - size_t *output_length) { - +unsigned char *base64_decode(const char *data, size_t input_length, size_t *output_length) { int i,j; if (decoding_table == NULL) build_decoding_table(); @@ -191,22 +211,21 @@ if (decoded_data == NULL) return NULL; for (i = 0, j = 0; i < input_length;) { + uint32_t sextet_a = data[i] == '=' ? 0 & i++ : decoding_table[(int)data[i++]]; + uint32_t sextet_b = data[i] == '=' ? 0 & i++ : decoding_table[(int)data[i++]]; + uint32_t sextet_c = data[i] == '=' ? 0 & i++ : decoding_table[(int)data[i++]]; + uint32_t sextet_d = data[i] == '=' ? 0 & i++ : decoding_table[(int)data[i++]]; - uint32_t sextet_a = data[i] == '=' ? 0 & i++ : decoding_table[(int)data[i++]]; - uint32_t sextet_b = data[i] == '=' ? 0 & i++ : decoding_table[(int)data[i++]]; - uint32_t sextet_c = data[i] == '=' ? 0 & i++ : decoding_table[(int)data[i++]]; - uint32_t sextet_d = data[i] == '=' ? 0 & i++ : decoding_table[(int)data[i++]]; - - uint32_t triple = (sextet_a << 3 * 6) + uint32_t triple = (sextet_a << 3 * 6) + (sextet_b << 2 * 6) + (sextet_c << 1 * 6) + (sextet_d << 0 * 6); - if (j < *output_length) decoded_data[j++] = (triple >> 2 * 8) & 0xFF; - if (j < *output_length) decoded_data[j++] = (triple >> 1 * 8) & 0xFF; - if (j < *output_length) decoded_data[j++] = (triple >> 0 * 8) & 0xFF; + if (j < *output_length) decoded_data[j++] = (triple >> 2 * 8) & 0xFF; + if (j < *output_length) decoded_data[j++] = (triple >> 1 * 8) & 0xFF; + if (j < *output_length) decoded_data[j++] = (triple >> 0 * 8) & 0xFF; } - + if(decoding_table !=NULL) free(decoding_table); return decoded_data; } @@ -216,7 +235,7 @@ decoding_table = malloc(256); int i; for (i = 0; i < 64; i++) - decoding_table[(unsigned char) encoding_table[i]] = i; + decoding_table[(unsigned char) encoding_table[i]] = i; } -- Gitblit v1.9.3