PureBasic

Forums PureBasic
Nous sommes le Sam 25/Mai/2013 20:15

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 44 messages ]  Aller à la page 1, 2, 3  Suivante
Auteur Message
 Sujet du message: GetLastName(FullDirectory.s)
MessagePosté: Jeu 19/Jan/2012 17:45 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 5229
Petite procédure dont j'avais besoin pour choper le dernier nom d'un chemin que ce soit un fichier ou un dossier.
(Pour chopper le nom des villages dans un répertoire photos)
Fonctionne avec ou sans "/" à la fin du chemin :wink:

Un complément nécessaire à GetFilePart et GetPathPart :mrgreen: pour ma part.

Code:
Procedure.s GetLastName(FullDirectory.s)
  ; GetLastName("chemin complet") par Ar-S / 19/01/2012 PB 4.x
  ; Procedure de récupération du dernier nom de fichier ou dossier.
  ; Le chemin peut être indiqué avec ou sans slash à la fin.
 
  If Right(FullDirectory, 1) = "\"
    FullDirectory = Left(FullDirectory, Len(FullDirectory) - 1)
  EndIf
   ProcedureReturn GetFilePart(FullDirectory)
EndProcedure

; Example

; Test 1
dir$ = "c:\toto\tutu\moutarde\St Paul du Gigot\" ; avec slash
Debug GetLastName(dir$)

; Test 2
dir$ = "c:\toto\tutu\moutarde\Cornoulac sur biroutes" ; pas de slash
Debug GetLastName(dir$)

; Test 3
dir$ = "c:\Giclon sur futal" ; avec un seul slash
Debug GetLastName(dir$)

; Test 4
dir$ = "c:\poireau\courgette.exe" ; avec un nom de fichier
Debug GetLastName(dir$)

; Test 5
dir$ = "je mets n'importe quoi" ; sort toute la phrase
Debug GetLastName(dir$)



EnJoYeZ

_________________
.: Ar-S :. - Windows 8 x64 - Radeon HD 7870 - PB 5.11
LDV MULTIMEDIA : Assistance informatique Isère (38) Oyeu
PURE BASIC forum non officiel : Forum PB


Dernière édition par Ar-S le Ven 20/Jan/2012 11:52, édité 3 fois.

Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Jeu 19/Jan/2012 19:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 10/Sep/2007 11:13
Messages: 958
pour vérifier la validité du chemin ne devrais tu pas utiliser filesize() plutot que de regarder dans la string si il y a des \ ?


car un path tout a fait construit correctement peut ne pas exister sur le disque et être invalide.

_________________
ImageImageImage


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Jeu 19/Jan/2012 20:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 5229
C'est vrai que la vérif n'est pas vraiment utile.

Citation:
pour vérifier la validité du chemin ne devrais tu pas utiliser filesize() plutot que de regarder dans la string

Le programme sert à retrouver le dernier nom d'un chemin, que celui-ci soit celui d'un dossier ou d'un fichier.
En fait mon programme utilise un pathrequester() pour récupérer le chemin complet et créer un fichier pref indiquant le nom de la ville ex : "c:\photos\vacances\grenoble\" va générer un fichier pref contenant ville = Grenoble

Je ne vois donc pas l'utilité du filesize ici.

----edit----

Si en fait j'ai fait cette vérif dans le cas ou un équidé (faisant hiihannn) ai l'idée de faire un GetLastName("tout sauf un chemin") comme dans le test 5 ;)

_________________
.: Ar-S :. - Windows 8 x64 - Radeon HD 7870 - PB 5.11
LDV MULTIMEDIA : Assistance informatique Isère (38) Oyeu
PURE BASIC forum non officiel : Forum PB


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 8:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
En plus simple :mrgreen: Bon d'accord, je ne vérifie pas la validité du chemin

Code:
Procedure.s GetLastName(FullDirectory.s)
   If Right(FullDirectory, 1) = "\"
      FullDirectory = Left(FullDirectory, Len(FullDirectory) - 1)
   EndIf
   FullDirectory = GetFilePart(FullDirectory)
   ProcedureReturn FullDirectory
   
