Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » [C][SDK](résolu)Garder des valeurs après extinction de calto
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

[C][SDK](résolu)Garder des valeurs après extinction de calto

Posté le 01/04/2014 23:14

Bonsoir (ou bonjour ).
Voila ma question : En C, comment conserver les valeurs de certaines variables/tableaux après que l'on ai quitté le programme pour faire un système se record par exemple, ou encore, sauvegarder une partie sur un jeu et le quitter, puis quand on rejoue, on peut reprendre notre sauvegarde
Il me semble que tout ça se fait en manipulant des fichiers mais je ne comprend pas du tout les doc ...
Je crois que ça concerne aussi l'ADD-IN Memory de Lephénixnoir... Mais là encore j'ai lu et j'ai pas tout compris...


Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 04/04/2014 21:57 | #


Tu aurais aussi pu utiliser memory...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 04/04/2014 21:58 | #


Ben... si tu m'explique comment ça fonctionne en détail parce que j'ai lu la doc et tout mais je ne sais même pas ce qu'est un handle ...

Ajouté le 04/04/2014 à 22:05 :
Enfin bref voila le code
if(writeFile("2048RCR","sav",(unsigned char*) &Record,4)==0)

Si le fichier n'existe pas, je le crée avec la valeur Record dedans (soit 0, car j'ai mis "unsigned int Record=0;" au début du programme)
Ensuite j'ai fait ça pour récupérer le nombre stocké dans le fichier (soit le record)
readFile("2048RCR","sav",(unsigned char*) &Record);

Et enfin, lors du test du nouveau record j'ai fait ça
if(Score>Record){        //Nouveau record
     Record=Score;
     writeFile("2048RCR","sav",(unsigned char*) &Record,4);
     }

Ensuite, le programme reviens au menu du jeu, si je fais une nouvelle partie (le programme refait le readFile), pas de problèmes, le record à bien était récupéré...
Mais si je quitte le programme et que je reviens ensuite, le record reviens à 0 ...
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 04/04/2014 22:06 | #


T'es allé faire un tour sur le wiki ?
=> http://wiki.planet-casio.com/fr/Fxlib.h#Fonctions_de_manipulation_des_fichiers
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 04/04/2014 22:07 | #


Le handle est un int qui permet au système de savoir quel fichier tu as ouvert, etc... c'est la variable qui permet de gérer l'utilisation des fonctions liées au fichier.

Et puis, quand même !
void Save(int score)
{
  int handle;

  memory_deletefile("Scores.txt");
  handle = memory_openfile("Scores.txt",_OPENMODE_WRITE);
  memory_writefile(handle,(void *)(&score),4);
  memory_closefile(handle);
}

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 04/04/2014 22:12 | #


Ok Dark Pour le wiki... J'ai presque rien compris

Et pour ton truc Lephénixnoir, c'est la fonction telle qu'elle aurait était avec memory.h mais, j'ai juste à mettre ça et ça fonctionne ?

Parce que Dodormeur ma montré un code pour créer un fichier si il n'existe pas (premier code de mon post précédent)
Et 2 autres code pour récupérer ou stocker un nombre dans le fichier créé, donc ça devrais marcher non ?
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 04/04/2014 22:18 | #


-> Tu inclus le .c dans le projet
-> Tu inclus le .h au début du fichier

Et ça fonctionne !


// creer s'il n'existe pas
if(!memory_exists("\\\\fls0\\score")) memory_createfile("\\\\fls0\\score",10);

void Read(int *p)
{
  int handle;

  handle = memory_openfile("\\\\fls0\\scores",_OPENMODE_READ);
  memory_readfile(handle,(void *)p,4,-1);
  memory_closefile(handle);
}


Et je corrige le code précédent
void Save(int score)
{
  int handle;

  memory_deletefile("\\\\fls0\\Scores.txt");
  memory_createfile("\\\\fls0\\Scores.txt",10);
  handle = memory_openfile("\\\\fls0\\Scores.txt",_OPENMODE_WRITE);
  memory_writefile(handle,(void *)(&score),4);
  memory_closefile(handle);
}

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 04/04/2014 22:26 | #


Hum, j'ai inclus le .c au projet et mis le .h dans les header mais il y a cette erreur
** L2310 (E) Undefined external symbol "_key" referenced in "C:\Users\Kirafi\Desktop\2048\Debug\memory.obj"

iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 04/04/2014 22:29 | #


Oui, dans le .h il y a la ligne "extern unsigned int key;"
Solution rapide: supprime le "extern".
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 04/04/2014 22:30 | #


Ok ça bogue plus, maintenant je met tes bouts de code là ou il faut

Ajouté le 04/04/2014 à 22:31 :
Il faut mettre celui qui crée au même endroit que les déclaration de de variables ?
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 04/04/2014 22:32 | #


Non non, il faut le mettre dans une fonction !
Je l'avais mis à côté pour l'exemple.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 04/04/2014 22:40 | #


Bon, ok pour la fonction... mais il me dit "C:\Users\Kirafi\Desktop\2048\Test1.c(30) : C2500 (E) Illegal token "if""
Le if de ta fonction
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 04/04/2014 22:41 | #


int main()
{
  if(!(memory_exists("Scores.txt")) memory_createfile("Scores.txt",10);
}


Et là ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 04/04/2014 22:44 | #


Ok c'est bon, mais j'ai modifié un truc, tu avais oublié les "\\\\fls0\\"
Maintenant je mes l'autre bout de code et je teste.

Ajouté le 04/04/2014 à 22:48 :
Ok les fonction ne bogues plus, voila ce que j'ai mis, j'ai changé le score.txt par record.txt
Code
Voila
int main()
{
    if(!memory_exists("\\\\fls0\\record")) memory_createfile("\\\\fls0\\record",10);
}

void Read(int *p)
{
    int handle;

    handle = memory_openfile("\\\\fls0\\record",_OPENMODE_READ);
    memory_readfile(handle,(void *)p,4,-1);
    memory_closefile(handle);
}

void Save(int record)
{
  int handle;

  memory_deletefile("\\\\fls0\\record.txt");
  memory_createfile("\\\\fls0\\record.txt",10);
  handle = memory_openfile("\\\\fls0\\record.txt",_OPENMODE_WRITE);
  memory_writefile(handle,(void *)(&record),4);
  memory_closefile(handle);
}

Maintenant, pour appeler la fonction pour changer le Record, je fais ça ?
Save(Record)

iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 04/04/2014 22:52 | #


Mais non, le main() c'était un exemple !
Tu mets ce code dans la fonction où tu veux qu'il soit appelé !

Du coup, pour sauver
Save(record);

et pour lire
Read(&record);


Et n'oublie pas de corriger le Read, tu as oublié le ".txt".
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 04/04/2014 22:57 | #


dans le if aussi il faut mettre record.txt ? et si ma variable à une majuscule au début, je modifie le Save(record); en Save(Record); (idem pour le read) ?
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 04/04/2014 22:59 | #


la variable record, est ton int dans ton programme.
Soit elle est globale, soit elle n'est utilisée que par une fonction.

"Record.txt" est un nom comme un autre, le tout c'est qu'il soit indentique partout.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 04/04/2014 23:21 | #


ça fonctionne très bien, merci Lephénixnoir
Maintenant, pour enregistrer un tableau, je fais comment ?

Ajouté le 04/04/2014 à 23:36 :
Et une 2ème valeur ?
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 05/04/2014 06:42 | #


Eh bien, tu les enregistres dans l'ordre, tu les lis dans le même ordre, et tu veille à ne pas changer les types de données.

Par exemple, tu veux enregistrer un int, un short et un float. Tu vas écrire
#define FILEPATH "\\\\fls0\\Records.txt"

void Save(int i, short s, float f)
{
  int handle;

  if(memory_exists(FILEPATH)) memory_deletefile(FILEPATH);
  memory_createfile(FILEPATH,20);
  handle = memory_openfile(FILEPATH,_OPENMODE_WRITE);
  memory_writefile(handle,(void *)(&i),sizeof(i));
  memory_writefile(handle,(void *)(&s),sizeof(s));
  memory_writefile(handle,(void *)(&f),sizeof(f));
  memory_closefile(handle);
}


Alors, petites précisions sur ce code.
Pour éviter de répéter la chaîne d'adresse, je la mets dans un define, du coup ça évite les fautes de frappe, et ça permet de changer rapidement l'adresse du fichier si celle-ci ne te plaît plus. Ça ne ralentit pas l'exécution puisque les define sont directement remplacés dans le code.

J'en profite pour glisser la syntaxe d'écriture d'une variable en général.
memory_writefile(handle,(void *)(&var),sizeof(var));
On demande au système d'écrire depuis l'adresse de la variable (castée en void *, sinon on se fait insulter par le compilateur), sur une longueur de sizeof(var), c.a.d que cette syntaxe s'adapte à tous les types de variables, même les structures.
Par contre ça ne fonctionne pas avec les tableaux.

La lecture se fait exactement dans le même sens:
void Read(int *i, short *s, float *f)
{
  int handle;

  if(!memory_exists(FILEPATH)) return;
  handle = memory_openfile(FILEPATH,_OPENMODE_READ);
  memory_readfile(handle,(void *)i,sizeof(*i),-1);
  memory_readfile(handle,(void *)s,sizeof(*s),-1);
  memory_readfile(handle,(void *)f,sizeof(*f),-1);
  memory_readfile(handle);
}


La syntaxe générale est la même, sauf que puisque l'on a des pointeurs, on n'utilise plus l'opérateur adresse dans le deuxième paramètre, par contre on utilise l'opérateur contenu dans le troisième.

Pour les tableaux c'est pareil, sauf que tu utilises 1 pointeur directement (même pour l'écriture), et tu écris non pas sur sizeof(tab), qui va te retourner la taille du pointeur, mais sur longueurTab * tailleDonnee.
Par exemple un tableau de 10 int sera écrit sur 40 octets.
Comme les éléments d'un tableau sont tous de même nature, on peut mettre longueurTab * sizeof(*tab), mais puisqu'il faut connaître la taille du tableau de toute manière, ça n'a que peu d'intérêt.
Les tableaux de char sont plus faciles à gérer, puisque strlen(str) ranvoie le nombre de caractères, et que sizeof(char)=1. On écrit donc seulement sur strlen(str). Attention, sizeof(str) renvoie la taille du pointeur, quelle que soit la longueur de la chaîne !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 06/04/2014 13:52 | #


Ok merci Lephénixnoir, pour le Record et le Score ça fonctionne parfaitement et en plus j'ai compris le code surtout (je n'aime pas trop faire copié-collé si je ne comprend pas mais là tu m'as bien expliqué )
Pour mon tableau ("Grille"), c'est un char, donc dans la fonction je rajoute ça ?
memory_writefile(handle,(void *)(&Grille),sizeof([i] je m'est quoi ici ? [/i]));

et pour le lire je rajoute ça ?
memory_readfile(handle,(void *)Grille,4,-1);

iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 06/04/2014 13:59 | #


Si tu as un char, tu mets sizeof(char) (ce qui équivaut à 1 octet).
En revanche si tu as un tableau de char, sizeof(tab) ne fonctionnera pas. Puisque tab est un pointeur, sizeof(tab) renvoie constamment la taille du pointeur, la taille d'un adresse mémoire.
Dans ce cas, tu mets sizeof(type)*nbElements. Tu ne peux pas utiliser strlen(tab) si tu ne fais que classer des nombres ; en effet, une chaîne de caractères est terminée au premier octet nul. Du coup, si un de tes nombres vaut zéro, ça plante.
De plus, si ta grille est un tableau de char, alors grille est un pointeur qui pointe sur le premier élément du tableau. Donc la syntaxe est
memory_writefile(handle,(void *)grille,sizeof(*grille)*nbElements);

Et pour lire
memory_readfile(handle,(void *)grille,sizeof(*grille)*nbElements,-1);

Tout simplement, quelle que soit la taille de ton tableau.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 06/04/2014 14:15 | #


Ok, c'est plus simple que ce que je pensais , et ça va pas boguer avec les bouts de code que tu m'as mis, car mon tableau contiendra des des 0
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 68 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd