diff --git a/Common/Views.cpp b/Common/Views.cpp index 8179eb42e82dedb160d595123c7a6af95d1d8d8f..9a46e243287c6ee0cbd0dd84a722294672fe9a0e 100644 --- a/Common/Views.cpp +++ b/Common/Views.cpp @@ -1,4 +1,4 @@ -// $Id: Views.cpp,v 1.158 2004-12-30 00:30:04 geuzaine Exp $ +// $Id: Views.cpp,v 1.159 2005-01-01 18:56:22 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -846,7 +846,7 @@ void ReadView(FILE *file, char *filename) &v->NbVS, &v->NbTS, &v->NbT2, &t2l, &v->NbT3, &t3l); Msg(DEBUG, "Detected post-processing view format 1.1"); } - else if(version == 1.2) { + else if(version == 1.2 || version == 1.3) { fscanf(file, "%s %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d " "%d %d %d %d %d %d %d %d %d %d %d %d %d\n", name, &v->NbTimeStep, @@ -858,7 +858,7 @@ void ReadView(FILE *file, char *filename) &v->NbSH, &v->NbVH, &v->NbTH, &v->NbSI, &v->NbVI, &v->NbTI, &v->NbSY, &v->NbVY, &v->NbTY, &v->NbT2, &t2l, &v->NbT3, &t3l); - Msg(DEBUG, "Detected post-processing view format 1.2"); + Msg(DEBUG, "Detected post-processing view format %g", version); } else { Msg(GERROR, "Unknown post-processing file format (version %g)", @@ -884,85 +884,88 @@ void ReadView(FILE *file, char *filename) // Time values v->Time = List_CreateFromFile(v->NbTimeStep, 10, size, file, format, swap); - // if nb==0, this still allocates a list (empty, but ready to be - // filled later, e.g. in a plugin) -#define LL List_CreateFromFile(nb, 100, size, file, format, swap) + // Note: if nb==0, we still allocates the lists (so that they + // are ready to be filled later, e.g. in plugins) // Points nb = v->NbSP ? v->NbSP * (v->NbTimeStep + 3) : 0; - v->SP = LL; + v->SP = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbVP ? v->NbVP * (v->NbTimeStep * 3 + 3) : 0; - v->VP = LL; + v->VP = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbTP ? v->NbTP * (v->NbTimeStep * 9 + 3) : 0; - v->TP = LL; + v->TP = List_CreateFromFile(nb, 100, size, file, format, swap); // Lines nb = v->NbSL ? v->NbSL * (v->NbTimeStep * 2 + 6) : 0; - v->SL = LL; + v->SL = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbVL ? v->NbVL * (v->NbTimeStep * 2 * 3 + 6) : 0; - v->VL = LL; + v->VL = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbTL ? v->NbTL * (v->NbTimeStep * 2 * 9 + 6) : 0; - v->TL = LL; + v->TL = List_CreateFromFile(nb, 100, size, file, format, swap); // Triangles nb = v->NbST ? v->NbST * (v->NbTimeStep * 3 + 9) : 0; - v->ST = LL; + v->ST = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbVT ? v->NbVT * (v->NbTimeStep * 3 * 3 + 9) : 0; - v->VT = LL; + v->VT = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbTT ? v->NbTT * (v->NbTimeStep * 3 * 9 + 9) : 0; - v->TT = LL; + v->TT = List_CreateFromFile(nb, 100, size, file, format, swap); // Quadrangles nb = v->NbSQ ? v->NbSQ * (v->NbTimeStep * 4 + 12) : 0; - v->SQ = LL; + v->SQ = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbVQ ? v->NbVQ * (v->NbTimeStep * 4 * 3 + 12) : 0; - v->VQ = LL; + v->VQ = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbTQ ? v->NbTQ * (v->NbTimeStep * 4 * 9 + 12) : 0; - v->TQ = LL; + v->TQ = List_CreateFromFile(nb, 100, size, file, format, swap); // Tetrahedra nb = v->NbSS ? v->NbSS * (v->NbTimeStep * 4 + 12) : 0; - v->SS = LL; + v->SS = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbVS ? v->NbVS * (v->NbTimeStep * 4 * 3 + 12) : 0; - v->VS = LL; + v->VS = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbTS ? v->NbTS * (v->NbTimeStep * 4 * 9 + 12) : 0; - v->TS = LL; + v->TS = List_CreateFromFile(nb, 100, size, file, format, swap); // Hexahedra nb = v->NbSH ? v->NbSH * (v->NbTimeStep * 8 + 24) : 0; - v->SH = LL; + v->SH = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbVH ? v->NbVH * (v->NbTimeStep * 8 * 3 + 24) : 0; - v->VH = LL; + v->VH = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbTH ? v->NbTH * (v->NbTimeStep * 8 * 9 + 24) : 0; - v->TH = LL; + v->TH = List_CreateFromFile(nb, 100, size, file, format, swap); // Prisms nb = v->NbSI ? v->NbSI * (v->NbTimeStep * 6 + 18) : 0; - v->SI = LL; + v->SI = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbVI ? v->NbVI * (v->NbTimeStep * 6 * 3 + 18) : 0; - v->VI = LL; + v->VI = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbTI ? v->NbTI * (v->NbTimeStep * 6 * 9 + 18) : 0; - v->TI = LL; + v->TI = List_CreateFromFile(nb, 100, size, file, format, swap); // Pyramids nb = v->NbSY ? v->NbSY * (v->NbTimeStep * 5 + 15) : 0; - v->SY = LL; + v->SY = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbVY ? v->NbVY * (v->NbTimeStep * 5 * 3 + 15) : 0; - v->VY = LL; + v->VY = List_CreateFromFile(nb, 100, size, file, format, swap); nb = v->NbTY ? v->NbTY * (v->NbTimeStep * 5 * 9 + 15) : 0; - v->TY = LL; + v->TY = List_CreateFromFile(nb, 100, size, file, format, swap); -#undef LL - - // Strings + // 2D strings nb = v->NbT2 ? v->NbT2 * 4 : 0; v->T2D = List_CreateFromFile(nb, 10, size, file, format, swap); - v->T2C = List_CreateFromFile(t2l, 10, sizeof(char), file, format, swap); + if(version <= 1.2) + v->T2C = List_CreateFromFileOld(t2l, 10, sizeof(char), file, format, swap); + else + v->T2C = List_CreateFromFile(t2l, 10, sizeof(char), file, format, swap); + // 3D strings nb = v->NbT3 ? v->NbT3 * 5 : 0; v->T3D = List_CreateFromFile(nb, 10, size, file, format, swap); - v->T3C = List_CreateFromFile(t3l, 10, sizeof(char), file, format, swap); - + if(version <= 1.2) + v->T3C = List_CreateFromFileOld(t3l, 10, sizeof(char), file, format, swap); + else + v->T3C = List_CreateFromFile(t3l, 10, sizeof(char), file, format, swap); Msg(DEBUG, "Read View '%s' (%d TimeSteps): %d %d %d %d %d %d %d %d %d %d %d " @@ -1090,20 +1093,15 @@ void WriteView(Post_View *v, char *filename, int format, int append) file = stdout; if(!parsed && !append){ - fprintf(file, "$PostFormat /* Gmsh 1.2, %s */\n", + fprintf(file, "$PostFormat /* Gmsh 1.3, %s */\n", binary ? "binary" : "ascii"); - fprintf(file, "1.2 %d %d\n", binary, (int)sizeof(double)); + fprintf(file, "1.3 %d %d\n", binary, (int)sizeof(double)); fprintf(file, "$EndPostFormat\n"); } - int i; - for(i = 0; i < (int)strlen(v->Name); i++) { - if(v->Name[i] == ' ') - name[i] = '^'; - else - name[i] = v->Name[i]; - } - name[i] = '\0'; + strcpy(name, v->Name); + for(int i = 0; i < (int)strlen(name); i++) + if(name[i] == ' ') name[i] = '^'; if(!parsed){ fprintf(file, "$View /* %s */\n", v->Name); diff --git a/DataStr/List.cpp b/DataStr/List.cpp index 5a7802a10e06f96635c45d64f3fc1766e815bc87..c7a5e64c17ba86a8c3417410f641490d3a27b430 100644 --- a/DataStr/List.cpp +++ b/DataStr/List.cpp @@ -1,4 +1,4 @@ -// $Id: List.cpp,v 1.32 2004-10-06 14:39:19 geuzaine Exp $ +// $Id: List.cpp,v 1.33 2005-01-01 18:56:22 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -446,11 +446,8 @@ List_T *List_CreateFromFile(int n, int incr, int size, FILE * file, int format, for(i = 0; i < n; i++) fscanf(file, "%d", (int *)&liste->array[i * size]); else if(size == sizeof(char)) { - for(i = 0; i < n; i++) { - fscanf(file, "%c", (char *)&liste->array[i * size]); - if(liste->array[i * size] == '^') - liste->array[i * size] = '\0'; - } + for(i = 0; i < n; i++) + liste->array[i * size] = fgetc(file); } else { Msg(GERROR, "Bad type of data to create list from (size = %d)", size); @@ -488,14 +485,8 @@ void List_WriteToFile(List_T * liste, FILE * file, int format) for(i = 0; i < n; i++) fprintf(file, " %d", *((int *)&liste->array[i * liste->size])); else if(liste->size == sizeof(char)) - for(i = 0; i < n; i++) { - if(*((char *)&liste->array[i * liste->size]) == '\0') - fprintf(file, "^"); - else if(*((char *)&liste->array[i * liste->size]) == '^') - fprintf(file, "_"); //we don't allow '^' as a valid character - else - fprintf(file, "%c", *((char *)&liste->array[i * liste->size])); - } + for(i = 0; i < n; i++) + fputc(*((char *)&liste->array[i * liste->size]), file); else Msg(GERROR, "Bad type of data to write list to file (size = %d)", liste->size); @@ -507,3 +498,53 @@ void List_WriteToFile(List_T * liste, FILE * file, int format) Msg(GERROR, "Unknown list format"); } } + +// For backward compatibility purposes: + +List_T *List_CreateFromFileOld(int n, int incr, int size, FILE * file, int format, + int swap) +{ + int i; + List_T *liste; + + if(!n){ + liste = List_Create(incr, incr, size); + return liste; + } + + liste = List_Create(n, incr, size); + liste->n = n; + switch (format) { + case LIST_FORMAT_ASCII: + if(size == sizeof(double)) + for(i = 0; i < n; i++) + fscanf(file, "%lf", (double *)&liste->array[i * size]); + else if(size == sizeof(float)) + for(i = 0; i < n; i++) + fscanf(file, "%f", (float *)&liste->array[i * size]); + else if(size == sizeof(int)) + for(i = 0; i < n; i++) + fscanf(file, "%d", (int *)&liste->array[i * size]); + else if(size == sizeof(char)) { + for(i = 0; i < n; i++) { + fscanf(file, "%c", (char *)&liste->array[i * size]); + if(liste->array[i * size] == '^') + liste->array[i * size] = '\0'; + } + } + else { + Msg(GERROR, "Bad type of data to create list from (size = %d)", size); + return NULL; + } + return liste; + case LIST_FORMAT_BINARY: + fread(liste->array, size, n, file); + if(swap) + swap_bytes(liste->array, size, n); + return liste; + default: + Msg(GERROR, "Unknown list format"); + return NULL; + } + +} diff --git a/DataStr/List.h b/DataStr/List.h index 68d216b77d6b00930eb3788748c1520732dd32c3..dd1161c734fa9be901f37de6025f37fbc0b5f3b0 100644 --- a/DataStr/List.h +++ b/DataStr/List.h @@ -72,5 +72,8 @@ void List_Copy(List_T *a , List_T *b); List_T *List_CreateFromFile(int n, int incr, int size, FILE *file, int format, int swap); void List_WriteToFile(List_T *liste, FILE *file, int format); +// for backward compatibility +List_T *List_CreateFromFileOld(int n, int incr, int size, FILE *file, int format, int swap); + #endif