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 :

include de fichier "aléatoire"


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut include de fichier "aléatoire"
    Bonjour,

    Je débute en programmation C (mes connaissances se limitent au PHP) et cherche depuis plusieurs jours le moyen d'inclure au milieu d'un script un fichier .c provenant d'une variable.

    Je m'explique un peu mieux, enfaite dans le cadre de la réalisation d'un site web en C je cherche à inclure (de la même manière qu'avec un ob_start/include en PHP) un fichier .c contenant des variables qui dépendra de la valeur entré par le visiteur.

    En gros si la variable "page" = dev.c alors le script devra aller lire et interpréter les données + variables présente dans le fichier "dev.c"... le problème avec fgets et qu'il se contente de lire les textes donc si par exemple dev.c contient "printf("bidule");" alors fgets affichera "printf("bidule");" alors que je voudrais qu'il affiche "bidule" !

    Je sais pas si mon exemple est compréhensible et si ma question est débile mais j'aimerais avoir votre point de vue sur mon soucis et si possible une solution ?!

    Merci d'avance !

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    Il n'existe pas de concept de "script C".
    Le C est compilé, et l'inclusion revient à un brutal copié collé du fichier inclu à la place de la directive d'inclusion.

    Pour faire ce que tu souhaites (inclure un fichier à la volée, si j'ai bien compris) il faut au choix:
    compiler à la volée le programme et l'exécuter.
    créer/utiliser un interpréteur C

    Dans les deux cas, je ne vois pas l'intérêt réel, un fichier de conf (au format maison ou pas) permet de faire le même genre de chose.

    As-tu un cas d'usage plus complet?
    Parce qu'il me semble que le code lu sera sur le serveur, alors que les saisie de l'utilisateur sont chez le client.
    Client qui n'a pas à connaitre le contenu du serveur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    Et bien enfaite il s'agit d'inclure un fichier suivant la variable GET passé dans l'url.

    Donc si l'adresse est www.exemple.com/index.c?page=dev.c alors c'est le fichier dev.c contenant des variables qui devra être interprété et affiché alors que si l'adresse entré par le client est www.exemple.com/index.c?page=autre.c alors c'est autre.c qui devra être interprété et affiché !
    Voila pourquoi je ne peux pas me contenter de faire un #include au début du fichier index.c puisque la variable GET (page) est amené à être modifié.

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par kry77 Voir le message
    si l'adresse est www.exemple.com/index.c?page=dev.c alors c'est le fichier dev.c contenant des variables qui devra être interprété et affiché
    Lire le fichier dev.c : aucun soucis, c'est faisable en C
    Interpreter le contenu du fichier : ca depend de ce que tu appelles interpreter. Par exemple, si dev.c contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    valeur1 : toto
    valeur2 : titi
    il est possible de se retrouver avec des variables contenant "valeur1", "valeur2", "toto", "titi"

    Mais si le fichier contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int fonction (void)
    {
      printf ("coucou");
    }
    et que tu veux executer cette fonction, c'est possible mais beaucoup beaucoup plus complique (il faut appeler un compilateur et executer le programme compile). [1]

    [1] Edit :
    Non, en fait, c'est meme encore plus complexe que ca si le fichier dev.c ne contient pas de main, mais bon, attendons ta reponse pour voir ce que tu veux faire.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    Et bien tant que le fichier dev.c peut être "interprété" et affiché ça ne m'importe pas vraiment qu'il contienne un main ou non enfaite.

    En gros mon fichier index.c sera censé contenir les balises HTML de début et de fin (<html>, <head>) alors que le fichier dev.c sera censé contenir le contenu de la page (ex: balise <body>) donc forcément dev.c contiendra des variables qui devront correspondre au valeurs attribué dans index.c

    Exemple (en utilisant xbuf):

    Index.c ou GET page = dev.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    char pseudo[] = "testpseudo";
     
    xbuf_cat(get_reply(argv), // Affiche le début de la page
            "<!DOCTYPE html>"
            "<head></head><body>");
     
    <-- Inclusion du contenu de la page dev.c
     
    xbuf_cat(get_reply(argv), // Affiche la fin de la page
            "</body></html>");
    Donc si dev.c contient dans sont main (c'est possible ?) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xbuf_xcat(get_reply(argv),"<div>Bonjour, %d !<div>", pseudo);
    Alors au final le code source HTML de la page sera :

    <!DOCTYPE html>
    <head></head><body>
    <div>Bonjour, testpseudo !<div>
    </body></html>

    Vous voyez ou je veux en venir ?!
    Merci encore !

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Dans ce cas là, pourquoi ne pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include "contenu.h"
     
    void printDebut(void);
    void printFin(void);
     
    int main(void)
    {
         printDebut();
         printContenu();
         printFin();
         return 0;
    }
    contenu.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void printContenu(void);
    contenu.c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "contenu.h"
     
    void printContenu()
    {
              //affichage du contenu de la page.
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    Le problème avec ce que tu propose (si j'ai bien compris) c'est que printContenu(); ne contiendra toujours que le contenu présent dans "contenu.c" alors que moi je souhaite pouvoir ajouter le contenu présent dans "dev.c" ou "autre.c" etc etc...

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    => Dans le cas où les pages sont fixée au début
    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
     
    #include "allFiles.h"
     
    #include "contenu.h"
     
    void printContenu()
    {
             switch(idPage)
             {
                       case 1 :
                       printContenuPage1();
                       break;
                       default :
                       printPageNotFound();
                       break;
              }
    }
    => Dans le cas où les pages pourront être crée par un utilisateur.
    Ou alors tu peux avoir des fichiers contenant le textes et tu n'auras qu'à charger le fichier.
    Tu peux même déterminer un caractère spécial ex : @
    pour écrire '@' il faudra mettre '@@'
    Tu pourra avoir des variables :
    @nomVar : valeur;
    Faire des if/else :
    @if (Condition) @else @endIf
    Et tout le reste sera affiché.
    Après il faut juste que tu écrive un code capable d'interpréter ceci.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    Donc en gros tu propose de précéder dans le fichier importé les variables par un @ afin de pouvoir par la suite les traiter ? J'y avais aussi pensé mais le problème c'est que ça me parait "lourd" comme solution dans le sens ou chaque pages importé ne comporte pas forcément le même nombres de variables donc ça allonge encore plus le délai d'affichage d'avoir à faire ce genre de traitement non ?

    N'est il pas possible de faire un #include d'une variable au milieu du main ou quelque chose de similaire ?

    Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main(void)
    {
         printDebut();
         #include "dev.h"
         printFin();
         return 0;
    }
    Ou dev.h contiendrait la fonction contenant le contenu !?

  10. #10
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par kry77 Voir le message
    Donc en gros tu propose de précéder dans le fichier importé les variables par un @ afin de pouvoir par la suite les traiter ? J'y avais aussi pensé mais le problème c'est que ça me parait "lourd" comme solution dans le sens ou chaque pages importé ne comporte pas forcément le même nombres de variables donc ça allonge encore plus le délai d'affichage d'avoir à faire ce genre de traitement non ?
    ça rallonge le délai de traitement mais c'est super rapide. Peut être même plus rapide que d’interpréter du php ou autre vu qu'il y aura peut d'instructions.

    Citation Envoyé par kry77 Voir le message
    N'est il pas possible de faire un #include d'une variable au milieu du main ou quelque chose de similaire ?
    C'est vraiment pas propre.


    Si tes fichiers sont créé par l'administrateur et non par les utilisateurs cette solution est tout à fait adaptée :
    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
     
    #include "allFiles.h"
     
    #include "contenu.h"
     
    void printContenu()
    {
             switch(idPage)
             {
                       case 1 :
                       printContenuPage1();
                       break;
                       default :
                       printPageNotFound();
                       break;
              }
    }
    Ou encore plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "allFiles.h"
     
    #include "contenu.h"
     
    void printContenu()
    {
             if(idPage>MAX)
                       function[MAX]();
             else
                        function[idPage]();
    }
    // allFiles.h /!\ à inclure une seul et unique fois sinon il faudra utiliser aussi un .c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "page1.h"
    #include "page2.h"
    ....
     
    typedef void (Function *)(void);
     
    Function[] = {&fct1, &fct2, &fct3, &fct4, &fct5};
     
    #define MAX 5
    //OU
    enum{PAGE1, PAGE_ACCUEIL, PAGE_LOGIN, PAGE_MACHIN, PAGE_DECO, MAX};
    Page1.h :
    Il faut que tu nous explique exactement ce que tu cherches à faire.

  11. #11
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    Visiblement, je passe complètement à coté de quelque chose.

    Chez moi, le C est un langage compilé vers du binaire qui est exécuté.
    Je ne connais aucun environnement permettant un serveur web dont le retour est "de l'interprétation de C" vers html.

    Pourrait-on m'informer des technologies utilisées? J'aimerai en apprendre sur le sujet.

  12. #12
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je pense qu'il essaye de mettre en place des fichier CGI.

    Mais il ne pourra pas "interpréter du C".
    Le problème c'est qu'on ne comprend pas exactement ce qu'il veut.
    A-t-il vraiment besoin d'interpréter ?

    Ne peut-il pas utiliser des fichiers de configuration ou une BDD ?

    S'il a vraiment besoin d'interpréter, il peut s'inventer un petit langage simple correspondant à ses besoins.

  13. #13
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    je trouve déjà étrange de vouloir faire un site en C, à fortiori en connaissant le php, mais soit.
    Qu'en plus tu veuilles faire du scripting, ça me parait de plus en plus étrange.

    Par contre, pourquoi ne pas utiliser un vrai langage de script à ce moment-là ? LUA par exemple, possède toute une API en C et permettra de faire tout cela. il existe Python également mais je ne l'ai jamais utilisé en C.
    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.

  14. #14
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 495
    Billets dans le blog
    1
    Par défaut
    Un membre du forum (Aquanum) a fait un générateur de site web statique en C : https://github.com/yoannsculo
    Ton cas semble être différent puisque tu veux faire du dynamique, mais il y a peut-être là-bas des idées intéressantes.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    Oky Neckara, les fichiers sont effectivement crée uniquement par l'administrateur. Je pense de plus en plus être obligé de passer par la solution que tu propose ! Mais n'est t'il pas possible de recréer une fonction en se basant sur le fonctionnement de #include ? Car sur la pratique, cette fonction fonctionne...

    Ou alors de créer une sorte de if/else en tout début de page faisant un #include du fichier .h correspondant à la page spécifié dans la variable GET ?

    Sinon le serveur web utilisé est gwan, voilà pourquoi j'utilise du C !

    Pour ceux connaissant le PHP, voilà ce que je cherche à transformer en quelque chose de "similaire" en C !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        ob_start();
        require SYSTEMROOT.'.$_GET['page'].'; 
        $content = ob_get_contents();
        ob_end_clean();
        // Enveloppe graphique.
        require SYSTEMROOT.'template.php'; // page contenant le haut, et la fin de age + la variable $content

  16. #16
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par kry77 Voir le message
    Mais n'est t'il pas possible de recréer une fonction en se basant sur le fonctionnement de #include ?
    Il suffit juste de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int maVariableGet = ...;
    function[maVariableGet](data);
    Où data est un pointeur sur une structure contenant toutes les informations nécessaires.

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    Qu'entend tu par "structure contenant toutes les informations nécessaires" ? Je suis finalement pas certain de comprendre l’intérêt d'un tel procédé dans mon cas ?

    La solution consistant à utiliser des conditions if/else en début de page afin d'inclure uniquement le .h de la page spécifié dans la variable GET n'est elle pas possible ?

    Merci encore de votre aide, j'y vois déjà un peu plus clair !

  18. #18
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par kry77 Voir le message
    Qu'entend tu par "structure contenant toutes les informations nécessaires" ?
    ça dépend ce que tu veux faire.
    Si ta fonction doit modifier les variables x et y pour qu'ils soient réutilisée dans le main pour afficher le bas de page par exemple, la structure contiendra alors un pointeur sur x et un pointeur sur y.

    Citation Envoyé par kry77 Voir le message
    La solution consistant à utiliser des conditions if/else en début de page afin d'inclure uniquement le .h de la page spécifié dans la variable GET n'est elle pas possible ?
    Non, ce n'est pas possible, les includes sont des directives du préprocesseur qui sont interprétée lors de la compilation. Elles n'existent plus lors de l'interprétation.
    Avec ma méthode, en fonction de la variable reçue tu pourras appeler la bonne fonction qui :
    - pourra modifier les paramètres contenus dans data.
    - afficher du texte.
    - appeler d'autres fonctions.
    - se connecter à une base de données ou ouvrir un fichier textes si jamais tu as quelques paramètres qui seront variables.

    Je ne penses pas que tu ai besoin d'autre choses.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    Oky donc si je comprend bien, avec cette méthode le contenu de mes différentes pages devra être présent dans le/la même fichier/fonction. Ce qui me dérange avec cette solution c'est que le fichier risque de devenir très long vue le nombre de lignes présentes sur chaque contenu correspondant a mes différentes pages non ?!

  20. #20
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Si tu ne comprend pas quelque chose, dis-le tout de suite.
    J'ai toutes les raisons de croire que tu n'as pas compris mont code d'il y a 4 posts.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef void (Function *)(void); //défini le type Function qui est un pointeur sur une fonction de prototype void nomFonction(void);
     
    Function toto[] = {&fct1, &fct2, &fct3, &fct4, &fct5};
    //la variable toto est un tableau de Function
    //{&fct1, &fct2, &fct3, &fct4, &fct5} => on rempli le tableau de pointeur de fonction.
     
    toto[0](); //on appel la première fonction du tableau de pointeur de fonctions.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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