Le dimanche 23 janvier 2022, Edgar a écrit :
> Si tu veux gérer ce cas, à mon avis tu ne peux pas faire mieux que de
> tester chaque bit de la ligne un par un. Et pour le coup, je ne pense
> pas que le XOR avec la lecture précédente te soit très utile, car tu
> dois distinguer trois cas :
>
> - touche pas enfoncée → rien à faire
> - touche enfoncée qui ne l'était pas avant → nouvelle frappe
Bé, le XOR me permet de faire ça, justement... Derrière, pour chaque bit à
1, je n'aurai qu'à faire un AND avec la valeur courante brute (masqué pour
le bit courant) pour trouver le front.
> - touche enfoncée qui l'était avant → gérer la répétition
>
> Il n'y a pas besoin de détecter le cas où la touche est relâchée, sauf
> si tu veux générer des événements « key release ».
Non, effectivement, ça ne me servait que pour stopper la répétition, mais
ça peut être fait différemment.
> Si tu veux arrêter la répétition quand une autre touche est appuyée, ça
> veut dire qu'au plus une touche peut répéter. Pour ça tu peux garder en
> mémoire la position de la dernière touche enfoncée et, quand tu détectes
> une touche qui est maintenue enfoncée, tu la fais répéter uniquement si
> c'est la dernière touche enfoncée.
Vu.
> Je te propose l'algo ci dessous. Je l'ai écrit en C, mais j'imagine que
> ça doit pouvoir facilement s'adapter en assembleur.
Je vais étudier ton code, merci !
--
Frédéric