#include <Script.h>
Fonctions membres publiques | |
Script () | |
~Script () | |
int | AddFunction (char *pName, unsigned int iNb, SCRIPT_ROUTINE pFunction) |
Ajoute une fonction. | |
int | DelFunction (unsigned int iPos) |
Supprime une fonction. | |
int | DelFunction (char *pName) |
Supprime une fonction. | |
char * | GetName (unsigned int iPos) |
Retourne le nom de la fonction. | |
int | GetNbParam (unsigned int iPos) |
Retourne le nombre de parametre d'une fonction. | |
int | GetNbParam (char *pName) |
Retourne le nombre de parametre d'une fonction. | |
int | GetNbFunction () |
Retourne le nombre de fonction. | |
String | ParseFile (char *pName) |
Parse un fichier. | |
String | Parse (String pBuffer) |
Parse un buffer. |
Définition à la ligne 61 du fichier Script.h.
|
Initialise avec des paramétres par defaut. Définition à la ligne 16 du fichier Script.cpp. 00017 {
00018 if(!ScriptInstance)
00019 MutexInit(&ScriptMutex);
00020
00021 ScriptInstance++;
00022
00023 NoLine = 0;
00024 NoCar = 0;
00025 }
|
|
Libère la mémoire proprement Définition à la ligne 27 du fichier Script.cpp. Références DelFunction(). 00028 { 00029 while(Functions.size()) 00030 DelFunction(Functions.size() - 1); 00031 Functions.clear(); 00032 00033 ScriptInstance--; 00034 00035 if(!ScriptInstance) 00036 MutexStop(&ScriptMutex); 00037 }
|
|
Ajoute une tonction.
Définition à la ligne 54 du fichier Script.cpp. Références ScriptFunc. 00055 { 00056 unsigned int i = Functions.size(); 00057 00058 Functions.push_back(new ScriptFunc); 00059 00060 if((i + 1) != Functions.size()) 00061 return ERROR_C_MEMORY; 00062 else 00063 { 00064 Functions.back()->Name = new char[strlen(pName) + 1]; 00065 strcpy(Functions.back()->Name, pName); 00066 Functions.back()->NbParam = iNb; 00067 Functions.back()->Function = pFunction; 00068 } 00069 00070 return ERROR_C_NOERROR; 00071 }
|
|
Supprime la fonction ayant le nom pName.
Définition à la ligne 86 du fichier Script.cpp. Références DelFunction(). 00087 { 00088 unsigned int i; 00089 00090 for(i = 0; i < Functions.size(); i++) 00091 if(!strcmp(Functions[i]->Name, pName)) 00092 return DelFunction(i); 00093 00094 return ERROR_C_NOERROR; 00095 }
|
|
Supprime la fonction à la position iPos.
Définition à la ligne 73 du fichier Script.cpp. Référencé par DelFunction(), et ~Script(). 00074 { 00075 00076 if(iPos < Functions.size()) 00077 { 00078 delete [] Functions[iPos]->Name; 00079 delete Functions[iPos]; 00080 Functions.erase(Functions.begin() + iPos); 00081 } 00082 00083 return ERROR_C_NOERROR; 00084 }
|
|
Retourne le nom de la fonction numéro iPos.
Définition à la ligne 97 du fichier Script.cpp. 00098 { 00099 if(iPos < Functions.size()) 00100 return Functions[iPos]->Name; 00101 00102 return NULL; 00103 }
|
|
Retourne le nombre de fonction de l'interpreteur.
Définition à la ligne 124 du fichier Script.cpp. 00125 {
00126 return Functions.size();
00127 }
|
|
Retourne le nombre de parametre de la fonction pName.
Définition à la ligne 113 du fichier Script.cpp. 00114 { 00115 unsigned int i; 00116 00117 for(i = 0; i < Functions.size(); i++) 00118 if(!strcmp(Functions[i]->Name, pName)) 00119 return Functions[i]->NbParam; 00120 00121 return 0; 00122 }
|
|
Retourne le nombre de parametre de la fonction numéro iPos.
Définition à la ligne 105 du fichier Script.cpp. 00106 { 00107 if(iPos < Functions.size()) 00108 return Functions[iPos]->NbParam; 00109 00110 return 0; 00111 }
|
|
Parse un buffer, recherche et éxécute des fonctions.
Définition à la ligne 165 du fichier Script.cpp. Références BEGIN, CERROR, String::Data, IsAlphaNumCar(), _ScriptParam::Params, PERROR, ScriptParam, et _ScriptParam::Vars. Référencé par ParseFile(). 00166 { 00167 char *pIn; 00168 String Name; 00169 ScriptParam Params; 00170 String Out; 00171 String Temp; 00172 unsigned int NoFunc = 0; 00173 bool fComent = 0; 00174 bool fParam = 0; 00175 bool fFunc = 0; 00176 bool fQuit = 0; 00177 BEGIN 00178 00179 pIn = In.Data; 00180 Name = ""; 00181 Out = ""; 00182 Params.Vars = &Vars; 00183 00184 do 00185 { 00186 switch(*pIn) 00187 { 00188 case '#' : //commentaire 00189 if(!fParam) 00190 fComent = 1; 00191 else 00192 Name += *pIn; 00193 break; 00194 00195 case '\n' : //changement de ligne 00196 fComent = 0; 00197 NoLine++; 00198 NoCar = 0; 00199 break; 00200 00201 case '\0' : //fin de fichier 00202 if(fFunc || fParam) 00203 { 00204 LogError("End of file found\n"); 00205 CERROR = ERROR_C_SYNTAX; 00206 } 00207 break; 00208 00209 case '\"' : //chaine de carractère de paramètre 00210 if(!fComent) 00211 { 00212 if(!fFunc) 00213 { 00214 LogError("Parameter found outside a function\n"); 00215 CERROR = ERROR_C_SYNTAX; 00216 break; 00217 } 00218 00219 if(fParam) 00220 { 00221 Params.Params.push_back(Name); 00222 Name = ""; 00223 } 00224 00225 fParam = !fParam; 00226 } 00227 break; 00228 00229 case '(' : //début des paramètres 00230 if(!fParam && !fComent) 00231 { 00232 if(fFunc) 00233 { 00234 LogError("Function's name missing\n"); 00235 CERROR = ERROR_C_SYNTAX; 00236 break; 00237 } 00238 00239 for(NoFunc = 0; NoFunc < Functions.size(); NoFunc++) 00240 { 00241 if(strcpy(Functions[NoFunc]->Name, Name.Data)) 00242 break; 00243 } 00244 00245 if(NoFunc == Functions.size()) 00246 { 00247 LogError("Function not found\n"); 00248 CERROR = ERROR_C_FUNCTION; 00249 break; 00250 } 00251 else 00252 { 00253 Name = ""; 00254 fFunc = 1; 00255 } 00256 } 00257 break; 00258 00259 case ')' : 00260 if(!fParam && !fComent) 00261 { 00262 if(!fFunc) 00263 { 00264 fQuit = 1; 00265 break; 00266 } 00267 00268 if(Params.Params.size() != Functions[NoFunc]->NbParam) 00269 { 00270 LogError("Parameter count\n"); 00271 CERROR = ERROR_C_PARAMETER; 00272 break; 00273 } 00274 00275 Out = (String)Functions[NoFunc]->Function(Params); 00276 fFunc = 0; 00277 } 00278 break; 00279 00280 default : 00281 if(!fComent) 00282 { 00283 if(fParam) 00284 Name += *pIn; 00285 else 00286 { 00287 if(fFunc) 00288 { 00289 if(IsAlphaNumCar(*pIn)) 00290 { 00291 Temp = pIn; 00292 Name = Parse(Temp); 00293 Params.Params.push_back(Name); 00294 Name = ""; 00295 } 00296 } 00297 else 00298 Name += *pIn; 00299 } 00300 } 00301 break; 00302 }//switch 00303 00304 if(!fQuit) 00305 { 00306 pIn++; 00307 NoCar++; 00308 } 00309 } 00310 while(*pIn && !CERROR && !fQuit); 00311 00312 PERROR 00313 00314 return Out; 00315 }
|
|
Parse un fichier, recherche et éxécute des fonctions.
Définition à la ligne 129 du fichier Script.cpp. Références BEGIN, ENDTRY, Parse(), et PERROR. 00130 { 00131 FILE *File; 00132 char Buffer[SCRIPT_BUFFER + 1]; 00133 String In; 00134 String Out; 00135 BEGIN 00136 00137 MutexLock(&ScriptMutex); 00138 00139 File = fopen(pName, "r"); 00140 if(File) 00141 { 00142 NoLine = 0; 00143 NoCar = 0; 00144 00145 while(!feof(File) && !CERROR) 00146 { 00147 if(fgets(Buffer, SCRIPT_BUFFER, File)) 00148 { 00149 In = Buffer; 00150 Out = Parse(In); 00151 } 00152 } 00153 00154 fclose(File); 00155 } 00156 ENDTRY(ERROR_C_DATA_FILE) 00157 00158 MutexUnLock(&ScriptMutex); 00159 00160 PERROR 00161 00162 return Out; 00163 }
|