4/0 - Langages du CPC4/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
| 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 loopLigne 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 JLigne 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 100Ligne 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 loopLigne 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 continueLigne 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 ILignes 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 ENDLignes 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. |
CPCrulez[Content Management System] v8.7-desktop/c Page créée en 754 millisecondes et consultée 1722 foisL'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. |
|