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 » fxcgIO : une librairie pour applications en mode console (a.k.a. terminal)
Slyvtt Hors ligne Maître du Puzzle Points: 2802 Défis: 17 Message

fxcgIO : une librairie pour applications en mode console (a.k.a. terminal)

Posté le 03/02/2026 22:04

Hello,

cela faisait un bon moment que je voulais développer une librairie pour permettre de faire des applications simples en mode console (ie. dans un terminal). L'idée s'est renforcée lorsque Lephenixnoir a permis la redirection des flux standards stdin/stdout/stderr en C (et leurs correspondant cin/ceout/cerr en C++) avec gint et la fxlibc.

La librairie permet de faire tout simplement des programmes utilisant la syntaxe de base du C avec printf()/scanf() ou cout/cin en C++. La librairie se chargeant de gérer les flux, d'afficher dans un terminal.

Accessoirement, le terminal gère partiellement les Control Sequence de base VT100 (les escape codes permettant de coloriser le texte). Il faudra que je complète au fur et à mesure, mais la base est là. Il y a aussi un mode "game" pour les mordus qui voudrait faire des jeux en ASCII art. Il faudra implémenter quelques jolies fontes.

Voici quelques exemples de screenshots issus des nombreux programmes de tests :







Le projet est géré par giteapc pour l'installation et la configuration : giteapc install Slyvtt/fxcgIO

ensuite dans votre projet au niveau du fichier CMakeLists.txt, il vous suffit de faire un find_package(fxCGIO 0.1 REQUIRED)
et ne pas oublier d'include la librairie target_link_libraries(myaddin fxCGIO::fxCGIO Gint::Gint) si vous êtes en C
ou bien target_link_libraries(myaddin fxCGIO::fxCGIO Gint::Gint -lstdc++) si vous êtes en C++

Un petit programme d'exemple en C :

#include <fxCGIO/fxCGIO.h>
#include <stdio.h>

int main(void)
{
    fxCGIO_init();

    printf("=== Test ANSI fxCGIO ===\n\n");

    printf("Texte normal\n");

    printf("\x1b[31mRouge\x1b[0m ");
    printf("\x1b[32mVert\x1b[0m ");
    printf("\x1b[33mJaune\x1b[0m ");
    printf("\x1b[34mBleu\x1b[0m ");
    printf("\x1b[35mMagenta\x1b[0m ");
    printf("\x1b[36mCyan\x1b[0m ");
    printf("\x1b[37mBlanc\x1b[0m\n\n");

    printf("Couleurs de fond :\n");
    printf("\x1b[30;47m Noir sur Blanc \x1b[0m\n");
    printf("\x1b[31;40m Rouge sur Noir \x1b[0m\n");
    printf("\x1b[32;44m Vert sur Bleu \x1b[0m\n");
    printf("\x1b[33;45m Jaune sur Magenta \x1b[0m\n\n");

    printf("Test positionnement curseur (10,5)\n");
    printf("\x1b[5;10HICI\n");

    printf("\nTest clear écran dans 2 secondes...\n");

    /* petite boucle d’attente grossière */
    for(volatile int i = 0; i < 20000000; i++);

    printf("\x1b[2J");
    printf("Ecran efface.\n");

    printf("\x1b[10;5HFin du test.\n");

    getchar();

    fxCGIO_free();
    return 0;
}


et en C++

#include <fxCGIO/fxCGIO.hpp>
#include <cstdio>

using namespace fxCGIO;

int main()
{
    fxCGIO::init();

    cout << "=== Test ANSI fxCGIO (C++) ===\n\n";

    cout << "Texte normal\n";

    cout << "\x1b[31mRouge\x1b[0m ";
    cout << "\x1b[32mVert\x1b[0m ";
    cout << "\x1b[33mJaune\x1b[0m ";
    cout << "\x1b[34mBleu\x1b[0m ";
    cout << "\x1b[35mMagenta\x1b[0m ";
    cout << "\x1b[36mCyan\x1b[0m ";
    cout << "\x1b[37mBlanc\x1b[0m\n\n";

    cout << "Couleurs de fond :\n";
    cout << "\x1b[30;47m Noir sur Blanc \x1b[0m\n";
    cout << "\x1b[31;40m Rouge sur Noir \x1b[0m\n";
    cout << "\x1b[32;44m Vert sur Bleu \x1b[0m\n";
    cout << "\x1b[33;45m Jaune sur Magenta \x1b[0m\n\n";

    cout << "Test positionnement curseur (20,8)\n";
    cout << "\x1b[8;20HCOUCOU\n";

    cout << "\nClear écran dans 2 secondes...\n";

    for(volatile int i = 0; i < 20000000; i++);

    cout << "\x1b[2J";
    cout << "Ecran efface.\n";

    cout << "\x1b[12;10HFin du test C++.\n";

    getchar();

    fxCGIO::clear();
    fxCGIO::free();
    return 0;
}


Je continue de debugger/ajouter des features et des programmes exemples. Le projet est accessible ici : https://git.planet-casio.com/Slyvtt/fxcgIO sur la forge Planète Casio

N'hésitez pas à me dire si vous trouvez des bugs (il doit y en avoir, car c'est dur de tout tester).
Il reste encore pas mal de choses à faire :
- une keymap complète pour prizm
- la variante pour la math+
- un support plus complet des codes VT100 et +
- une API avancée pour le mode game
- une fonte 256char en 5x7 pixels pour avoir plus de caractères
- la gestion des fontes dynamiquement (recalcul de l’écran lorsque l'on change de police de caractères)
- support des fontes unicodes ???
- une librairie simple ncurses-like pour faire des interfaces TUI
- support du Classpad et des fx9860G
- éventuellement des drivers input/output (fichiers / USB / COM (serial) / etc...), logiquement l'interfaçage des flux est suffisamment générique pour que ça se fasse relativement facilement.

Bref, plein d'idées, surement trop pour le temps disponible de votre humble serviteur.

Amusez vous bien.

Sly

@RDP à l'occasion


Lephenixnoir Hors ligne Administrateur Points: 25689 Défis: 174 Message

Citer : Posté le 03/02/2026 23:07 | #


Nice ! Je me demande si on pourrait pas utiliser ça pour faire un type d'add-in "port de programme terminal" où le code pourrait être réutilisé entièrement de programmes existants.
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2802 Défis: 17 Message

Citer : Posté le 03/02/2026 23:26 | #


C'est l'idée de base. Avoir la possibilité à terme de pouvoir utiliser un programme pc terminal sans changement majeur pour que ça tourne sur fxcg.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...

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:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
captcha
Rafraîchissez la page si vous souhaitez obtenir un nouveau CAPTCHA.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2026 | Il y a 139 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