      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 }