00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "ModuleDynamiqueModule.h"
00012
00013 ModuleDynamiqueModule::ModuleDynamiqueModule()
00014 {
00015 *File = '\0';
00016 *Name = '\0';
00017 *Realname = '\0';
00018 *Version = '\0';
00019 *Autor = '\0';
00020 *Desc = '\0';
00021 Fonction = NULL;
00022 ModuleAdr = NULL;
00023 NbFonction = 0;
00024 Loaded = 0;
00025 }
00026
00027 ModuleDynamiqueModule::~ModuleDynamiqueModule()
00028 {
00029 UnLoad();
00030 }
00031
00032 int ModuleDynamiqueModule::Load(char *pName, char *pFile)
00033 {
00034 int i = 0, Nb;
00035 ROUTINE Temp;
00036 BEGIN
00037 LOC("ModuleDynamiqueModule::Load")
00038
00039 if(!Loaded)
00040 {
00041 strcpy(Name, pName);
00042 strcpy(File, pFile);
00043
00044 TRY if(ModuleLoad(&ModuleAdr, File))
00045 {
00046 printf("[Module] Load %-56s [ OK ]\n", Name);
00047
00048 TRYIF(ModuleImport(ModuleAdr, &Temp, "ModuleInit"), ERROR_C_IMPORT_FUNC)
00049 TRYIF((int)Temp(NULL), ERROR_C_FUNCTION)
00050
00051 TRY if(ModuleImport(ModuleAdr, &Temp, "ModuleName"))
00052 {
00053 strcpy(Realname, (char *)Temp(NULL));
00054 }
00055 ENDTRY(ERROR_C_IMPORT_FUNC)
00056
00057 TRY if(ModuleImport(ModuleAdr, &Temp, "ModuleVersion"))
00058 {
00059 strcpy(Version, (char *)Temp(NULL));
00060 }
00061 ENDTRY(ERROR_C_IMPORT_FUNC)
00062
00063 TRY if(ModuleImport(ModuleAdr, &Temp, "ModuleDesc"))
00064 {
00065 strcpy(Desc, (char *)Temp(NULL));
00066 }
00067 ENDTRY(ERROR_C_IMPORT_FUNC)
00068
00069 TRY if(ModuleImport(ModuleAdr, &Temp, "ModuleAutor"))
00070 {
00071 strcpy(Autor, (char *)Temp(NULL));
00072 }
00073 ENDTRY(ERROR_C_IMPORT_FUNC)
00074
00075 Loaded = 1;
00076
00077 TRYIF(ModuleImport(ModuleAdr, &Fonction, "ModuleFonction"), 25)
00078
00079 TRY {
00080 while(NbFonction)
00081 DelFonction(NbFonction - 1);
00082 Fonctions.clear();
00083
00084 printf("\t%s V%s by %s\n", Realname, Version, Autor);
00085 printf("\t%s\n", Desc);
00086 }
00087
00088 TRY Nb = AtoI((char *)Fonction(0));
00089 TRY if(Nb)
00090 {
00091 for(i = 0; i < (Nb && !CERROR); i++)
00092 {
00093 CERROR = AddFonction((char *)Fonction((PARAMETRE)(i + 1)));
00094 }
00095 }
00096 ENDTRY(ERROR_C_NO_FUNC)
00097 }
00098 else
00099 {
00100 printf("[Module] Load %-56s [FAILED]\n", pName);
00101 CERROR = ERROR_C_LOAD_DLL;
00102 }
00103 }
00104
00105 PERROR
00106
00107 ENDBEGIN
00108 }
00109
00110 int ModuleDynamiqueModule::UnLoad()
00111 {
00112 ROUTINE Close;
00113 BEGIN
00114 LOC("ModuleDynamiqueModule::UnLoad")
00115
00116 if(Loaded)
00117 {
00118 if(ModuleImport(ModuleAdr, &Close, "ModuleClose"))
00119 Close(NULL);
00120
00121 while(NbFonction)
00122 DelFonction(NbFonction - 1);
00123 Fonctions.clear();
00124
00125 if(!ModuleUnload(&ModuleAdr))
00126 {
00127 printf("[Module] Unload %-54s [ OK ]\n", Name);
00128
00129 Loaded = 0;
00130 }
00131 else
00132 {
00133 printf("[Module] Unload %-54s [FAILED]\n", Name);
00134 CERROR = ERROR_C_UNLOAD_DLL;
00135 }
00136 }
00137
00138 PERROR
00139
00140 ENDBEGIN
00141 }
00142
00143 int ModuleDynamiqueModule::AddFonction(char *pName)
00144 {
00145 BEGIN
00146 LOC("ModuleDynamiqueModule::AddFonction")
00147
00148 if(Loaded)
00149 {
00150 Fonctions.push_back(new ModuleFonction);
00151 TRY if(ModuleImport(ModuleAdr, &Fonctions.back()->Fonction, pName))
00152 {
00153 strcpy(Fonctions.back()->Name, pName);
00154
00155 NbFonction++;
00156
00157 printf("[Module] Import %-54s [ OK ]\n", pName);
00158 }
00159 else
00160 {
00161 Fonctions.erase(Fonctions.begin() + NbFonction);
00162 printf("[Module] Import %-54s [FAILED]\n", pName);
00163 CERROR = ERROR_C_IMPORT_FUNC;
00164 }
00165 }
00166 ENDTRY(ERROR_C_LOAD_DLL)
00167
00168 PERROR
00169
00170 ENDBEGIN
00171 }
00172
00173 int ModuleDynamiqueModule::DelFonction(int iPos)
00174 {
00175 BEGIN
00176 LOC("ModuleDynamiqueModule::DelFonction")
00177
00178 TRY if(Loaded)
00179 {
00180 TRY if(iPos < NbFonction)
00181 {
00182 delete Fonctions[iPos];
00183 Fonctions.erase(Fonctions.begin() + iPos);
00184
00185 NbFonction--;
00186 }
00187 ENDTRY(ERROR_C_NO_FUNC)
00188 }
00189 ENDTRY(ERROR_C_LOAD_DLL)
00190
00191 PERROR
00192
00193 ENDBEGIN
00194 }
00195