CODINGCLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

4/1.2.02 - Gestion du clavierCoding Classeurs Weka

4/0 - Langages du CPC

4/1 - Locomotive BASIC : Définitions et rappels de base

4/1.2 Version 1.0 sur CPC 464 : Mots clés et leur utilisation

II. Gestion du clavier

  INKEY (< Nombre entier >)

Détermine si pour une touche particulière du clavier les fonctions [SHIFT] et [CONTROL] sont activées.

En sortie, la fonction INKEY renvoie les valeurs suivantes selon la position des touches CTRL et SHIFT.

Sortie SHIFT CTRL Touche
-1 ? ? basse
0 haut haut basse
32 bas haut basse
128 haut bas basse
160 bas bas basse

 Utilisation :  Pour mieux comprendre le fonctionnement de la fonction INKEY, voici un programme qui indique la position des touches SHIFT et CTRL lorsque l'opérateur appuie sur la touche « Q » de code 67 (voir schéma du clavier page suivante).

100 CLS
110 IF INKEY(67) = -1 THEN PRINT "Touche Q non sollicitée" :GOTO 110
120 IF INKEY(67) = 0 THEN PRINT "Touche 0 sollicitée"
130 IF INKEY (67) = 32 THEN PRINT "SHIFT+ Q enfonces"
140 IF INKEY (67) =128 THEN PRINT "CTRL + Q enfonces"
150 IF INKEY (67) = 160 THEN PRINT "SHIFT + CTRL + Q enfonces"
160 GOTO 110

/im3/weka412a.jpg


Autre utilisation:  Dans une application de traitement de textes, nous pouvons prendre la convention suivante :
  • CTRL + Q = Sortie du logiciel,
  • CTRL + S = Sauvegarde du texte,
  • SHIFT + CTRL + S = Sauvegarde du texte et sortie du programme.
  • La touche « Q » a pour code 67, la touche « S » a pour code 60. t
  • La détection de « CTRL + Q » se fait par INKEY(67) = 128, la détection de « CTRL + S » se fait par INKEY(60)= 128, et
  • la détection de « SHIFT + CTRL + S » se fait par INKEY(60) = 160.

De ces constatations, nous pouvons écrire une partie de la boucle principale (Idle Loop) du traitement de textes :

100 A$ = INKEY$:IF A$ = "" THEN 100 'Attente d'un caractere
110 IF INKEY(67) = 128 THEN GOTO 1000 'Sortie du logiciel
120 IF INKEY(60) = 128 THEN GOTO 2000 'Sauvegarde du texte
130 IF INKEY(60) = 160 THEN GOTO 3000 'Sauvegarde et sortie
140 GOTO 100 'Bouclage de l'Iddle loop

   
  INKEY$

Acquisition « volante » d'une touche du clavier.

Utilisation Les deux domaines dans lesquels « INKEY » est souvent employée sont les suivants :

  • 1) Attente de l'appui sur une touche, puis traitement ;
  • 2) Insertion dans une boucle principale (« Idle Loop »).

1) Attente de l'appui sur une touche :

100 A$ = INKEY$:IF A$ = "" THEN 100

Ce programme reste en ligne 100 jusqu'à l'appui sur une touche. Dès lors, le code de la touche se trouve dans A$. Ces codes seront affichables par « PRINT A$ », ou non affichables par « PRINT A$ » s'ils ont un code ASCII inférieur à 27. Dans ce deuxième cas, pour avoir leur valeur, il faudra faire :

A = ASC(A$) : PRINT A, et l'on obtiendra les valeurs suivantes :

Valeur de A Touches pressées
0
1
2
"
26
CTRL+ @
CTRL+ A
CTRL+ B
"
CTRL+ Z


2) Insertion d'« INKEY$ » dans une boucle principale :

Par exemple, dans un jeu de « Space Invaders », le programme ne peut pas passer tout son temps à tester les commandes entrées au clavier. D'autres actions primordiales sont à exécuter quasiment en même temps. Il s'agit, par exemple, du déplacement des envahisseurs et des tirs de missiles, d'où le programme d'Iddle loop ci-dessous :

