1 /************************************************************************* 2 * COPYRIGHT (C) 1999 - 2003 EDF R&D 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 #include <med_utils.h> 29 #include <stdio.h> 30 #include <string.h> 31 #include <stdlib.h> 32 33 int main (int argc, char **argv) 34 { 35 med_err ret = 0; 36 med_idt fid; 37 char maa[MED_TAILLE_NOM+1]; 38 med_int mdim; 39 med_int nfam; 40 med_int i,j; 41 med_int natt,ngro; 42 char *attdes,*gro; 43 med_int *attval,*attide; 44 char nomfam[MED_TAILLE_NOM+1]; 45 med_int numfam; 46 char str1[MED_TAILLE_DESC+1]; 47 char str2[MED_TAILLE_LNOM+1]; 48 char desc[MED_TAILLE_DESC+1]; 49 med_maillage type; 50 51 /* Ouverture du fichier "test8.med" en lecture seule */ 52 if ((fid = MEDouvrir("test8.med",MED_LECTURE)) < 0) { 53 MESSAGE("Erreur a l'ouverture du fichier test8.med"); 54 return -1; 55 } 56 57 /* Lecture des information sur le 1er maillage */ 58 if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0) { 59 MESSAGE("Erreur a la lecture des informations du premier maillage"); 60 return -1; 61 } 62 63 /* Lecture du nombre de familles */ 64 if ((nfam = MEDnFam(fid,maa)) < 0) { 65 MESSAGE("Erreur a la lecture du nombre de famille"); 66 return -1; 67 } 68 printf("Nombre de familles : %d \n",nfam); 69 70 /* Lecture de chaque famille */ 71 for (i=0;i<nfam;i++) { 72 73 /* Lecture du nombre de groupe */ 74 if ((ngro = MEDnGroupe(fid,maa,i+1)) < 0) { 75 MESSAGE("Erreur a la lecture du nombre de groupe de la famille d'indice : "); 76 ISCRUTE(i+1); 77 ret = -1; 78 } 79 80 /* Lecture du nombre d'attribut */ 81 if ((natt = MEDnAttribut(fid,maa,i+1)) < 0) { 82 MESSAGE("Erreur a la lecture du nombre d'attribut de la famille d'indice : "); 83 ISCRUTE(i+1); 84 ret = -1; 85 } 86 87 if (ret == 0) 88 printf("Famille %d a %d attributs et %d groupes \n",i+1,natt,ngro); 89 90 /* Lecture des informations sur la famille */ 91 if (ret == 0) { 92 /* Allocations memoire */ 93 attide = (med_int*) malloc(sizeof(med_int)*natt); 94 attval = (med_int*) malloc(sizeof(med_int)*natt); 95 attdes = (char *) malloc(MED_TAILLE_DESC*natt+1); 96 gro = (char*) malloc(MED_TAILLE_LNOM*ngro+1); 97 98 if (MEDfamInfo(fid,maa,i+1,nomfam,&numfam,attide,attval,attdes, 99 &natt,gro,&ngro) < 0) { 100 MESSAGE("Erreur a la lecture des informations de la famille d'indice : "); 101 ISCRUTE(i+1); 102 ret = -1; 103 } 104 105 if (ret == 0) { 106 printf("Famille de nom %s et de numero %d : \n",nomfam,numfam); 107 printf("Attributs : \n"); 108 for (j=0;j<natt;j++) { 109 strncpy(str1,attdes+j*MED_TAILLE_DESC,MED_TAILLE_DESC); 110 str1[MED_TAILLE_DESC] = '\0'; 111 printf("ide = %d - val = %d - des = %s\n",*(attide+j), 112 *(attval+j),str1); 113 } 114 free(attide); 115 free(attval); 116 free(attdes); 117 118 for (j=0;j<ngro;j++) { 119 strncpy(str2,gro+j*MED_TAILLE_LNOM,MED_TAILLE_LNOM); 120 str2[MED_TAILLE_LNOM] = '\0'; 121 printf("gro = %s\n",str2); 122 } 123 free(gro); 124 } 125 } 126 } 127 128 /* Fermeture du fichier */ 129 if (MEDfermer(fid) < 0) { 130 MESSAGE("Erreur a la fermeture du fichier"); 131 return -1; 132 } 133 134 return ret; 135 }