IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

macos bundle et terminal


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Agriculteur
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut macos bundle et terminal
    Bonjour,

    Tout d’abord merci beaucoup à tous les contributeur de ce site...

    Je suis en train d'apprendre le c++, maintenant j'essaie un peu la SFML (il parait aujourd'hui que j'ai meilleur temps que la SDL...).
    Je suis sous macos et utilise Xcode 8.0...
    J'ai essayé de faire un bundle... ça marche bien, mais évidement le terminal ne s'ouvre plus quand on lance le programme.


    Je me demande quel est le meilleurs moyen de contourner ça...

    1)-Créer sa propre console interne au programme (je trouve ça lourd et long, sachant que le terminal sur macos existe déjà)...?
    J'ai déjà lu cette solution quelques part, je pense que c'est un bon exercice pour plus tard... mais j'espère mieux pour l'instant

    2)-Y'a-t-il quand même un moyen d'ouvrir le terminal ouvrant l'application et de communiquer par là ? (C'est un peu ce que j'espère faire)...
    3)-Abandonner les bundles et faire des programmes en ligne de commande ? (pourquoi pas s'il n'y a pas d'autre solutions)... mais j'espère quand même...


    Et encore une question : est-ce un problème avec tous les bundle macos, ou avec la SFML ou avec le c++ en particulier ???


    Merci beaucoup à l'avance pour vos réponses (bien que j'imagine qu'il n'y a pas de solution simple et que l'option 3 sera la meilleures, enfin je demande quand même !)...



    Gégé

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Le but de la SFML c'est d'avoir une fenêtre, donc pourquoi vouloir l'invité de commande à côté ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Candidat au Club
    Homme Profil pro
    Agriculteur
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut hum ouais
    C'est tout à fais vrai... bien que... :


    Non mais je suis peut-être pénible...

    L’intérêt dans mes application est de faire des modélisation/simulation j'aurais donc envie d'un minimum de graphismes pour rendre tout ça plus agréable à lire et à comprendre... je pense , par contre que l’interaction avec le programme est beaucoup plus simple, claire et précise en ligne de commande...


    Enfin voilà... maintenant... si c'est trop compliqué, je me débrouille autrement...
    Je posais la question surtout parce que c'est un problème qui me semble à priori simple, mais qu'en cherchant longtemps et partout, je n'ai pas trouver la solution...
    Pourtant je sais qu'il y a des application GUI + ligne de commande, mais peut-être pas en c++ !?

  4. #4
    Membre averti
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Points : 435
    Points
    435
    Par défaut
    Comme le dit si bien Bousk, l'intéret de la SFML est de te passer de console pour n'avoir plus qu'une interface graphique répondant a l'ensemble de tes besoins.
    Cependant, rien ne t'empeche d'implémenter toi-meme une seconde fenetre pour t'en servir comme "console".
    J'imagine que tu vas devoir aussi rajouter de quoi décoder tes lignes de commande et ajuster les comportements qui s'en réferent derriere.

  5. #5
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Développer une interface en ligne de commande from scratch « juste » pour répondre à une contrainte de distribution, fouyayah la grosse galère..

    Je ne connais pas les contraintes des « bundles » OSX mais à ta place j'opterais pour une application en ligne de commande qui crée des fenêtres via SFML à la volée sur un thread dédié ; i.e. : la présentation esclave du traitement, plutôt que l'inverse. Je ne trouve pas ça déconnant, d'autant plus qu'il ne semble pas y avoir beaucoup d'interactions avec les fenêtres elle-mêmes, l'essentiel des commandes étant transmis via le terminal.

    Un souci que je vois déjà survenir malheureusement est que les nouvelles fenêtres risquent de voler le focus au terminal au moment de leur création, ce qui obligerait l'utilisateur à cliquer / alt-tabber régulièrement de manière assez pénible.

  6. #6
    Candidat au Club
    Homme Profil pro
    Agriculteur
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    mais à ta place j'opterais pour une application en ligne de commande qui crée des fenêtres via SFML
    Oui c'est comme ça que je me suis lancé... ça me va très bien pour l'instant... et tant pis pour les jolis bundles macos, c'était juste un petit luxe...


    Cependant, rien ne t'empeche d'implémenter toi-meme une seconde fenetre pour t'en servir comme "console".
    Et quand je serai motivé, je me lancerai effectivement dans une "console" perso, réutilisable pour différents programmes... ça doit être... intéressant à coder...


    Merci beaucoup pour vos réponses... !

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Il existe des bibliothèques de gui, basées sur la SFML, et certaines intègrent une console configurable.
    Ca peut être une piste.

    Une console en tant que telle n'est pas un module complexe:
    Un afficheur de texte, une zone de saisie, un bouton validation, et une police monospace
    Le plus complexe, c'est l'interprétation des commandes saisies.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #8
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Hello

    Franchement je comprend le besoin exprimé ici. Pour moi, je ferais un contournement très simple :
    - L'exécutable est censé être lancé dans un terminal.
    - L'application est livrée avec un script qui ouvre un terminal Mac OS et lance l'exécutable dedans.

    Comme ça tu as le beurre et l'argent du beurre : pas besoin de tricks en C++ et tu as le résultat attendu.
    Find me on github

  9. #9
    Candidat au Club
    Homme Profil pro
    Agriculteur
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Agriculteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Yo !


    Alors j'ai vraiment pris en considération toutes vos différentes réponses...

    J'en suis rester surtout à créer ma "console"... simple... juste pour mon programme...

    bon je dois dire aussi qu'en navigant à gauche et à droite sur les autres sites et forums, je ne suis pas le premier à me poser cette question...
    C'est possible que ce soit une question "sans intérêts" que se posent des "nouveaux", enfin bref...

    Je pense du coup que ça peut-être intéressant pour nous autres, novices, d'avoir comme projet de créer cette fameuse console qui tourne avec la sfml...
    Et je propose du coup aux autres débutants, peut-être, de m'aider à venir a bout de se projet...
    (je précise aussi que je suis amateur... ce qui signifie surtout que j'aime vraiment passer du temps à coder, mais que je ne peux pas donner 100% de mon temps...)

    (Bon... si d'autres pros, et sérieux veulent absolument donner leurs aides et avis... bon, on va pas dire non, hein ?!)


    Bon pour commencer, je suis sous macOS, et donc j'utilise Xcode, et donc pas très doué pour le partage et la portabilité de mes codes... (Voilà... c'est une des chose que je n'ai pas encore très bien compris dans la compilation...)


    En attendant voilà à quoi j'en suis... :
    (et que peut-être j'ai tout fais faux jusque là...)


    console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    #include <iostream>
    #include <unistd.h>
    #include <sys/stat.h>
     
     
    #include "ResourcePath.hpp"
     
     
    #include "EntreeSortieFichier.hpp"
    #include "Console.hpp"
     
     
     
     
    void Console::poserUneQuestion( std::string   &question){
     
        question += question + "\n" +invite;
        ajoutDansConsole();
        paroleUtilisateur = 1;
     
    }
     
    void Console::poserUneQuestion(){
     
        texteTotalSTD  += (copieString(hierarchie,  "%" + std::to_string(emplacement)) + invite);
     
        ajoutDansConsole();
        paroleUtilisateur = 1;
     
    }
     
    void Console::ajoutDansConsole(){
     
        int nbreLigne = 0 ;
     
        std::string ligne = "";
        std::string texteAAfficher = texteTotalSTD;
     
        nbreLigne = int(std::count( texteTotalSTD.begin(), texteTotalSTD.end(), '\n'));
     
        //A CHANGER calculer nbre de ligne(s) en fonction de taille police et fenetre...
        if (nbreLigne >= 58 ){
            for (int ct = 0; ct <= nbreLigne-58 ; ct ++){
                texteAAfficher.erase(0, texteAAfficher.find("\n")+1);
            }
        }
     
        texteConsoleAAfficher.setString(sf::String(texteAAfficher) + sf::String(ligneCourrante) + '_');
     
    }
     
    void Console::navigation(){
     
        if(ligneDeReponse.compare("exit") == 0){
            fenetreConsole.close();
        }else{
     
            bool reponseTrouvee = 0;
            bool finTrouvee = 0 ;
            std::string reponsePossible = "";
            std::string action = "";
     
            chercherDansUnFlux(hierarchie, "%" + std::to_string(emplacement));
     
            do{
     
    			hierarchie >> reponsePossible;
                if(reponsePossible.compare(ligneDeReponse) == 0){
     
                    hierarchie >> action;
                    reponseTrouvee = 1;
                    if(action.compare("%quitte") == 0 ){
                        fenetreConsole.close();
                    }else{
    					emplacement = std::stoi(action);
    				}
                }else if(reponsePossible.compare("%std::string") == 0){
     
    				hierarchie >> action;
                    hierarchie >> reponsePossible;
     
    				if(reponsePossible.compare("%fin") != 0){
    					std::string variableAChanger = "";
    					hierarchie >> variableAChanger;
                        std::fstream  preference;
    					preference.open((cheminLibrary + reponsePossible).c_str(),  std::ios::in);
     
    					if(preference.is_open()){
    						std::string mot = "";
    						std::string preferenceIni = "";
    						char caractereLu = '\0';
     
    						do{
    							preference.get(caractereLu);
    							preferenceIni += caractereLu;
     
    							if(caractereLu == '%'){
    								preference >> mot;
    								preferenceIni += mot;
     
    								if(variableAChanger == mot){
    									preference >> mot;
    									preferenceIni += "\t\t" +  ligneDeReponse;
    								}
    							}
     
    						}while(!preference.eof());
     
    						preference.close();
    						preference.open((cheminLibrary + reponsePossible).c_str(),std::ios::out | std::ios::trunc);
    						preference << preferenceIni;
    						preference.close();
    						preference.open((cheminLibrary + reponsePossible).c_str(),std::ios::in);
    						nomUtilisateur = chercherVariableDansUnFlux(preference, "%utilisateur");
    						invite = nomUtilisateur += " :" ;
    						preference.close();
    					}
                    }
     
                    emplacement = std::stoi(action);
                    reponseTrouvee = 1 ;
                    finTrouvee = 1 ;
     
                }else if(reponsePossible.compare("%fin") == 0){
     
                    texteTotalSTD += "\nCeci n'a aucune signification...\nnom d'un chien !!!\n";
                    finTrouvee = 1 ;
                }
     
            }while(reponseTrouvee == 0 && finTrouvee == 0);
     
            if (reponseTrouvee == 0 ){
                paroleUtilisateur = 0 ;
            }
     
        }
     
    }
     
     
     
    void Console::tourDeConsole(sf::Event &evenement){
     
        //Si la touche pressée est entrée
        if (evenement.text.unicode == 10){
     
            paroleUtilisateur = 0;
            ligneDeReponse = ligneCourrante;
            texteTotalSTD += ligneCourrante;
            ligneCourrante = "";
     
            navigation();
            ajoutDansConsole() ;
     
        //Si la touche pressée est retour
        }else if (evenement.text.unicode == 8){
     
            if (!ligneCourrante.empty()){
                ligneCourrante.pop_back();
            }
     
            ajoutDansConsole();
     
        }else {
     
            ligneCourrante += evenement.text.unicode;
            ajoutDansConsole();
     
        }
     
    }
     
     
     
    Console::Console(){
     
        std::string sortieErreurString = std::string(__PRETTY_FUNCTION__) + "\n\tentree dans la console\n";
     
        ressourceMTKConsole = (resourcePath() + "MTKconsole/");
     
        sortieErreurString += "\tutilisateur : " + std::string(getlogin()) + '\n';
        cheminLibrary = "/Users/" + std::string(getlogin()) + "/Library/MTK/" ;
        if(!mkdir(cheminLibrary.c_str(),0777)){
            sortieErreurString += "\tDoit créer : " + cheminLibrary + "\n";
        };
        cheminLibrary = "/Users/" + std::string(getlogin()) + "/Library/MTK/jardin/" ;
        if(!mkdir(cheminLibrary.c_str(),0777)){
            sortieErreurString += "\tDoit créer : " + cheminLibrary + "\n";
        };
     
        sortieErreur.open((cheminLibrary + ".err").c_str(), std::ios::out | std::ios::trunc);
        sortieErreur << sortieErreurString;
     
        std::string nomDuTexte;
     
        hierarchie.open((ressourceMTKConsole + "MenuConsole.hie").c_str(),std::ios::in);
        if(!hierarchie){
            sortieErreur << "\t impossible d'ouvrire : " + ressourceMTKConsole + "MenuConsole.hie\n" ;
        }
     
        std::fstream preference(cheminLibrary + "preference.def", std::ios::in);
     
        if(!preference){
            sortieErreur << "\t impossible d'ouvrire : " + cheminLibrary + "preference.def\n\talors essaie de le créer\n" ;
            preference.close();
     
            preference.open(cheminLibrary + "preference.def"  , std::ios::out | std::ios::trunc);
            std::fstream preferenceIni((ressourceMTKConsole + "preference.def" ).c_str(), std::ios::in );
            std::string ligne;
     
            if(preferenceIni){
                do{
                    std::getline(preferenceIni, ligne);
                    preference << (ligne + "\n");
                }while(preferenceIni.eof()==0);
                preferenceIni.close();
            }else{
                sortieErreur << "\t impossible d'ouvrire : " + ressourceMTKConsole + "preference.def\n" ;
            }
            sortieErreur << "\t" << ressourceMTKConsole << "preference.def copié dans " << cheminLibrary << "preference.def\n";
     
            preference.close();
     
        }
        if(preference){
            preference.close();
        }
     
        preference.open(cheminLibrary + "preference.def", std::ios::in);
     
        nomUtilisateur = chercherVariableDansUnFlux(preference, "%utilisateur");
        if(nomUtilisateur.compare("deffaut")==0){
            nomUtilisateur = getlogin();
        }
        invite = nomUtilisateur += " :" ;
     
        texteConsoleAAfficher.setCharacterSize(std::stoi(chercherVariableDansUnFlux(preference, "%taillePolice")));
     
        texteTotalSTD =  copieString(hierarchie, "%ouverture");
     
        fenetreConsole.create(sf::VideoMode(1000,2000), L"Nouvelle Fenêtre");
        fenetreConsole.setTitle(L"Consôle");
     
        std::string cheminPolice = ressourceMTKConsole + "LiberationMono-Regular.ttf";
        if (!police.loadFromFile(cheminPolice)){
            sortieErreur << "\tImpossible de trouver la police demandée : " << ressourceMTKConsole << "LiberationMono-Regular.ttf\n";
        }
     
        texteConsoleAAfficher.setString(texteTotalSTD);
        texteConsoleAAfficher.setFont(police);
        texteConsoleAAfficher.setFillColor(sf::Color::White);
     
    }
    entreeSortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    #include <iostream>
    #include <fstream>
     
    #include "EntreeSortieFichier.hpp"
     
    //cherche un mot dans un flux et y laisse le "curseur"
    bool chercherDansUnFlux(std::fstream &fichier, const std::string &texteAChercher){
     
        bool ligneTrouvee = 0;
        std::string mot = "";
        fichier.seekg( 0, std::ios_base::beg );
     
        do{
            fichier >> mot;
            if(mot == texteAChercher){
                ligneTrouvee = 1;
            }
     
        }while(ligneTrouvee == 0 && !fichier.eof());
     
        if(ligneTrouvee == 0){
            return 0;
        }else{
            return 1;
        }
    }
     
     
    std::string chercherVariableDansUnFlux(std::fstream &fichier, const std::string &texteAChercher){
     
        bool ligneTrouvee = 0;
        std::string mot = "";
        fichier.seekg( 0, std::ios_base::beg );
     
        do{
     
            fichier >> mot;
     
            if(mot == texteAChercher){
                ligneTrouvee = 1;
                fichier >> mot;
            }
     
        }while(ligneTrouvee == 0 && !fichier.eof());
     
        if(ligneTrouvee == 0){
            return "\0";
        }
     
        mot.erase(std::remove(mot.begin(),mot.end(),'\"'),mot.end());
     
        return mot;
    }
     
     
    std::string copieString(std::fstream &fichier){
     
        char caractereLu = '\0';
        std::string textePourConsole = "";
        int nombreGuillemet = 0;
     
        do{
     
            fichier.get(caractereLu);
     
            if(caractereLu != '\"'){
                textePourConsole += caractereLu;
            }else{
                nombreGuillemet++;
            }
     
        }while(nombreGuillemet < 2 && !fichier.eof());
     
        return textePourConsole;
     
    }
     
     
     
    std::string copieString(std::fstream &fichier, const std::string &texteAChercher){
     
        chercherDansUnFlux(fichier, chercherVariableDansUnFlux(fichier, texteAChercher));
     
        char caractereLu = '\0';
        std::string textePourConsole = "";
        int nombreGuillemet = 0;
     
        do{
     
            fichier.get(caractereLu);
     
            if(caractereLu != '\"'){
                textePourConsole += caractereLu;
            }else{
                nombreGuillemet++;
            }
     
        }while(nombreGuillemet < 2 && !fichier.eof());
     
        return textePourConsole;
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WS 2008 R2] Terminal Server sous Windows 2008R2 Enterprise et MacOs X
    Par Damzz dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 17/05/2011, 15h53
  2. [X11] Bundle MacOS utilisant X11
    Par Invité dans le forum Développement OS X
    Réponses: 9
    Dernier message: 21/04/2007, 12h41
  3. [TTHREAD] ne termine pas sont exécution
    Par Bbenj dans le forum Langage
    Réponses: 4
    Dernier message: 02/08/2002, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo