00001 /*! \file ModuleModule.h 00002 \brief Gestion de module dynamique. 00003 00004 Gestion d'un module. \n 00005 00006 \author aerith (contact@aerith.biz - www.aerith.biz) 00007 \version 1.0 00008 \date 16/02/2006 00009 */ 00010 00011 #ifndef INCLUDE_RSRC_MODULE_MODULE 00012 #define INCLUDE_RSRC_MODULE_MODULE 00013 00014 #include "../Portage/Surcouche.h" 00015 #include "../Portage/Tools.h" 00016 #include "../Portage/Error.h" 00017 00018 #define MODULE_FILE 256 00019 #define MODULE_NAME 128 00020 #define MODULE_VERSION 16 00021 #define MODULE_AUTOR 128 00022 #define MODULE_DESC 256 00023 00024 //! Liste des Options 00025 /*! Liste des options d'un module 00026 */ 00027 typedef struct _ModuleOption 00028 { 00029 int Reload; 00030 int Ignore; 00031 int Force; 00032 int Unload; 00033 } ModuleOption; 00034 00035 //! Liste des Options 00036 /*! Liste des options d'un module 00037 */ 00038 typedef struct _ModuleFonction 00039 { 00040 char Name[MODULE_NAME]; /*!< Nom de la fonction. */ 00041 ROUTINE Fonction; /*!< Adresse mémoire de la fonction. */ 00042 } ModuleFonction; 00043 00044 //! Gestion de module dynamique. 00045 /*! Permet l'utilisation de module dynamique comme simple classe. 00046 */ 00047 class ModuleModule 00048 { 00049 private : 00050 char File[MODULE_FILE]; /*!< Fichier du module. */ 00051 char Name[MODULE_NAME]; /*!< Nom donné au module. */ 00052 char Realname[MODULE_NAME]; /*!< Nom réel du module. */ 00053 char Version[MODULE_VERSION];/*!< Version du module. */ 00054 char Autor[MODULE_AUTOR]; /*!< Auteur du module. */ 00055 char Desc[MODULE_DESC]; /*!< Description du module. */ 00056 ROUTINE Fonction; /*!< Liste des fonctions à importées. */ 00057 MODULE ModuleAdr; /*!< Adresse mémoire du module. */ 00058 int NbFonction; /*!< Nombre de fonction importées. */ 00059 ModuleFonction **Fonctions; /*!< Chaque lignes est une fonction importer. */ 00060 int Loaded; /*!< A 1 si le module a été charger, sinon 0. */ 00061 00062 public : 00063 /*! Initialise avec des valeurs par defaut. 00064 */ 00065 ModuleModule(); 00066 00067 /*! Libere proprement la mémoire. 00068 */ 00069 ~ModuleModule(); 00070 00071 //! Charge le module. 00072 /*! Charge le module de fichier \a pFile . 00073 \param pName nom du module 00074 \param pFile nom du fichier du module 00075 \return code d'erreur. 00076 \sa UnLoad(). 00077 */ 00078 int Load(char *pName, char *pFile); 00079 00080 //! Decharge le module. 00081 /*! Decharge le module. 00082 \return code d'erreur. 00083 \sa Load(). 00084 */ 00085 int UnLoad(); 00086 00087 //! Importe une fonction. 00088 /*! Importe la fonction de nom \a pName . 00089 \param pName nom de la fonction 00090 \return code d'erreur. 00091 \sa DelFonction(), GetFonction() et GetNbFonction(). 00092 */ 00093 int AddFonction(char *pName); 00094 00095 //! Supprime une fonction. 00096 /*! Supprime la fonction étant à la position \a iPos. 00097 \param iPos position de la fonction. 00098 \return code d'erreur. 00099 \sa AddFonction(), GetFonction() et GetNbFonction(). 00100 */ 00101 int DelFonction(int iPos); 00102 00103 //! Supprime une fonction. 00104 /*! Supprime la fonction de nom \a pName. 00105 \param pName nom de la fonction. 00106 \return code d'erreur. 00107 \sa AddFonction(), GetFonction() et GetNbFonction(). 00108 */ 00109 inline int DelFonction(char *pName) 00110 { 00111 for(int i = 0; i < NbFonction; i++) 00112 { 00113 if(!strcmp(Fonctions[i]->Name, pName)) 00114 return DelFonction(i); 00115 } 00116 }; 00117 00118 //! Retourne une fonction par sa position. 00119 /*! Permet l'acces à la fonction étant à la position \a iPos. 00120 \param iPos position de la fonction. 00121 \return pointeur sur la fonction. 00122 \sa AddFonction(), DelFonction() et GetNbFonction(). 00123 */ 00124 inline ROUTINE GetFonction(int iPos) 00125 { 00126 if(iPos < NbFonction) 00127 return Fonctions[iPos]->Fonction; 00128 00129 return NULL; 00130 }; 00131 00132 //! Retourne une fonction par son nom. 00133 /*! Permet l'acces à la fonction ayant le nom \a pName. 00134 \param pName nom de la fonction. 00135 \return pointeur sur la fonction. 00136 \sa AddFonction(), DelFonction() et GetNbFonction(). 00137 */ 00138 inline ROUTINE GetFonction(char *pName) 00139 { 00140 for(int i = 0; i < NbFonction; i++) 00141 { 00142 if(!strcmp(Fonctions[i]->Name, pName)) 00143 return Fonctions[i]->Fonction; 00144 } 00145 00146 return NULL; 00147 }; 00148 00149 //! Retourne le nombre de fonction. 00150 /*! Retourne le nombre de fonction importée. 00151 \return nombre de fonction importée. 00152 \sa AddFonction(), DelFonction() et GetFonction(). 00153 */ 00154 inline int GetNbFonction() 00155 { 00156 return NbFonction; 00157 }; 00158 00159 //! Retourne le fichier. 00160 /*! Retourne le nom du fichier du module. 00161 \return pointeur sur \a File. 00162 */ 00163 inline char *GetFile() 00164 { 00165 return File; 00166 }; 00167 00168 //! Retourne le nom. 00169 /*! Retourne le nom donné au module. 00170 \return pointeur sur \a Name. 00171 */ 00172 inline char *GetName() 00173 { 00174 return Name; 00175 }; 00176 00177 //! Retourne le nom réel. 00178 /*! Retourne le nom réel du module. 00179 \return pointeur sur \a Realname. 00180 */ 00181 inline char *GetRealname() 00182 { 00183 return Realname; 00184 }; 00185 00186 //! Retourne la version. 00187 /*! Retourne la version du module. 00188 \return pointeur sur \a Version. 00189 */ 00190 inline char *GetVersion() 00191 { 00192 return Version; 00193 }; 00194 00195 //! Retourne l'auteur. 00196 /*! Retourne l'auteur du module. 00197 \return pointeur sur \a Autor. 00198 */ 00199 inline char *GetAutor() 00200 { 00201 return Autor; 00202 }; 00203 00204 //! Retourne la description. 00205 /*! Retourne la description du module. 00206 \return pointeur sur \a Desc. 00207 */ 00208 inline char *GetDesc() 00209 { 00210 return Desc; 00211 }; 00212 }; 00213 00214 #endif 00215
1.3.9.1