100 'Iddle loop
110 GOSUB DEP—ENV 'Déplacement envahisseurs
120 GOSUB TIR-MIS 'Tir des missiles
130 IF INKEY$< >" " THEN GOSUB TRA-CLA Traitement clavier
160 GOTO 100 'Rebouclage de l'iddle loop

Ligne 130 : Exécution d'une commande clavier si le clavier est actionné.

   
  INPUT [ < #N° Canal >, ][ ; ][< Chaîne > ; J< Liste de variables >, ou INPUT [ < #N° Canal >, ][ ; ][< Chaîne >, ]< liste de variables >

Lit des données en provenance du canal indiqué.

Remarque :

100 INPUT "Entrez un nombre";N ;
                                          \   \
                                            \   Supprime le passage à la ligne 
                                             Un « ? » apparaît après le texte
                                             Remplacé par « , », aucun « ? » n'apparaît

Utilisation :

100 DIM X(100), Y(100) '100 points au maximum
110 I=1 'Mémorisation du premier point
120 INPUT "Entrez les coordonnées X et Y";X(I), Y(I)
130 IF X(I)< >999 AND Y(l) <>999 THEN l = l+1:GOTO 120
131 CLS
140 PLOT X(1), Y(1 ) 'Origine
150 FOR J = 2 TO I
160 DRAW X(J), Y(J) 'Trace
170 NEXT J

Ligne 120 : Entrée des coordonnées et stockage dans les tableaux X et Y.
Ligne 130 : Test de fin de saisie.
Lignes 131 à 170 : Affichage.

Autre application :

Lecture de données numériques X, Y de points que l'on veut réunir par des droites. Les dernières coordonnées avant le tracé seront par convention 999, 999.

Lecture de données sur cassette :

Reportez-vous à l'exemple donné pour l'ordre « WRITE". On veut relire le fichier cassette ou disquette stocké dans cet exemple.

100 OPENIN "FILEDUP"
110 INPUT#9, NOM$, PRE$, AD$, TEL$
120 CLOSEIN
130 PRINT "Nom NOM$
140 PRINT "Prénom PRE$
150 PRINT "Adresse"; AD$
160 PRINT "Téléphoné TEL$

Ligne 100 : Ouverture du fichier
Ligne 110 : Lecture des données (#9 = Cassette ou disquette).
Ligne 120 : Fermeture du fichier.
Lignes 130-160 : Affichage.

   
  JOY(< Entier> )

Donne la position du manche et des boutons feu de la manette de jeu, selon le tableau ci-dessous :

Bit à 1 Position

0

1

2

3

4

5

Haut

Bas

Gauche

Droite

Feu 2

Feu 1


Utilisation :

Pour se familiariser avec cette commande :

100 A = JOY(0)
110 IF A = 0 THEN PRINT "JOYSTICK non active"
120 IF A AND 1 < > 0 THEN PRINT "Vers le haut"
130 IF A AND 2 < > 0 THEN PRINT "Vers le bas"
140 IF A AND 4 < > 0 THEN PRINT "Vers la gauche"
150 IF A AND 8 < > 0 THEN PRINT "Vers la droite"
160 IF A AND 16 < > 0 THEN PRINT "Bouton feu n° 2"
170 IF A AND 32 < > 0 THEN PRINT "Bouton feu n° 1 "
180 GOTO 100

Ligne 100 : Acquisition de la position du joystick.
Lignes 110 à 170 : Affichage en fonction de la position du joystick.

Ce programme reconnaîtra, par exemple, l'appui sur le bouton feu N° 2 et l'orientation du JOYSTICK vers la gauche en même temps grâce à l'utilisation de la fonction de test de bit « AND ».

Autre utilisation :

Simulation d'une souris par JOYSTICK

La boucle principale aura l'allure suivante :

100 A = JOY(0)
110 IF (A AND 1) < >0 THEN GOSUB HAUT 'Déplacement vers le haut
120 IF (A AND 2) <> 0 THEN GOSUB BAS 'Déplacement vers le bas
130 IF (A AND 4) < >0 THEN GOSUB GAUCHE 'Déplacement vers la gauche
140 IF (A AND 8) < >0 THEN GOSUB DROITE 'Déplacement vers la droite
150 GOTO 100 'Rebouclage de l'Idle loop

Ligne 100 : Acquisition de la position du joystick.
Lignes 110-140 : Activation des modules de gestion joystick.

   
  KEY < Chaîne de caractères >

Affecte à une touche une chaîne de caractères (Longueur < 120).

Les touches de codes compris entre 128 et 159 (32 touches) sont redéfinissables.

Les codes 128 à 140 correspondent aux touches du pavé numérique :

Code 128 -> Touche 0, Code 129 -> Touche 1, Code 130 -> Touche 2

Code 131 -> Touche 3, Code 132 -> Touche 4, Code 133 -> Touche 5

Code 134 -> Touche 6, Code 135 -> Touche 7, Code 136 -> Touche 8

Code 137 -> Touche 9, Code 138 -> point, Code 139 - ENTER Code 140 - CTRL+ENTER.

Les codes 141 à 159 ne sont pas associés à des touches, mais peuvent l'être en utilisant la commande « KEY DEF ».

Utilisation :

En tapant un programme BASIC, vous constatez que certains mots-clés

reviennent souvent. Pour vous faciliter la tâche, redéfinissez des touches en leur affectant ces mots-clés répétitifs.

Par exemple :

Affectation de « INPUT » au « 0 » du pavé numérique :

KEY 128, "INPUT".

Affectation de « DATA » au « 1 » du pavé numérique :

KEY 129, "DATA".

   
  KEY DEF < N° touche >, < Répétition > ,  [< Normal>, [< avec SHIFT >, [< avec CTRL >]]]

Répétition : 0 ou 1 : Active ou désactive l'auto-repeat dont la vitesse est contrôlée par « SPEED KEY ».

Normal : Redéfinition s'il n'y a pas appui sur SHIFT ni CTRL.

SHIFT : Redéfinition s'il y a appui sur SHIFT.

CTRL : Redéfinition s'il y a appui sur CTRL.

Application :

Application Vous voulez redéfinir votre clavier QWERTY en AZERTY, c'est-à-dire changer les touches suivantes :

QWERTY QWERTY AZERTY AZERTY
Sans SHIFT

(67) q
(59) w
(69) a
(29) :
(71) z
(38) m
(39) ,
(31) .
(30) /

Avec SHIFT

Q
W
A
*
Z
M
<
>
?

Sans SHIFT

a (97)
z (122)
q (113)
m (109)
w (119)
, (44)
; (59)
: (58)
= (61)

Avec SHIFT

A (65)
Z (90)
Q (81)
M (77)
W (87)
? (63)
. (46)
/ (47)
+ (43)

Ce qui se traduit par :

100 KEY DEF 67, 1, 97, 65 : KEY DEF 59, 1, 122, 90 : KEY DEF 69, 1, 113, 81
110 KEY DEF 29, 1, 109, 77 : KEY DEF 71, 1, 119, 87 : KEY DEF 38, 1, 44, 63
120 KEY DEF 39, 1, 59, 46 : KEY DEF 31, 1, 58, 47 : KEY DEF 30, 1, 61, 43

   
 

LINE INPUT [< #N° Canal >][;][< Chaîne >]< Variable en chaîne >

Lit une ligne sur le canal indiqué (par défaut sur l'écran).

Remarque :

Un « ; » après le « LINE INPUT » supprime le passage à la ligne en fin de lecture.

Utilisation :

Vous voulez réaliser un éditeur de lignes avec une saisie simple gérant 100 lignes au maximum.

100 MODE 2
110 DIM A$ (100)
120 PRINT "Entrez votre texte, puis 999 quand vous aurez fini."
130 I = 1 'Ligne 1
140 LINE INPUT A$(I)
150 IF A $ (I) <> "999" THEN 1 = 1 + 1 : GOTO 140
160 PRINT "Voulez-vous 1) Corriger une ligne"
170 PRINT " 2) Imprimer"
180 INPUT " 3) Continuer la saisie" ; A
190 IF A <>1 THEN 240
200 INPUT "N° de ligne" ; N 'Correction d'une ligne
210 PRINT A$(N)
220 LINE INPUT A$(N)
230 GOTO 160 240 IF A<>2 THEN 290
250 FOR J = 1 TO I 'Impression
260 PRINT#8, A$(J)
270 NEXT J
280 GOTO 160
290 GOTO 140 'La saisie continue

Ligne 140 : Lecture d'une ligne.
Ligne 150 : Test de fin de saisie.
Lignes 160-180 : Menu de fin de saisie.
Lignes 190-230 : Correction d'une ligne.
Lignes 240-280 : Impression.

   
 

SYMBOL < N° caractère >, < 8 lignes élémentaires >

Redéfinit la forme d'un caractère au pixel près.

Remarque :

Consulter le mot-clé « SYMBOL AFTER » qui va avec

Utilisation :

Editeur de caractères redéfinissables :

100 CLS:DIM T (8,8)
110 FOR 1=1 TO 8
120 PRINT "........"
130 NEXT I
140 X=1:Y=1 'Initialisation
150 LOCATE X, Y
160 A$ = INKEY$:IF A$ = "" THEN 160
170 A = ASC (A$)
180 IF A$ = "P" THEN T(Y,X) = 1 :PRINT"*"
190 IF A$ = "V" THEN T(Y,X) = 0:PRINT"."
200 IF A = 243 AND X210 IF A = 242 AND X>1 THEN X = X-1
220 IF A = 240 AND Y> 1 THEN Y = Y-1
230 IF A = 241 AND Y240 IF A013THEN 150
250 LOCATE 1,15:PRINT "Donnees correspondantes :PRINT
260 FOR I = 1 TO 8
270 A = 0 'Initialisation
280 FOR J = 1 TO 8
290 A = A + (2M8-J))*T(I, J)
300 NEXT J 310 PRINT A;
320 NEXT I

Lignes 110-130 : Affichage de la grille de redéfinition.
Ligne 160 : Acquisition des commandes clavier.
Lignes 170-240 : Action sur une commande clavier.
Lignes 250-320 : Affichage des données de redéfinition.

Autre utilisation :

Affichage de dessins définis par plusieurs caractères redéfinis mis côte à côte : 

Soit la variable « HAUTEUR » définissant le nombre de caractères mis l'un sous l'autre, et « LARGEUR » le nombre de caractères mis côte à côte.

100 REM Affichage de motifs programmes
110 'Définition des couleurs d'encres et de papier
120 'Initialisation des coordonnées d'affichage
130 '
140 SYMBOL AFTER 129 'Définition du motif
150 FOR 1 = 1 TO HAUTEUR
160 FOR J = 1 TO LARGEUR
170 READ A(J)
180 NEXT J
190 SYMBOL 1 28 +1, A(1), A(2), A(3), A(4), A(5), A(6), A(7), A(8)
200 NEXT I
210 'DATA correspondant aux symboles a redefinir
220 '
230 'Affichage du motif
240 FOR I = 1 TO HAUTEUR
250 FOR J = 1 TO LARGEUR
260 LOCATE OX + J - 1, OY +1 - 1 'Positionnement du curseur
270 PRINT CHR$(129 + (J-1) + (I-1)*(LARGEUR)
280 NEXT J
290 NEXT I
300 END

Lignes 150-200 : Redéfinition des caractères.
Ligne 210 : Données de redéfinition.
Lignes 230-290 : Affichage du dessin.

   
  SYMBOL AFTER < Entier N>

Fixe le nombre de caractères qui seront redéfinis par la commande « SYMBOL ».

Le nombre de caractères redéfinissables est 255-N, occupant les positions N à 255.

Par exemple, pour que les caractères 60 à 255 soient redéfinissables, taper : SYMBOL AFTER 60.

   
 

SPEED KEY < Attente >, < Période de répétition >

Définit la vitesse de répétition des touches en « auto-repeat » et le délai au bout duquel l'« auto-repeat » se déclenche en 1/50® sec.

La valeur par défaut est 10,10 et ces deux nombres peuvent prendre des valeurs comprises entre 1 et 255.

Page précédente : 4/1.2.01 - Affichage sur l'écran

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 082 millisecondes et consultée 635 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.