00001 /*! \file Script.h 00002 \brief Interpréteur de script. 00003 00004 Interprete des scripts structurés en fonctions. 00005 00006 \author aerith (www.aerith.fr) 00007 \version 1.0 00008 \date 20/11/2007 00009 */ 00010 00011 #ifndef INCLUDE_RSRC_SCRIPT 00012 #define INCLUDE_RSRC_SCRIPT 00013 00014 #include "../Surcouche/SurcoucheMultitache.h" 00015 #include "../Tools/Tools.h" 00016 #include "../Error/Error.h" 00017 #include "../String/String.h" 00018 #include <stdio.h> 00019 #include <vector> 00020 00021 #define SCRIPT_BUFFER 10240 00022 00023 #define SCRIPT_TYPE_STRING 1 00024 #define SCRIPT_TYPE_INT 2 00025 #define SCRIPT_TYPE_FLOAT 3 00026 00027 //! Information sur une variable. 00028 /*! Information sur une variable de l'interpréteur. 00029 */ 00030 typedef struct _ScriptVar 00031 { 00032 char *Name; /*!< Nom de la variable. */ 00033 String Value; /*!< Valeur de la variable. */ 00034 unsigned int Type; /*!< Type de la variable. */ 00035 } ScriptVar; 00036 00037 //! Parametres pour une fonction. 00038 /*! Parametres pour une fonction. 00039 */ 00040 typedef struct _ScriptParam 00041 { 00042 std::vector<String> Params; /*!< Chaque ligne est un parametre. */ 00043 std::vector<ScriptVar *> *Vars; /*!< Liste des variables. */ 00044 } ScriptParam; 00045 00046 typedef String (*SCRIPT_ROUTINE)(ScriptParam); /*!< Pointeur sur une fonction. */ 00047 00048 //! Information sur une fonction. 00049 /*! Information sur une fonction de l'interpréteur. 00050 */ 00051 typedef struct _ScriptFunc 00052 { 00053 char *Name; /*!< Nom de la fonction. */ 00054 unsigned int NbParam; /*!< Nombre de paramètre de la fonction. */ 00055 SCRIPT_ROUTINE Function; /*!< Fonction à éxécuté. */ 00056 } ScriptFunc; 00057 00058 //! Interpréteur de script. 00059 /*! Interprete des scripts structurés en fonctions. 00060 */ 00061 class Script 00062 { 00063 private : 00064 std::vector<ScriptFunc *> Functions; /*!< Chaque lignes est une fonction. */ 00065 std::vector<ScriptVar *> Vars; /*!< Chaque lignes est une variable. */ 00066 static unsigned int ScriptInstance; /*!< Compte les instance de la class. */ 00067 static MUTEX ScriptMutex; /*!< Utiliser des que l'on accede à un fichier. */ 00068 unsigned int NoLine; /*!< Numéro de la ligne en cour de traitement. */ 00069 unsigned int NoCar; /*!< Numéro du carractère en cour d'analise. */ 00070 00071 //! Afiche une erreur de parsage. 00072 /*! Affiche des informations sur une erreur lors du parsage d'un fichier. 00073 \param pDesc déscription de l'erreur. 00074 */ 00075 void LogError(char *pDesc); 00076 00077 00078 public : 00079 /*! Initialise avec des paramétres par defaut. 00080 */ 00081 Script(); 00082 00083 /*! Libère la mémoire proprement 00084 */ 00085 ~Script(); 00086 00087 //! Ajoute une fonction. 00088 /*! Ajoute une tonction. 00089 \param pName nom de la fonction. 00090 \param iNb nombre de paramètre de la fonction. 00091 \param pFunction fonction a lier. 00092 \return code d'erreur 00093 \sa DelFunction() et GetNbFunction(). 00094 */ 00095 int AddFunction(char *pName, unsigned int iNb, SCRIPT_ROUTINE pFunction); 00096 00097 //! Supprime une fonction. 00098 /*! Supprime la fonction à la position \a iPos. 00099 \param iPos position de la fonction. 00100 \return code d'erreur 00101 \sa AddFunction() et GetNbFunction(). 00102 */ 00103 int DelFunction(unsigned int iPos); 00104 00105 //! Supprime une fonction. 00106 /*! Supprime la fonction ayant le nom \a pName. 00107 \param pName nom de la fonction. 00108 \return code d'erreur 00109 \sa AddFunction() et GetNbFunction(). 00110 */ 00111 int DelFunction(char *pName); 00112 00113 //! Retourne le nom de la fonction. 00114 /*! Retourne le nom de la fonction numéro \a iPos. 00115 \param iPos position de la fonction. 00116 \return pointeur sur le nom de la fonction \a Name. 00117 */ 00118 char *GetName(unsigned int iPos); 00119 00120 //! Retourne le nombre de parametre d'une fonction. 00121 /*! Retourne le nombre de parametre de la fonction numéro \a iPos. 00122 \param pName nom de la fonction. 00123 \return nombre de paramètre de la fonction \a NbParam. 00124 */ 00125 int GetNbParam(unsigned int iPos); 00126 00127 //! Retourne le nombre de parametre d'une fonction. 00128 /*! Retourne le nombre de parametre de la fonction \a pName. 00129 \param pName nom de la fonction. 00130 \return nombre de paramètre de la fonction \a NbParam. 00131 */ 00132 int GetNbParam(char *pName); 00133 00134 //! Retourne le nombre de fonction. 00135 /*! Retourne le nombre de fonction de l'interpreteur. 00136 \return nombre de fonction de l'interpréteur. 00137 */ 00138 int GetNbFunction(); 00139 00140 //! Parse un fichier. 00141 /*! Parse un fichier, recherche et éxécute des fonctions. 00142 \param pName nom du fichier à parser. 00143 \return chaine de carractère résultat. 00144 */ 00145 String ParseFile(char *pName); 00146 00147 //! Parse un buffer. 00148 /*! Parse un buffer, recherche et éxécute des fonctions. 00149 \param pBuffer buffer à parser. 00150 \return chaine de carractère résultat. 00151 */ 00152 String Parse(String pBuffer); 00153 }; 00154 00155 00156 #endif