begin process at 2012 05 27 17:53:26
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > PROG QUI CALCULE LE NB DE LIGNE D'UN CODE(AVEC COMMENTAIRES,LIGNES VIDES, TOTAL, TAILLE..)

PROG QUI CALCULE LE NB DE LIGNE D'UN CODE(AVEC COMMENTAIRES,LIGNES VIDES, TOTAL, TAILLE..)


 Information sur la source

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Niveau :Débutant Date de création :14/03/2004 Vu :3 957

Auteur : skinia

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

traite un code source .C, .C++, .H et donne un copte rendu
avec le nb de lignes total, sans commentaires, le nb de lignes de commentaires,
le nb de lignes vides, le nb de lignes de code pur et la taille du fichier en octets.

Source

  • /*
  • Name: NB_LIGNE_SANS_COMMENT
  • Copyright:
  • Author: $kinia
  • Date: 14/03/04 19:33
  • Description:
  • un ptit prog qui traite un ou plusieurs codes sources C ou C++
  • et qui rend dans un fichier texte le nb ligne :
  • * au total
  • * de code pur
  • * de commentaires
  • * vides
  • et la taille totale du fichier
  • compile avec Dev-C++ 4.9.7.0
  • */
  • #include <fstream.h>
  • #include <string.h>
  • #include <stdlib.h>
  • #define taille_nom 50
  • /******************************************************************/
  • // LES VARIABLES
  • /******************************************************************/
  • fstream f_source;
  • fstream f_journal;
  • char nom_source[taille_nom];
  • char char_courant;
  • int nb_ligne;
  • int nb_ligne_comment;
  • int nb_ligne_vide;
  • int nb_char;
  • int nb_ligne_total;
  • int nb_ligne_comment_total;
  • int nb_ligne_vide_total;
  • int nb_char_total;
  • /******************************************************************/
  • // LES DECLARATIONS DES FONCTIONS DU PROGRAMME
  • /******************************************************************/
  • void traitement(char nom[]);
  • bool verifie_nom(char nom[]);
  • void lit_chaine_char();
  • void lit_char();
  • void lit_comment_long();
  • void lit_comment_court();
  • void lit_vide();
  • /******************************************************************/
  • // LES FONCTIONS DU PROGRAMME
  • /******************************************************************/
  • void traitement(char nom[])
  • {
  • f_source.open(nom,ios::in);
  • if(!f_source.good()){
  • cerr<<"\n\nImpossible d'ouvrir le fichier "<<nom_source<<endl;
  • system("pause");
  • }
  • else{
  • while(!f_source.eof()){
  • f_source.get(char_courant);
  • if(char_courant=='"')
  • lit_chaine_char();
  • else if(char_courant=='\'')
  • lit_char();
  • else if(char_courant=='/'){
  • f_source.get(char_courant);
  • if(char_courant=='*')
  • lit_comment_long();
  • else if(char_courant=='/')
  • lit_comment_court();
  • }
  • if(char_courant=='\n' || char_courant==10)
  • nb_ligne++;
  • }
  • f_source.close();
  • f_source.open(nom,ios::in);
  • lit_vide();
  • nb_ligne--;
  • nb_ligne_vide--;
  • nb_char--;
  • }
  • f_source.close();
  • }
  • bool verifie_nom(char nom[])
  • {
  • int nb=strlen(nom);
  • if(nom[nb-1]=='p' && nom[nb-2]=='p' && nom[nb-3]=='c' && nom[nb-4]=='.')
  • return true;
  • if(nom[nb-1]=='+' && nom[nb-2]=='+' && nom[nb-3]=='c' && nom[nb-4]=='.')
  • return true;
  • else if(nom[nb-1]=='c' && nom[nb-2]=='.')
  • return true;
  • else if(nom[nb-1]=='h' && nom[nb-2]=='.')
  • return true;
  • return false;
  • }
  • void lit_chaine_char()
  • {
  • bool fin=false;
  • while(!fin){
  • f_source.get(char_courant);
  • if(char_courant=='\\')
  • f_source.get(char_courant);
  • else if(char_courant=='"')
  • fin=true;
  • }
  • f_source.get(char_courant);
  • }
  • void lit_char()
  • {
  • f_source.get(char_courant);
  • if(char_courant=='\\')
  • f_source.get(char_courant);
  • f_source.get(char_courant);
  • }
  • void lit_comment_long()
  • {
  • bool fin=false;
  • while(!fin){
  • f_source.get(char_courant);
  • if(char_courant=='\n' || char_courant==10){
  • nb_ligne++;
  • nb_ligne_comment++;
  • }
  • else while(char_courant=='*'){
  • f_source.get(char_courant);
  • if(char_courant=='/')
  • fin=true;
  • }
  • }
  • nb_ligne_comment++;
  • f_source.get(char_courant);
  • }
  • void lit_comment_court()
  • {
  • bool fin=false;
  • while(!fin){
  • f_source.get(char_courant);
  • if(char_courant=='\n' || char_courant==10)
  • fin=true;
  • }
  • nb_ligne_comment++;
  • }
  • void lit_vide()
  • {
  • bool fin;
  • bool vide;
  • while(!f_source.eof()){
  • fin=false;
  • vide=true;
  • while(!fin){
  • f_source.get(char_courant);
  • nb_char++;
  • if(char_courant!='\t' && char_courant!=' '){
  • if(char_courant=='\n')
  • fin=true;
  • else
  • vide=false;
  • }
  • }
  • if(vide) nb_ligne_vide++;
  • }
  • }
  • /******************************************************************/
  • // LA FONCTION PRINCIPALE
  • /******************************************************************/
  • int main()
  • {
  • char **nom_source;
  • int nb_source;
  • nb_ligne_total=0;
  • nb_ligne_comment_total=0;
  • cout<<"\t\t --- NB_LIGNE_SANS_COMMENT by $kinia --- \n\n\n\n"<<endl;
  • cout<<"Ce programme donne dans un fichier journal.txt le nb de ligne"<<endl;
  • cout<<"de votre fichier source sans les commentaires dans un langage C ou C++.\n"<<endl;
  • cout<<"NOTE: Ne marche que si le code source est compilable et si les commentaires"<<endl;
  • cout<<"sont bien utilises.\n\n\n"<<endl;
  • cout<<"Donnez le nb de codes sources a calculer: ";
  • cin>>nb_source;
  • nom_source=new char*[nb_source];
  • for(int i=0;i<nb_source;i++)
  • nom_source[i]=new char[taille_nom];
  • f_journal.open("journal.txt",ios::out);
  • f_journal<<"\t\t --- NB_LIGNE_SANS_COMMENT by $kinia --- \n\n\n\n";
  • for(int i=0;i<nb_source;i++){
  • nb_ligne=0;
  • nb_ligne_comment=0;
  • nb_ligne_vide=0;
  • nb_char=0;
  • cout<<"Donnez le fichier source (*.c | *.cpp | *.c++ | *.h): ";
  • cin>>nom_source[i];
  • if(!verifie_nom(nom_source[i])){
  • cerr<<"\n\n(*.c | *.cpp | *.c++ | *.h) seulement!"<<endl;
  • system("pause");
  • }
  • else{
  • traitement(nom_source[i]);
  • }
  • nb_ligne_total+=nb_ligne;
  • nb_ligne_comment_total+=nb_ligne_comment;
  • nb_ligne_vide_total+=nb_ligne_vide;
  • nb_char_total+=nb_char;
  • f_journal<<"------------------------------------------------------------\n";
  • f_journal<<"Nom du code source: "<<nom_source[i]<<endl;
  • f_journal<<"Nb de ligne au total: "<<nb_ligne<<endl;
  • f_journal<<"Nb de lignes de code pur: "<<nb_ligne-nb_ligne_comment-nb_ligne_vide<<endl;
  • f_journal<<"Nb de lignes des commentaires: "<<nb_ligne_comment<<endl;
  • f_journal<<"Nb de lignes vides: "<<nb_ligne_vide<<endl;
  • f_journal<<"Taille totale du fichier: "<<nb_char<<endl;
  • f_journal<<"------------------------------------------------------------\n";
  • }
  • if(nb_source>1){
  • f_journal<<"\n###########################################################\n"<<endl;
  • f_journal<<"------------------------------------------------------------\n";
  • f_journal<<"Nom du code source: TOUS"<<endl;
  • f_journal<<"Nb de ligne au total: "<<nb_ligne_total<<endl;
  • f_journal<<"Nb de lignes de code pur: "<<nb_ligne_total-nb_ligne_comment_total-nb_ligne_vide_total<<endl;
  • f_journal<<"Nb de lignes des commentaires: "<<nb_ligne_comment_total<<endl;
  • f_journal<<"Nb de lignes vides: "<<nb_ligne_vide_total<<endl;
  • f_journal<<"Taille totale du fichier: "<<nb_char_total<<endl;
  • f_journal<<"------------------------------------------------------------\n"<<endl;
  • }
  • f_journal<<"\n\n\nProgramme fait par : $kinia en 2004"<<endl;
  • f_journal<<"Compilateur : Dev-C++ 4.9.7.0"<<endl;
  • f_journal<<"Mail : cbwinny@yahoo.fr"<<endl;
  • f_journal.close();
  • }
