mcreate_operateur.c

Go to the documentation of this file.
00001 /*
00002 *    Copyright (c) 2007. The BATI team. All right reserved.
00003 *
00004 *    This file is part of BATI library.
00005 *
00006 *    BATI library is free software: you can redistribute it and/or modify
00007 *    it under the terms of the GNU General Public License as published by
00008 *    the Free Software Foundation, either version 3 of the License, or
00009 *    (at your option) any later version.
00010 *
00011 *    BATI library  is distributed in the hope that it will be useful,
00012 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 *    GNU General Public License for more details.
00015 *
00016 *    You should have received a copy of the GNU General Public License
00017 *    along with BATI library.  If not, see <http://www.gnu.org/licenses/>.
00018 */
00019 /* Programme de test : creation des DP et des DT */
00020 /* Validation sur données simples provenant articles de Shipp/Kuncheva */
00021 
00022 
00023 
00024 
00025 #include "image.h"
00026 #include "proto2D.h"
00027 
00028 #include <stdlib.h>
00029 #include <stdio.h>
00030 #include <string.h>
00031 
00032 #include "classifier.h"
00033 #include "macros.h"
00034 
00035 
00036 
00037 int main(int argc, char *argv[])
00038 {
00039   FILE *fp = NULL;
00040   char nom[200], proto[200];
00041   int i;
00042 
00043 
00044   if(argc == 1)
00045     ERREUR("\nPas assez d'arguments : le nom de l'operateur doit etre specifie\n");
00046       
00047   if(argc>2)
00048     ERREUR("\nTrop d'arguments : le seul argument a specifier doit etre le nom de l'operateur\n");
00049   
00050   if(argv[1][0] == '-' )
00051     {
00052       if(argv[1][1] != '-' ) 
00053         {
00054           ERREUR("1 : Option non reconnue : --h pour afficher l'aide\n");
00055         }
00056       
00057       else
00058         {
00059           if(argv[1][2] == 'h')
00060             {      
00061               printf("\nCet executable permet de creer les fichiers d'un operateur xxx :\n");
00062               printf("   -> un fichier lxxx.c \n   -> et un fichier xxx.h.\n");
00063               printf("\nCes fichiers sont crees a partir de la chaine \"lxxx\" qui doit etre passee en argument.\n");
00064               printf("\nLe fichier passe en argument doit ne doit pas posseder d'extension.\n");
00065               printf("\nLe fichier passe en argument doit commencer par le caractere 'l'.\n\n");
00066             
00067               return 0;
00068             }
00069           else ERREUR("2 : Option non reconnue : --h pour afficher l'aide\n");
00070         }
00071     }
00072 
00073   
00074   if(argv[1][0] != 'l')
00075     ERREUR("Le nom de l'operateur doit etre precede du caractere 'l'\n");
00076 
00077   /* le nom de l'operateur est sans le 'l' */
00078   for(i=1;i<strlen(argv[1]);i++)
00079     {
00080       nom[i-1] = argv[1][i];
00081       if(argv[1][i] == '.')
00082         {
00083           ERREUR("Le fichier passe en parametre ne doit pas avoir d'extension.\n");
00084         }
00085     }
00086   nom[i-1]='\0';
00087   
00088   /* le .h */
00089   strcpy(proto,nom);
00090   proto[strlen(nom)] = '\0';
00091   strcat(proto,".h");
00092   
00093   /* creer lope.c */
00094   strcat(argv[1],".c");
00095   VERIF_PT_NULL(argv[1],"La fonction strcat renvoie null\n");
00096   
00097   fp=fopen(argv[1],"w");
00098 
00099   VERIF_PT_NULL(fp,"Pointeur fichier null : probleme a l'ouverture du fichier de l'operateur (.c)");
00100 
00101   fprintf(fp,"/* -----------------------------------------------------------------------------------------------\n");
00102 
00103   fprintf(fp,"    Operateur : %s \n",nom);
00104   
00105   fprintf(fp,"   -----------------------------------------------------------------------------------------------\n");
00106   
00107   fprintf(fp,"   Objectif de l'operateur\n\n");
00108 
00109   fprintf(fp,"   Cet operateur a pour but de ............\n\n");
00110 
00111   fprintf(fp,"   -----------------------------------------------------------------------------------------------\n");
00112   
00113   fprintf(fp,"   Derniere modification le %s  a   %s \n",__DATE__,__TIME__);
00114 
00115   fprintf(fp,"   -----------------------------------------------------------------------------------------------\n");
00116   
00117   fprintf(fp,"   Cree par                      \n");
00118 
00119   fprintf(fp,"   -----------------------------------------------------------------------------------------------*/");
00120 
00121   fprintf(fp,"\n\n\n\n");
00122   
00123   fprintf(fp,"/** @name  %s\\n \n \n Cet ensemble de fonctions permet de ....  \n\n */ \n //@{ \n\n\n\n",nom);
00124 
00125   
00126   
00127   fprintf(fp,"/* Bibliotheques */\n");
00128   fprintf(fp,"#include <stdlib.h>\n");
00129   fprintf(fp,"#include \"%s\"\n",proto);
00130   fprintf(fp,"#include \"image.h\"\n");
00131   fprintf(fp,"#include \"proto2D.h\"\n");
00132   fprintf(fp,"\n\n\n");
00133 
00134   fprintf(fp,"/****************************  LECTURE ******************************** /\n");
00135   
00136   fprintf(fp,"/*! \\brief  Mettre une phrase de resume ou le debut de l'explication \n");
00137   fprintf(fp,"de la lecture de l'operateur \n");
00138   fprintf(fp,"Mettre la suite de l'explication ici...\n\n");
00139 
00140   fprintf(fp,"Lecture des parametres de l'operateur %s :\n\n",nom);
00141   
00142   fprintf(fp,"\\param desc pointeur descripteur \n");
00143   fprintf(fp,"\\param ptp pointeur sur parametre courant deja alloue (a lire)\n");  
00144   fprintf(fp,"\\param debq pointeur de chaine de caracteres placee en debut de question\n");
00145   fprintf(fp,"\\return renvoie nouveau pointeur de parametres deja alloue (pour la suite) \n");
00146   fprintf(fp,"\\author Nom Prenom\n");
00147   fprintf(fp,"\\version 1.0\n");
00148   fprintf(fp,"*/\n\n\n");
00149 
00150   
00151   fprintf(fp,"param *%s_lect(\n",nom);
00152   fprintf(fp,"                                            %s_t *desc,  \n",nom);
00153   fprintf(fp,"                                            param *ptp,  \n");
00154   fprintf(fp,"                                            char *debq \n"); 
00155   fprintf(fp,"                                            )\n"); 
00156   fprintf(fp,"{\n"); 
00157   fprintf(fp,"char question[500];\n");
00158   fprintf(fp,"\n\n\n");
00159   fprintf(fp,"return ptp;\n");
00160   fprintf(fp,"\n}\n\n\n");
00161 
00162 
00163   
00164    fprintf(fp,"/****************************  INIT ******************************** /\n");
00165   
00166   fprintf(fp,"/*! \\brief  Mettre une phrase de resume ou le debut de l'explication \n de l'initialisation de l'operateur \n");
00167 
00168   fprintf(fp,"Initialisation des parametres de l'operateur %s :\n",nom);
00169   
00170   fprintf(fp,"\\param desc pointeur descripteur \n");
00171   fprintf(fp,"\\param   .........\n");  
00172   fprintf(fp,"\\param   .........\n");
00173   fprintf(fp,"\\return une des constantes definie dans le .h suivant erreur rencontree \n");
00174   fprintf(fp,"\\author Nom Prenom\n");
00175   fprintf(fp,"\\version 1.0\n");
00176   fprintf(fp,"*/\n\n\n");
00177 
00178   
00179   fprintf(fp,"int %s_init(\n",nom);
00180   fprintf(fp,"                                            %s_t *desc,  \n",nom);
00181   fprintf(fp,"                                                  \n"); 
00182   fprintf(fp,"                                            )\n"); 
00183   fprintf(fp,"{\n"); 
00184   
00185   fprintf(fp,"\n\n\n");
00186   fprintf(fp,"return NO_ERROR;\n");
00187   fprintf(fp,"\n}\n\n\n");
00188 
00189 
00190 
00191   
00192    fprintf(fp,"/****************************  CALC******************************** /\n");
00193   
00194   fprintf(fp,"/*! \\brief  Mettre une phrase de resume ou le debut de l'explication \n du calcul de l'operateur \n");
00195 
00196   fprintf(fp,"Calcul de l'operateur %s :\n",nom);
00197   
00198   fprintf(fp,"\\param desc pointeur descripteur \n");
00199   fprintf(fp,"\\param   .........\n");  
00200   fprintf(fp,"\\param   .........\n");
00201   fprintf(fp,"\\param  resultat de type pointeur sur  .........\n");
00202   fprintf(fp,"\\return une des constantes definie dans le .h suivant erreur rencontree \n");
00203   fprintf(fp,"\\author Nom Prenom\n");
00204   fprintf(fp,"\\version 1.0\n");
00205   fprintf(fp,"*/\n\n\n");
00206 
00207   
00208   fprintf(fp,"int %s_calc(\n",nom);
00209   fprintf(fp,"                                            %s_t *desc,  \n",nom);
00210   fprintf(fp,"                                                  \n"); 
00211   fprintf(fp,"                                            )\n"); 
00212   fprintf(fp,"{\n"); 
00213   
00214   fprintf(fp,"\n\n\n");
00215   fprintf(fp,"return NO_ERROR;\n");
00216   fprintf(fp,"\n}\n\n\n");
00217 
00218 
00219   
00220    fprintf(fp,"/****************************  FERM ******************************** /\n");
00221   
00222   fprintf(fp,"/*! \\brief  Mettre une phrase de resume ou le debut de l'explication \n de la fermeture de l'operateur \n");
00223 
00224   fprintf(fp,"Liberation de la memoire allouee pour les parametres de l'operateur %s :\n",nom);
00225   
00226   fprintf(fp,"\\param desc pointeur descripteur \n");
00227   fprintf(fp,"\\return une des constantes definie dans le .h suivant erreur rencontree \n");
00228   fprintf(fp,"\\author Nom Prenom\n");
00229   fprintf(fp,"\\version 1.0\n");
00230   fprintf(fp,"*/\n\n\n");
00231 
00232   
00233   fprintf(fp,"int %s_ferm(\n",nom);
00234   fprintf(fp,"                                            %s_t *desc,  \n",nom);
00235   fprintf(fp,"                                            )\n"); 
00236   fprintf(fp,"{\n"); 
00237   
00238   fprintf(fp,"\n\n\n");
00239   fprintf(fp,"return NO_ERROR;\n");
00240   fprintf(fp,"\n}\n\n\n");
00241   
00242   
00243   fprintf(fp,"/* fin doc */\n");
00244   fprintf(fp,"//@}\n\n");
00245   
00246   if(fclose(fp))
00247     ERREUR("Impossible de fermer la fichier de l'operateur (.c)");
00248 
00249   printf("Le fichier  --- %s --- a ete cree\n",argv[1]);
00250   
00251 
00252 
00253 
00254 
00255   
00256   VERIF_PT_NULL(proto,"La fonction strcat renvoie null\n");
00257   
00258   fp=fopen(proto,"w");
00259 
00260   VERIF_PT_NULL(fp,"Pointeur fichier null : probleme a l'ouverture du fichier de l'operateur (.h)");
00261 
00262   fprintf(fp,"/* -----------------------------------------------------------------------------------------------\n");
00263 
00264   fprintf(fp,"    Operateur : %s \n",nom);
00265   
00266   fprintf(fp,"   -----------------------------------------------------------------------------------------------\n");
00267   
00268   fprintf(fp,"   Fichier des prototypes des fonctions de l'operateur\n\n");
00269 
00270   fprintf(fp,"   -----------------------------------------------------------------------------------------------\n");
00271   
00272   fprintf(fp,"   Derniere modification le %s  a   %s \n",__DATE__,__TIME__);
00273 
00274   fprintf(fp,"   -----------------------------------------------------------------------------------------------\n");
00275   
00276   fprintf(fp,"   Cree par                      \n");
00277 
00278   fprintf(fp,"   -----------------------------------------------------------------------------------------------*/");
00279 
00280   fprintf(fp,"\n\n\n\n");
00281 
00282   
00283   fprintf(fp,"/* Pas de code avant cette ligne */\n");
00284   fprintf(fp,"#ifndef __%s\n",nom);
00285   fprintf(fp,"#define __%s\n",nom);
00286   fprintf(fp,"\n\n\n\n");
00287   
00288 
00289   fprintf(fp,"/* Bibliotheques */\n");
00290   fprintf(fp,"#include <stdlib.h>\n");
00291   fprintf(fp,"#include \"image.h\"\n");
00292   fprintf(fp,"#include \"proto2D.h\"\n");
00293   fprintf(fp,"\n\n\n\n");
00294 
00295   fprintf(fp,"/* La doc a extraire doit etre dans  /**   ....     */  //(2 *)\n");
00296   fprintf(fp,"\n\n\n\n");
00297 
00298 
00299   fprintf(fp,"/* Descripteur */\n");
00300   fprintf(fp,"typedef struct{\n\n");
00301   fprintf(fp,"/** champ 1 : ........ */\n");
00302   fprintf(fp,"/** champ 2 : ........ */\n");
00303   fprintf(fp,"/** champ 3 : ........ */\n");
00304   fprintf(fp,"\n}%s_t;",nom);
00305   fprintf(fp,"\n\n\n\n");
00306  
00307 
00308   fprintf(fp,"/*  Lecture  */\n\n");
00309   fprintf(fp,"param *%s_lect(\n",nom);
00310   fprintf(fp,"                                            %s_t *desc,  \n",nom);
00311   fprintf(fp,"                                            param *ptp,  \n");
00312   fprintf(fp,"                                            char *debq \n"); 
00313   fprintf(fp,"                                            );\n"); 
00314   fprintf(fp,"\n\n\n");
00315 
00316 
00317   fprintf(fp,"/*  Initialisation  */\n\n");
00318   fprintf(fp,"int %s_init(\n",nom);
00319   fprintf(fp,"                                            %s_t *desc,  \n",nom);
00320   fprintf(fp,"                                                 \n"); 
00321   fprintf(fp,"                                            );\n"); 
00322   fprintf(fp,"\n\n\n");
00323 
00324   fprintf(fp,"/*  Calcul  */\n\n");
00325   fprintf(fp,"int %s_calc(\n",nom);
00326   fprintf(fp,"                                            %s_t *desc,  \n",nom);
00327   fprintf(fp,"                                                  \n"); 
00328   fprintf(fp,"                                            );\n"); 
00329   fprintf(fp,"\n\n\n");
00330   
00331   fprintf(fp,"/*  Fermeture  */\n\n");
00332   fprintf(fp,"int %s_ferm(\n",nom);
00333   fprintf(fp,"                                            %s_t *desc,  \n",nom);
00334   fprintf(fp,"                                            );\n"); 
00335   fprintf(fp,"\n\n\n");
00336 
00337   
00338   fprintf(fp,"/* Pas de code apres cette ligne */\n");
00339   fprintf(fp,"#endif\n");
00340   
00341 
00342   if(fclose(fp))
00343     ERREUR("Impossible de fermer la fichier de l'operateur (.h)");
00344 
00345   printf("Le fichier  --- %s --- a ete cree\n",proto);
00346   
00347   printf("Fin.\n");
00348 }
00349 
00350   
00351 
00352       

Generated on Tue Apr 22 13:31:03 2008 for donnee1D by  doxygen 1.5.3