Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » BIDE - Basic IDE
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 Message

BIDE - Basic IDE

Posté le 26/08/2016 19:36

Je vous présente mon nouveau projet : un IDE pour le Basic (casio bien entendu).

Lien de téléchargement


Un petit malin a écrit :
Mais ça va faire un bide ton projet !

...
(bref, si quelqu'un a un meilleur nom pour ça, qu'il le dise. )

En particulier pour les prochains CPC, un IDE pour le basic serait assez utile (enfin pour tout programme basic, c'est horriblement chiant de faire de grands programmes illisibles sur un écran monochrome (donc sans coloration syntaxique) de 21*6 sans aucune indentation).

Todo list (ça c'est pour moi) :
- Conversion des lignes des options en \r\n (ou édition directement dans BIDE)
- Optimisation : enlèvement des accolades, crochets et parenthèses fermants
- Conversion optimisée png -> multi drawstat
- Importation automatique sur la calculatrice
- Option pour générer du super drawstat

Les features de cet IDE seraient :

- Remplacement automatique des caractères spéciaux : par exemple si l'utilisateur tape "- >" (sans l'espace bien entendu) ça le remplacera automatiquement par "→". Pareil pour =>, <=, >=, etc. (pas fait)
Pour les autres caractères qui n'ont pas vraiment de représentation ASCII (disp par exemple) le remplacement s'effectue en tapant un '&' avant le nom de caractère, dans ce cas taper "&disp" le remplaçera par "◢".
Si l'utilisateur ne veut pas le remplacement (par exemple, s'il veut avoir "- >" et non pas "→") il lui suffit de séparer le "mot-clé" en deux parties et de les recoller après. Le remplacement se fera uniquement si l'utilisateur tape tout le mot d'un coup.
Cela remplace aussi les noms de fonction, si l'utilisateur tape "locate" ce sera remplacé automatiquement par "Locate".

Là où vous pouvez m'aider : me fournir les caractères unicode correspondant à chaque caractère ("◢" = 0x0C, etc).

- Possibilité de nommer ses variables. Il sera possible par exemple de mettre "vieJoueur" comme nom de la variable "A", et dans ce cas la variable A sera remplacée par "vieJoueur" dans le programme. Ca évite de se rappeler à chaque fois de l'utilité de chaque variable. (pas fait, utiliser les octets de header pour identifier les g1m)

- Aide au niveau des fonctions graphiques : survoler une fonction graphique montrera son résultat dans une petite pop-up. (pas fait)