/*
  Name: NB_LIGNE_SANS_COMMENT
  Copyright: 
  Author: $kinia
  Date: 14/03/04 19:33
  Description:

        un ptit prog qui traite un ou plusieurs codes sources C ou C++
        et qui rend dans un fichier texte le nb ligne :
            * au total
            * de code pur
            * de commentaires
            * vides
        et la taille totale du fichier
               
        compile avec Dev-C++ 4.9.7.0
*/





#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#define taille_nom 50

/******************************************************************/
//      LES VARIABLES
/******************************************************************/
fstream f_source;
fstream f_journal;
char nom_source[taille_nom];
char char_courant;
int nb_ligne;
int nb_ligne_comment;
int nb_ligne_vide;
int nb_char;
int nb_ligne_total;
int nb_ligne_comment_total;
int nb_ligne_vide_total;
int nb_char_total;

/******************************************************************/
//      LES DECLARATIONS DES FONCTIONS DU PROGRAMME
/******************************************************************/
void traitement(char nom[]);
bool verifie_nom(char nom[]);
void lit_chaine_char();
void lit_char();
void lit_comment_long();
void lit_comment_court();
void lit_vide();

/******************************************************************/
//      LES FONCTIONS DU PROGRAMME
/******************************************************************/
void traitement(char nom[])
{
    f_source.open(nom,ios::in);
    if(!f_source.good()){
        cerr<<"\n\nImpossible d'ouvrir le fichier "<<nom_source<<endl;
        system("pause");
    }
    else{
        while(!f_source.eof()){
            f_source.get(char_courant);
                
            if(char_courant=='"')
                lit_chaine_char();
                    
            else if(char_courant=='\'')
                lit_char();
                    
            else if(char_courant=='/'){
                f_source.get(char_courant);
                if(char_courant=='*')
                    lit_comment_long();
                else if(char_courant=='/')
                    lit_comment_court();
            }
                    
            if(char_courant=='\n' || char_courant==10)
                nb_ligne++;
        }
        f_source.close();
        f_source.open(nom,ios::in);
        lit_vide();
        nb_ligne--;
        nb_ligne_vide--;
        nb_char--;
    }
    f_source.close();
}

