Je vais donc vous écrire une série de posts qui auront pour objectif de faire évoluer le grand classique "Hello world" vers une grande modularité. Une bonne raison d'intégrer du LUA dans son programme peut être la lecture d'un fichier de configuration ; une fonctionnalité utilisée par une grande majorité d'application.
Commençons avec le programme suivant qui permet d'afficher 5 lignes "Hello world" :
#include <stdlib.h> #include <stdio.h> #include <string> using namespace std; int main(void) { string text = "Hello world\n"; int nbLines = 5; for (int i=0; i<nblines; i++) printf(text.c_str()); return 0; }
Et ajoutons y maintenant la possibilité de modifier le texte et le nombre de lignes par le biais d'un fichier de configuration LUA :
// Librairies LUA extern "C" { #include <lauxlib.h> #include <lualib.h> } #include <stdlib.h> #include <stdio.h> #include <string> using namespace std; int main(void) { lua_State *L; string text = "Hello world\n"; int nbLines = 5; /* * Instance de l'interface LUA */ L = luaL_newstate(); luaL_openlibs(L); /* Chargement des libraries standard */ if ( luaL_dofile(L, "configuration.lua") ) { /* Chargement du fichier */ fprintf(stderr, "Impossible de charger le fichier de configuration: %s\n", lua_tostring(L, -1)); exit(1); } // recupere la variable text lua_settop(L,0); lua_getfield(L, LUA_GLOBALSINDEX, "TEXT"); if (lua_isstring(L, -1)) { text = lua_tostring(L, -1); } lua_pop(L, 1); // recupere la variable nbLines lua_settop(L,0); lua_getfield(L, LUA_GLOBALSINDEX, "NB_LINES"); if (lua_isnumber(L, -1)) { nbLines = lua_tonumber(L, -1); } lua_pop(L, 1); for (int i=0; i<nblines; i++) printf(text.c_str()); return 0; }
Avec comme fichier de configuration :
NB_LINES = 2 TEXT = "Hello world [MODIFIE]\n"
Ou bien :
NB_LINES = 1 TEXT = "Vous êtes sous " .. os.getenv("OS") .. "\n"
Pour l'instant ce n'est pas plus compliqué qu'une autre méthode, mais je suis certain que vous y voyez déjà quelques avantages... Non ?
Téléchargement des sources (+ exécutable Windows)
Aucun commentaire:
Enregistrer un commentaire