> Tech > La procédure de contrôle des touches de fonction

La procédure de contrôle des touches de fonction

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Le segment de code de la figure 5 représente la sous-procédure complète permettant de déterminer la touche actionnée et si elle est disponible. Si elle ne l'est pas, il envoie un message d'erreur. Si elle l'est, il exécute la sousprocédure de la touche de fonction correspondante.
La figure 6 montre

La procédure de contrôle des touches de fonction

la définition du Allowed Function Key Mask comme une matrice de compilation
de 29 éléments dont les valeurs sont définies à  la fin du
code source (comme indiqué). Dans cet exemple, j’ai autorisé
l’utilisation des touches de fonction F3, F5, F6, F12 et de
toutes les touches de non-fonction (Enter, Page, par
exemple). Si je voulais activer une autre touche ultérieurement,
il me suffirait d’insérer un « Y » dans l’élément de matrice
correspondant. Ensuite, il suffirait d’insérer le code
dans la bonne procédure de touche de fonction.
La figure 5 montre la sous-procédure de contrôle des
touches de fonction. Elle est appelée après le ExFmt pour déterminer
l’action à  mener après que l’utilisateur ait actionné
une touche. Premièrement, elle effectue un %Scan de la
structure de données ds_keys (contenant nos configurations
binaires de touches) avec la configuration binaire renvoyée
dans l’INFDS de la station de travail. Cela définit la valeur
d’index du hit de la touche de fonction au champ KeyHit.
Ensuite, nous entrons dans le groupe Select pour déterminer
si la touche de fonction est autorisée. S’il n’y a pas un
« Y » dans l’élément correspondant de la matrice pa_key,
alors j’envoie un appel à  mon SendMsg (une procédure externe
contenue dans un programme de service) qui envoie
un message au sous-fichier de messages de l’écran du programme
indiquant que la touche de fonction n’est pas autorisée
en ce moment.
Quand la matrice pa_key contient un « Y » dans l’élément
indexé KeyHit, c’est que la touche est active. Donc, nous définissons
la valeur de PtrProc (rappelez-vous, notre pointeur
de prototype de procédure général) d’après celui de
l’adresse de procédure contenue dans l’élément correspondant
de la matrice Prp (adresse de procédure de touche de
fonction).
A ce stade, le KeyProc de prototype général est basé sur
l’adresse de stockage de la sous-procédure de la touche de
fonction que nous voulons exécuter.
La commande CallP sur la ligne suivante fait l’appel de
sous-procédure vers la procédure de touche de fonction appropriée,
qui apparaît en figure 7.
Il est intéressant de noter que, bien que la commande
CallP requière un champ de type de pointeur de procédure
(ou un nom de procédure valide), elle ne peut pas traiter
l’élément de matrice lui-même ; vous ne pouvez pas insérer
le Prp(KeyHit) directement dans l’instruction CallP. En revanche,
vous pourriez utiliser CallB avec Prp(KeyHit). IBM
autorise apparemment cette souplesse supplémentaire avec
son CallB (appel de procédure lié statique).
Dans la figure 7, l’espace étant limité, je ne montre que
les touches de non-fonction (Enter, Page, par exemple) et les
cinq premières procédures de touches de fonction. Il y a un
exemple de code de traitement dans la procédure $F3 (Exit)
qui pourrait être utilisé pour terminer un programme. On le
voit, les procédures sont très visibles et elles se trouvent dans
une position relative standard dans le code source, donc
elles sont faciles à  trouver. Quand vous voulez activer une
nouvelle touche de fonction, il suffit d’ajouter le code dans la
sous-procédure appropriée.
Enfin, en figure 8, j’ai donné un exemple de contexte de
l’appel vers la sous-procédure $FKeys provenant du corps
central du code de traitement du fichier écran.

Téléchargez cette ressource

Cybersécurité des collectivités : Enjeux, Perspectives & Solutions

Cybersécurité des collectivités : Enjeux, Perspectives & Solutions

Villes, intercommunalités, métropoles, départements et régions sont particulièrement exposés aux risques de cybersécurité. Ce livre blanc Stormshield présente les défis cyber que rencontrent les collectivités, les solutions et perspectives pour qu’elles puissent assurer leur mission d’utilité publique, en toute sécurité.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010