bool verifie_nom(char nom[])
{
    int nb=strlen(nom);
    if(nom[nb-1]=='p' && nom[nb-2]=='p' && nom[nb-3]=='c' && nom[nb-4]=='.')
        return true;
    if(nom[nb-1]=='+' && nom[nb-2]=='+' && nom[nb-3]=='c' && nom[nb-4]=='.')
        return true;
    else if(nom[nb-1]=='c' && nom[nb-2]=='.')
        return true;
    else if(nom[nb-1]=='h' && nom[nb-2]=='.')
        return true;
    return false;
}

void lit_chaine_char()
{
    bool fin=false;
    while(!fin){
        f_source.get(char_courant);
        if(char_courant=='\\')
            f_source.get(char_courant);
        else if(char_courant=='"')
            fin=true;
    }
    f_source.get(char_courant);
}

void lit_char()
{
    f_source.get(char_courant);
    if(char_courant=='\\')
        f_source.get(char_courant);
    f_source.get(char_courant);
}

void lit_comment_long()
{
    bool fin=false;
    while(!fin){
        f_source.get(char_courant);
        if(char_courant=='\n' || char_courant==10){
            nb_ligne++;
            nb_ligne_comment++;
        }
            
        else while(char_courant=='*'){
            f_source.get(char_courant);
            if(char_courant=='/')
                fin=true;
        }
    }
    nb_ligne_comment++;
    f_source.get(char_courant);
}