EndProcedure

; Example

; Test 1
dir$ = "c:\toto\tutu\moutarde\St Paul du Gigot\" ; avec slash
Debug GetLastName(dir$)

; Test 2
dir$ = "c:\toto\tutu\moutarde\Cornoulac sur biroutes" ; pas de slash
Debug GetLastName(dir$)

; Test 3
dir$ = "c:\Giclon sur futal" ; avec un seul slash
Debug GetLastName(dir$)

; Test 4
dir$ = "c:\poireau\courgette.exe" ; avec un nom de fichier
Debug GetLastName(dir$)

; Test 5
dir$ = "je mets n'importe quoi" ; erreur
Debug GetLastName(dir$)

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 9:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4444
Localisation: Isere
En parlant de validité des chemins..je viens d'en apprendre une bonne hier :?
Comme on sait presque jamais si l'utilisateur ou la variable aura un anti-slash de fin, j'avais découvert une API de la mort comme je les aimes.
PathAddBackslash_() 8O
Ouaaah qu'elle etait belle celle la..elle te rajoute l'anti-slash que si besoin 8)
Alors KCC, sur d'avoir dans les main le saint graal et en bon bourrin, il en a fourré de partout dans tous ses codes :D

Et hier...que me prend il pas de regarder a quoi servent tous les outils de PB :roll:
Et je retombe sur l'option purifier :)
Donc je coche....et le premier depassement de mémoire tombe sur mon API d'amour 8O

Alors je cherches, "pourquoitaice" ???
Et la..le lis un truc qui me troue le..... 8O
Freak il explique que cette API est tres dangereuse, car elle ajoute l'antislash apres, certe...meme si y'a pas la place :?
Elle ecrase donc ce qui est a la suite....meme si c'est super important, comme la declaration des droits de l'homme par exemple :x
Il dit aussi, enfin de ce que j'ai compris, que la panne ne se passe pas souvent car y'a toujour une petite marge qui est crée d'office, mais que ça peut arriver

Alors mon cri de haine est :
Comment CROCRO peut se permettre de creer un API sur laquelle on a pas la main et qui peut au hasard ecraser la mémoire ??? :?
Si ça c'est pas un signe d'incompetence...a mon avis ça existe pas avec LINUX, ou alors avec protection

Donc boulot de ce matin, creer ma propre fonction qui rajoute le slash, sans ecraser les pingoinces de personne, c'est pas long me direz vous :?
Certes repondrais-je, mais ce qui va l'etre un peu plus, c'est de la remplacer de partout parmis mes 1000 fonctions de DLL :x

Nadine si meme les pros se mettent a faire des BUGS aleatoires...a quoi ça sert que je code mal moi ?? :mrgreen:

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 10:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12958
si j'en crois la doc msn

Citation:
LPTSTR PathAddBackslash(
__inout LPTSTR lpszPath
);

Parameters

lpszPath [in, out]

Type: LPTSTR

A pointer to a buffer with a string that represents a path. The size of this buffer must be set to MAX_PATH to ensure that it is large enough to hold the returned string.


cette Api permet bien de faire ce que tu dis , a partir d'un pointeur de chaine$

bon ...au vu du probleme que tu souleve, alors rajoute juste un espace a ta chaine pis voila :)

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 10:45 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 5229
Le Soldat Inconnu a écrit:
En plus simple :mrgreen: Bon d'accord, je ne vérifie pas la validité du chemin

Code:
Procedure.s GetLastName(FullDirectory.s)
   If Right(FullDirectory, 1) = "\"
      FullDirectory = Left(FullDirectory, Len(FullDirectory) - 1)
   EndIf
   FullDirectory = GetFilePart(FullDirectory)
   ProcedureReturn FullDirectory
   
EndProcedure


Bordel, je fais du PB depuis 6 ans et je découvre que GetFilePart() marche aussi pour les chemin$ "dossiers"...
Pourquoi ? à cause du nom (comportant file) de la fonction et du pauvre exemple de la doc.
Ce genre de truc me met vraiment les boules... :?

