Вы находитесь на странице: 1из 14

Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

C-SYSTEME

C-SYSTEME

Edition March OOOO ESAT/DGF/DMSI/SYST 1/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

SOMMAIRE

I) INTRODUCTION______________________________________________________________________________3

II) FONCTIONNEMENT__________________________________________________________________________3
1) QU'EST CE QU'UNE FENÊTRE ?______________________________________________________________________3
2) POURQUOI UTILISER DES FENÊTRES ?__________________________________________________________________3
3) DESCRIPTION DU FICHIER "CURSES.H"_________________________________________________________________3
4) REPRÉSENTATION D'UNE GESTION "CURSES"_____________________________________________________________4

III) LES FONCTIONS____________________________________________________________________________5


1) FONCTIONS D'INITIALISATION_______________________________________________________________________5
2) GESTION DU CONTENU D'UNE FENÊTRE_________________________________________________________________6
3) SAISIE CLAVIER________________________________________________________________________________6
4) SUPPRESSION__________________________________________________________________________________7
5) OPTIONS_____________________________________________________________________________________8
6) AFFICHAGE___________________________________________________________________________________8
7) DÉPLACEMENT + ACTION________________________________________________________________________10
8) ATTRIBUTS DE VISUALISATION_____________________________________________________________________10
9) DIVERS_____________________________________________________________________________________11
10) COULEURS_________________________________________________________________________________12

INDEX________________________________________________________________________________________14

Edition March OOOO ESAT/DGF/DMSI/SYST 2/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

I) INTRODUCTION
Curses est une bibliothèque dédiée à la gestion de l'écran et en particulier aux fenêtres. Elle doit être
considérée comme un niveau intermédiaire entre termio et Xwindows. Présent dès les premières
versions d'Unix, elle a subi de nombreux enrichissements qui facilitent sa mise en œuvre.
Les fonctions de curses font référence à des définitions se trouvant dans le fichier curses.h. Il est
donc nécessaire de l'inclure dans tous les programmes utilisant ces fonctions. En outre, la
bibliothèque libcurses.a devra être demandée lors de l'édition des liens avec la syntaxe de
compilation suivante :

cc fic.c –lcurses –o fic

II)FONCTIONNEMENT

1) Qu'est ce qu'une fenêtre ?


Elle est définie comme une partie de l'écran gérée indépendamment du reste de l'écran, et à laquelle
est associée une structure contenant toutes les informations la caractérisant. Elle est principalement
repérée par une origine et une taille, celle-ci étant définie en lignes et en colonnes.

2) Pourquoi utiliser des fenêtres ?


Elles visualisent simultanément plusieurs objets et assurent leur manipulation en parallèle, mais
indépendamment.

De nombreuses commandes de curses sont bufférisées. Il est donc nécessaire de vider le buffer pour
voir à l'écran le résultat d'une action. Tout programme, avant d'utiliser les fonctions de curses, doit
impérativement appeler initscr(). Cette fonction initialise l'écran en mode semi-graphique.
Différentes fonctions vont agir sur le contenu des fenêtres. Pour pouvoir visualiser le résultat, il faut
faire appel à la fonction refresh() ou wrefresh() qui actualisera l'écran physique.

La fonction endwin() est symétrique à initscr() en ce sens qu'elle quitte le mode semi-graphique
pour revenir au mode normal. Cette fonction est obligatoire à la fin d'un programme utilisant la
bibliothèque curses.

3) Description du fichier "curses.h"


Un certain nombre de constantes y sont définies :TRUE (1), FALSE (0), ERR (-1) et OK (0), ainsi
que quelques définitions de nouveaux types :
 chtype qui est soit un char, soit un short soit un long non signé.
 SCREEN est codé sur un entier int
 WINDOW est une structure regroupant les différents paramètres d'une fenêtre.

Edition March OOOO ESAT/DGF/DMSI/SYST 3/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

4) Représentation d'une gestion "curses"

x
(0,0) Colonnes

Fenêtre

Ecran

Lignes

Caractères semi-graphiques (en mode texte) :

constante symbolique signification


ACS_ULCORNER coin haut gauche
ACS_LLCORNER coin bas gauche
ACS_URCORNER coin haut droit
ACS_LRCORNER coin haut gauche
ACS_HLINE trait horizontal
ACS_VLINE trait vertical

Fonctions clés :

Constante symbolique valeur signification


KEY_DOWN 0402 flèche vers le bas
KEY_UP 0403 flèche vers le haut
KEY_LEFT 0404 flèche vers la gauche
KEY_RIGHT 0402 flèche vers la droite
KEY_BACKSPACE 0407 retour arrière d'un caractère
KEY_DL 0510 suppression de la ligne

Edition March OOOO ESAT/DGF/DMSI/SYST 4/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

III) LES FONCTIONS

1) Fonctions d'initialisation
 initialise le mode semi-graphique
 retourne NULL en cas d'échec

WINDOW *initscr (void);

 quitte le mode semi-graphique

int endwin (void);

 crée une nouvelle fenêtre qui doit être contenue dans l’écran
 nblig et nbcol caractérisent le nombre de lignes et de colonnes de la fenêtre.
 y0 et x0 identifient les coordonnées de l'origine de la fenêtre.

WINDOW *newwin (int nblig, int nbcol, int y0, int x0);

 construit une sous-fenêtre, c'est à dire une fenêtre totalement inclue dans une autre.
 x0 et y0 sont relatives à l'écran et non à la fenêtre d'origine
 retourne NULL en cas échec

WINDOW *subwin (WINDOW *fntr_origine, int nblig, int nbcol, int y0,
int x0);

 supprime une fenêtre


 s'il existe des sous-fenêtres, il faut les supprimer avant la fenêtre principale.
 la suppression d'une fenêtre n'est pas visualisée, même après un wrefresh(), son contenu ayant
été écrit sur l'écran physique. Pour effacer une fenêtre de l'écran, il faut d'abord effacer son contenu
puis mettre à jour l'écran.

int delwin (WINDOW *fntr);

Edition March OOOO ESAT/DGF/DMSI/SYST 5/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

2) Gestion du contenu d'une fenêtre


 écrit un caractère
 la position du curseur détermine la position de l'écriture. Le curseur est déplacé d'un caractère
après l'écriture. Lorsque la limite de fenêtre est atteinte, il y a automatiquement passage à la ligne
suivante. Par contre le scrolling n'est pas automatique si la dernière ligne est atteinte. Pour avoir un
scrolling, il faudra l'avoir auparavant activé.
 l'écriture n'est visualisée qu'après un wrefresh()
 la fonction retourne en général OK.
 retourne ERR si l'écriture est impossible (écriture dans le coin inférieur droit sans scrolling)

int waddch (WINDOW *fntr, chtype c);

 écrit une chaîne de caractères


 l'écriture de la chaîne ne sera visible qu'après un wrefresh()

int waddstr (WINDOW *fntr, char *str);

 écrit un caractère suivi d'une visualisation immédiate

int wechochar (WINDOW *fntr, chtype c);

 fonction similaire à printf() mais adaptée à curses

int wprintw (WINDOW *fntr, char *format [, arg]...);

3) Saisie clavier
 se met en attente d'un caractère sur le fichier d'entrée (similaire à getchar())
 si l'option keypad est positionné, wgetch() est capable de récupérer le code associé aux fonctions
clés.
 suivant que le mode cbreak() est positionné ou non, le caractère est rendu immédiatement après
lecture ou après une validation par Entrée
 le caractère est affiché si le mode echo est sélectionné (sans faire appel à wrefresh()).
 en mode noecho il ne sera pas affiché.

int wgetch (WINDOW *fntr);

Edition March OOOO ESAT/DGF/DMSI/SYST 6/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

 lit une chaîne de caractères et la stocke en zone mémoire pointée par str
 la chaîne de caractères est délimitée par le premier appui de la touche Entrée ou le caractère
EOL

int wgetstr (WINDOW *fntr, char *str);

 retourne le caractère situé à la position du curseur


 le curseur n'est pas déplacé

chtype winch (WINDOW *fntr);

 fonction similaire à scanf() mais adaptée à curses

int wscanw (WINDOW *fntr, char *format [, arg] ...);

4) Suppression
 supprime le caractère pointé par le curseur dans une fenêtre
 tous les caractères à droite sont décalés
 la visualisation est immédiate et le curseur n'est pas déplacé

int wdelch (WINDOW *fntr);

 supprime la ligne ou se trouve le curseur


 le curseur n'est pas déplacé
 visualisation immédiate

int wdeleteln (WINDOW *fntr);

 met la fenêtre à blanc


 aucun wrefresh() nécessaire

int werase (WINDOW *fntr);

 blanchit une fenêtre


 le prochain wrefresh() mettra à jour l'écran physique, en effaçant ainsi la fenêtre concernée

Edition March OOOO ESAT/DGF/DMSI/SYST 7/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

int wclear (WINDOW *fntr);

5) options
 offre au développeur le moyen de gérer la visualisation de caractères lus à partir du fichier
d'entrée
 à l'initialisation, l'option echo est choisie

int echo (void);


int noecho (void);

 fait en sorte que wgetch() soit non bloquant


 val=TRUE : =>mode non bloquant
 val=FALSE : => mode bloquant

int nodelay (WINDOW *fntr, int val);

6) affichage
 visualise le fenêtre
 valeur retournée : nombre de caractères écrits (attention : fonction optimisée)

int wrefresh (WINDOW *fntr);

 règle le mode d'apparition du curseur


 val=0 => non visualisé
 val=1 => normal
 val=2 => surbrillance