void lit_comment_court()
{
    bool fin=false;
    while(!fin){
        f_source.get(char_courant);
        if(char_courant=='\n' || char_courant==10)
            fin=true;
    }
    nb_ligne_comment++;
}

void lit_vide()
{
    bool fin;
    bool vide;
    while(!f_source.eof()){
        fin=false;
        vide=true;
        while(!fin){
            f_source.get(char_courant);
            nb_char++;
            if(char_courant!='\t' && char_courant!=' '){
                if(char_courant=='\n')
                    fin=true;
                else
                    vide=false;
            }
        }
        if(vide) nb_ligne_vide++;
    }
}

/******************************************************************/
//      LA FONCTION PRINCIPALE
/******************************************************************/
int main()
{
    char **nom_source;
    int nb_source;
    nb_ligne_total=0;
    nb_ligne_comment_total=0;

    cout<<"\t\t --- NB_LIGNE_SANS_COMMENT by $kinia --- \n\n\n\n"<<endl;
    cout<<"Ce programme donne dans un fichier journal.txt le nb de ligne"<<endl;
    cout<<"de votre fichier source sans les commentaires dans un langage C ou C++.\n"<<endl;
    cout<<"NOTE: Ne marche que si le code source est compilable et si les commentaires"<<endl;
    cout<<"sont bien utilises.\n\n\n"<<endl;
    
    cout<<"Donnez le nb de codes sources a calculer: ";
    cin>>nb_source;
    nom_source=new char*[nb_source];
    for(int i=0;i<nb_source;i++)
        nom_source[i]=new char[taille_nom];
    
    f_journal.open("journal.txt",ios::out);
    f_journal<<"\t\t --- NB_LIGNE_SANS_COMMENT by $kinia --- \n\n\n\n";
    for(int i=0;i<nb_source;i++){
        nb_ligne=0;
        nb_ligne_comment=0;
        nb_ligne_vide=0;
        nb_char=0;
        cout<<"Donnez le fichier source (*.c | *.cpp | *.c++ | *.h): ";
        cin>>nom_source[i];
    
        if(!verifie_nom(nom_source[i])){
            cerr<<"\n\n(*.c | *.cpp | *.c++ | *.h) seulement!"<<endl;
            system("pause");
        }
        else{
            traitement(nom_source[i]);
        }
        
        nb_ligne_total+=nb_ligne;
        nb_ligne_comment_total+=nb_ligne_comment;
        nb_ligne_vide_total+=nb_ligne_vide;
        nb_char_total+=nb_char;
        f_journal<<"------------------------------------------------------------\n";
        f_journal<<"Nom du code source:                   "<<nom_source[i]<<endl;
        f_journal<<"Nb de ligne au total:                 "<<nb_ligne<<endl;
        f_journal<<"Nb de lignes de code pur:             "<<nb_ligne-nb_ligne_comment-nb_ligne_vide<<endl;
        f_journal<<"Nb de lignes des commentaires:        "<<nb_ligne_comment<<endl;
        f_journal<<"Nb de lignes vides:                   "<<nb_ligne_vide<<endl;
        f_journal<<"Taille totale du fichier:             "<<nb_char<<endl;
        f_journal<<"------------------------------------------------------------\n";
    }
    if(nb_source>1){
        f_journal<<"\n###########################################################\n"<<endl;
        f_journal<<"------------------------------------------------------------\n";
        f_journal<<"Nom du code source:                   TOUS"<<endl;
        f_journal<<"Nb de ligne au total:                 "<<nb_ligne_total<<endl;
        f_journal<<"Nb de lignes de code pur:             "<<nb_ligne_total-nb_ligne_comment_total-nb_ligne_vide_total<<endl;
        f_journal<<"Nb de lignes des commentaires:        "<<nb_ligne_comment_total<<endl;
        f_journal<<"Nb de lignes vides:                   "<<nb_ligne_vide_total<<endl;
        f_journal<<"Taille totale du fichier:             "<<nb_char_total<<endl;
        f_journal<<"------------------------------------------------------------\n"<<endl;
    }
    
    f_journal<<"\n\n\nProgramme fait par : $kinia en 2004"<<endl;
    f_journal<<"Compilateur : Dev-C++ 4.9.7.0"<<endl;
    f_journal<<"Mail : cbwinny@yahoo.fr"<<endl;
    
    f_journal.close();
}

 Conclusion

