Connaissances de base
À l'époque de l'utilisation généralisée des télécopieurs, les télécopieurs servaient de terminaux de sortie connectés à des ordinateurs centraux par des câbles. Les utilisateurs devaient envoyer une série de commandes de contrôle spécifiques au programme terminal pour contrôler l'affichage sur l'écran du terminal. Par exemple, changer la position du curseur sur l'écran, effacer le contenu d'une certaine zone de l'écran, faire défiler l'écran, changer le mode d'affichage, souligner le texte, changer l'apparence, la couleur, la luminosité, etc. des caractères. Ces contrôles sont mis en œuvre grâce à une chaîne appelée une séquence d'échappement. Les séquences d'échappement sont ainsi appelées car ces octets consécutifs commencent par un caractère 0x1B, qui est le caractère d'échappement (le caractère entré en appuyant sur la touche ESC). Même aujourd'hui, nous pouvons simuler l'effet d'affichage des terminaux télécopieurs de cette époque en entrant des séquences d'échappement dans des programmes d'émulation de terminal. Si vous souhaitez afficher un texte sur le terminal (ou le programme d'émulation de terminal) avec un arrière-plan coloré, vous pouvez entrer la séquence d'échappement suivante dans votre invite de commande :
echo "^[[0;31;40mIn Color"
Ici, ^ et [ sont les caractères d'échappement. (Notez que dans ce cas, ^[ est un seul caractère. Il n'est pas entré en tapant successivement les caractères ^ et [. Pour imprimer ce caractère, vous devez d'abord appuyer sur Ctrl+V, puis sur la touche ESC.) Après avoir exécuté la commande ci-dessus, vous devriez voir l'arrière-plan de In Color changer en rouge. À partir de là, tout le texte affiché sera sorti avec cet effet. Si vous souhaitez terminer cet effet et revenir au format d'origine, vous pouvez utiliser la commande suivante :
echo "^[[0;37;40m"
Maintenant, savez-vous à quoi servent ces caractères (séquences d'échappement)? (Essayez de changer les paramètres entre les points-virgules et voyez quels résultats vous obtenez.) Peut-être sera-t-il différent de ce que vous imaginez? Cela peut être dû au fait que l'environnement du terminal est différent, ce qui dépend des différents terminaux ou systèmes d'exploitation. (Vous ne pouvez pas faire afficher des caractères colorés sur un terminal monochrome, n'est-ce pas?) Afin d'éviter ces problèmes de compatibilité et d'obtenir une sortie cohérente sur différents terminaux, les concepteurs d'UNIX ont inventé un mécanisme appelé termcap. termcap est en fait un fichier qui est publié avec les séquences d'échappement. Ce fichier répertorie toutes les séquences d'échappement que le terminal actuel peut exécuter correctement, garantissant que le résultat d'exécution des séquences d'échappement entrées correspond aux spécifications de ce fichier. Cependant, au cours des années suivant l'invention de ce mécanisme, un autre mécanisme appelé terminfo a progressivement remplacé termcap. Depuis, les utilisateurs n'ont plus besoin de consulter les spécifications complexes des séquences d'échappement dans termcap lors de la programmation, et n'ont qu'à accéder à la base de données terminfo pour contrôler l'affichage de l'écran.
En supposant que toutes les applications accèdent à la base de données terminfo pour contrôler la sortie (par exemple, en envoyant des caractères de contrôle, etc.) dans le cas de l'utilisation de terminfo, ces appels de code rendront bientôt tout le programme difficile à contrôler et à gérer. L'apparition de ces problèmes a conduit à la naissance de CURSES. Le nom CURSES vient d'un calembour appelé cursor optimization (optimisation du curseur).
La bibliothèque CURSES offre aux utilisateurs une API (interface de programmation d'application) flexible et efficace en encapsulant les codes de contrôle de bas niveau (séquences d'échappement) du terminal, ce qui permet aux utilisateurs de contrôler le curseur, de créer des fenêtres, de changer les couleurs de premier et de second plan et de gérer les opérations de la souris. Cela permet aux utilisateurs d'éviter ces mécanismes de bas niveau ennuyeux lorsqu'ils écrivent des applications sur des terminaux à caractères.
NCURSES est une version clonée de CURSES issue de System V Release 4.0 (SVr4). C'est une bibliothèque librement configurable qui est entièrement compatible avec les anciennes versions de CURSES. En résumé, c'est une bibliothèque qui permet aux applications de contrôler directement l'affichage de l'écran du terminal. Lorsque la bibliothèque CURSES est mentionnée par la suite, cela fait également référence à la bibliothèque NCURSES.
NCURSES non seulement encapsule les fonctions de bas niveau du terminal, mais offre également un cadre de travail assez stable pour générer de belles interfaces. Elle inclut des fonctions pour créer des fenêtres. Et ses bibliothèques sœurs, Menu, Panel et Form, sont des extensions de la bibliothèque de base CURSES. Ces bibliothèques sont généralement distribuées avec CURSES. Nous pouvons construire une application qui contient plusieurs fenêtres, menus, panneaux et formulaires. Les fenêtres peuvent être gérées indépendamment, par exemple en les faisant défiler ou en les masquant. Les menus permettent aux utilisateurs de créer des options de commande pour exécuter facilement des commandes. Les formulaires permettent aux utilisateurs de créer des fenêtres pour une saisie et un affichage de données simples. Les panneaux sont des extensions des fonctions de gestion des fenêtres de NCURSES et peuvent superposer ou empiler des fenêtres.