Présentation
Documentation
L'équipe
Sérialisation
 
Programmes
Objets
Libs Utilitaires
Libs Internes
   
 
Editeur
Syntaxes
Windows
Versions
   

SCR/AL1 - TOME I. Les programmes

5. SCR4_DRV : compilation des drivers

Le programme scr4_drv permet de compiler les définitions de terminaux. Ces définitions répondent à une syntaxe définie dans les pages qui suivent.

Introduction

En Unix, la possibilité de connecter au système différents terminaux complique quelque peu le travail des applications SCR/AL1, et ce à plusieurs égards : tout d'abord, chaque terminal possède son propre clavier et renvoie à l'ordinateur central des séquences de touches (ESCAPE SEQUENCES) qui peuvent différer fortement selon le type de terminal. Certaines touches existent seulement sur certains terminaux et pas sur d'autres, ... C'est très souvent le cas pour les touches spéciales (F1, PGUP, ...)

Ensuite, en ce qui concerne les caractères frappés au clavier, leurs codes sont parfois très différents, du moins lorsqu'il s'agit de caractères spéciaux (accents, lignes et coins de tableaux, ...). Il vaut pourtant mieux assurer la cohérence entre les différents terminaux, sans quoi un texte encodé sur un terminal serait partiellement illisible sur un autre.

La raison de l'existence de ces "drivers" est donc multiple :

Les spécialistes Unix peuvent se demander pourquoi SCR/AL1 ne fait pas directement appel à la database termcap, standard pour beaucoup d'applications Unix. La raison tient simplement au fait que celle-ci ne contient pas toutes les informations dont SCR/AL1 a besoin pour fonctionner (les mappings de caractères ne sont pas prévus par exemple). De plus, le nombre de touches que SCR/AL1 reconnaît implique que l'on soit amené à modifier leur signification au sein même de la database termcap, ce qui est peu souhaitable pour le bon fonctionnement des autres applications.

Syntaxe

scr4_drv filename

Filename est le nom du fichier contenant la définition ASCII du driver. Comme résultat de scr4_drv, le fichier filename.drv est construit. Le fichier filename est recherché à l'aide de la variable d'environnement SCR_PATH.

Liste des drivers prédéfinis

Au fil du temps, de nombreux types de terminaux ont été rencontrés. La liste des plus importants avec leur description se trouve ci-dessous.

Les fichiers de définition des terminaux et leur version compilée se trouvent réunis dans le directory

    c:\scr     en DOS
/usr/scr en Unix

Au moment du lancement d'une application SCR/AL1, la variable d'environnement SCR_PATH doit contenir le nom du directory où les drivers sont définis (éventuellement différent du nom par défaut).

Syntaxe de la définition ASCII du driver

Le fichier ASCII de définition d'un driver de terminal est divisé en trois sections :

Au sein de chaque section, on trouve toujours un mot clé suivi soit d'une suite de caractères entre double quotes, soit d'un nombre décimal, soit d'un caractère entre quotes simples.

Si vous êtes amenés à créer vous-même un de ces fichiers, prenez une copie de l'un de ceux qui sont fournis en standard avec SCR/AL1 et modifiez-la.

Des exemples peuvent être trouvés en DOS dans le directory c:\scr et en UNIX dans le directory /usr/scr ou /usr/lib/scr.

On trouve ci-dessous des exemples de fichiers avec un commentaire explicatif dans la partie de droite.

Représentation des caractères et strings

Les caractères peuvent être représentés par :

Les strings peuvent contenir ces définitions standardisées de caractères spéciaux : ainsi

Capabilities

Cette section contient des mots clés suivis d'une valeur numérique ou de type string (entre ""). Des commentaires entre /* et */ peuvent être insérés n'importe où entre les éléments de définition.

La section commence toujours par le mot-clé CAPABILITIES.

Dans la syntaxe ci-dessous, n représente un entier positif, "string" un texte entre doubles quotes et 'c' un caractère en simples quotes. Les mots-clés sont en majuscules mais peuvent être introduits en minuscules.

Syntaxe

    CAPABILITIES

/* DEFINITIONS GENERALES */
NL n /* Nombre de lignes de l'écran */
NC n /* Nombre de lignes de l'écran */
FILL 'c' /* Caractère de remplissage */

/* INITIALISATION ET RESET DU TERMINAL */
INIT "string" /* Initialisation du terminal (SCR_init) */
RESTORE "string" /* Reset du terminal (SCR_end()) */

/* GESTION DES AFFICHAGES, ATTRIBUTS ET COULEURS */
CLS "string" /* CLEAR SCREEN */
REVERSE "string" /* Reverse video */
INVISIBLE "string" /* Non visible */
UNDERLINE "string" /* Souligné */
BOLD "string" /* Double intensité */
DEFAULT "string" /* Attribut normal */
BLINKING "string" /* Clignotement */

BLUE "string" BLACK "string" BLUE "string" GREEN "string"
CYAN "string" RED "string" MAGENTA "string" WHITE "string"
YELLOW "string"

SHADOW "string" /* Attribut d'affichage des ombrages */
CHELP1 "string" /* Attribut d'affichage des aides */
CHELP2 "string" /* Attribut d'affichage des aides */

/* GESTION DU CURSEUR */
MOVE "string" /* Escape sequence de déplacement du curseur */
/* doit contenir %d %d aux positions x et y */
/* ou %c %c pour certains terminaux */

CSR_ON "string" /* Curseur visible */
CSR_OFF "string" /* Suppression du curseur */
CSR_BOLD "string" /* Curseur en double épaisseur */
CSR_NORMAL "string" /* Curseur en simple épaisseur */

/* FONTS - sur les terminaux qui possèdent plusieurs polices */
FONT0 "string" FONT1 "string" FONT2 "string"
FONT3 "string" FONT4 "string" FONT5 "string"

Special_keys

Cette section contient la définition de toutes les touches fonctions, touches spéciales, etc. Chaque élément est composé de deux parties : d'une part la touche sous forme d'un mot-clé, d'un caractère ou d'un entier, et d'autre part la séquence correspondante sous forme d'un string.

Les touches fonctions peuvent être définies à plusieurs reprises de façons différentes : dans ce cas chacune des deux séquences de touches seront reconnues par le programme comme le même caractère ou la même touche spéciale.

Dans la syntaxe, les notations habituelles (^A pour Control-A, ^[ pour ESCAPE, \nnn en octal, \xAA en hexadécimal sont acceptées).

Un string peut commencer par \000. Dans ce cas, les caractères suivants sont conservés dans la séquence de touches. Ceci permet de définir les touches fonctions en DOS.

Exemple

    LEFT    "^[[A"      /* La touche flèche à gauche est reconnue
lorsque la séquence ESCAPE, [, A est
transmise par le clavier */
'é' "^['e" /* Le caractère 'é' est reconnu lorsque la
suite ESCAPE+QUOTE+e est transmise par le
clavier. La touche é reste cependant
opérante */
133 "^[^[a" /* La séquence ESCAPE+ESCAPE+a transmet
au programme le caractère 'â' */

La section commence toujours par le mot-clé

    SPECIAL_KEYS

Les mots-clés sont les suivants (ils doivent tous être suivis d'un string de définition) :

    /* Déplacements du curseur */
UP DOWN LEFT RIGHT
HOME END PGUP PGDN
C_LEFT C_RIGHT
C_HOME C_END C_PGUP C_PGDN

/* Touches fonctions */
F1 F2 F3 F4 F5 F6 F7 F8 F9 F10
S_F1 S_F2 S_F3 S_F4 S_F5 S_F6 S_F7 S_F8 S_F9 S_F10
A_F1 A_F2 A_F3 A_F4 A_F5 A_F6 A_F7 A_F8 A_F9 A_F10
C_F1 C_F2 C_F3 C_F4 C_F5 C_F6 C_F7 C_F8 C_F9 C_F10

/* Touches ALT */
ALT_A ALT_B ALT_C ALT_D ALT_E ALT_F ALT_G ALT_H
ALT_I ALT_J ALT_K ALT_L ALT_M ALT_N ALT_O ALT_P
ALT_Q ALT_R ALT_S ALT_T ALT_U ALT_V ALT_W ALT_X
ALT_Y ALT_Z

/* Touches d'édition */
INSERT /* Mise en mode insertion */
DELETE /* Destruction du caractère courant */
ERASE_EOF /* Effacement de la fin du champ */
S_TAB /* Shift-TAB */
TAB /* Touche de tabulation */
ERASE_FIELD /* Effacement de tout le champ */
ENTER /* Touche ENTER */
LINEFEED /* Touche Linefeed (CTRL-ENTER) */
ESCAPE /* Touche ESCAPE */
BACKSPACE /* Touche d'effacement du caractère précédent */
C_BACKSPACE /* Touche CTRL-Backspace */

/* Touches spéciales */
CONFIG /* Modification des couleurs en cours de session :
n'est plus utilisée */
REFRESH /* Réaffichage de l'écran complet */
PRTSC /* Impression de l'écran dans un fichier ou sur printer :
n'est plus utilisée */
BREAK /* Touche d'arrêt du programme. Tous les fichiers sont
préalablement fermés. */
HELP /* Touche d'appel au fichier d'aide de l'application :
n'est plus utilisée */
DIAS /* Touche d'envoi de l'écran courant dans le fichier
dias. Voir scr4_dia pour son utilité :
n'est plus utilisée */

/* Lettres accentuées */

A_GRAVE A_CIRC A_TREMA
C_CEDILLE E_AIGU E_GRAVE
E_CIRC E_TREMA I_CIRC
I_TREMA O_CIRC O_TREMA
U_GRAVE U_CIRC U_TREMA

Map_out

Cette section permet de définir l'affichage des caractères dans l'écran. Par exemple, un accent doit être affiché à l'aide d'une certaine ESCAPE sequence sur un terminal et d'une autre pour un autre terminal.

Chaque élément de cette section comprend 3 parties :

Exemple

    'é' 1 "[O"  /* La lettre 'é' est envoyée au terminal en changeant le
font courant du terminal et en le mettant à 1 par
l'ESCAPE sequence définie dans la section
CAPABILITES et en envoyant ensuite les deux
caractères '[' et 'O' */

VBAR1 0 '|' /* Le caractère semi-graphique correspondant à la ligne
verticale est remplacée par le caractère '|' */

La liste des mots-clés disponibles est :

    /* Caractères semi-graphiques : V indique vertical, H horizontal. 1
indique qu'l s'agit de lignes simples, 2 de lignes doubles.
T signifie Top, B Bottom, M Milieu, R Right, L left et C center.
Ainsi, V_BAR2 est la ligne verticale double,
M1_C1 la croix de centre de poids (1, 1),
B1_L2 le coin inférieur gauche de poids (1, 2),
etc.
*/

V_BAR1 H_BAR1 V_BAR2 H_BAR2
T1_L1 T1_C1 T1_R1 M1_L1
M1_C1 M1_R1 B1_L1 B1_C1
B1_R1 T1_L2 T1_C2 T1_R2
M1_L2 M1_C2 M1_R2 B1_L2
B1_C2 B1_R2 T2_L1 T2_C1
T2_R1 M2_L1 M2_C1 M2_R1
B2_L1 B2_C1 B2_R1 T2_L2
T2_C2 T2_R2 M2_L2 M2_C2
M2_R2 B2_L2 B2_C2 B2_R2

/* Lettres accentuées */

A_GRAVE A_CIRC A_TREMA
C_CEDILLE E_AIGU E_GRAVE
E_CIRC E_TREMA I_CIRC
I_TREMA O_CIRC O_TREMA
U_GRAVE U_CIRC U_TREMA

/* Caractères spéciaux : utilisés pour les scrollbars et les
ombrages */

SPEC_1, SPEC_2, SPEC_3

Exemple 1 : terminal ANSI-UNIX

/* ===================================================== */
/* FICHIER DE DEFINITION DES TERMINAUX ANSI (CLAVIER PC) */
/* ===================================================== */

CAPABILITIES /* DEFINITION DES CARACTERISTIQUES DE L'ECRAN */

NL 25 /* Nombre de lignes de l'écran */
NC 80 /* Nombre de colonnes de l'écran */
CLS "^[[2J" /* Clear Screen */
MOVE "^[[%d;%dH" /* Déplacement du curseur */

REVERSE "^[[7m" /* Attribut video inverse */
UNDERLINE "^[[1m" /* Attribut souligné */
BOLD "^[[1m" /* Attribut intensité forte */
DEFAULT "^[[0m" /* Suppression des attributs */

WHITE "^[[0m^[[2;0;15m" /* Couleur WHITE */
BLACK "^[[0m^[[2;1;0m" /* Couleur BLACK */
BLUE "^[[0m^[[2;7;1m" /* Couleur BLUE */
MAGENTA "^[[0m^[[2;0;5m" /* Couleur MAGENTA */
CYAN "^[[0m^[[2;0;3m" /* Couleur CYAN */
YELLOW "^[[0m^[[2;14;4m" /* Couleur YELLOW */
GREEN "^[[0m^[[2;7;2m" /* Couleur GREEN */
RED "^[[0m^[[2;11;4m" /* Couleur RED */
SHADOW "^[[0m^[[2;0;8m" /* Couleur SHADOW */
CHELP1 "^[[0m^[[2;1;3m" /* Couleur CHELP1 */
CHELP2 "^[[0m^[[2;15;4m" /* Couleur CHELP2 */

CSR_BOLD "^[[=8;15C" /* Curseur gras */
CSR_NORMAL "^[[=13;15C" /* Curseur normal */
CSR_OFF "^[[=14;13C" /* Curseur invisible */
CSR_ON "^[[=13;15C" /* Curseur visible */

FONT0 "^[[10m" /* Police 0 (normale) */
FONT1 "^[[11m" /* Police 1 */
FONT2 "^[[12m" /* Police 2 (caractères spéciaux) */

FILL ' ' /* Remplissage par défaut de l'écran */

SPECIAL_KEYS /* DEFINITION DES TOUCHES CLAVIER */

F1 "^[[M" /* DEFINITIONS DES TOUCHES F1 A F10 */
F2 "^[[N"
F3 "^[[O"
F4 "^[[P"
F5 "^[[Q"
F6 "^[[R"
F7 "^[[S"
F8 "^[[T"
F9 "^[[U"
F10 "^[[V"

C_F1 "^[[k" /* DEFINITIONS DES TOUCHES ^F1 A ^F10 */
C_F2 "^[[l"
C_F3 "^[[m"
C_F4 "^[[n"
C_F5 "^[[o"
C_F6 "^[[p"
C_F7 "^[[q"
C_F8 "^[[r"
C_F9 "^[[s"
C_F10 "^[[t"


S_F1 "^[[Y" /* DEFINITIONS DES TOUCHES Shift+F1 A Shift+F10 */
S_F2 "^[[Z"
S_F3 "^[[a"
S_F4 "^[[b"
S_F5 "^[[c"
S_F6 "^[[d"
S_F7 "^[[e"
S_F8 "^[[f"
S_F9 "^[[g"
S_F10 "^[[h"

ALT_F1 "^[^[[M" /* DEFINITIONS DES TOUCHES Alt+F1 A Alt+F10 */
ALT_F2 "^[^[[N"
ALT_F3 "^[^[[O"
ALT_F4 "^[^[[P"
ALT_F5 "^[^[[Q"
ALT_F6 "^[^[[R"
ALT_F7 "^[^[[S"
ALT_F8 "^[^[[T"
ALT_F9 "^[^[[U"
ALT_F10 "^[^[[V"

BACKSPACE "\\b" /* Touche backspace */
C_BACKSPACE "^[\\b" /* Touche control-backspace */
PGUP "^[[I" /* Touche PgUp */
PGDN "^[[G" /* Touche PgDn */
UP "^[[A" /* Touche flèche en haut */
DOWN "^[[B" /* Touche flèche en bas */
LEFT "^[[D" /* Touche flèche à gauche */
RIGHT "^[[C" /* Touche flèche à droite */
HOME "^[[H" /* Touche Home */
END "^[[F" /* Touche End */
INSERT "^[[L" /* Touche Insert */
DELETE "^[[E" /* Touche Delete Char */
BREAK "^b^b^b" /* Touche d'arrêt forcé (sans sauvetage) */
TAB "^i" /* Touche de tabulation */
HELP "^[h" /* Touche d'aide standard SCR */
ENTER "^m" /* Touche Enter (Return) */
PRTSC "^p" /* Touche d'impression de l'écran */
REFRESH "^l" /* Touche de réaffichage de l'écran */
ESCAPE "^[\n" /* Touche ESCAPE */
S_TAB "^[[Z" /* Touche Shift+Tab */
C_PGUP "^[^[[I" /* Touche Control-PgUp */
C_PGDN "^[^[[G" /* Touche Control-PgDn */
C_LEFT "^[^[[D" /* Touche Control-flèche gauche */
C_RIGHT "^[^[[C" /* Touche Control-flèche droite */
C_HOME "^[^[[H" /* Touche Control-Home */
C_END "^[^[[F" /* Touche Control-End */

ALT_A "^[a" /* DEFINITIONS DES TOUCHES Alt+A A Alt+Z */
ALT_B "^[b"
ALT_C "^[c"
ALT_D "^[d"
ALT_E "^[e"
ALT_F "^[f"
ALT_G "^[g"
ALT_H "^[h"
ALT_I "^[i"
ALT_J "^[j"
ALT_K "^[k"
ALT_L "^[l"
ALT_M "^[m"
ALT_N "^[n"
ALT_O "^[o"
ALT_P "^[p"
ALT_Q "^[q"
ALT_R "^[r"
ALT_S "^[s"
ALT_T "^[t"
ALT_U "^[u"
ALT_V "^[v"
ALT_W "^[w"
ALT_X "^[x"
ALT_Y "^[y"
ALT_Z "^[z"

MAP_OUT /* MAPPING DES CARACTERES ENVOYES A L'ECRAN */

'\020' 1 '\020' /* Caractères spéciaux */
'\021' 1 '\021'
'\022' 1 '\022'
'\030' 1 '\030'
'\031' 1 '\031'
'\032' 0 '\257'
'\033' 0 '\256'
'\036' 1 '\036'
'\037' 1 '\037'

Exemple 2 : terminal vt220

/* ==========================================================
* FICHIER DE DEFINITION DES TERMINAUX VT220 (CLAVIER AZERTY)
* ========================================================== */

CAPABILITIES

NL 24
NC 80
CLS "^[[2J"
MOVE "^[[%d;%dH"
REVERSE "^[[7m"
UNDERLINE "^[[2m"
BOLD "^[[1m"
DEFAULT "^[[0m"

CSR_ON "^[[?25h"
CSR_OFF "^[[?25l"
FONT0 "^[)0^O" /* Changement de font : passage au font 0 */
FONT1 "^[)0^N" /* Changement de font : passage au font 1 */
FONT2 "^[)1^N" /* Changement de font : passage au font 2 */


SPECIAL_KEYS

F1 "^[[17~"
F2 "^[[18~"
F3 "^[[19~"
/* SUITE ... */

S_F1 "^[[28~"
/* SUITE ... */

ALT_F1 "^[^[[17~"
/* SUITE ... */

PGUP "^[[5~"
PGDN "^[[6~"
/* SUITE ... */

ALT_A "^[a"
ALT_B "^[b"
ALT_C "^[c"
/* SUITE ... */

A_GRAVE "\d224"
A_CIRC "\d226"
A_TREMA "\d228"
C_CEDILLE "\d231"
E_AIGU "\d233"
E_GRAVE "\d232"
E_CIRC "\d234"
E_TREMA "\d235"
I_CIRC "\d238"
I_TREMA "\d239"
O_CIRC "\d244"
O_TREMA "\d246"
U_GRAVE "\d249"
U_CIRC "\d251"
U_TREMA "\d252"
248 "\d176"


/* ========================================== */
MAP_OUT /* Mapping des caractères à envoyer à l'écran */
/* ========================================== */

V_BAR1 1 'x' /* Barre vert. 1 = font 1 caractère 'x'*/
H_BAR1 1 'q' /* Barre Horiz 1 = font 1 caractère 'q'*/
T1_L1 1 'l' /* Coin Top-Left 1 = font 1 caractère 'l'*/
T1_C1 1 'w'
T1_R1 1 'k'
M1_L1 1 't'
M1_C1 1 'n' /* Croix centre 1 = font 1 caractère 'n'*/
M1_R1 1 'u' /* etc ... */
B1_L1 1 'm'
B1_C1 1 'v'
B1_R1 1 'j'

V_BAR2 1 'x' /* Idem poids 2 (double ligne) */
H_BAR2 1 'q'
T2_L2 1 'l'
T2_C2 1 'w'
T2_R2 1 'k'
M2_L2 1 't'
M2_C2 1 'n'
M2_R2 1 'u'
B2_L2 1 'm'
B2_C2 1 'v'
B2_R2 1 'j'

T1_L2 1 'l' /* Coin ligne 1 et 2 : Top 1- Left 2*/
T1_C2 1 'w'
T1_R2 1 'k'
M1_L2 1 't'
M1_C2 1 'n'
M1_R2 1 'u'
B1_L2 1 'm'
B1_C2 1 'v'
B1_R2 1 'j'

T2_L1 1 'l' /* Idem ... */
T2_C1 1 'w'
T2_R1 1 'k'
M2_L1 1 't'
M2_C1 1 'n'
M2_R1 1 'u'
B2_L1 1 'm'
B2_C1 1 'v'
B2_R1 1 'j'


A_GRAVE 0 224 /* Mapping de à : font 0, caractère 224 */
A_CIRC 0 226 /* etc ... */
A_TREMA 0 228
C_CEDILLE 0 231
E_AIGU 0 233
E_GRAVE 0 232
E_CIRC 0 234
E_TREMA 0 235
I_CIRC 0 238
I_TREMA 0 239
O_CIRC 0 244
O_TREMA 0 246
U_GRAVE 0 249
U_CIRC 0 251
U_TREMA 0 252

176 2 'e'
177 2 'e'
178 2 'e'
248 0 176

Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be