1 /************************************************************************* 2 * COPYRIGHT (C) 1999 - 2007 EDF R&D, CEA/DEN 3 * THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY 4 * IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE 5 * AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION; 6 * EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION. 7 * 8 * THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 9 * WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF 10 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU 11 * LESSER GENERAL PUBLIC LICENSE FOR MORE DETAILS. 12 * 13 * YOU SHOULD HAVE RECEIVED A COPY OF THE GNU LESSER GENERAL PUBLIC LICENSE 14 * ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION, 15 * INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA 16 * 17 *************************************************************************/ 18 19 20 /****************************************************************************** 21 * - Nom du fichier : test9.c 22 * 23 * - Description : lecture des familles d'un maillage MED 24 * 25 *****************************************************************************/ 26 27 #include <med.h> 28 #define MESGERR 29 #include <med_utils.h> 30 31 #ifdef DEF_LECT_ECR 32 #define MODE_ACCES MED_LECTURE_ECRITURE 33 #elif DEF_LECT_AJOUT 34 #define MODE_ACCES MED_LECTURE_AJOUT 35 #else 36 #define MODE_ACCES MED_CREATION 37 #endif 38 39 int main (int argc, char **argv) 40 41 42 { 43 med_err ret = 0; 44 med_idt fid; 45 char maa[MED_TAILLE_NOM+1]; 46 med_int mdim; 47 med_int nfam; 48 med_int i,j; 49 med_int natt,ngro; 50 char *attdes,*gro; 51 med_int *attval,*attide; 52 char nomfam[MED_TAILLE_NOM+1]; 53 med_int numfam; 54 char str1[MED_TAILLE_DESC+1]; 55 char str2[MED_TAILLE_LNOM+1]; 56 char desc[MED_TAILLE_DESC+1]; 57 med_maillage type; 58 59 /* Ouverture du fichier "test8.med" en lecture seule */ 60 if ((fid = MEDouvrir("test8.med",MED_LECTURE)) < 0) { 61 MESSAGE("Erreur a l'ouverture du fichier test8.med"); 62 return -1; 63 } 64 65 /* Lecture des information sur le 1er maillage */ 66 if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0) { 67 MESSAGE("Erreur a la lecture des informations du premier maillage"); 68 return -1; 69 } 70 71 /* Lecture du nombre de familles */ 72 if ((nfam = MEDnFam(fid,maa)) < 0) { 73 MESSAGE("Erreur a la lecture du nombre de famille"); 74 return -1; 75 } 76 printf("Nombre de familles : %d \n",nfam); 77 78 /* Lecture de chaque famille */ 79 for (i=0;i<nfam;i++) { 80 81 /* Lecture du nombre de groupe */ 82 if ((ngro = MEDnGroupe(fid,maa,i+1)) < 0) { 83 MESSAGE("Erreur a la lecture du nombre de groupe de la famille d'indice : "); 84 ISCRUTE(i+1); 85 ret = -1; 86 } 87 88 /* Lecture du nombre d'attribut */ 89 if ((natt = MEDnAttribut(fid,maa,i+1)) < 0) { 90 MESSAGE("Erreur a la lecture du nombre d'attribut de la famille d'indice : "); 91 ISCRUTE(i+1); 92 ret = -1; 93 } 94 95 if (ret == 0) 96 printf("Famille %d a %d attributs et %d groupes \n",i+1,natt,ngro); 97 98 /* Lecture des informations sur la famille */ 99 if (ret == 0) { 100 /* Allocations memoire */ 101 attide = (med_int*) malloc(sizeof(med_int)*natt); 102 attval = (med_int*) malloc(sizeof(med_int)*natt); 103 attdes = (char *) malloc(MED_TAILLE_DESC*natt+1); 104 gro = (char*) malloc(MED_TAILLE_LNOM*ngro+1); 105 106 if (MEDfamInfo(fid,maa,i+1,nomfam,&numfam,attide,attval,attdes, 107 &natt,gro,&ngro) < 0) { 108 MESSAGE("Erreur a la lecture des informations de la famille d'indice : "); 109 ISCRUTE(i+1); 110 ret = -1; 111 } 112 113 if (ret == 0) { 114 printf("Famille de nom %s et de numero %d : \n",nomfam,numfam); 115 printf("Attributs : \n"); 116 for (j=0;j<natt;j++) { 117 strncpy(str1,attdes+j*MED_TAILLE_DESC,MED_TAILLE_DESC); 118 str1[MED_TAILLE_DESC] = '\0'; 119 printf("ide = %d - val = %d - des = %s\n",*(attide+j), 120 *(attval+j),str1); 121 } 122 free(attide); 123 free(attval); 124 free(attdes); 125 126 for (j=0;j<ngro;j++) { 127 strncpy(str2,gro+j*MED_TAILLE_LNOM,MED_TAILLE_LNOM); 128 str2[MED_TAILLE_LNOM] = '\0'; 129 printf("gro = %s\n",str2); 130 } 131 free(gro); 132 } 133 } 134 } 135 136 /* Fermeture du fichier */ 137 if (MEDfermer(fid) < 0) { 138 MESSAGE("Erreur a la fermeture du fichier"); 139 return -1; 140 } 141 142 return ret; 143 }