1er code modifié...

_________________
.: Ar-S :. - Windows 8 x64 - Radeon HD 7870 - PB 5.11
LDV MULTIMEDIA : Assistance informatique Isère (38) Oyeu
PURE BASIC forum non officiel : Forum PB


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 11:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4444
Localisation: Isere
Dobro a écrit:
cette Api permet bien de faire ce que tu dis , a partir d'un pointeur de chaine$
bon ...au vu du probleme que tu souleve, alors rajoute juste un espace a ta chaine pis voila :)
Tu pense bien que j'y ai pensé foireux comme je suis :mrgreen: ...mais on recule le probleme d'un caratere :lol:
Code:
a$ = "c:\Kcc "
PathAddBackslash_(a$)
Debug a$
Citation:
c:\Kcc \
Foutu que j'te dis foutu... :?
http://www.purebasic.fr/english/viewtop ... 77#p228877

Remarque en y pensant un peu plus, c'est vrai ce n'est pas window qui gere la table d'allocation des variables de ton programme, c'est ton programme lui meme...et il en va de meme pour la table de ta DLL..enfin je pense :roll:
Donc comment il pourrait savoir quelle place lui est alloué..y'a bien le chr(0) de fin, mais bon...

Donc c'est un peu le meme probleme que j'ai eu avec mes passages de pointeurs entre DLL, si tu envoie l'adresse du pointeur, rien ne t'empeches de le copier pour le lire...
Mais ACHTUNG !!! (Ca c'est pour SPH et avant qu'il me le demande "CH" se prononce "AR" :mrgreen:), si tu ecris plus long que ce que ton programme lui a alloué, tu ecrases surement "queque" chose, et en l'occurance surement le chr(0)

Et c'est comme ça, que je me suis retrouvé avec 1 mois de boulot pour comprendre le fonctionnement des pointeurs de variables et surtout essayer d'apprendre comment passer des tableaux, structure, et tout le toutim de PB a VB6, avec le bonheur comme si c'etait pas assez compliqué comme ça des SafeArray qui transmettent des pointeurs de pointeurs, et les BSTR qui contiennent la longueur de la string dans l'entete 8O merci CROCRO :?

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 11:34 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
KCC, tu n'as qu'a le coder en PB

Code:
If Right(Dossier, 1) <> "\"
  Dossier + "\"
EndIf


Et voilà :mrgreen: Pas de bug crosoft possible

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 11:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12958
tiens voila la soluce en mieux que l'Api windows :)

Citation:



Declare PathAddBackslash(Path)

a$ = "c:\Kcc"
PathAddBackslash(@a$) ; la soluce qui tue : o)
debug a$
calldebugger

a$ = "c:\toto\"
PathAddBackslash(@a$) ; la soluce qui tue : o)
debug a$
calldebugger

procedure PathAddBackslash(Path )
     ;Solution By Dobro patented copyrighté Supra Hadopi : o)
     ; ajoute un "\" si pas present a la fin
    mem=Path
    path$= reversestring ( peeks (mem))
     if mid (Path$,1,1) <> "\"
        Path$= "\" +Path$
        Path$= reversestring (Path$)
         pokes (mem,path$)
     endif
endprocedure

;
; EPb



_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 12:06 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4444
Localisation: Isere
Le Soldat Inconnu a écrit:
KCC, tu n'as qu'a le coder en PB
Code:
If Right(Dossier, 1) <> "\"
  Dossier + "\"
EndIf
Et voilà :mrgreen: Pas de bug crosoft possible
Voui voui..c'est ce que j'ai fait, mais bon c'est quand meme dingue de créer un API aussi dangereuse.. 8O
J'ai l'impression que y'a que moi que ça affole :lol:
Il pourrait faire attention, y'a des inhibés du bulbes qui les utilisent ces fonctions :mrgreen:

Moi jusqu'a présent j'etait toujours "HAPPY" de trouver une telle "API" :D