je sais que certains compilo le font mais je le savais pas avant de le faire


 Sources du même auteur

Source avec Zip SHOOT 2D POLITIQUE : LA REVANCHE DE L.J
Source avec Zip Source avec une capture CASSE BRIQUE SOUS DEV CPP (POUR PASSER LE TEMPS PENDANT MON ...
Source avec Zip Source avec une capture PUISSANCE 4 GRAPHIQUE EN MODE DOS AVEC IA IMBATTABLE
Source avec Zip Source avec une capture SUPER MASTERMIND EN MODE GRAPHIQUE
Source avec Zip Source avec une capture UN SNAKE AVEC PRESQUE PAS DE BUGS

 Sources de la même categorie

COMPTER LE NOMBRE DE PAGES D'UN FICHIER PDF par Renfield
Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture GETIONNAIRE D'UNE BIBLIOTHÉQUE EN C par benzarabel
FONCTION D'ÉDITION DE FICHIER BIT À BIT [C-MULTIPLATEFORME] par lynxtyle
Source avec Zip Source avec une capture UN GESTIONNAIRE DU FICHIER par benzarabel

Commentaires et avis

Commentaire de xterminhate le 15/03/2004 07:04:29

Bonjour,

   Je comptais justement me faire ce type d'outil alors tu tombes bien. Cela dit, j'ai ajouté en include la librairie &lt;iostream.h&gt; sinon la compile ne passait pas sous MinGW32.

   D'autre part, il y a un petit soucis au niveau du journal :

------------------------------------------------------------
Nom du code source:           C:\Dev\-------\****.cpp
Nb de ligne au total:         814
Nb de lignes de code pur:       432
Nb de lignes des commentaires:    383
Nb de lignes vides:           -1
Taille totale du fichier:       -1
------------------------------------------------------------

   Pourrais tu faire les corrections afin de terminer ton programme, parce qu'il m'interesse.

   Enfin, il serait peut etre interessant de trouver un moyen d'automatiser ton outil : par exemple saisir le nom de la liste des fichier à partir d'un fichier txt plutot qu'à partir de la console.

Cordialement,
   xter.

Commentaire de Kirua le 15/03/2004 07:51:33

Salut!

je trouve que c'est une bonne idée ton truc, j'ai une suggestion: utilise les structures. tu utilises énormément de variables globales, c'est déconseillé. Je te propose de mettre la déclaration de la structure Nb_Lignes_Struct par exemple ds un .h avec la déclaration de la fonction:

Nb_Lignes_Struct AnalyseLignesFichier(string fichier);

bon, moi j'utilise les strings, tu peux utiliser les char, ça te regarde ;-) ce que je veux dire, c'est qu'il faudrait rendre ce bout de code réutilisable.

Une idée d'utilisation: moi j'utilise un code similaire pr tenir une page web à jour, qui affiche un graphique indiquant le nombre de lignes de code dans chaque module en cours de dvpt.

Commentaire de Xs le 15/03/2004 07:54:36

Salut !

personnellement, je viens de me faire un programme similaire mais celui-ci examine tous les fichiers cpp/h/c du repertoire indiqué et compte le nombre de lignes (j'ai oublié les commentaires :D)

voici le code :

#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;windows.h&gt;


int compte_lignes(char *fichier);
WIN32_FIND_DATA wData;
HANDLE listing;

int main()
{
char l_chemin[256],*l_chemintmp;
int lignes;

printf("Entrez le chemin\n");
scanf("%s", &l_chemin);

l_chemintmp = new char[strlen(l_chemin)+1+strlen("\\*.*")];

strcpy(l_chemintmp,l_chemin);
strcat(l_chemintmp,"\\*.*");
    

listing = FindFirstFile(l_chemintmp, &wData);
int i =0;
int total=0;
char FileWithPath[256];

if (listing != INVALID_HANDLE_VALUE)
{
do
{
if(wData.cFileName[0] != '.' )
{
strcpy(FileWithPath,l_chemin);
strcat(FileWithPath,"\\");
strcat(FileWithPath,wData.cFileName);

lignes=compte_lignes(FileWithPath);
    printf("Votre fichier %s comporte %d lignes \n",wData.cFileName, lignes);
i++;
total+=lignes;
}
}
while (FindNextFile(listing, &wData));

FindClose(listing);

printf("\n\nsoit un total de %i\n\n",total);
}
    
system("PAUSE");
    return 0;
}

int compte_lignes(char *fichier){
int nb_lignes=1;
FILE* File;
char c;

if (fichier==NULL)
{
return -1;
} // pour réutilisations ultérieurs : si on nous file un pointeur NULL on retourne 0..
else
{
File = fopen(fichier,"r");

if( File == NULL )
return -1;

do
{
   c=fgetc(File);
   if (c=='\n')
       nb_lignes++;
    
}
while (c!=EOF); // tant qu'on est pas a la fin du fichier

fclose(File);
}

return nb_lignes;
}


comme vous pouvez le voir, il est largement inspiré d'une source ici présente pour le comptage de lignes... mais bon on s'en fou parce que c'est fait pour ca (poster des sources) et que c'est pas censé etre utilisé par qq1 d'autre que moi.

cordialement

Commentaire de GoldenEye le 15/03/2004 14:32:06

Tout ceci est fort intéréssant je le reconnais, mais pourquoi s'embêter alors que ce programme est codé par 10 lignes bien senties de flex ?

Commentaire de Kirua le 15/03/2004 20:42:23

flex?

Commentaire de GoldenEye le 15/03/2004 20:46:01

Flex/lex : outil de base pour réaliser des analyseurs lexicaux
Forme un PACS avec son collègue Bison/yacc utilisé pour implémenter des analyseurs syntaxiques
Ce sont les deux programmes utilisés pour constuire des compilateurs

Commentaire de Kirua le 16/03/2004 17:38:21

merci pr l'info de base, on peut dire que t'as l'esprit de synthèse ;-) enfin je te comprends, à partir de ça je trouverai rapidement des compléments d'infos, vive goolge :-) Je sais plus qui a dit: "Google is the closest thing internet has to an ultimate answer-machine"

Commentaire de soumpro le 19/03/2004 16:46:18

Pas mal ton source !
Mais comme le dit kirua  , n'utlsz pas globales !

fstream ! ? hein ?!
hum !

Commentaire de xterminhate le 19/03/2004 17:38:31

Kirua a en sa possession une version que j'ai personnelement recodée pour coller mieux à la programmation C++. Cette version recodée corrige d'ailleurs quelques problèmes de comptage.

Cordialement,
   Xter.

Commentaire de magic_Nono le 25/03/2004 18:16:40

Salud à ts,

Ds MétaProg &MPLight,
un module de stat compte les nb de caractères en
- code
- directive de précompilation
- commentaires
( puis commentaires avec déclinaisons: par ex ceux commençant par /// car ils constituent la doc...)

et donne les proportions,
encore qq retouche et je livre son source...

Kénavo

PS: un exe avec ce module devait figuré ds l'article que G fait sur les DLL

sinon,

bonne idée,
évite les var globales
et préfère le C++ et ces classes par rapport aux structures...


GoldenEye&gt;
si T capable de trouver un code Lex/Yacc pour analyser tout type de code C/C++ sans faire de supposition comme "les types commencent par une majuscule"
ça m'intéresse!
Note: G publié les srces d'un analyseur de code C faisant ces supposition

Magicalement,
Nono.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales