ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 232
Committed: Fri Jan 15 20:42:24 2010 UTC (15 years, 5 months ago) by francois
Original Path: magic/app/mgoperation/mgoperation/src/main.cpp
File size: 18975 byte(s)
Log Message:
Correction de bud apparu dans le lissage : destruction d'une entité non attaché a la géométrie + version d'affichage d'info dans le lissage + routine de gestion du lissage

File Contents

# User Rev Content
1 francois 226
2     //------------------------------------------------------------
3     //------------------------------------------------------------
4     // MAGiC
5     // Jean Christophe Cuilli�e et Vincent FRANCOIS
6     // D�artement de G�ie M�anique - UQTR
7     //------------------------------------------------------------
8     // Le projet MAGIC est un projet de recherche du d�artement
9     // de g�ie m�anique de l'Universit�du Qu�ec �
10     // Trois Rivi�es
11     // Les librairies ne peuvent �re utilis�s sans l'accord
12     // des auteurs (contact : francois@uqtr.ca)
13     //------------------------------------------------------------
14     //------------------------------------------------------------
15     //
16     // main.cpp
17     //
18     //------------------------------------------------------------
19     //------------------------------------------------------------
20     // COPYRIGHT 2000
21     // Version du 02/03/2006 �11H25
22     //------------------------------------------------------------
23     //------------------------------------------------------------
24     #include "gestionversion.h"
25     #ifdef WINDOWS_VERSION
26     #include "fenetre.h"
27     #endif
28    
29    
30     #include <string.h>
31     #include "main.h"
32     #include "mg_file.h"
33     #include "mg_export.h"
34     #include "mg_import.h"
35     #include "mg_lissage.h"
36     #include "step_import.h"
37     #include "acis_import.h"
38     #include "step_import.h"
39     #include "occ_import.h"
40     #include "aide.h"
41     #include "vct_multi_modele.h"
42     #include <ctype.h>
43 picher 230 #include <math.h>
44 francois 226
45    
46     //---------------------------------------------------------------------------
47    
48     void affiche(char* message)
49     {
50     #ifdef WINDOWS_VERSION
51     Form1->Memo1->Lines->Add(message);
52     #else
53     std::cout << message << std::endl;
54     #endif
55     }
56    
57     void minuscule(char * mess)
58     {
59     int nb=strlen(mess);
60     for (int i=0;i<nb;i++)
61     mess[i]=tolower(mess[i]);
62     }
63    
64     #ifdef WINDOWS_VERSION
65     int amain(int argc,char **argv)
66     #else
67     int main(int argc,char **argv)
68     #endif
69     {
70     affiche("Opération dans l'environnement MAGiC\n\n");
71     char nomfichier[3000];
72     char fichierout[3000];
73     char fichieraster[3000];
74     char fichieroptis[3000];
75     char fichierflottant[3000];
76     char coderesu[10];
77     int nummai;
78     int degre;
79     int action=0;
80     int numgeo=0;
81     int numgt=0;
82     int numentite=0;
83     int expand=0;
84     int numsol1=0;
85     int numsol2=0;
86     int numsol3=0;
87     int numchamp1=0;
88     int numchamp2=0;
89     int numchamp3=0;
90 francois 232 int flottant=0;
91     int consimpose=0;
92     int consmailleurauto=0;
93     int consopti=0;
94 francois 226 double unite=1;
95     double seuil=0.8;
96     double eps=1e-6;
97 picher 230 double niveau=150.;
98     int iter_max = 10;
99     double sigma;
100 picher 231 int bruitage = 0;
101     int lissage = 0;
102 picher 230 sigma = 0.038/sqrt(10.); //valeur par défaut
103 francois 226 INIAIDE;
104     if (argc==2) strcpy(nomfichier,argv[1]);
105     else if (argc>2)
106     {
107     for (int i=0;i<argc;i++)
108     {
109     if (strcmp(argv[i],"-file")==0) strcpy(nomfichier,argv[i+1]);
110     if (strcmp(argv[i],"-fileout")==0) strcpy(fichierout,argv[i+1]);
111     if (strcmp(argv[i],"-mesh")==0) nummai=atol(argv[i+1]);
112     if (strcmp(argv[i],"-numsol1")==0) numsol1=atol(argv[i+1]);
113     if (strcmp(argv[i],"-numsol2")==0) numsol2=atol(argv[i+1]);
114     if (strcmp(argv[i],"-numsol3")==0) numsol3=atol(argv[i+1]);
115     if (strcmp(argv[i],"-numchamp1")==0) numchamp1=atol(argv[i+1]);
116     if (strcmp(argv[i],"-numchamp2")==0) numchamp2=atol(argv[i+1]);
117     if (strcmp(argv[i],"-numchamp3")==0) numchamp3=atol(argv[i+1]);
118     if (strcmp(argv[i],"-geo")==0) numgeo=atol(argv[i+1]);
119     if (strcmp(argv[i],"-groupe")==0) numgt=atol(argv[i+1]);
120     if (strcmp(argv[i],"-entite")==0) numentite=atol(argv[i+1]);
121     if (strcmp(argv[i],"-degre")==0) degre=atoi(argv[i+1]);
122     if (strcmp(argv[i],"-unite")==0) unite=atof(argv[i+1]);
123     if (strcmp(argv[i],"-seuil")==0) seuil=atof(argv[i+1]);
124     if (strcmp(argv[i],"-niveau")==0) niveau=atof(argv[i+1]);
125     if (strcmp(argv[i],"-aster")==0) strcpy(fichieraster,argv[i+1]);
126     if (strcmp(argv[i],"-optis")==0) strcpy(fichieroptis,argv[i+1]);
127     if (strcmp(argv[i],"-ficflottant")==0) strcpy(fichierflottant,argv[i+1]);
128     if (strcmp(argv[i],"-coderesu")==0) strcpy(coderesu,argv[i+1]);
129     if (strcmp(argv[i],"-flottant")==0) flottant = 1;
130     if (strcmp(argv[i],"-eps")==0) eps=atof(argv[i+1]);
131 picher 230 if (strcmp(argv[i],"-iter")==0) iter_max=atol(argv[i+1]);
132     if (strcmp(argv[i],"-sigma")==0) sigma=atof(argv[i+1]);
133 francois 226 if (strcmp(argv[i],"-fem")==0) action=1;
134     if (strcmp(argv[i],"-femdef")==0) action=15;
135     if (strcmp(argv[i],"-expand")==0) expand=1;
136     if (strcmp(argv[i],"-stepocc")==0) action=2;
137     if (strcmp(argv[i],"-magicgmsh")==0) action=3;
138     if (strcmp(argv[i],"-magicaster")==0) action=4;
139     if (strcmp(argv[i],"-stepmagic")==0) action=5;
140     if (strcmp(argv[i],"-satmagic")==0) action=6;
141     if (strcmp(argv[i],"-cttgmsh")==0) action=7;
142     if (strcmp(argv[i],"-occmagic")==0) action=8;
143     if (strcmp(argv[i],"-astermagic")==0) action=9;
144     if (strcmp(argv[i],"-magicoptis")==0) action=10;
145     if (strcmp(argv[i],"-optismagic")==0) action=11;
146     if (strcmp(argv[i],"-selectionne")==0) action=12;
147     if (strcmp(argv[i],"-deselectionne")==0) action=13;
148     if (strcmp(argv[i],"-examine")==0) action=14;
149     if (strcmp(argv[i],"-fusiongeo")==0) action=17;
150 picher 231 if (strcmp(argv[i],"-lissage")==0) action=16;
151     if (strcmp(argv[i],"-liss")==0) lissage = 1;
152     if (strcmp(argv[i],"-bruitage")==0) bruitage = 1;
153 francois 232 if (strcmp(argv[i],"-cons_optimise")==0) consopti = 1;
154     if (strcmp(argv[i],"-cons_impose")==0) consimpose = 1;
155     if (strcmp(argv[i],"-cons_mailleurauto")==0) consmailleurauto = 1;
156 francois 226
157     }
158     }
159     else {AFFAIDE;return 0;}
160    
161 picher 230
162    
163    
164 francois 226 char mess[3000];
165     sprintf(mess," Fichier : %s",nomfichier);
166     affiche(mess);
167     char *p=strrchr(nomfichier,'.');
168     char extension[50];
169     strcpy(extension,p);
170     minuscule(extension);
171     char chaine[3000];for (int i=0;i<3000;i++) chaine[i]=0;
172     if ( ((strcmp(extension,".magic")==0) && (action==0)) || (action==3))
173     {
174     sprintf(mess," Conversion MAGiC vers GMSH");
175     affiche(mess);
176     MG_FILE gest(nomfichier);
177     int nb=gest.get_nb_mg_maillage();
178     char chaine[3000];
179     for (int i=0;i<nb;i++)
180     {
181     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
182     unsigned long id=mai->get_id();
183     strncpy(chaine,nomfichier,p-nomfichier);
184     char chaine2[3000];
185     sprintf(chaine2,"%s%lu",chaine,id);
186     std::string namefic=chaine2;
187     MG_EXPORT exp;
188     exp.gmsh(mai,namefic);
189     }
190     nb=gest.get_nb_fem_maillage();
191     for (int i=0;i<nb;i++)
192     {
193     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
194     unsigned long id=mai->get_id();
195     strncpy(chaine,nomfichier,p-nomfichier);
196     char chaine2[3000];
197     sprintf(chaine2,"%s%lu",chaine,id);
198     std::string namefic=chaine2;
199     MG_EXPORT exp;
200     double coef=eps;
201     if (coef<0.)
202     {
203     coef=mai->calcul_coef();
204     sprintf(mess," Coefficient de deforme pour le maillage %lu est de %le",mai->get_id(),coef);
205     affiche(mess);
206     }
207     exp.gmsh(mai,namefic,coef);
208     }
209     }
210     if (action==4)
211     {
212     sprintf(mess," Conversion MAGiC vers code ASTER");
213     affiche(mess);
214     MG_FILE gest(nomfichier);
215     int nb=gest.get_nb_fem_maillage();
216     char chaine[1000];
217     for (int i=0;i<nb;i++)
218     {
219     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
220     unsigned long id=mai->get_id();
221     strncpy(chaine,nomfichier,p-nomfichier);
222     char chaine2[3000];
223     sprintf(chaine2,"%s%lu",chaine,id);
224     std::string namefic=chaine2;
225     MG_EXPORT exp;
226     exp.aster(mai,namefic,0,coderesu);
227     }
228     }
229     if (((strcmp(extension,".ctt")==0) && (action==0)) || (action==7))
230     {
231     sprintf(mess," Conversion carte de taille vers GMSH");
232     affiche(mess);
233     FCT_GENERATEUR_3D<4> carte;
234     carte.lire(nomfichier);
235     strncpy(chaine,nomfichier,p-nomfichier);
236     std::string namefic=chaine;
237     MG_EXPORT exp;
238     exp.gmsh(&carte,namefic);
239     }
240     if (((strcmp(extension,".step")==0) &&(action==0)) || (action==5))
241     {
242     sprintf(mess," Conversion STEP vers MAGiC");
243     affiche(mess);
244     STEP_IMPORT stepimport;
245     MG_GESTIONNAIRE gest;
246     stepimport.importer(gest,nomfichier) ;
247     strncpy(chaine,nomfichier,p-nomfichier);
248     std::string namefic=chaine;namefic=namefic + ".magic";
249     int nb=gest.get_nb_mg_geometrie();
250     for (int i=0;i<nb;i++)
251     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
252     gest.enregistrer(namefic.c_str());
253     }
254     if (((strcmp(extension,".sat")==0) && (action==0)) || (action==6))
255     {
256     sprintf(mess," Conversion SAT vers MAGiC");
257     affiche(mess);
258     MG_GESTIONNAIRE gest;
259     ACIS_IMPORT acisimport;
260     acisimport.importer(gest,nomfichier) ;
261     strncpy(chaine,nomfichier,p-nomfichier);
262     std::string namefic=chaine;namefic=namefic + ".magic";
263     int nb=gest.get_nb_mg_geometrie();
264     for (int i=0;i<nb;i++)
265     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
266     gest.enregistrer(namefic.c_str());
267 picher 230 }
268 francois 226 if (((strcmp(extension,".brep")==0) && (action==0)) ||(action==8))
269     {
270     #ifdef BREP_OCC
271     sprintf(mess," Conversion OpenCascade vers MAGiC");
272     affiche(mess);
273     MG_GESTIONNAIRE gest;
274     OCC_IMPORT occimport;
275     occimport.importer(gest,nomfichier,FICHIEROCC,unite,eps) ;
276     strncpy(chaine,nomfichier,p-nomfichier);
277     std::string namefic=chaine;namefic=namefic + ".magic";
278     int nb=gest.get_nb_mg_geometrie();
279     for (int i=0;i<nb;i++)
280     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
281     gest.enregistrer(namefic.c_str());
282     #endif
283     }
284     if (action==2)
285     {
286     #ifdef BREP_OCC
287     sprintf(mess," Conversion STEP via OpenCascade vers MAGiC avec epsilon=%lf",eps);
288     affiche(mess);
289     MG_GESTIONNAIRE gest;
290     OCC_IMPORT occimport;
291     occimport.importer(gest,nomfichier,FICHIERSTEP,unite,eps) ;
292     strncpy(chaine,nomfichier,p-nomfichier);
293     std::string namefic=chaine;namefic=namefic + ".magic";
294     int nb=gest.get_nb_mg_geometrie();
295     for (int i=0;i<nb;i++)
296     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
297     gest.enregistrer(namefic.c_str());
298     #endif
299     }
300     if (action==1)
301     {
302     sprintf(mess," Creation d'un maillage FEM");
303     affiche(mess);
304     MG_FILE gest(nomfichier);
305     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummai);
306     FEM_MAILLAGE* fem=new FEM_MAILLAGE(mai->get_mg_geometrie(),mai,degre);
307     gest.ajouter_fem_maillage(fem);
308     fem->construire(0);
309     gest.enregistrer(nomfichier);
310     }
311     if (action==9)
312     {
313     sprintf(mess," Importation des résultats ASTER vers MAGIC");
314     affiche(mess);
315     MG_FILE gest(nomfichier);
316     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
317     MG_IMPORT imp;
318     imp.aster(mai,fichieraster,nomfichier);
319     gest.enregistrer(nomfichier);
320     }
321     if (action==10)
322     {
323     sprintf(mess," Conversion MAGiC vers OPTIS");
324     affiche(mess);
325     MG_FILE gest(nomfichier);
326     int nb=gest.get_nb_fem_maillage();
327     char chaine[1000];
328     for (int i=0;i<nb;i++)
329     {
330     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
331     unsigned long id=mai->get_id();
332     strncpy(chaine,nomfichier,p-nomfichier);
333     char chaine2[3000];
334     sprintf(chaine2,"%s%lu",chaine,id);
335     std::string namefic=chaine2;
336     MG_EXPORT exp;
337     exp.aster(mai,namefic,1,coderesu);
338     }
339     }
340     if (action==11)
341     {
342     sprintf(mess," Importation des résultats d'optimisation vers MAGIC");
343     affiche(mess);
344     MG_FILE gest(nomfichier);
345     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
346     MG_IMPORT imp;
347     imp.optis(mai,fichieroptis,fichierflottant,seuil,niveau,flottant);
348     gest.enregistrer(nomfichier);
349     }
350     if (action==12)
351     {
352     sprintf(mess," Selection dans MAGIC");
353     affiche(mess);
354     MG_FILE gest(nomfichier);
355     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
356     MG_GROUPE_TOPOLOGIQUE* mggt;
357     if (numgt==0)
358     {
359     mggt=new MG_GROUPE_TOPOLOGIQUE;
360     mggeo->ajouter_mg_groupe_topologique(mggt);
361     }
362     else mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
363     MG_ELEMENT_TOPOLOGIQUE* ele;
364     ele=mggeo->get_mg_sommetid(numentite);
365     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
366     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
367     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
368     if (ele!=NULL)
369     {
370     mggt->ajouter(ele);
371     if (expand)
372     {
373     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
374     ele->get_topologie_sousjacente(&lst);
375     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
376     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
377     mggt->ajouter(ele2);
378     }
379     }
380     gest.enregistrer(nomfichier);
381     }
382     if (action==13)
383     {
384     sprintf(mess," Deselection dans MAGIC");
385     affiche(mess);
386     MG_FILE gest(nomfichier);
387     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
388     MG_GROUPE_TOPOLOGIQUE* mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
389     MG_ELEMENT_TOPOLOGIQUE* ele;
390     ele=mggeo->get_mg_sommetid(numentite);
391     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
392     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
393     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
394     if (ele!=NULL)
395     {
396     mggt->supprimer(ele);
397     if (expand)
398     {
399     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
400     ele->get_topologie_sousjacente(&lst);
401     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
402     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
403     mggt->supprimer(ele2);
404     }
405     }
406     gest.enregistrer(nomfichier);
407     }
408     if (action==16)
409     {
410 picher 231 sprintf(mess," Lissage de l'enveloppe externe du maillage optimisee");
411 francois 226 affiche(mess);
412     MG_FILE gest(nomfichier);
413 picher 231 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
414 francois 226 MG_GESTIONNAIRE gest2;
415 francois 232 MG_LISSAGE liss;
416     liss.active_affichage(affiche);
417     liss.lisse(mai,gest2,eps,sigma,iter_max,bruitage,lissage,consopti,consimpose,consmailleurauto);
418 francois 226 gest2.enregistrer(fichierout);
419     }
420     sprintf(mess,"Conversion reussie");
421    
422     if (action==14)
423     {
424     sprintf(mess," Analyse MAGIC");
425     affiche(mess);
426     MG_FILE gest(nomfichier);
427     char message [5000];
428     int nbgeo=gest.get_nb_mg_geometrie();
429     sprintf(message," %d geometrie :",nbgeo);
430     for (int i=0;i<nbgeo;i++)
431     {
432     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
433     sprintf(message,"%s %lu ",message,geo->get_id());
434     }
435     affiche(message);
436     for (int i=0;i<nbgeo;i++)
437     {
438     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
439     sprintf(message," geometrie %lu",geo->get_id());
440     affiche(message);
441     int nbmg=geo->get_nb_mg_groupe_topologique();
442     sprintf(message," %d groupe topologique",nbmg);
443     for (int j=0;j<nbmg;j++)
444     {
445     MG_GROUPE_TOPOLOGIQUE* mggp=geo->get_mg_groupe_topologique(j);
446     sprintf(message,"%s %lu ",message,mggp->get_id());
447     }
448 francois 232 affiche(message);
449     sprintf(message," %d faces",geo->get_nb_mg_face());
450     affiche(message);
451     sprintf(message," %d aretes",geo->get_nb_mg_arete());
452     affiche(message);
453     sprintf(message," %d sommets",geo->get_nb_mg_sommet());
454     affiche(message);
455    
456 francois 226 }
457     int nbmai=gest.get_nb_mg_maillage();
458     sprintf(message," %d maillage geometrique :",nbmai);
459 francois 232 affiche(message);
460 francois 226 for (int i=0;i<nbmai;i++)
461     {
462     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
463     sprintf(message,"%s %lu ",message,mai->get_id());
464 francois 232 affiche(message);
465     sprintf(message," %d noeuds",mai->get_nb_mg_noeud());
466     affiche(message);
467     sprintf(message," %d segments",mai->get_nb_mg_segment());
468     affiche(message);
469     sprintf(message," %d triangles",mai->get_nb_mg_triangle());
470     affiche(message);
471     sprintf(message," %d tetras",mai->get_nb_mg_tetra());
472     affiche(message);
473 francois 226 }
474     int nbmaif=gest.get_nb_fem_maillage();
475     sprintf(message," %d maillage FEM :",nbmaif);
476 francois 232 affiche(message);
477 francois 226 for (int i=0;i<nbmaif;i++)
478     {
479     FEM_MAILLAGE* maif=gest.get_fem_maillage(i);
480     sprintf(message,"%s %lu ",message,maif->get_id());
481 francois 232 affiche(message);
482     sprintf(message," %d noeuds",maif->get_nb_fem_noeud());
483     affiche(message);
484     sprintf(message," %d segments",maif->get_nb_fem_segment());
485     affiche(message);
486     sprintf(message," %d triangles",maif->get_nb_fem_triangle());
487     affiche(message);
488     sprintf(message," %d tetras",maif->get_nb_fem_tetra());
489     affiche(message);
490 francois 226 }
491     int nbsol=gest.get_nb_mg_solution();
492     sprintf(message," %d solution maillage geometrique :",nbsol);
493 francois 232 affiche(message);
494 francois 226 for (int i=0;i<nbsol;i++)
495     {
496     MG_SOLUTION* sol=gest.get_mg_solution(i);
497     sprintf(message,"%s %lu ",message,sol->get_id());
498 francois 232 affiche(message);
499 francois 226 }
500     int nbsolf=gest.get_nb_fem_solution();
501     sprintf(message," %d solution maillage geometrique :",nbsolf);
502 francois 232 affiche(message);
503 francois 226 for (int i=0;i<nbsolf;i++)
504     {
505     FEM_SOLUTION* sol=gest.get_fem_solution(i);
506     sprintf(message,"%s %lu ",message,sol->get_id());
507 francois 232 affiche(message);
508 francois 226 }
509     }
510     if (action==15)
511     {
512     sprintf(mess," Calcul de deforme");
513     affiche(mess);
514     MG_FILE gest(nomfichier);
515     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
516     FEM_SOLUTION* sol1=gest.get_fem_solutionid(numsol1);
517     FEM_SOLUTION* sol2=gest.get_fem_solutionid(numsol2);
518     FEM_SOLUTION* sol3=gest.get_fem_solutionid(numsol3);
519     affiche(mess);
520     mai->calcul_deforme(sol1,numchamp1,sol2,numchamp2,sol3,numchamp3);
521     gest.enregistrer(nomfichier);
522     }
523     if (action==17)
524     {
525     sprintf(mess," Fusion de géométrie");
526     affiche(mess);
527     MG_FILE gest(nomfichier);
528     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
529     VCT_MULTI_MODELE fusion(mggeo);
530     fusion.recherche_identite();
531     gest.enregistrer(nomfichier);
532     }
533     sprintf(mess,"Fin");
534     affiche(mess);
535    
536     return 0;
537     }
538    
539    
540    
541     #pragma package(smart_init)