Bonjour à tous,
J'ai découvert récemment qu'il est possible en C de positionner de façon simple le curseur n'importe où sur l'écran d'un terminal sans utiliser de bibliothèque dédiée telle que ncurses. Cela permet de faire des graphismes rétros du même style que ceux que l'on faisait autrefois en Basic avec des TRS-80 ou équivalent.
Vous connaissez sans doute déjà la méthode, mais je me permets de la poster ici au cas où cela aurait échappé à certains comme moi.
Voici par exemple comment tracer une sinusoïde :
#include <stdio.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <math.h>
int main(void)
{
struct winsize w;
int x;
double y;
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) == 0)
{
printf("\033[2J"); // Efface l'écran
for (x=1;x<=w.ws_col;x++)
{
y=(sin((x-1)*4*3.1416/w.ws_col))*(w.ws_row-1)/2.5+(w.ws_row+1)/2.0;
printf("\033[%.0f;%dH*",y,x); // Positionne le caractère "*" aux coordonnées x,y
}
printf("\033[%d;%dH",0,0); // Positionne le curseur aux coordonnées 0,0
}
else
{
perror("Erreur");
return 1;
}
return 0;
}
Le résultat :
*** ***
** ** ** **
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * *
*
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
** ** ** **
*** ***
# Pas vraiment le C
Posté par gUI (Mastodon) . Évalué à 8 (+5/-0). Dernière modification le 23 novembre 2025 à 17:04.
La "magie" n'est pas dans le langage, mais dans le terminal qui va interpréter l'affichage (donc
printf()dans le cas du C).Du coup tu peux le faire dans n'importe quel langage. Par exemple dans ton Bash tu peux taper:
et tu verras LinuxFr.org s'afficher sur la 10e ligne et à la 20e colonne.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Pas vraiment le C
Posté par MicP . Évalué à 1 (+0/-0). Dernière modification le 23 novembre 2025 à 15:52.
il y a aussi un
printfdans les builtins du shell bash.Voir printf dans la page man du bash :
mais bon, pas dans la vielle (presque 20 ans de retard) version du bash qui est installée sur les mac.
… et dans ce royaume, ceux qui y voient un peu plus clair sont parfois très mal vus.
[^] # Re: Pas vraiment le C
Posté par zurvan . Évalué à 3 (+1/-0). Dernière modification le 23 novembre 2025 à 22:16.
effectivement tous les languages n'ont pas forcément accès à des manipulations de graphisme avancés (pixels, gui etc)
En FORTH, on a la commande
x y AT-XYpour afficher des caractères à un endroit donné de la console.Je me suis amusé a réaliser un petit programme similaire pour afficher une sinusoïde, cela fonctionne avec ueforth et gforth, ce sont les commentaires qui prennent le plus de place :
et cela affichera
Rappel important : vos amis qui se sont retournés contre vous parce que la TV leur a dit de le faire : ils le feront encore.
[^] # Re: Pas vraiment le C
Posté par zurvan . Évalué à 2 (+0/-0).
je ne sais pas trop pourquoi, mais un nombre sur deux inversait le sens du graphique, j'ai corrigé cela en rajoutant après la ligne un test pour voir si le nombre de la boucle (
i) était pair ou impairpour inverser le sens, et maintenant cela évite d'afficher la double sinusoïde :
Rappel important : vos amis qui se sont retournés contre vous parce que la TV leur a dit de le faire : ils le feront encore.
[^] # Re: Pas vraiment le C
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 4 (+2/-0).
4th rox ;)
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Pas vraiment le C
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3 (+1/-0).
Je viens de vérifier sur un mac
Je pense que c’est la page de manuel qui n’est pas à jour (mais quand je fais un
man bashet que dedans je fais un/printfje trouve bien, bizarre)“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Pas vraiment le C
Posté par MicP . Évalué à 2 (+1/-0).
Bonjour
Je pense que sur ton mac, la ligne de commande :
…a dû te retourner la page d'aide de l'exécutable
/usr/bin/printfSur mon système debian sur PC, il y a le
printfdu bash (<=> dans les builtins du bash)et il y a aussi l'exécutable
/usr/bin/printf… et dans ce royaume, ceux qui y voient un peu plus clair sont parfois très mal vus.
[^] # Re: Pas vraiment le C
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3 (+1/-0).
Tu as oublié que je précise à la fin que « quand je fais un
man bashet que dedans je fais un/printf[↵] je trouve bien » 😉Et j’ai exprès évité de demander la page de manuel de la commande car je voulais précisément afficher l’aidé de la commande intégrée
Il faut faire attention ici à la précision « information about builtin commands » ; et si tu fais
helptout court (ou suivi d’un nom de commande externe) alors « otherwise a list of the builtins is printed ».“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Pas vraiment le C
Posté par gUI (Mastodon) . Évalué à 3 (+0/-0).
pour être certain…
Afficher si
printfest interne ou externe:Forcer l'utilisation de la version interne :
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Pas vraiment le C
Posté par MicP . Évalué à 1 (+0/-0). Dernière modification le 27 novembre 2025 à 19:31.
Effectivement, merci pour ces précisions à Gil Cot ✔ et à gUI.
… et dans ce royaume, ceux qui y voient un peu plus clair sont parfois très mal vus.
[^] # Re: Pas vraiment le C
Posté par vmagnin (site web personnel, Mastodon) . Évalué à 4 (+2/-0).
Une version Fortran :
[^] # Re: Pas vraiment le C
Posté par fearan . Évalué à 3 (+1/-1). Dernière modification le 27 novembre 2025 à 13:47.
et une version bash :)
j'ai préféré utiliser tput qui a le mérite de rester plus lisible, que les horribles \033[ :D
on donne la hauteur de la courbe (en 1er paramètre)
par contre je n'ai pas trouvé comment fair sin en bash, je me suis reposé sur bc, on peut le faire avec awk, perl python…
donc ma version
et j'ai préféré avoir une oscillation continue plutôt que juste 2 oscillations
mais il suffit de remplacer la ligne avec bc par
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Pas vraiment le C
Posté par Benoît Sibaud (site web personnel) . Évalué à 5 (+2/-0).
ncurses-bin: /usr/bin/tput
Du coup autant utiliser ncurses quoi :).
[^] # Re: Pas vraiment le C
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2 (+0/-0).
Noter le cas de l’opérande
reset(ligne juste avant la section des exemples sur developpez.com) qui a été généralisé aux opérandesclearetinità partir de la version 5.2 en 2000 (section des alias sur debian) :)La section de compatibilité du manuel Debian est la plus fournie que j’ai vu, et elle est suivi d’une section sur l’historique. On y apprend que
tputettsetétaient bien des commandes séparées maintenant fournies par (le paquetage de) ncurse…“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# ncurses
Posté par gorbal . Évalué à -1 (+3/-5).
Une vraie lib C pour jouer avec la console ncurses
Un exemple : https://gist.github.com/reagent/9743630
[^] # Re: ncurses
Posté par gUI (Mastodon) . Évalué à 7 (+4/-0).
Le journal en parle:
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.