L'avantage quand même c'est que comme elle etait dans "VINDOWS" bah ça gagne quelques lignes de codes... :roll:
Et puis quand on sait que ça existe pourquoi essayer de tout recreer ???
Enfin c'est une question de point de vue ..

Mais enfin c'est quand meme dingue non ??

@DOBRO
Y'a plein de truc qui m'interloque..si je peux regarder dans le mega copyright :lol:

Deja je crois que mid (Path$,1,1) = Left(Path$,1)
Et aussi Path$= "\" +Path$ ==> Path$+ "\"
c'est plus lisible..on est pas obligé de faire des lignes a ralonge comme CROCRO :lol:

Ca c'est quedal...mais pourquoi reverser...si ce n'est pour les impots...je comprend pas pourquoi ??? :mrgreen:

Et "Aut'chose" plus "techenique"...
Okay tu recuperes le pointeur tu copies son adresse dans un long MEM
Mais resoud tu le bleme de mémoire ??? si tu es dans une DLL qui a sa propre table d'allocation mémoire, comment peut elle savoir ce qu'a prevu ton programme qui lui envoie
Tu fait un POKES ça n'empeche pas que tu ecrase peut etre "queque" chose car c'est la DLL qui le fait..pas le programme

Je pense que ta soluce ne marche qu'en Include dans le code source de l'appli, pas avec un process exterieur...mais bon encore une fois, j'suis loin d'etre un expert :oops:

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 12:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12958
Kwai chang caine a écrit:

@DOBRO
Y'a plein de truc qui m'interloque..si je peux regarder dans le mega copyright :lol:


Et aussi Path$= "\" +Path$ ==> Path$+ "\"

c'est plus lisible..on est pas obligé de faire des lignes a ralonge comme CROCRO :lol:



j'ai deja répondu maintes fois a ça ! :)

c'est pas plus lisible, du tout meme !
tu te fie trop a Purebasic ! dans certain langage Basic le fait d'ecrire
Path$+ "\" ; signifie qu'a la variable path$ tu ajoute "\" , MAIS NE SIGNIFIE PAS que tu Altere la Variable Path$ !!

alors que la ligne :
Path$=Path$ +"\" ; signifie bien qu'au contenu de la variable Path$ on ajoute "\" , donc il y a Altération du contenu de la variable !

je sais qu'en Purebasic c'est optionel , mais question visibilité je prefere ma syntaxe , meme si elle est un poil plus longue

il peut y avoir confusion pour d'autres langage ou ecrire :

a+1 , n'as rien a voir avec : a=a+1 !!! ;)
d'ailleurs en C il existe le signe == pour faire la difference ...






Citation:
Deja je crois que mid (Path$,1,1) = Left(Path$,1)


oui c'est pareil , et ça change rien :roll:
je te file une solution , j'ai jamais dis qu'elle etait optimisée .. :)

Citation:
Ca c'est quedal...mais pourquoi reverser...si ce n'est pour les impots...je comprend pas pourquoi ??? :mrgreen:


simplement parce que cette soluce m'est venu plus simplement a la tete , le Basic permet plein de façon de faire différente
comme je te l'ai dis , j'ai pas cherché l'optimisation, mais juste que ça fonctionne ;)

Citation:
Et "Aut'chose" plus "techenique"...
Okay tu recuperes le pointeur tu copies son adresse dans un long MEM
Mais resoud tu le bleme de mémoire ??? si tu es dans une DLL qui a sa propre table d'allocation mémoire, comment peut elle savoir ce qu'a prevu ton programme qui lui envoie
Tu fait un POKES ça n'empeche pas que tu ecrase peut etre "queque" chose car c'est la DLL qui le fait..pas le programme

Je pense que ta soluce ne marche qu'en Include dans le code source de l'appli, pas avec un process exterieur...mais bon encore une fois, j'suis loin d'etre un expert :oops:



je crois que tu te pose trop de question :roll:

si tu regarde bien ceci :

Code:
if mid(Path$,1,1) <>"\"
        Path$="\"+Path$
        Path$=ReverseString(Path$)
        pokes(mem,path$)
    endif


