Csyst Curses

  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Csyst Curses as PDF for free.

More details

  • Words: 1,895
  • Pages: 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

y Fenêtre

Ecran Lignes

Caractères semi-graphiques (en mode texte) : constante symbolique ACS_ULCORNER ACS_LLCORNER ACS_URCORNER ACS_LRCORNER ACS_HLINE ACS_VLINE

signification coin haut gauche coin bas gauche coin haut droit coin haut gauche trait horizontal trait vertical

Fonctions clés : Constante symbolique KEY_DOWN KEY_UP KEY_LEFT KEY_RIGHT KEY_BACKSPACE KEY_DL

Edition March OOOO

valeur 0402 0403 0404 0402 0407 0510

signification flèche vers le bas flèche vers le haut flèche vers la gauche flèche vers la droite retour arrière d'un caractère suppression de la ligne

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 d'entrée  à l'initialisation, l'option echo est choisie 

fichier

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

Related Documents

Csyst Curses
June 2020 24
Curses
October 2019 40
Curses
October 2019 53
Csyst Terminal
June 2020 7
Csyst Socket
June 2020 10
Break Curses
December 2019 35