MEDnGroupe.c
Aller à la documentation de ce fichier.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 #include <med.h>
00020 #include <med_config.h>
00021 #include <med_outils.h>
00022 
00023 #include <string.h>
00024 #include <stdlib.h>
00025 
00026 med_int
00027 MEDnGroupe(med_idt fid,char *maa, int indice)
00028 {
00029   med_idt datagroup,famid;
00030   med_err ret;
00031   char chemin[MED_TAILLE_MAA+MED_TAILLE_FAS+MED_TAILLE_FAS_ENTITE+2*MED_TAILLE_NOM+1];
00032   char stockage[MED_TAILLE_MAA+MED_TAILLE_FAS+MED_TAILLE_FAS_ENTITE+2*MED_TAILLE_NOM+1];
00033   med_int n;
00034   int n_tmp;
00035   int num;
00036   char famille[MED_TAILLE_NOM+1];
00037   int nfamnoe,nfammai;
00038 
00039   
00040 
00041 
00042   _MEDmodeErreurVerrouiller();
00043 if (MEDcheckVersion(fid) < 0) return -1;
00044 
00045 
00046   strcpy(chemin,MED_MAA);
00047   strcat(chemin,maa);
00048   strcat(chemin,MED_FAS);
00049 
00050   num = indice - 1;
00051   
00052   
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060   
00061   strcpy(stockage,chemin);
00062   strcat(stockage,MED_FAS_ELEME_NOM);
00063   nfammai = 0;
00064   n_tmp = 0;
00065   if ((ret =_MEDnObjets(fid,stockage,&n_tmp)) == 0) 
00066     nfammai = (med_int ) n_tmp;
00067   strcat(stockage,"/");
00068   
00069   
00070   if (num == nfammai) 
00071     return 0;
00072 
00073   if (num > nfammai) {
00074     
00075     strcpy(stockage,chemin);
00076     strcat(stockage,MED_FAS_NOEUD_NOM);
00077     strcat(stockage,"/");
00078     num = num - nfammai - 1;
00079   }
00080       
00081   
00082 
00083 
00084   if ((ret = _MEDobjetIdentifier(fid,stockage,num,
00085                                  famille)) < 0)
00086     return -1;
00087   strcat(stockage,famille);
00088   
00089   if ((famid = _MEDdatagroupOuvrir(fid,stockage)) < 0)
00090     return -1;
00091   
00092   if ((datagroup = _MEDdatagroupOuvrir(famid,MED_NOM_GRO)) < 0)
00093     n = 0;
00094   else
00095     {
00096       if ((ret = _MEDattrEntierLire(datagroup,MED_NOM_NBR,&n)) < 0)
00097         return -1;
00098       if ((ret = _MEDdatagroupFermer(datagroup)) < 0)
00099         return -1;
00100     }
00101 
00102   if ((ret = _MEDdatagroupFermer(famid)) < 0)
00103     return -1;
00104 
00105   return (med_int) n;
00106 }