FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Embarquer un fichier quelconque Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Embarquer un fichier quelconque Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Embarquer un fichier quelconque Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Embarquer un fichier quelconque Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Embarquer un fichier quelconque Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Embarquer un fichier quelconque Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Embarquer un fichier quelconque Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Embarquer un fichier quelconque Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Embarquer un fichier quelconque Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Embarquer un fichier quelconque Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Embarquer un fichier quelconque Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Embarquer un fichier quelconque Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Embarquer un fichier quelconque Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Embarquer un fichier quelconque Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Embarquer un fichier quelconque Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -25%
PC Portable Gamer 16,1” HP Victus 16 – 16 ...
Voir le deal
749.99 €

 

 Embarquer un fichier quelconque

Aller en bas 
4 participants
AuteurMessage
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Embarquer un fichier quelconque Empty
MessageSujet: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyJeu 23 Avr 2015 - 16:21

On en a déjà parlé, le problème est de ne pas être obligé de joindre un fichier à un programme Panoramic, pour qu'il soit autonome et transportable.

L'idée est d'intégrer le fichier (n'importe quel format) au programme sous forme de datas, et de le reconstituer au moment de l'exécution. Comme ce sont des datas il faut que ce soit sous forme ascii, donc en hexadécimal.
Je pensais en particulier à un autre post qui demandait un moyen de connaître les coordonnées de la souris sur la totalité de l'écran, et à une petite dll de Nardo (mouse.dll) qui fait ça très bien.
Dans ce cas, la dll fait environ 40k octets, ce qui produit environ 1300 lignes de datas, ce qui est déjà beaucoup.

Il y a deux petites subs toutes simples:
- Fic2Data(), indépendante du programme cible, qui convertit le fichier en lignes de datas, dans un fichier texte, à 'coller' dans le programme.
- Data2Fic(), intégrée au programme cible, qui reconstitue le fichier binaire à partir des datas.
Code:
DIM f$,ft$
f$ = "C:\PANORAMIC\NARDO\mouse.dll"
ft$ = "Z:\mouse.txt"

File2Data(f$,ft$,40)
' Data2File("mouse.dll","Z:\mouse.dll")

PRINT "Terminé !"
END
' ==============================================================================
SUB File2Data(f$,fr$,nol%)
' Conversion d'un fichier quelconque en lignes de datas (forme hexa) pour
' intégration dans un programme Panoramic et reconstitution à l'exécution.
' Fichier f$, fichier texte résultat fr$, nol% octets par ligne de datas.
DIM_LOCAL sz%,nb%,rs%,i%,a$,q$
q$ = CHR$(34): ' quote
IF nol%=0 THEN nol%=32: ' nombre d'octets par ligne de datas
FILEBIN_OPEN_READ 1,f$: FILE_OPEN_WRITE 2,fr$
    sz% = FILEBIN_SIZE(1): nb% = INT(sz%/nol%): rs% = sz%-nb%*nol%
    FILE_WRITELN 2,"DATA "+q$+FILE_EXTRACT_NAME$(f$)+q$
    FOR i% = 1 TO nb%
        a$ = FILEBIN_HEXA_READ$(1,ll%): FILE_WRITELN 2,"DATA "+q$+a$+q$
    NEXT i%
    IF rs%>0 THEN a$=FILEBIN_HEXA_READ$(1,rs%): FILE_WRITELN 2,"DATA "+q$+a$+q$
    FILE_WRITELN 2,"DATA "+q$+"F"+q$
FILEBIN_CLOSE 1: FILE_CLOSE 2
END_SUB
' ==============================================================================
SUB Data2File(f$,fr$)
' Reconstitution d'un fichier f$ intégré sous forme de lignes de datas, création
' du fichier fr$ (chemin complet).
DIM_LOCAL a$
RESTORE: READ a$: WHILE UPPER$(a$)<>UPPER$(f$): READ a$: END_WHILE
FILEBIN_OPEN_WRITE 9,fr$
READ a$
WHILE a$ <> "F"
    FILEBIN_HEXA_WRITE 9,LEN(a$)/2,a$: READ a$
END_WHILE
FILEBIN_CLOSE 9
END_SUB
' ==============================================================================
' Résultat:
DATA "mouse.dll"
DATA "4D5A50000200000004000F00FFFF0000B80000000000000040001A0000000000"
DATA "0000000000000000000000000000000000000000000000000000000000010000"
DATA "BA10000E1FB409CD21B8014CCD219090546869732070726F6772616D206D7573"
...
DATA "0000000000000000000000000000000000000000000000000000000000000000"
DATA "0000000000000000000000000000000000000000000000000000000000000000"
DATA "F"
Remarque: les lignes de datas sont encadrées par le nom du fichier et la lettre "F", pour faciliter leur repérage à la lecture.
Et je répète que ce n'est valable que pour de petits fichiers: exécutables, images, icônes,  etc.
(je le déconseille fortement pour KGF.dll, par exemple  Very Happy )

Edit 24/4 correction erreur de nom de variable (merci papydall)


Dernière édition par JL35 le Ven 24 Avr 2015 - 9:48, édité 1 fois
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyJeu 23 Avr 2015 - 16:33

Oui c'est plus simple à parrtager, en effet. Notamment pour tout mettre sur le forum (ce dernier ne devrait pas faire de changement sur ce type de données)
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyJeu 23 Avr 2015 - 16:45

Il y a quand même des restrictions, pour le forum: il n'accepte pas de listing trop long (plus de 1000 lignes environ), et dans ce cas il faut mettre en plusieurs morceau, ce qui n'est pas trop gênant après tout.
Pour ce qui est des datas, en effet le forum ne devrait pas modifier, puisqu'ils sont en hexa. Mais il ne se gêne pas pour le faire quand il y a certaines combinaisons de caractères (par exemple \ suivi de " , où le \ est escamoté, ce qui est inadmissible dans une section 'Code')
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyJeu 23 Avr 2015 - 17:28

oui plus les codes d'emote comme ":" suivit de ")" mais comme tu dis, là en hexa, sauf erreur de ma part, cela ne peut pas se produire
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyVen 24 Avr 2015 - 0:29

Pour intégrer un fichier dans un exécutable, il y a aussi la solution d'utiliser des "ressources". Ce sont justement des fichiers intégrés dans un exécutable ou dans une DLL, et Windows a les moyens (via un API) de les utiliser, extraire, supprimer etc.

Certes, Panoramic ne donne pas accès à ces fonctions. Mais KGF.dll a les outils nécessaires. On peut ajouter, par un programme Panoramic (si, si !) un ou plusieurs fichiers dans un exécutable sous forme de ressource, et cet exécutable peut ensuite utiliser ou extraire ces ressources et les restituer sous forme de fichiers. C'est un moyen plus "élégant" de transporter des images, sons etc, mais en fait n'importe quoi, y compris d'autres exécutables ou DLLs. On peut même y inclure un programme d'installation qui, une fois extrait et lancé par la commande EXECUTE, va installer, disons une police, un ActiveX, une application, ...

Tout est possible. Certes, pas en Panoramic pur, mais les utilisateurs de KGF.dll n'y verront qu'un inconvénient mineur...

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyVen 24 Avr 2015 - 0:38

Hello JL35

ERREUR : Not correct arithmetic expression :.Line 19
Code:
    sz% = FILEBIN_SIZE(1) : nb% = INT(sz%/ll%) : rs% = sz%-nb%*ll%

En effet ll% n’est déclarée nulle part.
What is  ll%?
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyVen 24 Avr 2015 - 1:04

En fait, voici mon utilitaire de gestion de ressources dans un EXE ou une DLL:
Code:
' gextion_ressources.bas

label ouvrir, sel3, sel4, click7, click12
label click15, click16, click17, click18, click20

dim res%, f$, s$, t$, n$, r$

full_space 0
caption 0,"Gestion des ressources"

button 1 : top 1,10 : left 1,10 : caption 1,"Ouvrir"
  on_click 1,ouvrir
open_dialog 2
alpha 8 : top 8,10 : left 8,1000 : caption 8,"Toutes les ressources dans fichier EXE/DLL:"
list 3 : top 3,30 : left 3,1000 : width 3,250 : height 3,500
  on_click 3,sel3
alpha 9 : top 9,10 : left 9,740 : caption 9,"Indexe de type de ressource actuel:"
list 4 : top 4,30 : left 4,740 : width 4,250 : height 4,500
  on_click 4,sel4
 
alpha 5 : top 5,70 : left 5,10 : caption 5,"Type de ressource:"
edit 6 : top 6,70 : left 6,130 : width 6,150
button 7 : top 7,70 : left 7,290 : width 7,150
  caption 7,"Indexe de ce type" : on_click 7,click7

alpha 10 : top 10,100 : left 10,10 : caption 10,"Nom de ressource:"
edit 11 : top 11,100 : left 11,130 : width 11,150
button 12 : top 12,100 : left 12,290 : width 12,150
  caption 12,"Fichier de la ressource" : on_click 12,click12
edit 13 : top 13,130 : left 13,10 : width 13,700
  inactive 13 : font_bold 13
 
button 15 : top 15,180 : left 15,10 : width 15,150
  caption 15,"Ajouter fichier ressource" : on_click 15,click15
button 16 : top 16,180 : left 16,170 : width 16,150
  caption 16,"Remplacer fichier ressource" : on_click 16,click16
button 17 : top 17,180 : left 17,330 : width 17,150
  caption 17,"Supprimer fichier ressource" : on_click 17,click17
button 18 : top 18,180 : left 18,490 : width 18,150
  caption 18,"Tester existence de ressource" : on_click 18,click18
edit 19 : top 19,210 : left 19,10 : width 19,700
  inactive 19 : font_bold 19

button 20 : top 20,260 : left 20,240 : width 20,150
  caption 20,"Extraire ressource dans fichier" : on_click 20,click20
edit 21 : top 21,290 : left 21,10 : width 21,700
  inactive 21 : font_bold 21
save_dialog 22


dll_on "KGF.dll"
 
end


' ***** ouvrir un fichier EXE/DLL
ouvrir:
  filter 2,"Fichiers exécutables|*.exe;*.dll"
  f$ = file_name$(2)
  text 6,""
  clear 4
  if f$="_"
    return
  end_if
  res% = dll_call2("GetListOfResources",handle(3),adr(f$))
  return
 
' ***** sélectionner un type de ressource
sel3:
  s$ = item_index$(3)
  text 6,""
  clear 4
  if left$(s$,1)=" " then return
  if instr(s$,"Resource Number")=1 then return
  res% = dll_call3("GetIndexOfResourceType",handle(4),adr(f$),adr(s$))
  text 6,s$
  return
 
' ***** sélectionner une resource
sel4:
  s$ = item_index$(4)
  text 11,""
  s$ = left$(s$,instr(s$,"=")-1)
  text 11,s$
  return
 
' ***** charger l'indexe du type de ressource choisi
click7:
  clear 4
  s$ = upper$(text$(6))
  if s$="" then return
  if left$(s$,1)="!" then s$ = mid$(s$,2,len(s$))
  if s$="" then return
  text 6,s$
  res% = dll_call3("GetIndexOfResourceType",handle(4),adr(f$),adr(s$))
  return
 
' **==* charger le contenu des données de la ligne indexe de la ressource choisie
click12:
  s$ = string$(255," ")
  t$ = text$(6)
  n$ = text$(11)
  res% = dll_call4("GetResourceIndexItemData",adr(f$),adr(t$),adr(n$),adr(s$))
  s$ = trim$(s$)
  text 13,s$
  return
 
' ***** ajouter une nouvelle ressource
click15:
  filter 2,"Tous fichiers|*.*"
  Text 19,""
  r$ = file_name$(2)
  if r$="_" then return
  text 19,r$
  t$ = text$(6)
  n$ = text$(11)
  res% = dll_call4("AddNewResource",adr(f$),adr(r$),adr(t$),adr(n$))
  ' actualiser la liste des ressources
  res% = dll_call2("GetListOfResources",handle(3),adr(f$))
  clear 4
  text 6,""
  text 11,""
  text 13,""
  return
 
' ***** remplacer une ressource
click16:
  filter 2,"Tous fichiers|*.*"
  Text 19,""
  r$ = file_name$(2)
  if r$="_" then return
  text 19,r$
  t$ = text$(6)
  n$ = text$(11)
  res% = dll_call4("ReplaceExistingResource",adr(f$),adr(r$),adr(t$),adr(n$))
  return

' ***** supprimer une ressource
click17:
  t$ = text$(6)
  if t$="" then return
  n$ = text$(11)
  if n$="" then return
  res% = dll_call3("DeleteExistingResource",adr(f$),adr(t$),adr(n$))
  ' actualiser la liste des ressources
  res% = dll_call2("GetListOfResources",handle(3),adr(f$))
  clear 4
  text 6,""
  text 11,""
  text 13,""
  return

' ***** tester si une ressource existe
click18:
  t$ = text$(6)
  if t$="" then return
  n$ = text$(11)
  if n$="" then return
  res% = dll_call3("FindExistingResource",adr(f$),adr(t$),adr(n$))
  if res%=0
    message "La ressource n'existe pas"
  else
    message "La ressource existe"
  end_if
  return
 
' ***** extraire une ressource existante dans un fichier
click20:
  text 21,""
  t$ = text$(6)
  if t$="" then return
  n$ = text$(11)
  if n$="" then return
  r$ = file_name$(22)
  if r$="_" then return
  res% = dll_call3("FindExistingResource",adr(f$),adr(t$),adr(n$))
  if res%=0 then return
  res% = dll_call4("ExtractExistingResource",adr(f$),adr(t$),adr(n$),adr(r$))
  if res%>0 then text 21,r$
  return
 

Bien sûr, pour des raisons évidentes d'intégrité d'un exécutable, un programme Panoramic en version EXE ne peut pas se modifier lui-même. Il peut seulement extraire une de ses propres ressources dans un fichier. C'est la raison d'existence de cet utilitaire.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyVen 24 Avr 2015 - 10:23

@papydall,
Désolé, un changement de nom de variable malencontreux au dernier moment (nol%: nb d'octets par ligne au lieu de ll%: longueur ligne, révolutionnaire !) et ça ne marche plus ! c'est réparé là-haut et merci à toi de l'avoir signalé.

@Klaus,
Il est bien évident que la solution que je suggère là-haut est pensée pour des applications toutes simples et un petit fichier à joindre, et pour que ce soit facile et rapide à mettre en oeuvre.
Pour des applications avec des fichiers plus importants à joindre il faut évidemment adopter les solutions que tu préconises, et que je note d'ailleurs soigneusement.
Mon but est que dans la mesure du possible il n'y ait qu'un fichier à transporter, l'application elle-même, quand on passe d'une machine à l'autre, et que ça ne présuppose pas d'autres applications non standards préinstallées (dans la mesure du possible).

Est-ce que ton système ne nécessite pas la présence de KGF.dll pour l'extraction des ressources incluses ?
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyVen 24 Avr 2015 - 11:05

Tel que, je crois que oui, il faut KGF installé mais Klaus avait fait un installeur, je crois dans lequel l'exe pouvait inclure tout le nécessaire pour pouvoir faire l'installation. Il me manque un maillon, mais globalement, il faudrait faire un executable avec les ressources qui se décompresse temporairement dans un répertoire de travail, qui installe tout et supprime ces traces d'installation (et que ça Wink )

https://panoramic.1fr1.net/t3690-un-executable-qui-s-auto-edetruit

mais bon, c'est vrai qu'il manque le lien entre ces 2 programmes pour avoir un programme d'installation totalement propre.
je crois aussi me souvenir que Klaus avait fait une DLL légère spécialement pour les installations (j'espère que ma mémoire ne me joue pas de mauvais tours.)
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyVen 24 Avr 2015 - 14:14

Mes DLLs ont pas mal évolué, à travers le temps. La seule DLL actuellement à jour et maintenue est KGF.dll, avec l'ensemble des fonctions.

KGF.dll doit bien entendu être présent pour que l'extraction d'une ressource marche - après tout, c'est une fonction de KGF.dll...

J'ai fait un installateur pour Synedit_Editor, qui installe également KGF.dll dans le dossier cible pour Synedit_Editor. Je peux faire une version simplifiée pour installer KGF.dll.

Une fois KGF.dll en place, les fonctions d'extraction de ressources sont disponibles, quelque soit la version de KGF.dll. Ces fonctions sont déjà anciennes et devraient être disponibles chez tous ceux qui utilisent actuellement KGF.dll.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyVen 24 Avr 2015 - 14:34

Donc si j'ai bien compris: j'écris et compile un petit programme pour mon voisin, qui nécessite mouse.dll.
Je peux intégrer mouse.dll à la compilation de mon programme, mais je suis obligé de lui installer (chez mon voisin) Kgf.dll pour que le programme puisse extraire et installer mouse.dll...
C'est justement ce que je voulais éviter dans un cas comme celui-ci (petit programme à destination ponctuelle, et petit fichier binaire joint) en proposant les deux petites subs là-haut
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyVen 24 Avr 2015 - 14:48

Je comprends bien ce que tu cherches, Jl35. Je n'ai pas de solution simple pour cela, et ta technique est efficace pour cela. Je voulais juste rappeler que pour des fichiers plus gros, ou des fichiers multiples, une solution existe pour ceux qui utilisent de toutes façon KGF.dll.

Ceci dit, dès le moment où l'on utilise un programme d'installation, copier temporairement KGF.dll dans un dossier temporaire, l'utiliser puis le supprimer, ça ne mange pas de pain. Les installateurs de logiciels du commerce font ça tout le temps.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque EmptyVen 24 Avr 2015 - 15:01

C'est bien évident pour tout le monde je pense que KGF.dll est incontournable, et je ne me prive pas de l'utiliser, pour des fonctions que je suis incapable de réaliser sans lui, par exemple entre autres certaines fonctions qui existaient en freebasic et qui n'existent pas en panoramic, et tout un tas de fonctions nouvelles.
Mon propos n'était destiné qu'à un besoin ponctuel et pour un cas très simple.
Revenir en haut Aller en bas
Contenu sponsorisé





Embarquer un fichier quelconque Empty
MessageSujet: Re: Embarquer un fichier quelconque   Embarquer un fichier quelconque Empty

Revenir en haut Aller en bas
 
Embarquer un fichier quelconque
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Cryptage/décryptage d'un fichier quelconque
» Insertion d'un petit fichier quelconque dans un programme
» application : embarquer les ".htm"
» Rotation d'une image d'un angle quelconque
» Comment reconvertir un fichier exe Panoramic en fichier BAS

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: