Pis­ter la touche « Entrée »

ven 18 septembre 2020 0 Par Ibmiiste

Dans les pro­grammes gérant des écrans DSPF, nous avons des outils qui nous indiquent si des touches de fonc­tion ont été enfoncées.

Et pour­tant, pour la simple touche « Entrée », nous n’a­vons rien. Du moins d’officiel.

Heu­reu­se­ment, nous pou­vons contour­ner le pro­blème grâce à la DS de l’é­cran File Infor­ma­tion DATA STRUCTURE (INFDS).

En posi­tion 369, in y a un indi­ca­teur qui peut nous indi­quer si la touche « Entrée » a été action­née. Nous allons uti­li­ser les valeurs sous for­mat hexadécimal.

**FREE
dcl-f Fichier_DSPF workstn infds(Info_fichier);

//---------------------------------------------------------------
//  File information Data structure
//---------------------------------------------------------------
dcl-ds Info_fichier;
  Touche_pressee char(1) pos(369);
end-ds;

//---------------------------------------------------------------
//  Constant
//---------------------------------------------------------------
dcl-c Entree const(x'F1');

//--------
// Quelques paragraphes de codes plus loin...
//--------
//
Select ;
    When Touche_pressee = Entree;
         ExSr Valide-Donnees;
EndSl;      
  • Ligne 2 – Le fichier DSPF est décla­rée avec le mot-clef infds afin de dire au sys­tème que nous allons uti­li­ser la File Infor­ma­tion DATA STRUCTURE
  • Ligne 7 – Nous décla­rons la com­po­si­tion de la File Infor­ma­tion DATA STRUCTURE. A l’in­té­rieure, plus spé­ci­fi­que­ment, nous décla­rons une variable en posi­tion 369 de 1 octet. Elle contient le code de la touche qui a été action­née par l’utilisateur.
  • Ligne 14 – Nous décla­rons la constante qui cor­res­pond au code de la touche « Entrée »
  • Ligne 21 – Pour savoir si la touche « Entrée » a été action­née, nous com­pa­rons la variable conte­nant le code de la touche avec la valeur cor­res­pond à la touche « Entrée »

Bien sûr, la posi­tion 369 per­met de tes­ter d’autres touches, voi­ci une liste des valeurs possibles :

dcl-c F1 const(x'31');
dcl-c F2 const(x'32');
dcl-c F3 const(x'33');
dcl-c F4 const(x'34');
dcl-c F5 const(x'35');
dcl-c F6 const(x'36');
dcl-c F7 const(x'37');
dcl-c F8 const(x'38');
dcl-c F9 const(x'39');
dcl-c F10 const(x'3A');
dcl-c F11 const(x'3B');
dcl-c F12 const(x'3C');
dcl-c F13 const(x'B1');
dcl-c F14 const(x'B2');
dcl-c F15 const(x'B3');
dcl-c F16 const(x'B4');
dcl-c F17 const(x'B5');
dcl-c F18 const(x'B6');
dcl-c F19 const(x'B7');
dcl-c F20 const(x'B8');
dcl-c F21 const(x'B9');
dcl-c F22 const(x'BA');
dcl-c F23 const(x'BB');
dcl-c F24 const(x'BC');
* Page Down/Roll Up
dcl-c RollUp const(x'F5');
dcl-c PageDown const(x'F5');
* Page Up/Roll Down
dcl-c RollDown const(x'F4');
dcl-c PageUp const(x'F4');
* Enter
dcl-c Enter const(x'F1');
dcl-c Help const(x'F3');

dcl-c Print const(x'F6');

Voir l’ar­ticle original :