diff --git a/Common/Views.cpp b/Common/Views.cpp index c36bdc72dec80ed13e7c377158ea9f93843474cc..f4d21614d580f065d9cf77f235e9c2080802c8ba 100644 --- a/Common/Views.cpp +++ b/Common/Views.cpp @@ -1,4 +1,4 @@ -/* $Id: Views.cpp,v 1.9 2000-11-27 14:27:34 geuzaine Exp $ */ +/* $Id: Views.cpp,v 1.10 2000-11-27 17:13:39 geuzaine Exp $ */ #include "Gmsh.h" #include "Views.h" @@ -362,7 +362,7 @@ extern int Force_ViewNumber; void Read_View(FILE *file, char *filename){ char str[NAME_STR_L], name[NAME_STR_L]; - int nb, format; + int nb, format, testone, swap=0; double version; while (1) { @@ -407,48 +407,70 @@ void Read_View(FILE *file, char *filename){ ActualView->NbST, ActualView->NbVT, ActualView->NbTT, ActualView->NbSS, ActualView->NbVS, ActualView->NbTS); + if(format == LIST_FORMAT_BINARY){ + fread(&testone, sizeof(int), 1, file); + if(testone != 1){ + Msg(INFOS, "Swapping Bytes from Binary File"); + swap = 1; + } + } + + // Time values ActualView->Time = List_CreateFromFile(ActualView->NbTimeStep, - sizeof(double), file, format); + sizeof(double), file, format, swap); + // Points nb = ActualView->NbSP ? ActualView->NbSP * ActualView->NbTimeStep + ActualView->NbSP * 3 : 0 ; - ActualView->SP = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->SP = List_CreateFromFile(nb, sizeof(double), file, format, swap); + nb = ActualView->NbVP ? ActualView->NbVP * ActualView->NbTimeStep * 3 + ActualView->NbVP * 3 : 0 ; - ActualView->VP = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->VP = List_CreateFromFile(nb, sizeof(double), file, format, swap); + nb = ActualView->NbTP ? ActualView->NbTP * ActualView->NbTimeStep * 9 + ActualView->NbTP * 3 : 0 ; - ActualView->TP = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->TP = List_CreateFromFile(nb, sizeof(double), file, format, swap); + // Lines nb = ActualView->NbSL ? ActualView->NbSL * ActualView->NbTimeStep * 2 + ActualView->NbSL * 6 : 0 ; - ActualView->SL = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->SL = List_CreateFromFile(nb, sizeof(double), file, format, swap); + nb = ActualView->NbVL ? ActualView->NbVL * ActualView->NbTimeStep * 2 * 3 + ActualView->NbVL * 6 : 0 ; - ActualView->VL = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->VL = List_CreateFromFile(nb, sizeof(double), file, format, swap); + nb = ActualView->NbTL ? ActualView->NbTL * ActualView->NbTimeStep * 2 * 9 + ActualView->NbTL * 6 : 0 ; - ActualView->TL = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->TL = List_CreateFromFile(nb, sizeof(double), file, format, swap); + // Triangles nb = ActualView->NbST ? ActualView->NbST * ActualView->NbTimeStep * 3 + ActualView->NbST * 9 : 0 ; - ActualView->ST = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->ST = List_CreateFromFile(nb, sizeof(double), file, format, swap); + nb = ActualView->NbVT ? ActualView->NbVT * ActualView->NbTimeStep * 3 * 3 + ActualView->NbVT * 9 : 0 ; - ActualView->VT = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->VT = List_CreateFromFile(nb, sizeof(double), file, format, swap); + nb = ActualView->NbTT ? ActualView->NbTT * ActualView->NbTimeStep * 3 * 9 + ActualView->NbTT * 9 : 0 ; - ActualView->TT = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->TT = List_CreateFromFile(nb, sizeof(double), file, format, swap); + // Tetrahedra nb = ActualView->NbSS ? ActualView->NbSS * ActualView->NbTimeStep * 4 + ActualView->NbSS * 12 : 0 ; - ActualView->SS = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->SS = List_CreateFromFile(nb, sizeof(double), file, format, swap); + nb = ActualView->NbVS ? ActualView->NbVS * ActualView->NbTimeStep * 4 * 3 + ActualView->NbVS * 12 : 0 ; - ActualView->VS = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->VS = List_CreateFromFile(nb, sizeof(double), file, format, swap); + nb = ActualView->NbTS ? ActualView->NbTS * ActualView->NbTimeStep * 4 * 9 + ActualView->NbTS * 12 : 0 ; - ActualView->TS = List_CreateFromFile(nb, sizeof(double), file, format); + ActualView->TS = List_CreateFromFile(nb, sizeof(double), file, format, swap); + Msg(DEBUG, "Read View '%s' (%d TimeSteps): %d %d %d %d %d %d %d %d %d %d %d %d", name, ActualView->NbTimeStep, diff --git a/DataStr/List.cpp b/DataStr/List.cpp index c2b541a5f8fc191210080ccf622c8e5a78b3643b..cd3e00b93da02bc8690744f16399af8274e0db23 100644 --- a/DataStr/List.cpp +++ b/DataStr/List.cpp @@ -1,4 +1,4 @@ -/* $Id: List.cpp,v 1.7 2000-11-27 10:58:45 geuzaine Exp $ */ +/* $Id: List.cpp,v 1.8 2000-11-27 17:13:42 geuzaine Exp $ */ #include <stdlib.h> #include <stdio.h> @@ -341,7 +341,21 @@ void List_Copy(List_T *a , List_T *b){ } } -List_T *List_CreateFromFile(int n, int size, FILE *file, int format){ +void swap_doubles(double *array, unsigned int n){ + unsigned int i, c; + double x; + char *px, *pp; + + for (i = 0; i < n; i++) { + x = array[i]; + px = (char *) &x; + pp = (char *) (array+i); + for (c = 0; c < sizeof(double); ++c) + pp[sizeof(double)-1-c] = px[c]; + } +} + +List_T *List_CreateFromFile(int n, int size, FILE *file, int format, int swap){ int i; List_T *liste; @@ -351,10 +365,17 @@ List_T *List_CreateFromFile(int n, int size, FILE *file, int format){ liste->n = n; switch(format){ case LIST_FORMAT_ASCII : - for(i=0;i<n;i++) fscanf(file, "%lf ", (double*)&liste->array[i*size]) ; + for(i=0;i<n;i++) fscanf(file, "%lf", (double*)&liste->array[i*size]) ; return liste; case LIST_FORMAT_BINARY : fread(liste->array, size, n, file); + if(swap){ + if(size != sizeof(double)){ + Msg(ERROR, "Swapping Bytes only done for doubles"); + return NULL; + } + swap_doubles((double*)liste->array, n); + } return liste; default : Msg(ERROR, "Unknown List Format"); diff --git a/DataStr/List.h b/DataStr/List.h index 21400802fa623d14ca046402506641edf1ba6747..e161bca2846d0766904c8d31e5ae14574dd07c99 100644 --- a/DataStr/List.h +++ b/DataStr/List.h @@ -1,4 +1,4 @@ -/* $Id: List.h,v 1.5 2000-11-27 10:58:45 geuzaine Exp $ */ +/* $Id: List.h,v 1.6 2000-11-27 17:13:42 geuzaine Exp $ */ #ifndef _LIST_H_ #define _LIST_H_ @@ -46,7 +46,7 @@ void List_Reset(List_T *liste); void List_Action(List_T *liste, void (*action)(void *data, void *dummy)); void List_Action_Inverse(List_T *liste, void (*action)(void *data, void *dummy)); void List_Copy(List_T *a , List_T *b); -List_T *List_CreateFromFile(int n, int size, FILE *file, int format); +List_T *List_CreateFromFile(int n, int size, FILE *file, int format, int swap); void List_WriteToFile(List_T *liste, FILE *file, int format); #endif