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).
Citer : Posté le 26/08/2016 19:42 | #
C'est surtout du graphique en fait, à part B2C ?
Rapidement :
"◢" = 0x0C
En UTF-8, je doute. Perso j'ai 0xe297a2.
Citer : Posté le 26/08/2016 19:47 | #
Non, je parle du code de la table de caractère de casio, où ◢ a la valeur 0x0C
Mais oui ce sera surtout du graphique, parsé à coup de regex (le seul vrai parsage sera pour les strings). Après si j'ai le temps c'est vrai que je pourrai faire la vérification du code (par exemple l'absence de IfEnd, ou un Locate avec 2 arguments, ou l'utilisation de la valeur de retour d'un Locate, etc).
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 26/08/2016 19:49 | #
Je te le dis tout de suite : si tu veux vraiment faire une interface graphique, tu vas en chier. Pourquoi ne pas faire un plugin et une coloration sur un éditeur que tu utilises, type Notepad++ (puisque tu en parles) ?
Pour l'émulation, j'aurais dit de faire quelque chose à côté (un petit utilitaire avec la SDL), ce serait plus simple. (encore plus simple, ce serait d'utiliser la ligne de commande, mais vous autres sous Windows vous préférez pas trop la voir celle-là è_é)
Mon blog ⋅ Mes autres projets
Citer : Posté le 26/08/2016 20:39 | #
Ah, tu veux les opcodes ? Ben dans ce cas là c'est trivial (merci SimLo).
Citer : Posté le 26/08/2016 20:44 | #
Non, les caractères x) par exemple 0xE6A6 = ◼. Enfin bon avec les sites dédiés à l'unicode ça devrait pas me prendre beaucoup de temps de faire un tableau, du coup je pourrais m'en sortir moi même en fin de compte.
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 26/08/2016 20:49 | #
Bon alors c'est trivial aussi. Dans l'archive qui contient le SDK se trouve un manuel qui contient toute la table des caractères.
Citer : Posté le 28/08/2016 02:30 | #
Va voir du côté de UnicornEdit Tu verras le chantier d'un IDE. Un IDE est chiant à faire car les features phares sont extrêmement dur à concevoir notamment l'edition de texte. Ensuite, bien que le basic casio soit relativement simple, l'analyser est bien difficile et la construction d'un lexer/parser puis d'un assembleur ne se fait pas sans dommage sur le cerveau ( je sais de quoi je parle, Blang me fait trop chier )
Citer : Posté le 28/08/2016 11:45 | #
la construction d'un lexer/parser puis d'un assembleur ne se fait pas s'en dommage sur le cerveau
*sans.
Désolé, c'est comme mon shampooing : ça pique trop les yeux.
Citer : Posté le 22/02/2017 15:58 | # | Fichier joint
Un prototype de BIDE est prêt pour l'instant il n'a rien d'un IDE, mais il y a juste la conversion g1m/ascii (et inversement).
Ce qu'on peut faire c'est donc éditer un .g1m en mode texte, tout comme le fait FA-124 mais avec une police pas dégueulasse et avec un g1m créé sans opcodes chelou qui se glissent dans les strings.
J'ai mis le .jar en pièce jointe. Pour l'utiliser sous windows, faites shift+clic droit sur là où vous l'avez mis, cliquez sur "ouvrir une nouvelle ligne de commande", puis tapez "java -jar bide.jar". Les utilisateurs de linux n'ont pas besoin que je leur dise quoi faire Enlevez l'extension .txt, c'est parce que ce forum est discriminatoire contre le java et n'autorise pas les .jar.
Le programme vous demande 3 chemins :
- Le chemin d'origine de votre .g1m
- Le fichier texte où vous allez éditer le g1m
- Le g1m à créer lorsque vous avez fini d'éditer le programme (je vous déconseille de mettre le même que le chemin d'origine, au cas où BIDE ne retranscrirait pas bien)
Je vous invite à tester la conversion et à me dire tous les bugs
Note: un des bugs est que si un programme contient les caractères '=' et '>' à la suite (dans un string par exemple), alors BIDE les convertira en '=>' au lieu des caractères originaux. Ce bug sera fixé lorsque j'implémenterai un éditeur de texte propre à BIDE.
Ah, et merci à cake pour sa refc
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 23/02/2017 09:35 | #
Moi qui code beaucoup en BASIC, je suis très intéressé !
Citer : Posté le 23/02/2017 11:03 | #
C'est sur Linux ou Windaube ? Si c'est sur Windows, il faut avoir quelque chose d'installer pour le lancer ou pas ?
Je suis moi aussi plutôt intéressé
Un beat them all pour les CPC 19
Un jeu de Tank multijoueur en version graphique
Un jeu de boxe rigolo
Le moteur de combat épique d'un RPG
soccer physics : Un jeu de foot totalement wtf !
Survie 1 & 2 te laisseras-tu attraper par la méchante IA ?
Séquestrez les tous avec Catch'em all !
Joué à la calcultarice et pécher ? Facile !
Battle un système de combat dément !!
Débombe pas tout à fait un démineur
Mon mario pour le concours des 10 ans de PC
Casio jump un doodle jump pas comme les autres !
Rush four your life : tu cours ou tu meurs
Cookie clicker ! More cookies MOOORE !
Move et esquive : bouge pour esquiver les ennemis !
Guitar Hero !! Let's rock !
INVASION : Au secours on se fait envahir !
Un devine nombre entièrement customisable (mon 1er jeu)
Un outil pour dessiner des sprites en super drawstat et qui vous le compile pour vous donner un code utilisable dans vos programmes
Un super programme de dessin bourré de trucs funcs
Sortir une version finale de Tankasio
Bien m'améliorer en C parce que pour l'instant c'est pas jojo
Une ou plusieurs idées qui mûrissent petit à petit
Citer : Posté le 23/02/2017 11:07 | #
C'est un peu un manque de professionnalisme que de demander si un programme Java tourne sous Windows ou sous Linux.
Citer : Posté le 23/02/2017 11:11 | #
J'y connais rien
Un beat them all pour les CPC 19
Un jeu de Tank multijoueur en version graphique
Un jeu de boxe rigolo
Le moteur de combat épique d'un RPG
soccer physics : Un jeu de foot totalement wtf !
Survie 1 & 2 te laisseras-tu attraper par la méchante IA ?
Séquestrez les tous avec Catch'em all !
Joué à la calcultarice et pécher ? Facile !
Battle un système de combat dément !!
Débombe pas tout à fait un démineur
Mon mario pour le concours des 10 ans de PC
Casio jump un doodle jump pas comme les autres !
Rush four your life : tu cours ou tu meurs
Cookie clicker ! More cookies MOOORE !
Move et esquive : bouge pour esquiver les ennemis !
Guitar Hero !! Let's rock !
INVASION : Au secours on se fait envahir !
Un devine nombre entièrement customisable (mon 1er jeu)
Un outil pour dessiner des sprites en super drawstat et qui vous le compile pour vous donner un code utilisable dans vos programmes
Un super programme de dessin bourré de trucs funcs
Sortir une version finale de Tankasio
Bien m'améliorer en C parce que pour l'instant c'est pas jojo
Une ou plusieurs idées qui mûrissent petit à petit
Citer : Posté le 23/02/2017 11:14 | #
Le Java est par essence cross-platform. Un programme Java tourne nécessairement sur les deux plateformes. La commande est identique pour les deux systèmes, en l'occurrence.
Citer : Posté le 23/02/2017 11:52 | #
J'ai eu une erreur :
C:\Users\User1\Desktop\dfcgh>java -jar bide.jar
Enter the path to the .g1m file:
C:\Users\User1\Desktop\dfcgh\PLAT MEN.g1m
Enter the path to the output .bide (or .txt) file:
C:\Users\User1\Desktop\Nouveau dossier\text.txt
Reading from g1m at C:\Users\User1\Desktop\dfcgh\PLAT MEN.g1m
Found basic program
Testing for opcode 50
Matches opcode P
Testing for opcode 4c
Matches opcode L
Testing for opcode 41
Matches opcode A
Testing for opcode 54
Matches opcode T
Testing for opcode 4d
Matches opcode M
Testing for opcode 45
Matches opcode E
Testing for opcode 4e
Matches opcode N
Found end of given string
Name = PLAT MEN, password = <no password>
Testing for opcode 22
Matches opcode "
Testing for opcode 50
Matches opcode P
Testing for opcode 4c
Matches opcode L
Testing for opcode 41
Matches opcode A
Testing for opcode 54
Matches opcode T
Testing for opcode 22
Matches opcode "
Testing for opcode e
Matches opcode ->
Testing for opcode 7f51
Matches opcode List
Testing for opcode 31
Matches opcode 1
Testing for opcode 36
Matches opcode 6
Testing for opcode 7f46
Matches opcode Dim
Testing for opcode 7f51
Matches opcode List
Testing for opcode 31
Matches opcode 1
Testing for opcode 36
Matches opcode 6
Testing for opcode 3c
Matches opcode <
Testing for opcode 32
Matches opcode 2
Testing for opcode 13
Matches opcode =>
Testing for opcode 32
Matches opcode 2
Testing for opcode e
Matches opcode ->
Testing for opcode 7f46
Matches opcode Dim
Testing for opcode 7f51
Matches opcode List
Testing for opcode 31
Matches opcode 1
Testing for opcode 36
Matches opcode 6
Testing for opcode f708
Matches opcode While
Testing for opcode 31
Matches opcode 1
Testing for opcode f718
Matches opcode ClrText
Testing for opcode 22
Matches opcode "
Testing for opcode 3d
Matches opcode =
Testing for opcode 42
Matches opcode B
Testing for opcode 41
Matches opcode A
Testing for opcode 53
Matches opcode S
Testing for opcode 49
Matches opcode I
Testing for opcode 43
Matches opcode C
Testing for opcode 50
Matches opcode P
Testing for opcode 4c
Matches opcode L
Testing for opcode 41
Matches opcode A
Testing for opcode 54
Matches opcode T
Testing for opcode 46
Matches opcode F
Testing for opcode 4f
Matches opcode O
Testing for opcode 52
Matches opcode R
Testing for opcode 4d
Matches opcode M
Testing for opcode 45
Matches opcode E
Testing for opcode 52
Matches opcode R
Testing for opcode 3d
Matches opcode =
Testing for opcode 22
Matches opcode "
Testing for opcode 22
Matches opcode "
Testing for opcode 22
Matches opcode "
Testing for opcode 22
Matches opcode "
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e6a5
Matches opcode &white_square;
Testing for opcode e745
ERROR: Unknown opcode e745
Ca a planté au petit E majuscule trouvable dans les caractères dans la dernière catégorie.
Ajouté le 23/02/2017 à 11:57 :
Il connait pas le divisé non plus visiblement
ERROR: Unknown opcode b9
Un beat them all pour les CPC 19
Un jeu de Tank multijoueur en version graphique
Un jeu de boxe rigolo
Le moteur de combat épique d'un RPG
soccer physics : Un jeu de foot totalement wtf !
Survie 1 & 2 te laisseras-tu attraper par la méchante IA ?
Séquestrez les tous avec Catch'em all !
Joué à la calcultarice et pécher ? Facile !
Battle un système de combat dément !!
Débombe pas tout à fait un démineur
Mon mario pour le concours des 10 ans de PC
Casio jump un doodle jump pas comme les autres !
Rush four your life : tu cours ou tu meurs
Cookie clicker ! More cookies MOOORE !
Move et esquive : bouge pour esquiver les ennemis !
Guitar Hero !! Let's rock !
INVASION : Au secours on se fait envahir !
Un devine nombre entièrement customisable (mon 1er jeu)
Un outil pour dessiner des sprites en super drawstat et qui vous le compile pour vous donner un code utilisable dans vos programmes
Un super programme de dessin bourré de trucs funcs
Sortir une version finale de Tankasio
Bien m'améliorer en C parce que pour l'instant c'est pas jojo
Une ou plusieurs idées qui mûrissent petit à petit
Citer : Posté le 23/02/2017 14:06 | #
La fenêtre du programme BIDE.jar n’apparaît qu'une fraction de seconde quand je lance BIDE.jar !? je suis en W7 pro
Citer : Posté le 23/02/2017 14:13 | #
Il faut lancer le programme via l'invite de commande.
Citer : Posté le 23/02/2017 14:27 | #
Tu aurais pu préçiser que les sources étaient sur la forge.
http://git.planet-casio.com/Zezombye/BIDE
Mon blog ⋅ Mes autres projets
Citer : Posté le 23/02/2017 16:09 | #
Il faut lancer le programme via l'invite de commande.
Merci Breizh j'avais compris, j'avais juste mal expliqué mon bug. Le prog se lance et s’arrête dans la foulée. J'ai juste le temps de voir la fenêtre de l'éxecution s'envoler vers le haut de l'écran puis RIEN
Citer : Posté le 23/02/2017 16:14 | #
Ah il connait pas non plus la function memory fn
ERROR: Unknown opcode f91b
Je continue ?
Un beat them all pour les CPC 19
Un jeu de Tank multijoueur en version graphique
Un jeu de boxe rigolo
Le moteur de combat épique d'un RPG
soccer physics : Un jeu de foot totalement wtf !
Survie 1 & 2 te laisseras-tu attraper par la méchante IA ?
Séquestrez les tous avec Catch'em all !
Joué à la calcultarice et pécher ? Facile !
Battle un système de combat dément !!
Débombe pas tout à fait un démineur
Mon mario pour le concours des 10 ans de PC
Casio jump un doodle jump pas comme les autres !
Rush four your life : tu cours ou tu meurs
Cookie clicker ! More cookies MOOORE !
Move et esquive : bouge pour esquiver les ennemis !
Guitar Hero !! Let's rock !
INVASION : Au secours on se fait envahir !
Un devine nombre entièrement customisable (mon 1er jeu)
Un outil pour dessiner des sprites en super drawstat et qui vous le compile pour vous donner un code utilisable dans vos programmes
Un super programme de dessin bourré de trucs funcs
Sortir une version finale de Tankasio
Bien m'améliorer en C parce que pour l'instant c'est pas jojo
Une ou plusieurs idées qui mûrissent petit à petit