Avant l'existence de la commande CHOICE, certaines personnes utilisaient le code
errorlevel d'un utilitaire fait par DEBUG afin de déterminer la touche frappée :
A>debug
-a
132E:0100 XOR AX,AX
132E:0102 INT 16
132E:0104 MOV AL,AH 'code errorlevel
132E:0106 MOV AH,4C
132E:0108 INT 21
132E:010A
-n TOUCHE.COM
-r cx
CX 0000
:a
-w
Écriture de 0000A octets
-q
|
L'information est tirée de ces deux pages Internet :
http://gowap.free.fr/Prog/Dos/Le_DOS.html
http://www.jsand.net/coursdos_compDebug.wju
Le tout ne fait que 10 octets.
Voyons ci-dessous son emploi bidon dans un fichier BATCH.
@echo off
:choix
echo Qui êtes-vous ?
ECHO - Anne.
ECHO - Bertrand.
ECHO - Lucien.
ECHO - Quelqu'un d'autre.
ECHO Frappez sans violence la première lettre de votre réponse (a/b/l/q).
:test_touche
TOUCHE.COM
ECHO.
REM si supérieur ou égale au scan code alors va à...
if errorlevel 49 goto test_touche
if errorlevel 48 goto bertrand
if errorlevel 39 goto test_touche
if errorlevel 38 goto lucien
if errorlevel 31 goto test_touche
if errorlevel 30 goto autre
if errorlevel 17 goto test_touche
if errorlevel 16 goto anne
GOTO test_touche
REM Attention à la liste des scan code dans QBASIC
REM Ils prennent en compte un clavier QWERTY (A & Q sont inversées par ex)
:anne
ECHO Salut, Anne.
GOTO suite
:bertrand
ECHO Bienvenue Bertrand.
GOTO suite
:Lucien
ECHO Tu ne travailles plus ici, Lucien.
ECHO Au revoir.
ECHO Appuyez sur une touche pour continuer...
TOUCHE.COM
CLS
REM retour au menu
GOTO choix
:autre
ECHO Que voulez-vous que je vous dise : ah, une nouvelle tête ?
REM Un GOTO au cas où rajout ultérieur.
GOTO suite
:suite
ECHO.
ECHO Il est un peu niais ce programme.
|
Travailler directement avec les
scancodes est moins évident qu'avec les codes d'erreur de CHOICE mais pas si difficile.
Leur inconvénient est qu'ils dépendent du type de clavier : AZERTY, QWERTY, etc.
N.B. : il faut utiliser des nombres décroissant pour tester une valeur
errorlevel.
Il est possible de créer le programme TOUCHE.COM s'il n'existe pas à partir du fichier BATCH. Vers le début du fichier de commandes, on vérifie sa présence et si nécessaire on le crée grâce à cette ligne :
echo 1[Alt+192][Alt+205][Alt+22][Alt+136][Alt+224][Alt+180][Alt+76][Alt+205][Alt+33]>touche.com
Ce qui donne à l'écran en code ANSI est différent sous DOS suivant la page de codes utilisée (850 ou 437 généralement en France) :
if exist TOUCHE.COM goto choix
echo 1+-^VêÓ¦L-!>touche.com
|
Vu que ECHO sert à afficher du texte, TOUCHE.COM incluera les deux caractères de retour à la ligne et sa taille passera à 12 octets. Vu que DOS terminera cet utilitaire avant d'avoir lu les deux octets en trop, cela restera sans conséquence.