novice ncurses - débutant avec GNU C
Question
Une vie plus simple
Je retourne à C pour aider à revigorer mon lobe de programmation. La dernière fois que j'ai appris à programmer, j'étais à l'université et travaillais avec Turbo C sur MSDOS. Les animations ASCII simples sont devenues une obsession une fois que j’ai trouvé l’intégration <conio.h>
conviviale de Borland. Les fonctions gotoxy
et textcolor
s’amusaient beaucoup et j’écrivais des jeux comme serpent et pong. C'était une manière très enrichissante d'apprendre une langue et chaque jeu m'a poussé plus loin à mesure que je devenais plus ambitieux.
ncurses
J'aimerais commencer par des projets similaires. Aujourd'hui, cependant, je suis sur un Mac avec une machine Linux poussiéreuse dans le coin. Je pourrais lancer mon bien-aimé Turbo C dans dosbox (une plate-forme assez omniprésente) mais je veux apprendre le C pour pouvoir développer quelque chose qui se compile naturellement sur toute plate-forme BSD ou Unix. On m'a dit que ncurses était la voie à suivre, mais le site GNU m'a largement dépassé la tête. De retour dans la journée, j’avais ma fonction conviviale textmode
et j’étais une print
expression éloignée de pong. ncurses semble beaucoup plus puissant.
whoosh
Il doit y avoir beaucoup de gens qui ont été dans cette situation. Je suis à la recherche d'un tutoriel ou d'une ressource utile pour m'aider à comprendre ce qu'est ncurses et comment l'utiliser. Des astuces ou des histoires similaires seraient aussi d'un grand intérêt!
La solution
Oui, ncurses
est la bibliothèque que vous recherchez. À titre d’exemple, voici l’équivalent (n) malédictions de gotoxy
:
NOM
move, wmove - déplace le curseur de la fenêtre curses
SYNOPSIS
#include <curses.h> int move(int y, int x); int wmove(WINDOW *win, int y, int x);
DESCRIPTION
Ces routines déplacent le curseur associé à la fenêtre sur ligne y et colonne x. Cette routine ne déplace pas le curseur physique du terminal jusqu'à ce que refresh soit appelé. La position spécifiée est par rapport au coin supérieur gauche de la fenêtre, qui est (0,0).
Addendum:
Dans votre commentaire, vous posez une question à propos de Windows curses. Je ne pense pas pouvoir vraiment améliorer ce que dit la page de manuel ncurses à ce sujet. Je vais donc simplement le citer:
La bibliothèque ncurses permet manipulation des structures de données, appelé fenêtres, ce qui peut être pensé de comme des tableaux à deux dimensions de des personnages représentant tout ou partie de un écran cathodique. Une fenêtre par défaut appelée stdscr, qui est la taille du écran terminal, est fourni. Autres peut être créé avec newwin.
Notez que les malédictions ne gèrent pas fenêtres qui se chevauchent, cela se fait par la bibliothèque de panneaux (3CURSES). Ce signifie que vous pouvez soit utiliser stdscr ou diviser l'écran en mosaïque windows et ne pas utiliser stdscr du tout. Mélanger les deux aboutira à imprévisible et indésirable, effets.
Windows est désigné par des variables déclaré comme WINDOW *. Ces données les structures sont manipulées avec routines décrites ici et ailleurs dans les pages de manuel ncurses. Parmi ceux, les routines les plus élémentaires sont déplacez et ajoutez. Plus général les versions de ces routines sont inclus avec les noms commençant par w, permettant à l'utilisateur de spécifier une fenêtre. Les routines ne commençant pas par w affecter stdscr.
Après avoir utilisé des routines pour manipuler un window, refresh est appelé, en disant malédictions pour rendre l'écran CRT de l'utilisateur ressembler à stdscr. Les personnages de une fenêtre est en fait de type chtype, (données de caractère et d'attribut) de sorte que autres informations sur le personnage peut également être stocké avec chaque caractère.
Donc, en résumé, vous pouvez ignorer en toute sécurité la totalité de la fenêtre et simplement utiliser la fenêtre stdscr.
Autres conseils
Eh bien, sur les systèmes de type UNIX tels que BSD et Linux, vous voulez absolument utiliser ncurses
car les émulateurs de terminal vous rendent la vie vraiment misérable si vous ne le faites pas.
Vous devriez probablement écrire vous-même un simple wrapper contenant les fonctionnalités dont vous avez besoin et l'implémenter différemment pour différents systèmes d'exploitation. Sous Windows, il existe quelques fonctions de console . vous pouvez utiliser pour que cette partie ne soit pas trop difficile.
Voici un petit programme pour vous aider à démarrer.
#include <curses.h>
int main(void) {
int ch;
/* The whole program needs error-checking */
initscr();
noecho();
cbreak();
printw("Hit Ctrl+C to exit ...\n\n");
for (;;) {
ch = getch();
printw("Value of char: %d (%02x)\n", ch, ch);
}
endwin();
return 0;
}
N'oubliez pas d'indiquer à l'éditeur de liens d'ajouter la bibliothèque libcurses.
gcc ... -lcurses
Il existe une bibliothèque fournissant des fonctions Turbo C analogues à celles de la console pour Linux: TurboC Voir aussi: CONIO pour DevC ++