Abstraction Concrète : Module Fenetres


Le module de fenêtres utilise le module ecran de gestion d'écran en mode texte que nous avons déjà étudié. Ce module présente quelques définitions de types et fonctions de fenêtres d'affichage de texte.
Le type point du module interface comporte le champ nommé X pour repérer la position colonne, le champ nommé Y pour repérer la position ligne.
Le type distance du module interface comporte le champ nommé H pour indiquer la hauteur (nombre de lignes), le champ nommé L pour indiquer la largeur (nombre de colonnes).
Le type fenetre du module interface comporte le champ nommé ori : point pour indiquer la position de la fenêtre par rapport à l'écran, le champ nommé ext : point pour indiquer la dimension de la fenêtre par rapport à l'écran, un champ titre pour mentionner l'intitulé de la fenêtre, et le champ texte contenant le texte de la fenêtre.

La fonction trace_fenetre w trace, sur l'écran, la fenêtre w fournie en argument. Le titre de la fenêtre est disposé à partir du caractère suivant le coin en haut et à gauche sur le trait de bordure horizontale haute de la fenêtre. Si la longueur du titre excède la largeur de la fenêtre, celui-ci n'est pas affiché.
La fonction efface_fenetre w efface de l'écran la fenêtre w fournie en argument.
La fonction affiche_message m affiche une fenêtre message contenant le message m, à l'écran.
La fonction efface_message efface le message affiché à l'écran.

Les valeurs globales de fenêtres : Fenetre_de_Ligne, Fenetre_de_Texte, Fenetre_de_Titre, Fenetre_de_Commande, Fenetre_de_Message sont définies pour exemple et utilisées dans les applications que nous proposons tout au long de cet ouvrage.

Les caractères spéciaux qui construisent les coins et les traits de bordure des fenêtres sont définis par leur codes comme : coin_haut_droite code 191, coin_haut_gauche code 218, coin_base_droite code 217, coin_base_gauche code 192, trait_horizontal code 196, et trait_vertical code 179.

Exemple


(*** Fenetres : Exemple, phrases d'implémentation et résultats ***)

let f1 = {
   ori={X=10; Y=5};
   ext={H=10; L=20};
   titre="Fenetre 1";
   texte="Exemple de texte pour la fenetre 1. "^
         "Exemple de texte pour la fenetre 1. "^
         "Exemple de texte pour la fenetre 1. "^
         "Exemple de texte pour la fenetre 1. "^
         "Exemple de texte pour la fenetre 1. "^
         "Exemple de texte pour la fenetre 1. "^
         "Exemple de texte pour la fenetre 1. "^
         "Exemple de texte pour la fenetre 1. "}
and f2 = {
   ori={X=16; Y=11};
   ext={H=12; L=38};
   titre="Fenetre 2";
   texte="Une fenetre peut, parfois, en cacher une autre..."^
"Une fenetre peut, parfois, en cacher une autre...Une fenetre"^
" peut, parfois, en cacher une autre...Une fenetre peut, parfois"^
", en cacher une autre...Une fenetre peut, parfois, en cacher "^
"une autre...Une fenetre peut, parfois, en cacher une autre..."^
"Une fenetre peut, parfois, en cacher une autre...Une fenetre"^
" peut, parfois, en cacher une autre...Une fenetre peut, "^
"parfois, en cacher une autre..." } ;;

#vide_ecran();
 trace_fenetre f1;
 trace_fenetre f2;
 cur_pos(23,0);;



         +Fenetre 1---------+
         ¦Exemple de texte p¦
         ¦our la fenetre 1. ¦
         ¦Exemple de texte p¦
         ¦our la fenetre 1. ¦
         ¦Exemple de texte p¦
         ¦our l+Fenetre 2---------------------------+
         ¦Exemp¦Une fenetre peut, parfois, en cacher¦
         ¦our l¦ une autre...Une fenetre peut, parfo¦
         +-----¦is, en cacher une autre...Une fenetr¦
               ¦e peut, parfois, en cacher une autre¦
               ¦...Une fenetre peut, parfois, en cac¦
               ¦her une autre...Une fenetre peut, pa¦
               ¦rfois, en cacher une autre...Une fen¦
               ¦etre peut, parfois, en cacher une au¦
               ¦tre...Une fenetre peut, parfois, en ¦
               ¦cacher une autre...Une fenetre peut,¦
               +------------------------------------+
- : unit = ()
#trace_fenetre f2 ; trace_fenetre f1;  cur_pos(23,0) ;;


         +Fenetre 1---------+
         ¦Exemple de texte p¦
         ¦our la fenetre 1. ¦
         ¦Exemple de texte p¦
         ¦our la fenetre 1. ¦
         ¦Exemple de texte p¦
         ¦our la fenetre 1. ¦-----------------------+
         ¦Exemple de texte p¦eut, parfois, en cacher¦
         ¦our la fenetre 1. ¦Une fenetre peut, parfo¦
         +------------------+ une autre...Une fenetr¦
               ¦e peut, parfois, en cacher une autre¦
               ¦...Une fenetre peut, parfois, en cac¦
               ¦her une autre...Une fenetre peut, pa¦
               ¦rfois, en cacher une autre...Une fen¦
               ¦etre peut, parfois, en cacher une au¦
               ¦tre...Une fenetre peut, parfois, en ¦
               ¦cacher une autre...Une fenetre peut,¦
               +------------------------------------+