/*
   Fichier modepage.h
   Auteur Bernard Chardonneau
*/


/*
   Logiciel de démarrage du système d'exploitation

   Les commandes de Libremail qui nécessitent des saisies au clavier
   durant leur exécution avec utilisation des flèches et autres touches
   de déplacement et la touche ESC en fin de saisie ne peuvent fonctionner
   aussi bien avec un démarrage par systemd qu'avec un démarrage par init.

   Avec systemd, il faudra appuyer 2 fois sur la touche ESC pour qu'elle
   soit prise en compte là où un seul appui suffit avec init.

   Par défaut, Libremail est compilé pour fonctionner que le système
   d'exploitation ait été initialisé par init ou par systemd. Une
   détection est effectuée au démarrage des logiciels concernés pour
   programmer au mieux la réception de caractères du clavier.

   Il est possible d'éviter cette détection en compilant Libremail
   uniquement pour l'un des systèmes dé démarrage, ce qui se fait en
   décommentant l'un des deux #define qui suit.
*/


//#define systemd 0   // décommenter pour compiler pour init uniquement
//#define systemd 1   // décommenter pour compiler pour systemd uniquement


/* taille par defaut d'une fenêtre */

#define defaut_ligne   25
#define defaut_colon   80


/* macros de gestion de l'affichage */

#define putseq(s)   printf ("%c[%s", ESC,s) // affiche séquence d'échappement

#define debpage()   putseq ("H")   // se positionne en haut de page
#define baspage()   putseq ("99B") // se positionne en bas de page
#define effpage()   putseq ("J")   // efface la page à partir du curseur
#define effligne()  putseq ("K")   // efface la ligne à partir du curseur
#define insligne()  putseq ("L")   // insère une ligne au niveau ligne courante
#define montecurs() putseq ("A")   // remonte le curseur d'une ligne
#define lumnor()    putseq ("0m")  // affichage en luminosité normale


/* commandes stty pour le mode de gestion du clavier */

#define cmd_mode_raw_init     "stty -icanon min 0 time 5 -echo"
#define cmd_mode_raw_systemd  "stty -icanon -echo"
#define cmd_mode_normal       "stty icanon echo"


/* prototypes des fonctions de la bibliothèque modepage */

int  util_systemd ();
void mode_raw ();
void mode_normal ();
void clair ();
void sombre ();
void affpage ();
void monte (int n);
void descend (int n);
void lig_col ();
int  leccar ();
void execom (char *outil, char *fichier);
void attendre (int duree);


/* variables globales à l'application utilisées par modepage
   (pour éviter des tonnes de passages de paramètres) */


#ifdef modepage
     int nb_lignes;            // nombre de lignes mémorisées
     int lignecour;            // numéro de la ligne courante
     int lignepage, colonpage; // nombre ligne et colonnes de la page d'écran
     int lignecran;            // numéro de ligne du curseur à l'écran
#else
     extern int nb_lignes;
     extern int lignecour;
     extern int lignepage, colonpage;
     extern int lignecran;
#endif