je reforme une variable chaine Path$ en ajoutant le "\"

puis je poke CETTE variable a l'adresse de l'autre
du coup l'autre se trouve reformaté a la taille de ma nouvelle chaine !!

la preuve le Debug montre bien le changement , il n'y a pas de plantage ..
je suppose que le passage d'adresse de variable par procedure (donc par la pile)
gere le truc , sinon , on ne peut pas utiliser la commande Poke dans aucun langage !!

le ramasse miette doit faire son boulot ... (pour KCC : > http://fr.wikipedia.org/wiki/Ramasse-mi ... matique%29 )

Faudrai que Fred nous confirme ça !!!

ps: la fonction Poke contient le parametre longueur ; il est ecrit ans la Doc :
Citation:
Note: quand le paramètre 'Options' est spécifié, la 'Longueur' peut être mise à -1, pour écrire toute la chaîne de caractère 'Texte$'.


donc c'est bien que Fred a prévu le coup ;)

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 13:33 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4444
Localisation: Isere
Citation:
je crois que tu te pose trop de question
Et ben moi je crois que tu t'en pose pas assez :lol:

Tu n'as pas lu ce que je t'expliquais sur l'histoire de la gestion des variables par chacun des process de son coté
La mémoire est commune dans un EXE et sa DLL mais ils ont une table d'allocation differente, enfin de ce que m'a maintes fois expliqué SROD :oops:

Alors comme je te l'ai dit ta combine marche en include car c'est le meme process, mais en DLL....ça foire
J'ai poussé pour ecraser un max de truc en mémoire, et evidemment ça plante :D
Avec un seul slash t'as de la chance ça fonctione commepour l'API qui ecrase le chr(0), mais avec 5000 caracteres....y'a pas assez de chr(0) dans la mémoire :mrgreen:

Citation:
le ramasse miette doit faire son boulot ...
Parcequ'avec ce code ci dessous, c'est plus un ramasse-miette qu'il faut..mais un ramasse baguette de pain :lol:
Citation:
donc c'est bien que Fred a prévu le coup
FRED a tout prévu c'est vrai...sauf ma naissance :mrgreen:
Et jamais il aurait pu penser qu'une burne comme moi, utilise le pointeur d'un process pour l'ecraser avec un autre process en 10 fois plus long 8O
Remarque SROD non plus...la premiere fois qu'il m'a vu faire ce genre de chose..il etait mort de rire :oops:

Essaye tu va m'en dire des nouvelles

L'exe
Code:
If OpenLibrary(0, "DllAjoutNoirDeSlash.dll")
a$ = "c:\Kcc"
CallFunction(0, "PathAddBackslash", @a$)
Debug a$
b$ = "c:\Kcc"
CallFunction(0, "PathAddNoirDeBackslash", @b$)
Debug b$
CloseLibrary(0)
EndIf


La DLL
Code:
ProcedureDLL PathAddBackslash(Path)

;Solution By Dobro patented copyrighté Supra Hadopi : o)
  ; ajoute un "\" si pas present a la fin
mem=Path
path$= ReverseString ( PeekS (mem))

If Mid (Path$,1,1) <> "\"
  Path$= "\" +Path$
  Path$= ReverseString (Path$)
  PokeS(mem,path$)
EndIf

EndProcedure

ProcedureDLL PathAddNoirDeBackslash(Path)

;Solution By Dobro patented copyrighté Supra Hadopi : o)
  ; ajoute un "\" si pas present a la fin
mem=Path
path$= ReverseString ( PeekS (mem))

If Mid (Path$,1,1) <> "\"
  Path$= RSet("", 5000, "\") +Path$
  Path$= ReverseString (Path$)
  PokeS(mem,path$)
EndIf

EndProcedure

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 14:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
Dobro : Pfiou, t'as rien trouvé de plus compliqué ? :mrgreen:

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Ven 20/Jan/2012 14:31 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4444
Localisation: Isere
SOLDAT :D
Dizi à DOBRO que KCC il a raison :mrgreen:

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 44 messages ]  Aller à la page 1, 2, 3  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye