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 - Projets de programmation


Index du Forum » Projets de programmation » fxSDK, un SDK alternatif pour écrire des add-ins
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

fxSDK, un SDK alternatif pour écrire des add-ins

Posté le 29/08/2014 22:00

Cette page sert d'index pour la série de topics du fxSDK.

Le fxSDK est une collection d'outils permettant de développer des add-ins pour les calculatrices Casio des séries Graph. C'est une alternative au fx-9860G SDK et PrizmSDK qui ne sont plus activement maintenus, et le compagnon classique de mon noyau gint.

Index des topics

Ce projet existe depuis 2015, alors il y a pas mal de topics liés. En voici une liste complète !

Topics principaux

Installation du fxSDK

Tutoriels

Compatibilité sur calculatrice et PC

Côté PC, le fxSDK est compatible avec Linux, Mac OS, et WSL pour Windows ; normalement tout le monde peut l'utiliser. Je teste constamment sous Linux, et WSL est un Linux donc c'est testé aussi. Je n'ai pas de Mac OS donc il peut y avoir quelques surprises, mais en général c'est l'affaire de corriger un bug ou deux.

En termes de calculatrices, le fxSDK supporte :

Calculatrices monochromes
  • Graph 35+E II
  • Graph 35+ USB / Graph 35+E (SH3/SH4)
  • Graph 75/75+/75+E
  • Graph 85/85 SD/95 (SD) (pas activement testé)

Calculatrices couleurs
  • Graph 90+E / fx-CG 50
  • Prizm fx-CG 10/20

Comment installer le fxSDK et coder des add-ins

Le fxSDK s'installe à partir de dépôts Git sur la forge de Planète Casio (par exemple Lephenixnoir/fxsdk). Il y en a un peu beaucoup, donc manuellement c'est assez long. Pour que ça aille plus vite et pour simplifier le travail des débutants, il y a un outil appelé GiteaPC qui peut faire ça pour vous.