- Indentation automatique lors de l'importation du projet (fait), et lors de l'écriture (pas fait) (par exemple, écrire "If A=2" puis faire une nouvelle ligne mettra automatiquement un ":Then" après le "A=2", un "IfEnd", puis augmentera le niveau d'indentation).

- La coloration syntaxique (c'est la base ), dites si vous voulez un style du type notepad++, eclipse, ou autre. Je préfère personnellement celui de notepad++. (fait à moitié)

- D'autres fonctions assez utiles inspirées d'eclipse : survoler une fonction affiche sa documentation, l'auto-completion, la sidebar à droite montrant les todos/warnings/erreurs, etc. (pas fait)

- Optimisation automatique lors de la compilation : enlever les guillemets/crochets/parenthèses/accolades à la fin d'une instruction (d'autres suggestions pour optimiser ?). La désoptimisation se fera à l'importation du .g1m (parce que des parenthèses pas fermées c'est chiant (pas fait)

- Support de B2C pour pouvoir tester sur l'émulateur facilement (pas fait)

- L'IDE refusera de compiler le programme s'il y a un quelconque goto dedans (j'ai du compromettre)

- Support de commentaires style C (// et /*...*/) (pas fait)

Voilà, si vous avez d'autres suggestions n'hésitez pas à les dire et aussi, si quelqu'un a un bon tutoriel sur les GUI en java, ça me serait bien utile (sachant que j'en ai trouvé aucun de compréhensible et que j'y comprends toujours rien).


Pages : Précédente1, 2, 3, 4Suivante
ExagydeHors ligneMembrePoints: 86 Défis: 0 Message

Citer : Posté le 06/05/2017 14:22 | # | Fichier joint


J'ai juste écris un petit programme de test
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 Message

Citer : Posté le 06/05/2017 14:43 | #


Hmm, je pense que tu n'as pas respecté les délimitations, ce qui fait que BIDE ne voit aucun programme et donc évidemment le g1m est vide (y'a que le header). Chaque programme doit avoir la forme suivante :


#
#Program name: ABCDEFIJ
#Password: <no password>
//...
#End of program
#
#Program name: XXX
#Password: <no password>
//...
#End of program


Ce sera réglé dans la prochaine version (que je coderai pendant les vacances parce que là y'a le bac ) Il faut bien respecter les espaces et les majuscules.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
ExagydeHors ligneMembrePoints: 86 Défis: 0 Message

Citer : Posté le 06/05/2017 14:51 | #


Ok merci beaucoup
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 Message

Citer : Posté le 01/07/2017 12:47 | # | Fichier joint


BIDE (Basic IDE) est un éditeur de texte pour programmes Basic Casio (.g1m, .g2m, .g3m, .g1r, .g2r) permettant d'éditer vos programmes basic sur PC, afin de ne pas être limité par la calculatrice (écran monochrome 6*21, faible vitesse de frappe...)

Il nécessite Java, s'il vous fait une erreur dès le lancer et que vous n'avez pas java d'installé vous devez le télécharger ici. Les sources sont ici.



Features :
- Support de la totalité des caractères casio
- Deux polices disponibles :
DejaVu Avec Casio (basée sur DejaVu Sans Mono)
DejaVu Avec Casio (basée sur DejaVu Sans Mono)

Casio Graph
Casio Graph

- Features d'un éditeur de texte : Ctrl+Z, Ctrl+F, Ctrl+S, coloration syntaxique, tabulations, autocomplétion
- Editeur (très) basique de pictures/captures
- Conversion png <-> picture
- Supporte les pictures qui ne font pas 2048 octets (voir Picture 1024)
- Gestion de mot de passe
- Escape hexadécimale avec &#XX; ou &#XXXX;
- Gestion des macros
- Customisation (couleur du texte, du fond, etc)
- Importation automatique sur l'émulateur Manager PLUS
- Générateur de Multi Drawstat
- Sélecteur de caractère
- Utilisation possible en CLI
- Benchmark pour optimiser les programmes

FAQ :
- À quoi servent les boutons du menu ?
B : créer un programme basic
P : créer une picture
C : créer une capture

- Comment insérer => (ou ->, <=, >=, !=) dans un string sans que ça fasse ⇒, →, ≤, ≥, ≠ ?
Il faut remplacer le '-' ou '=' par &-; ou &=;

- Comment entrer du texte sans qu'il soit interprété en tant que commandes (ce qui fait une erreur lors de la sauvegarde en g1m) ?
Il faut utiliser la directive #nocheck, par exemple :
#Program name: Physique
#Password: <no password>
#nocheck
//votre cours ici


- Pourquoi il y a des caractères chelous dans mes strings ? (&n_stat;, &⁠⁠#7FD4; etc)
Pour faire simple : vous pouvez laisser ça, si ça vous gêne pour la lecture ou autre vous pouvez faire Tools -> Clean up strings.
Explications détaillées
Explications détaillées
Le basic casio fonctionne avec un système d'opcodes : chaque instruction, ou caractère, correspond à un et un seul nombre. Ainsi, l'opcode "If" est différent des caractères "I" et "f". Comment donc différencier les deux ?

La calculatrice différencie les 2 internalement, ce qui fait par exemple que le curseur ne peut pas se mettre au milieu de l'opcode "If" car il le considère comme un seul caractère. Ce n'est pas le cas si vous tapez les lettres "I" et "f" manuellement.

Mais BIDE n'a aucun moyen de différencier les 2, ici il n'y a que des lettres. En dehors des strings/commentaires, la solution est simple : étant donné qu'il ne peut pas y avoir de lettre minuscule sans causer une erreur de syntaxe, BIDE assume toujours que c'est l'opcode.

Toutefois, dans les strings, il peut y avoir les 2, et là la seule manière de les différencier est de les représenter autrement. En effet, si lors de l'importation BIDE convertissait l'opcode et les caractères tous deux en "If", lors de l'exportation en g1m il n'y a aucun moyen de savoir s'il faut convertir en opcode ou en caractères.

L'autre représentation est ainsi une entité ; ici, la lettre "n" est représentée par la lettre "n", et l'opcode n_stat (visuellement "n") est représenté par &n_stat;.

Maintenant, pourquoi il y a plein d'opcodes dans vos strings au lieu qu'il y ait des lettres ? Tout simplement parce que vous avez tapé vos strings avec l'éditeur intégré de FA-124. FA-124 est confronté au même problème que BIDE : impossible de différencier les opcodes et caractères lors de la conversion texte -> g1m. FA-124 applique une politique de "toujours convertir en opcode quand c'est possible". Du coup, vos "n" se retrouvent convertis en l'opcode "n stat". En soi ça ne pose pas de problème, sur la calculatrice c'est visuellement pareil.

BIDE fait la différence entre "lettre n" et "opcode n_stat" et montre donc cette différence. Maintenant, pourquoi ne pas faire pareil que FA-124 et traiter tout en tant qu'opcode quand possible ? Tout simplement parce que certains programmes ne fonctionneraient plus : par exemple, si je cherche la lettre "s" dans un string, et que manque de bol cette lettre a été remplacée par l'opcode "se", la recherche donnera de mauvais résultats. Dans l'autre sens (toujours traiter en tant que caractère quand c'est dans un string) ça cause des problèmes aussi, notamment à cause de la fonction Exp() qui exécute le contenu d'un string. Ainsi un string contenant des opcodes (Xor, Or, etc) qui auraient été convertis en lettres ferait une erreur syntaxe (exemple).

Tout ça est assez compliqué, mais c'est le basic casio qui rend la tâche compliquée ; convertir texte <> g1m n'est pas toujours facile.


- Comment éditer une picture/capture ?
Appuyez sur clic gauche pour faire du noir, et clic droit pour faire du blanc. Je conseille d'éditer dans un éditeur d'image externe, l'éditeur de BIDE n'étant pas très poussé.

- Pourquoi il y a 2 cadres dans les pictures ?
Une explication détaillée est fournie par Picture 1024. N'éditez pas le 2e cadre (ni la taille de la picture) si vous ne savez pas ce que vous faites.

- Quelle est la différence entre g1m, g2m, g3m, g1r et g2r ?
Aucune différence au niveau du format, sauvegarder ou renommer un g2r en g1m le rendra toujours lisible.

- Puis-je utiliser BIDE pour Classpad/Prizm ?
BIDE est conçu (et testé) sur les calculatrices monochromes, mais il reste possible de l'utiliser pour Prizm (ou Graph 90+E) car le format g3m est le même que le g1m. Les opcodes spécifiques à la Prizm sont également ajoutés. Toutefois, il n'est pas possible d'utiliser des pictures, qui sont dans un format différent.
Les Classpad ont un format totalement différent, il n'est donc pas géré.

- Le générateur de Multi Drawstat me génère des sprites inversés ou déformés, comment je fais ?
Il faut bien mettre votre ViewWindow à 1,127,0,63,1,0,0,1,1 (origine en haut à gauche). Vous pouvez également utiliser le macro graphxyVWin() ou initGraphScreen() qui fera ça.

- À quoi servent "show character list" et "show syntax coloration test" ?
Cela ne vous servira surement pas, "show character list" montre une liste de tous les caractères casio (pour ceux voulant utiliser une autre police) et "show syntax coloration test" est pour tester une coloration syntaxique qui pourrait être implémentée sur un autre éditeur.

- Comment faire un programme "base" ?
Il faut rajouter l'opcode &negative_B; à la fin.

Utilisation en CLI
Utilisation en CLI
L'utilisation est toute simple, il y a 2 commandes :
--to-g1m target.g1m prog1.bide prog2.g1m ...
--to-txt target.bide prog1.bide prog2.g1m ...
Les fichiers .bide sont tout simplement des fichiers texte, attention à bien respecter la syntaxe (les directives de préprocesseur). Pour mettre plusieurs programmes dans un seul fichier .bide, il faut les séparer par #End of program.


Utilisation des macros
Utilisation des macros
Les macros se définissent comme en C, avec #define text replacement, ou #define fonction(a,b) a+b.
Ainsi, si vous utilisez la variable M pour la vie du joueur, vous pouvez faire #define vieJoueur M.
Quelques choses à savoir sur les macros :
- Sauvegarder en .g1m ne conserve pas les macros. Pour les conserver, il faut enregistrer en .bide (fichier texte).
- Les macros sont définis sur l'ensemble des programmes, peu importe où ils sont déclarés. En cas de conflit, c'est le macro déclaré en premier qui l'emporte. Par exemple dans le code suivant :
#define vieJoueur A
vieJoueur -> C
#define vieJoueur B
vieJoueur -> D

Dans les 2 cas, vieJoueur sera remplacé par A.
- Les macros ignorent les strings/commentaires
- Les macros ont une priorité sur les opcodes
- Les macros sont classés dans l'ordre alphabétique inversé
- Les lignes comportant des macros peuvent fausser la colonne donnée en cas d'erreur
- Les macros supportent les fonctions
- Il est déconseillé d'overloader des macros (utiliser un macro dans un autre macro)


Utiliser l'émulateur
Utiliser l'émulateur
Pour utiliser l'émulateur, il faut être sous Windows (normal, l'émulateur ne marche que sous windows) et avoir l'émulateur Manager PLUS (il doit y avoir "manager plus" dans le titre).

Il faut également l'activer dans les options : mettez "runOn" en "emulator".


Lors de la première utilisation de l'émulateur, il peut être un peu lent (en particulier lors de l'ouverture de l'explorateur de fichiers), s'il vous fait une erreur il faut alors re-sauvegarder.

Les erreurs que vous pouvez avoir sont :
- "Could not find emulator" : l'émulateur n'est pas ouvert.
- "Could not find memory menu" : plusieurs cas sont possibles.
Parce que BIDE appuie automatiquement sur les touches nécessaires, il comporte des sécurités : ici, l'image de l'émulateur ne correspond pas à l'image de référence, il s'arrête donc (sinon il continue, et bonne chance pour le stopper )
Si l'émulateur n'affiche effectivement pas le menu mémoire, il faut se positionner sur le menu des programmes pour que ça fonctionne.
Ensuite, regardez si vous n'avez pas redimensionné l'émulateur (taille de l'écran, ou taille de la fenêtre). Il est parfois nécessaire de le redémarrer.
Si l'écran de mémoire s'affiche correctement, mais qu'il n'est pas à la bonne place, il faut changer les coordonnées de l'écran dans les options de BIDE en se basant sur celles de votre émulateur. Pour les savoir, faites un screenshot (tools -> take emulator screenshot).
Si vous avez un émulateur différent (par exemple celui de Graph 90) il est alors nécessaire de changer les images de référence (directement dans le .jar), et peut être les dimensions de l'écran.
- "Couldn't open file system" : soit l'explorateur de fichiers s'est ouvert trop tard (réessayez), soit il ne s'est pas ouvert du tout (ce qui est bizarre).


Faire un benchmark
Faire un benchmark
Pour faire un benchmark, il faut utiliser les macros beginBenchmark() et endBenchmark(), à placer au début et à la fin de chaque test. Ensuite, importez votre programme sur émulateur, puis exécutez le. Enfin, faites Tools->Run Benchmark.

Les benchmarks sont limités à 10 secondes, et ont une précision d'environ +/- 75ms.


Créer une police
Créer une police
Si vous voulez créer une police de caractères, il faudra un peu de boulot.
Tout d'abord, je vous conseille de choisir une police qui supporte déjà beaucoup de caractères unicode, ça vous évitera de refaire les caractères russes et grecs (et il y en a beaucoup). Regardez aussi pour les formes géométriques et les symboles mathématiques.
Pour faire la police, FontStruct vous permet de créer une police de toutes pièces (c'est ce que j'ai utilisé pour la police Casio) mais vous aurez de toute façon besoin de FontForge. Si vous voulez utiliser une police déjà existante, vous n'aurez besoin que de FontForge (suffit de rotater et agrandir des caractères déjà existants).
Ouvrez la police DejaVu Avec Casio avec FontForge (et votre police aussi). Allez vers le caractère U+E000. Les caractères à partir de U+E000 sont dans le domaine privé, c'est à dire qu'aucune police ne les supporte. Ils n'existent pas dans Unicode, c'est pourquoi ils sont dans le domaine privé.
Vous avez 101 caractères à créer, mais tous peuvent être faits à partir de caractères déjà existants.

Commençons par les caractères avec serifs : nMGTPEr. Si votre police est avec serifs, je vous conseille d'en prendre une sans serif. Ici il vous suffit d'ajouter des serifs à ces lettres.
On a ensuite les caractères gras : ABCDEFiePrXY. Ici j'ai tout simplement copié/collé les caractères de la version gras de la police, si votre police n'a pas de version gras choisissez en une autre.
Ensuite, les caractères inversés : B,R,L,=,<,>,<=,>=. Il suffit de dessiner un rectangle autour de la lettre. Attention : B,R,L doivent prendre toute la largeur, mais pas les autres !
On a ensuite les caractères divers, je vais faire au cas par cas :
- E00C : dessinez un rectangle de même taille que le symbole degré (°).
- E00D : concaténez les exposants '-' et '1'. Pareil pour E02A.
- E00E, E010 : copiez collez l'exposant r et g (déjà disponibles dans unicode).
- E00F : concaténez les indices 1 et 0.
- E011, E012, E013, E014, E017 : combinez les lettres x et y, et l'overline ou l'accent circonflexe.
- E018, E019 : combinez a,o et l'underline.
- E027, E028, E029 : rétrécissez les indices 0,1,2.
- E02B : prenez le subscript x (attention, il doit être dans le coin en haut à droite).
- E02C : rétrécissez le 'n'.
- E02D : rétrécissez le '3'.
- E064 : rétrécissez le 'E'.
Il vous reste alors tout l'alphabet en indice. Vous pouvez déjà prendre les caractères unicode indices et exposants (en déplaçant les exposants vers le bas), il vous manquera alors les lettres CFQSXYZq. Il suffira de rétrécir ces majuscules pour qu'elles aient la même taille que les autres indices (pour le 'q', il suffit d'inverser le 'p').
Enfin, pour E062 et E063, copiez collez les caractères '*' et '/'. Il faut ensuite remplacer dans la table ascii ces caractères par × et ÷.

Pour le reste des caractères, regardez dans le test des caractères lesquels manquent, et créez les en combinant d'autres caractères (ou en les faisant vous même, mais c'est chaud).


Liste des messages d'erreur
Liste des messages d'erreur

- The char '...' shouldn't be here, BIDE did not recognize that opcode. Check the spelling and case
BIDE n'a pas reconnu l'opcode spécifié, vérifiez que vous avez bien respecté les majuscules et les espaces (l'opcode "And" comporte un espace avant et après, par exemple). Attention à bien remplacer les '&' par "&⁠amp;⁠" (si vous ne faites pas une entité bien entendu).
- Invalid g1m
Le g1m est invalide.
- Couldn't find the name of the program ..., make sure to include the directive "#Program name: <name>" at the beginning. Replace Program by Picture or Capture if necessary
À la première ligne du programme, il faut mettre "#Program name: " suivi du nom. Respectez bien les espaces et les majuscules. Il faut mettre "#Capture name: " si c'est une capture, et "#Picture name: " si c'est une picture.
- Invalid picture size
La taille de la picture n'est pas valide.
- No programs detected
Vous essayez de créer un g1m sans aucun programme, ce qui fera une erreur.
- Program "..." has a name too long (8 characters max)
Le programme spécifié a un nom trop long (8 caractères maximum).
- Capture "..."'s name should start with "CAPT"
Le nom d'une capture doit commencer par "CAPT".
- Picture "..."'s name should start with "PICT"
Le nom d'une picture doit commencer par "PICT".
- Number of ... should be 1-20
Le numéro de la capture/picture spécifiée doit être de 1 à 20 inclus.
- Invalid picture/capture number
Une capture/picture doit avoir un numéro après "CAPT" ou "PICT".
- Program "..." has a password too long (8 characters max)
Le programme spécifié a un mot de passe trop long (8 caractères maximum).
- Line length isn't 130
Les lignes des pictures/captures doivent être longues de 130 caractères. Vérifiez que vous avez bien respecté la bordure.
- Border error
Il manque la bordure gauche/droite de la picture.
- Unallowed character '...' in picture
Les pictures/captures doivent seulement avoir les caractères de pixels.
- Hex escape must be 2 or 4 characters long
L'escape hexa doit être uniquement de 2 ou 4 caractères, ajoutez des 0 si nécessaire.
- BIDE is denied access to the file at "..."
Fermez les programmes ayant accès au g1m (FA-124, éditeur hexa...) ou essayez de lancer BIDE en mode administrateur.


Postez ici s'il y a une erreur (regardez la liste des erreurs avant) ou un bug, ou juste pour du feedback
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 Message

Citer : Posté le 01/07/2017 22:25 | # | Fichier joint


BIDE v2.1 :
- Correction d'un bug d'encodage
- Correction du conflit des caractères E5DE et E67E (et ajout d'une détection de duplications)
- Ajout d'une icône
- Ajout d'une progression détaillée pour l'enregistrement
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Alexis03Hors ligneMembrePoints: 2 Défis: 0 Message

Citer : Posté le 02/07/2017 14:36 | #


Bonjour !
Je réfléchit à m'acheter la nouvelle Casio Graph 90+E.
Sauriez-vous si BIDE est disponible pour la Casio Graph 90+E (j'ai déjà posté un message pour savoir si LuaFX était compatible avec ce modèle et l'on m'a répondu que non pour le moment) ?
Si non, quelqu'un aurait-il prévu de porter les logiciels du site sur ce modèle ?
Bonne journée,
Alexis
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 Message

Citer : Posté le 02/07/2017 20:24 | #


Les opcodes (instructions, telles If, Locate, etc) des caltos monochromes sont aussi disponibles sur la Prizm, c'est donc en théorie compatible avec la graph 90+E.

Toutefois la Prizm (ou 90+E) ne lit pas les g1m mais les g3m, que BIDE ne prend pas en charge. Selon cake il suffit de changer quelques octets dans le header, du coup j'essaierai de pouvoir les lire pour la version 2.2 (qui devrait arriver bientôt).
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 Message

Citer : Posté le 03/07/2017 15:46 | # | Fichier joint


BIDE v2.2 :
- Cliquer "annuler" ne crée plus l'onglet
- Ajout des caractères unicode pour une meilleure lisibilité, changement en conséquence de la police pour DejaVu Sans Mono
- Ajout d'un bouton "OP" pour la liste des opcodes. À noter que, pour éditer la liste des opcodes, il faut modifier le .txt à l'intérieur du .jar et non pas modifier l'onglet.
- Refactorisation du code (possibilité de nouveaux bugs )
- Ajout d'espaces pour les opérateurs afin d'améliorer la lisibilité
- Ajout des opcodes spécifiques à la Prizm/Graph 90+E

Merci à Cake pour sa refc et son aide pour trouver les caractères unicode
Alexis pour répondre à ta question, BIDE prend en charge les programmes basic de graph 90+E (même format que g1m) mais pas les pictures au format g3p, qui est crypté et compressé. Je m'occuperai peut être de ça dans un futur lointain
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark stormHors ligneMembre d'honneurPoints: 10765 Défis: 174 Message

Citer : Posté le 03/07/2017 18:24 | #


- Ajout d'un bouton "OP" pour la liste des opcodes. À noter que, pour éditer la liste des opcodes, il faut modifier le .txt à l'intérieur du .jar et non pas modifier l'onglet.


C'est dommage je trouve, tu pourrais très bien ajouter cela à l'IDE
Ça reste bête de devoir ouvrir l'exécutable pour ajouter des opcodes
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 Message

Citer : Posté le 04/07/2017 04:19 | #


Je pars du principe qu'un utilisateur ne sachant pas ouvrir un .jar ne saura pas non plus éditer le fichier
(puis normalement c'est pas à lui de le faire, s'il y a un opcode manquant il me le signale et je fais une update)

Ajouté le 04/07/2017 à 18:25 :
À venir dans BIDE 2.3 : les macros (hésitez pas à me suggérer d'autres trucs faisables facilement).
Comment les macros fonctionneront :
Il serait possible de stocker l'ID avec le header des g1m, qui est le suivant :

On remarque une zone de 9 octets qui est inutile (les octets 0x16 et 0x17 sont utiles pour les addins mais pas pour les g1m). Sur les g1m normaux (générés par casio) ils sont à 0x00, mais BIDE les remplace par les octets faisant "BIDE prog". Cela n'a aucun impact, les émulateurs et FA-124 peuvent toujours importer ces g1m, ce qui prouve qu'on peut faire ce qu'on veut avec ces octets.
Sachant cela, il est donc évident qu'on peut y mettre une ID incrémentée du type "BIDExxxxx" ce qui nous laisse 99999 g1m possibles avant overflow (je pense que c'est suffisant ).

Toutefois, un problème se pose : les g1m exportés par casio mettront les octets à 0x00, l'ID n'est donc pas permanente si l'utilisateur édite le g1m sur sa casio (mais pourquoi il ferait ça aussi, c'est l'utilité de BIDE).
Une autre solution serait de stocker l'ID dans chaque programme. Lors de la lecture/édition du programme, l'interpréteur s'arrête quand il y a une null byte, il suffit donc d'insérer une null byte puis de mettre "BIDExxxx" (ça ajoute 9-12 octets à chaque programme). Cette ID est permanente et persiste lors de l'exportation, c'est donc la solution que je choisirai.
À noter qu'on ne peut pas utiliser les 3 bytes de padding dans le header des programmes, qui sont remises à 0 lors de l'exportation.

Les macros spécifiques à chaque ID seront stockés dans System.getProperty("user.home")+"/BIDE/" (je sais pas ce que c'est sous linux), et il sera possible de changer l'ID de chaque programme dans les options.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark stormHors ligneMembre d'honneurPoints: 10765 Défis: 174 Message

Citer : Posté le 04/07/2017 19:14 | #


Heu, ça sert à quoi en pratique ? x)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Cakeisalie5Hors ligneMembre de CreativeCalcPoints: 1730 Défis: 10 Message

Citer : Posté le 04/07/2017 20:56 | #


Ne me dis pas que tu as refait un reverse engineering déjà existant... ._.
Je sais que ma doc (ids) n'est pas des plus claires, mais de là à la refaire from scratch... ._.

Promotion ordinaire sur les inscriptions sur Planète Casio : en ce moment, c'est gratuit !
Besoin d'utilitaires de transfert vers et depuis la calculatrice sous GNU/Linux ?
LephenixnoirHors ligneAdministrateurPoints: 14138 Défis: 136 Message

Citer : Posté le 04/07/2017 22:33 | #


C'est pas là qu'il faut stocker tes macros, gros malin, mais dans un fichier de projet que les développeurs des jeux pourront stocker dans le même dossier que leurs scripts, et partager à volonté !
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 Message

Citer : Posté le 05/07/2017 04:53 | #


Dark storm a écrit :
Heu, ça sert à quoi en pratique ? x)

A améliorer la lisibilité du programme. Je pensais faire les macros uniquement pour les noms de variables (par exemple "A"->"vieJoueur") mais je vais faire comme en C avec possibilité de faire des macros sur plusieurs lignes, et des macros avec paramètres (par exemple "StrSet(1, 3, "a")" -> "A"->Str 1: "A"->Str 2: "A"->Str 3").

Cakeisalie5 a écrit :
Ne me dis pas que tu as refait un reverse engineering déjà existant... ._.
Je sais que ma doc (ids) n'est pas des plus claires, mais de là à la refaire from scratch... ._.

Ben heu non j'ai suivi la doc de simlo, j'ai rien fait de moi même.

Lephenixnoir a écrit :
C'est pas là qu'il faut stocker tes macros, gros malin, mais dans un fichier de projet que les développeurs des jeux pourront stocker dans le même dossier que leurs scripts, et partager à volonté !

Je sais pas si je me suis bien exprimé mais il n'y a que l'ID qui est stockée dans le programme, le reste est stocké dans un dossier sur le PC (je vais pas stocker tous les macros dans le programme, ça rajouterait trop d'octets).
Pour le partage de macros, l'ID est incrémentale donc il y aura surement des conflits, il faudra donc que l'utilisateur change l'ID du programme (et renomme le fichier des macros).

Ajouté le 09/07/2017 à 20:59 :
Pour les CPC j'ai ajouté une fonctionnalité pour automatiser l'importation dans l'émulateur


Ca enlève le gros inconvénient de BIDE qui est de devoir importer le g1m dans la calculatrice (ce qui peut prendre du temps, que vous ayez FA-124, l'émulateur ou p7), ça prend encore du temps (2.5 secondes ici pour mon puissance 4, jusqu'à 13 secondes pour les gros projets comme Clonelab) mais c'est bien moins que le temps passé à importer manuellement.

Je gèrerai aussi l'importation automatique. Dans ce cas le workflow sera idéalement :
- Ecriture d'un programme sous BIDE
- Importation dans l'émulateur avec ctrl+shift+s
- Petites modifications dans la calto (débuggage)
- Importation dans BIDE avec ctrl+shift+o pour continuer à écrire le programme, etc

À noter que ça ne fonctionnera que sous windows, car j'utilise des alt codes pour écrire les caractères. (de toute façon, les émulateurs ne fonctionnent que sous windows )

Ajouté le 31/07/2017 à 08:58 :
BIDE 3.1 :
- Le fichier <user.home>/BIDE/options.txt n'était pas créé correctement
- Correction d'une boucle infinie si BIDE ne pouvait pas créer ce fichier
- L'émulateur était détecté avec "fx-9860g" au lieu de "Manager PLUS"
- Changement des timeouts pour permettre l'importation lors du premier lancement de l'émulateur
- Ajout des caractères unicode dans la coloration syntaxique (r, θ, ◢, √...)
- Les opcodes contenant des espaces au début (Step, And, etc) peuvent désormais être ajoutés avec l'autocomplétion
- Une customisation des couleurs de la coloration syntaxique est maintenant possible
- Ajout de tooltips pour les boutons du menu

Téléchargement : http://puu.sh/wXD4M.jar
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirHors ligneAdministrateurPoints: 14138 Défis: 136 Message

Citer : Posté le 31/07/2017 10:19 | #


- Changement des timeouts pour permettre l'importation lors du premier lancement de l'émulateur

Deuh.. quoi ?

- Les opcodes contenant des espaces au début (Step, And, etc) peuvent désormais être ajoutés avec l'autocomplétion

Tu devrais plutôt les appeler Step et And, le lexer fera le boulot de ne les voir que s'il y a des espaces autour...
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 Message

Citer : Posté le 31/07/2017 10:39 | #


Deuh.. quoi ?

Pour l'importation sur l'émulateur, BIDE presse automatiquement certaines touches : [menu], F, F3 (ouvre l'explorateur de fichiers), il écrit le chemin du fichier, [enter], [spam F1], [menu], B.
Pour éviter de mettre des touches n'importe où (c'est assez fun d'essayer d'arrêter un programme qui arrête pas d'appuyer sur F1), j'ai mis des timeouts à des intervalles réguliers, ainsi que des vérifications par rapport à des images de référence. Dans ce cas, quand BIDE appuie sur F3, il attend que l'explorateur de fichiers soit ouvert, puis il écrit le chemin du fichier. Si au bout de 5 secondes l'explorateur n'est toujours pas ouvert, il arrête.

Lors du lancement de l'émulateur, l'explorateur de fichiers met plus de temps à s'ouvrir qu'après (j'aurais du mettre "premier lancement de l'explorateur de fichiers). Du coup j'ai augmenté le timeout à 10 secondes pour prendre en compte ce lag. (j'ai aussi augmenté le temps d'attente entre la détection de l'explorateur et l'input du chemin)

Tu devrais plutôt les appeler Step et And, le lexer fera le boulot de ne les voir que s'il y a des espaces autour...

Ce changement ne touche en aucun cas le lexer, c'est juste un changement d'autocomplétion. L'autocomplétion ne détecte que les strings commençant par ce que l'utilisateur tape. Par exemple, si je tape "abc", il proposera "abcde" mais pas "zabcd".
Dans ce cas il ne pouvait pas proposer " Step " parce qu'il aurait fallu que l'utilisateur déclenche l'autocomplétion lorsqu'il tape un espace, ce qui n'est pas faisable. Lorsqu'il importe les opcodes, il remplace donc " Step " par "Step ".
L'opcode en lui même est toujours " Step " et sera traité en tant que tel lors de la compilation et décompilation.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirHors ligneAdministrateurPoints: 14138 Défis: 136 Message

Citer : Posté le 31/07/2017 10:48 | #


Oh, c'est plus clair. Oui, pour l'émulateur, c'est difficile de voir ce qu'il se passe.

Et justement pour la compilation (seulement) tu devrais utiliser un opcode sans espaces. (Ou alors ça veut dire que ton lexer est très bizarre, si tu en utilises un.)
NinestarsHors ligneMembrePoints: 2171 Défis: 22 Message

Citer : Posté le 31/07/2017 23:44 | #


Sympa le coup de l'émulateur
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 Message

Citer : Posté le 24/08/2017 13:01 | #


BIDE 3.2 : http://puu.sh/xijkP.jar
Le changelog sera dans la RDP.

Ajouté le 09/03/2018 à 23:47 :
Je fais un sondage car je suis confronté à un dilemne niveau UI.
Depuis le début, j'ai conçu BIDE de manière à ne pas créer de conflit au niveau des opcodes (et c'est pas chose facile), afin de ne pas faire comme FA-124 qui transforme les "or" en l'opcode "bitwise or" par exemple.

C'est pour cette raison que l'opcode "MOD(" a été transformé en "&MOD(;" afin qu'on ne puisse pas le confondre avec les variables M, O, D multipliées suivies d'une expression entre parenthèses (par exemple "MOD(2+3)" qui devrait être interprété en tant que "M*O*D*(2+3)"). Pareil pour GCD() et LCM().

Toutefois, c'est bien chiant : ils n'apparaissent pas dans l'autocomplétion (à moins de savoir qu'ils s'écrivent avec un "&", ce qui n'est pas intuitif) et lors d'un copier coller de code depuis le forum, on doit faire gaffe à ça.

Du coup soit :
- Je laisse comme ça
- Je mets les opcodes tels quels, en créant possiblement un conflit mais qui aurait une probabilité infime de se passer
- Je mets les opcodes en minuscule (Mod(), Gcd(), Lcm()) mais ça ne correspondra alors pas à ce qui est affiché sur la calto (et y'a toujours le problème du copier-coller depuis le forum).
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirHors ligneAdministrateurPoints: 14138 Défis: 136 Message

Citer : Posté le 10/03/2018 09:36 | #


Je suggérerai de procéder de la façon suivante :
- Quand l'utilisateur tape M, O, D, tu as une action par défaut (soit remplacer l'opcode, soit pas). Tu t'y tiens.
- Tu proposes l'autre action dans la fenêtre d'autocomplétion (qui afficherait soit "MOD(" soit "M, O, D, (" par exemple).
- Tu utilises la coloration syntaxique pour distinguer visuellement les deux une fois que le texte a été entré.
- Tu ajoutes une petite option pour laisser l'utilisateur choisir quelle est l'action par défaut et quelle est l'autre.

Par défaut, je penses que tu peux considérer que remplacer l'opcode est l'action par défaut. Ça me paraît être le cas le plus fréquemment demandé.
MaxjgolfHors ligneMembrePoints: 118 Défis: 0 Message

Citer : Posté le 11/05/2018 18:56 | # | Fichier joint


Salut,
Comme tu m'a demander par message je te passe en fichier joint le g1m contenant un extrait de mon problème avec BIDE,
- A partir de la ligne 90 jusqu'à la ligne 238, toutes les commandes sont remplacées (on peut remettre les vraies commandes mais à la réouverture du programme les commandes sont à nouveau modifiées)
- Pour ce qui est du problème des suites de caractères l'exemple est ligne 118, normalement la mise en forme est identique à la ligne 86
J'espère que cela te sera utile.
En tout cas cela reste un très bon éditeur de programme

PS: c'est un PRGM de "Cours" je préfère prévenir
Pages : Précédente1, 2, 3, 4Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 47 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