int curs_set (int val);

 retrouve la position du curseur dans une fenêtre


 x et y sont des entiers

void getyx (WINDOW *fntr, int y, int x);

 positionne le curseur dans une fenêtre

Edition March OOOO ESAT/DGF/DMSI/SYST 8/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

 déplacement visible après wrefresh()

int wmove (WINDOW *fntr, int y, int x);

Edition March OOOO ESAT/DGF/DMSI/SYST 9/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

7) Déplacement + Action

int mvwaddch (WINDOW *fntr, int y, int x, chtype ch);


int mvwaddstr (WINDOW *fntr, int y, int x, char *str);
int mvwinch (WINDOW *fntr, int y, int x);
int mvwdelch (WINDOW *fntr, int y, int x);
int mvwgetch (WINDOW *fntr, int y, int x);
int mvwgetstr (WINDOW *fntr, int y, int x, char *str);
int mvwprintw (WINDOW *fntr, int y, int x, char *format [, arg] ...);
int mvwscanw (WINDOW *fntr, int y, int x, char *format [, arg] ...);

8) Attributs de visualisation
Des attributs de visualisation sont associés aux fenêtres.

Nom de l'attribut Signification


A_STANDOUT surbrillance
A_UNDERLINE souligné
A_REVERSE vidéo inverse
A_BLINK clignotement
A_DIM sous-brillance
A_BOLD gras
Plusieurs attributs sont utilisables simultanément à l'aide de l'opérateur | ("ou" bit à bit)

Edition March OOOO ESAT/DGF/DMSI/SYST 10/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

 positionne des attributs pour une fenêtre entière


 ces attributs deviennent les attributs courants de la fenêtre

int wattrset (WINDOW *fntr, chtype attr);

 positionne de nouveaux attributs sans modifier ceux déjà existants

int wattron (WINDOW *fntr, chtype attr);

 invalide sélectivement des attributs

int wattroff (WINDOW *fntr, chtype attr);

 attribut standard

int wstandout (WINDOW *fntr);

9) Divers
 initialise ou invalide le scrolling
 val=TRUE => valide le service
 val=FALSE => supprime le service

 aucun déroulement n'est effectué par cette fonction

int scrollok (WINDOW *fntr, bool val);

 déroule la fenêtre d'une ligne


 la première ligne est perdue et une ligne blanche est ajoutée en bas de l'écran
 affichage de la fenêtre complète après wrefresh()

int scroll (WINDOW *fntr);

Edition March OOOO ESAT/DGF/DMSI/SYST 11/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

 dessine un cadre autour d'une fenêtre


 le cadre est intérieur à la fenêtre. Il en utilise deux lignes et deux colonnes

int box (WINDOW *fntr, chtype ch_vet, chtype ch_hor);

 fait flasher l'écran

int flash (void);

 émet une sonnerie

int beep (void);

10) Couleurs
Les couleurs sont utilisées en couple : une couleur pour le caractère et une pour l'arrière-plan

Couleurs prédéfinies :

Définition Valeur
COLOR_BLACK 0
COLOR_BLUE 1
COLOR_GREEN 2
COLOR_CYAN 3
COLOR_RED 4
COLOR_MAGENTA 5
COLOR_YELLOW 6
COLOR_WHITE 7
 retourne TRUE si le terminal supporte la couleur

int has_colors (void);

 initialise le mode couleur


 retourne OK si le terminal supporte la couleur, ERR sinon

int start_color (void);

Edition March OOOO ESAT/DGF/DMSI/SYST 12/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

 définit les deux couleurs qui composent le couple


 num_pair identifie le couple
 plusieurs couples sont définissables pour une application, mais chacun avec un attribut différent.
Chacun est défini par la macro COLOR_PAIR(num_pair)
 les couleurs sont utilisées avec wattron(fenêtre, COLOR_PAIR(x));

int init_pair (short num_pair, short car, short background);

 met complètement à jour l’affichage


 dès le prochain wrefresh(), toute la fenêtre sera réécrite. Surtout utilisé lorsque deux fenêtres se
chevauchent et que l’affichage de l’une modifie l’affichage de l’autre.

int touchwin (Window * fntr);

POUR NE PAS AVOIR DE PROBLEMES D’AFFICHAGE, L’ECRAN


DEVRA ETRE GERE COMME UNE RESSOURCE CRITIQUE SI
PLUSIEURS PROCESSUS Y ACCEDE SIMULTANEMENT (cf. "gestion
des IPC").

Edition March OOOO ESAT/DGF/DMSI/SYST 13/14


Systèmes Répartis LA PROGRAMMATION C SOUS UNIX C-SYSTEME

INDEX

Edition March OOOO ESAT/DGF/DMSI/SYST 14/14

Вам также может понравиться