Si vous utilisez Windows, vous aurez besoin de WSL pour accéder à un système Linux dans Windows. Heureusement, Microsoft a fait ça bien et c'est facile à faire. Voyez le tutoriel d'installation de WSL 2 (et l'explication rapide de ce que WSL 2 est).

Si vous utilisez Mac OS, ouvrez l’œil en lisant les topics pour ne pas manquer les informations supplémentaires et éventuelles déviations par rapport à la procédure normale sous Linux.

Méthode automatique avec GiteaPC (plus rapide / recommandée pour les débutants)
  1. Suivez le tutoriel d'utilisation de GiteaPC, qui explique comment obtenir le fxSDK.

Méthode automatique avec plugin VS Code
  1. Yannis300307 a créé un plugin VS Code Casio Dev Tools qui fonctionne sous Windows (avec WSL) et Debian (probablement les dérivés aussi).

Méthode AUR pour les utilisateurs Arch/Manjaro/dérivés (ils se reconnaîtront)
  1. Dark Storm maintient MiddleArch, un dépôt de paquets précompilés qui a entre autres le fxSDK.

Méthode manuelle (plus fine / classique pour les habitués)
  1. Compilez et installez le cross-compilateur GCC pour SuperH.
  2. installez (dans cet ordre) les dépôts fxSDK, OpenLibm, fxlibc, gint ; en option, Slyvtt/µSTL_2.3.

Description sommaire du fxSDK

Pour une introduction à l'utilisation du fxSDK qui montre comment utiliser les outils pour développer un add-in, lisez plutôt les tutoriels d'utilisation de gint. Cette section est juste une description sommaire.

Le cœur du fxSDK est un cross-compilateur GCC pour SuperH, habituellement nommé sh-elf-gcc. Bien sûr on a avec toute la suite d'outils, dont as, ld, objdump, objcopy (entre autres). Contrairement au vieux compilateur du SDK, GCC est un compilateur moderne avec beaucoup d'options et capable de très solides optimisations.

Sur la calculatrice, c'est le noyau gint qui fait la majorité du travail. Il remplace fxlib/libfxcg et une partie de l'OS pour vous offrir des fonctionnalités plus cool et plus rapides. Les add-ins développés avec le fxSDK utilisent gint toutes les trois lignes !

Il y a enfin plusieurs outils utiles sur le PC qui sont utilisés durant le développement ou l'utilisation des add-ins :

  • fxsdk est un script shell qui permet de créer et compiler les projets sans se prendre trop la tête. Le système de compilation officiel pour les add-ins est CMake, mais un système plus ancien de Makefile est encore supporté.
  • fxconv est un outil très polyvalent qui convertit à la compilation les assets (images, polices, maps....). Il permet de travailler avec des logiciels et formats de fichiers normaux sur le PC et d'avoir automatiquement un format optimisé sur la calculatrice. fxconv est extrêmement extensible et chaque projet peut ajouter des conversions personnalisées.
  • fxgxa crée les fichiers g1a (format des add-ins pour Graph monochromes) et g3a (format des add-ins pour Graph couleurs) à partir des programmes compilés.
  • fxlink est un outil de communication qui peut transférer des fichiers vers les Graph 35+E II et Graph 90+E en ligne de commande, mais aussi échanger interactivement avec les add-ins gint par le câble USB, et est couramment utilisé pour réaliser des captures d'écran ou captures vidéo des add-ins.


Changelog et informations techniques

Ci-dessous se trouve la liste des posts annonçant les nouvelles versions du fxSDK, ainsi que des liens vers les instructions/tutoriels supplémentaires publiés avec.

VersionDateInfos supplémentaires
fxSDK 2.10.02 Avril 2023Personnalisation de l'icône Graph 90+ETutoriel d'utilisation de libfxlink
fxSDK 2.9.129 Août 2022
fxSDK 2.9.021 Août 2022Réinstallation complète nécessaire
fxSDK 2.8.017 Mai 2022
fxSDK 2.7.119 Mars 2022
fxSDK 2.7.031 Décembre 2021Collecter toutes les images d'un projet avec fxconv
fxSDK 2.6.030 Août 2021Génération de structures complexes avec fxconv
fxSDK 2.5.24 Juillet 2021
fxSDK 2.5.14 Juillet 2021
fxSDK 2.5.025 Mai 2021
fxSDK 2.4.027 Avril 2021
fxSDK 2.3.130 Janvier 2021
fxSDK 2.3.029 Janvier 2021Introduction de fxconv-metadata.txtInstructions de migration vers CMake
Séparation de libprof en fx/cg



Précédente 1, 2, 3 ··· 7, 8, 9, 10, 11, 12, 13 ··· 20 ··· 30 ··· 39, 40, 41 Suivante
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 10/07/2015 22:45 | #


Ah, chouette
faut que je me compile un petit GCC
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 12/07/2015 10:47 | #


Lephenixnoir a écrit :
Ça me donne des fichiers comme ça :
[b]cpp.lang:[/b]
##
#    fxSDK syntax definition file.
#    Warning: this file follows a strict syntax. Please do not edit.
##



[Meta]

lang:    C/C++



[SingleRules]



name:    types.native
regex:    \b(?:void|char|short|int|long|float|double|enum|union [i][...][/i]
color:    #55afff

name:    types.extra
regex:    \b(?:ushort|u?int(?:8|16|32)_t|s?size_t|template|class [i][...][/i]
color:    #55afff

name:    types.qualifiers
regex:    \b(?:register|extern|const|static|volatile|inline [i][...][/i]
color:    #ff2e4c



name:    constants.define
regex:    \b(?:true|false|NULL|nullptr)\b
color:    #ae6deb

name:    constants.numeric
regex:    \b\d+\b|\b0x[\dA-Fa-f]\b
color:    #ae6deb



name:    functions.call
regex:    \b[A-Za-z_]\w*(?=\()
color:    #55afff

name:    functions.def
regex:    \b[A-Za-z_]\w*\s+([A-Za-z_]\w*)(?=\()
color:    #80d435



name:    statements
regex:    \b(?:if|else|for|do|while|switch|case|default|continue [i][...][/i]
color:    #ff2e4c

name:    statements.cpp
regex:    \b(?:try|catch|throw|new|delete|operator|namespace)\b
color:    #ff2e4c



name:    preprocessor
regex:    ^\s*#\s*(if|else||elif|ifdef|ifndef|endif|undef|include|define|pragma|not [i][...][/i]
color:    #ff2e4c

name:    iso646
regex:    \b(?:and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq [i][...][/i]
color:    #ff2e4c

name:    comment.single
regex:    //[^\n]*
color:    #464646



[MultiRules]



name:    comment.multi
open:    /\*
close:    \*/
color:    #464646



Au fait, Je trouve que c'est pas très super de faire des trucs comme ça pour le parsage par regex, c'est carrèment galère (et pour le parsage par ligne, ça passe mais j'aime pas trop) je pense que le mieux serait de mettre les règles dans des conteneurs pour bien différencier les attributs de chaque règle. Par exemple:

<Rule>
name:    iso646
regex:    \b(?:and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq [i][...][/i]
color:    #ff2e4c
</Rule>

<Rule>
name:    comment.single
regex:    //[^\n]*
color:    #464646
</Rule>


Ainsi il suffit de parser récupérer toutes les <Rule>text</Rule> avec un regex puis de parser les attributs dans chaque règle, ça évite les erreurs et c'est plus joli
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 12/07/2015 11:10 | #


Moi je vois deux problèmes à ça.

D'une part ça alourdit vachement la syntaxe. Ce fichier est fait pour être simple et compréhensible par tout le monde.
Tu pourrais au moins mettre ça :
<comment.single>
regex:  //[^\n]*
color:  #464646
</comment.single>

même sans vérifier la balise fermante.

Mais franchement, je trouve ça moche. Ça mélange la syntaxe originelle avec du HTML (oui, c'est aussi ce que fais mon style parser, mais c'est aussi pour ça que je veux le modifier), c'est moins intuitif à éditer (il est fait pour être léger et compréhensible) et c'et pas franchement utile.

Ben oui, pourquoi ne pas ajouter des guillemets aussi pour que ce soit plus représentatif ?
name:   "comment.single"
regex:  "//[^\n]*"
color:  "#464646"


En plus ta syntaxe a le défaut que contrairement à la mienne, elle ne permet pas du tout de faire ça :
name:   rule1
regex:  [i]regex[/i]
color:  #ff0000

name:   rule2
regex:  [i]regex[/i]

Où implicitement, la règle deux prend la même couleur que la une.

Tu fais comme tu veux, mais moi je trouve ça vraiment inutile et superficiel. Une ligne vide sépare deux règles, ça suffit largement.

Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 12/07/2015 13:44 | #


J'ai un gros bug : lorsque je lance la compil' depuis le fxSDK, il me dit que GCC n'a pas été trouvé.
Si je lance à la main le Makefile généré, tout va bien…
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 12/07/2015 15:52 | #


C'est pas vraiment un gros bug, mais plus probablement de ta faute : tu as du ajouter le dossier de ton gcc au path dans le .bashrc, qui est lancé quand on ouvre un terminal (ce qui explique que ça fonctionne manuellement), mais pas dans le .profile, qui est exécuté au lancement de la session (ce qui explique que ça ne fonctionne pas automatiquement) !
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 12/07/2015 15:56 | #


Ah, c'est donc ça.

Ajouté le 13/07/2015 à 19:28 :
Idées de trucs à ajouter :

Raccourcis clavier :
→ Ctrl (+ Shift) + Tab pour changer d'onglet, dans un sens et dans l'autre
→ Ctrl + Lettre pour ajouter le fichier ouvert au projet (ce qui permet de faire Ctrl + N > Ctrl + touche pour ajouter rapidement un nouveau fichier)

Éventuellement la coloration du log d'erreur de GCC (orange le mot "warning" rouge "error", pas besoin de plus je pense) histoire de rapidement trouver la ligne qui pose problème dans le log.

Ajouté le 13/07/2015 à 21:02 :
Ah si, aussi : une petite icone à coté du nom de l'onglet pour savoir si un fichier est enregistré ou non

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 13/07/2015 22:47 | #


Dark storm a écrit :
→ Ctrl (+ Shift) + Tab pour changer d'onglet, dans un sens et dans l'autre
→ Ctrl + Lettre pour ajouter le fichier ouvert au projet (ce qui permet de faire Ctrl + N > Ctrl + touche pour ajouter rapidement un nouveau fichier)

Bonne idée ! Je m'en occuperai.

Dark Storm a écrit :
Éventuellement la coloration du log d'erreur de GCC (orange le mot "warning" rouge "error", pas besoin de plus je pense) histoire de rapidement trouver la ligne qui pose problème dans le log.

C'est que je commence à être calé niveau coloration !
Ok, ça aussi c'est facilement faisable.

Dark Storm a écrit :
Ah si, aussi : une petite icone à coté du nom de l'onglet pour savoir si un fichier est enregistré ou non

Ah oui, y'a ça aussi... va pas falloir que ça encombre trop l'interface
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 13/07/2015 23:51 | #


Un petit cercle (caractère unicode ça doit se faire non ?) qui est vide lorsque le fichier est enregistré, plein sinon. En se démerdant bien ça peut même être ton trigger pour fermer le fichier (comme dans ST quoi )

Je me suis dit que pour tester, y'a qu'un test grandeur nature qui peut fonctionner, du coup je me fais le moteur de MS4 dans la soirée

MS4 parce que je saute MS3 (comme MS1) parce qu'il ne me convient pas…
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 14/07/2015 09:22 | #


Dark storm a écrit :
Un petit cercle (caractère unicode ça doit se faire non ?) qui est vide lorsque le fichier est enregistré, plein sinon. En se démerdant bien ça peut même être ton trigger pour fermer le fichier (comme dans ST quoi )

Ben oui Excellent !

Dark Storm a écrit :
Je me suis dit que pour tester, y'a qu'un test grandeur nature qui peut fonctionner, du coup je me fais le moteur de MS4 dans la soirée

Hey oh, brutalise pas mon SDK hein ! X)

Dark Storm a écrit :
MS4 parce que je saute MS3 (comme MS1) parce qu'il ne me convient pas…

Impossible pour moi de trouver le 3 ou le 4.
Mais faut dire aussi que le nom de MS3 a quelques restes peu propices à un développement efficace...

Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 14/07/2015 09:40 | #


Le 4 c'est normal, le 3 est là : http://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=2024

Bref, [/HS]
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 14/07/2015 10:22 | #


Sur insistance prononcée de Dark Storm (j'ai failli me faire passer à tabac), j'ai créé un repo pour le fxSDK.

Je pense que je vais suivre un modèle de mise à jour semblable à la rolling release, comme ça vous pourrez mettre le logiciel à jour quand vous le voulez à partir du repo.

Pour cloner la version actuelle :
$ git clone ht[color=auto]t[/color]ps:/[color=auto]/[/color]Lephenixnoir[color=auto]@[/color]bitbucket.org/Lephenixnoir/fxsdk.git

Ensuite, pour la compiler et l'utiliser :
$ make
$ ./fxSDK

Pour l'instant, vous devez lancer le fxSDK depuis son dossier. Évitez le raccourci bureau.

Ajouté le 14/07/2015 à 12:12 :
J'ai mis à jour le repo avec différentes améliorations et corrections signalées par Dark Storm :
→ Oublis sur le colorateur syntaxique
→ Options de compilation et de linkage
→ Numéros de ligne et polices dans l'éditeur de code
→ Quelques améliorations mineures dans le code
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 14/07/2015 12:14 | #


Cool, je màj

Ajouté le 14/07/2015 à 12:22 :
Rapidement, quelques question :
→ Les options de compilation sont pas sauvegardées ?
→ C'est quoi la police de l'éditeur ? Chez moi elle est pas monospacée. Peut être l'inclure dans les fichiers source si elle n'est pas courante.
→ Manque aussi l'option "Rebuild all" (si tu peux la rendre automatique lorsque les options du compilo ont changé, ça serai top )

Bref, c'est pas si évident que ça de faire un truc 100% fxSDK à l'heure actuelle
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 14/07/2015 12:25 | #


Dark storm a écrit :
→ Les options de compilation sont pas sauvegardées ?

Aah m*rde !

Dark Storm a écrit :
→ C'est quoi la police de l'éditeur ? Chez moi elle est pas monospacée. Peut être l'inclure dans les fichiers source si elle n'est pas courante.

« font-family: 'Droid Sans Mono', 'Free Mono', 'Liberation Mono', 'Inconsolata', 'Consolas'; »
Faudrait peut-être que j'en rajoute encore derrière... peut-être avec 'monospace' ?

Dark Storm a écrit :
→ Manque aussi l'option "Rebuild all" (si tu peux la rendre automatique lorsque les options du compilo ont changé, ça serai top )

Hmm, pas facile : comme le Makefile change à chaque fois... enfin, je vais m'en occuper.

Dark Storm a écrit :
Bref, c'est pas si évident que ça de faire un truc 100% fxSDK à l'heure actuelle

Qui a jamais prétendu le contraire ?
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 14/07/2015 12:39 | #


Rebuild all == make clean > génération du makefile > make

Ajouté le 14/07/2015 à 12:49 :
J'ai l'impression que t'as pas commit la nouvelle feuille de style… J'ai changé manuellement, j'ai bien Droid Sans M.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 14/07/2015 13:21 | #


Dark storm a écrit :
Rebuild all == make clean > génération du makefile > make

Je sais, c'est bien ce que je vais faire.

Dark Storm a écrit :
J'ai l'impression que t'as pas commit la nouvelle feuille de style… J'ai changé manuellement, j'ai bien Droid Sans M.

Non, je ne commit pas chaque modification unique.

Ajouté le 14/07/2015 à 13:47 :
Dark storm a écrit :
→ Les options de compilation sont pas sauvegardées ?
→ C'est quoi la police de l'éditeur ? Chez moi elle est pas monospacée. Peut être l'inclure dans les fichiers source si elle n'est pas courante.
→ Manque aussi l'option "Rebuild all" (si tu peux la rendre automatique lorsque les options du compilo ont changé, ça serai top )

Les trois sont faites. Je rajoute l'automatisation lorsqu'on modifie les options.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 14/07/2015 13:57 | #


Parfait, merci
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 15/07/2015 15:06 | #


J'ai envoyé quelques commits sur le repo du wrapper.

Au programme, beaucoup de modifications et nettoyage interne, plus notablement des changements dans la gestion des erreurs et un support bien plus évolué des bitmaps (supporte le 32 bits, 24 bits, monochrome et partiellement le 16 bits).

Ajouté le 15/07/2015 à 16:51 :
Hop, j'ai également ajouté une option appelée « dump » (-d) qui fait l'exact inverse du wrapper : elle affiche le contenu du header d'un fichier g1a

Une option bien pratique pour moi. Ajoutez à cela du nettoyage, encore et toujours (oui c'est incessant, mon dieu ce que je programmais mal il y a... euh... oups).

J'avance bien, une fois que le wrapper sera vraiment fonctionnel il pourra accompagner le fxSDK sans causer des problèmes toutes les deux minutes
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 15/07/2015 17:29 | #


Ah, chouette. Une idée supplémentaire, dans le Make, ajouter un install: sudo cp g1a-wrapper /usr/local/cross/bin
Comme ça il se retrouve dans le path avec les autres utilitaires de compilation
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 15/07/2015 17:32 | #


Dark storm a écrit :
Ah, chouette. Une idée supplémentaire, dans le Make, ajouter un install: sudo cp g1a-wrapper /usr/local/cross/bin
Comme ça il se retrouve dans le path avec les autres utilitaires de compilation

Hmm, j'ai déjà un make install qui le fout dans le $HOME/bin, je peux éventuellement le mettre dans /usr/bin pour plus de convenance, mais /usr/local/cross/bin ça m'emmerde vraiment puisque personne n'est vraiment supposé l'avoir installé là.

Ajouté le 15/07/2015 à 17:33 :
Je peux toujours m'arranger pour le foutre à côté du sh3eb-elf mais bon, c'est pas terrible.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 15/07/2015 17:33 | #


Bah, comme c'est ça ira quand même.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 15/07/2015 17:36 | #


Je pense quand même le mettre dans /usr/bin parce que c'est plus commode... t'en penses quoi ?
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Précédente 1, 2, 3 ··· 7, 8, 9, 10, 11, 12, 13 ··· 20 ··· 30 ··· 39, 40, 41 Suivante

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 85 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