0% ont trouvé ce document utile (0 vote)
87 vues90 pages

Mots-clés du Locomotive BASIC 1.0

Les mots-clés de l'assembleur Z80 et leur utilisation

Transféré par

JmB Webmaster
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
87 vues90 pages

Mots-clés du Locomotive BASIC 1.0

Les mots-clés de l'assembleur Z80 et leur utilisation

Transféré par

JmB Webmaster
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.

2 page 1

Partie 4 : Langages du CPC

4/1.2

Version 1.0 sur CPC 464 :


Mots clés et leur utilisation

En quelques années, le langage BASIC a énormément progressé. La ver­


sion LOCOMOTIVE BASIC 1.0 de l'AMSTRAD CPC 464 est de loin diffé­
rente du BASIC que l'on trouvait sur les systèmes Apple ou Commodore
des années 80.
Aussi nous a-t-il semblé important de montrer l'utilisation des mots-clés
de ce langage. Pour cela, nous avons réparti chaque instruction dans
les groupes suivants :
I. Affichage sur l'écran :
BORDER, CLS, INK, LOCATE, MODE, PAPER, PEN, POS, PRINT, PRINT
USING, SPEED INK, TAG, TAGOFF, VPOS, WRITE, ZONE.
II. Gestion du clavier :
INKEY, INKEY$, INPUT, JOY, KEY, KEY DEF, LINE INPUT, SYMBOL,
SYMBOL AFTER, SPEED KEY.
III. Gestion de l'unité de cassette :
CAT, CHAIN, CHAIN MERGE, CLOSEIN, CLOSEOUT, OPENIN, OPE-
NOUT, SAVE, EOF, LOAD, MERGE, SPEED WRITE.
IV. Manipulation de chaînes de caractères :
ASC, CHR$, INSTR, LEFT$, LEN, LOWER$, MID$, RIGHT$, SPACE$,
STR$, STRING$, UPPER$, VAL.
V. Gestion de données :
DATA, READ, RESTORE.
VI. Sous-programmes et branchements :
GOSUB, GOTO, ON GOSUB, ON GOTO, RETURN.
Vil. Gestion des erreurs :
ERR, ERL, ERROR, ON ERROR GOTO, RESUME.
VIII. Gestion de la mémoire :
CALL, ERASE, FRE, HIMEM, INP, MEMORY, OUT, PEEK, POKE, VARPTR.
Partie 4 Chapitre 1.2 page 2 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

IX. Gestion des interruptions :


AFTER, DI, El, EVERY, REMAIN, TIME.
X. Instructions musicales :
ENT, ENV, RELEASE, SOUND, SQ, ON SQ GOSUB.
XI. Instructions graphiques :
CLG, DRAW, DRAWR, MOVE, MOVER, ORIGIN, PLOT, PLOTR, TEST,
TESTR, VPOS, XPOS, YPOS.
XII. Fonctions à caractère mathématique :
ABS, AND, ATN, BIN$, OINT, COS, CREAL, DEF FN, DEG, EXP, FIX,
HEX$, INT, LOG, LOG10, MAX, MIN, NOT, OR, PI, RAD, RANDOMIZE,
RND, ROUND, SGN, SIN, SQR, TAN, UNT, XOR.
XIII. Aides à la programmation :
AUTO, CLEAR, CONT, DEFINT, DEFREAL, DEFSTR, DELETE, EDIT, END,
LIST, NEW, REM, RENUM, RUN, STOP, TRON, TROFF.
XIV. Divers :
DIM, FOR, IF, LET, NEXT, WAIT, WEND, WHILE, WIDTH, WINDOW,
WINDOW SWAP.
Dans la suite, nous allons brièvement décrire la ou les fonction(s) de cha­
que mot-clé (pour plus de détails, reportez-vous au guide de l'utilisateur
AMSTRAD CPC), et surtout donner des exemples d'utilisation de ces
mots-clés.

Conventions d'écriture :
Pour faciliter la description systématique des mots-clés du BASIC, nous
avons adopté les conventions d'écriture suivantes :
— les mots-clés sont écrits en majuscules ;
— les caractères « < »et« > » encadrent un argument obligatoire ;
— les caractères « [ » et « ] » encadrent un argument facultatif ;
— les caractères « ( » et « ) » indiquent que le mot-clé est une fonc­
tion. Ces caractères doivent être présents dans son utilisation ;
— enfin, l'« opérateur » désigne l'utilisateur du programme.

I. Affichage sur l'écran


BORDER <a>[,<b>]

Change la couleur du pourtour de l'écran :


« BORDER a » donne une couleur « a » fixe au pourtour.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 3

Partie 4 : Langages du CPC

« BORDER a,b » donne une couleur « a » alternant avec une couleur « b »


au pourtour. La vitesse d'alternance est déterminée par l'ordre « SPEED
INK ».
Utilisation Vous voulez faire défiler toutes les couleurs possibles du BORDER, et
appuyer sur une touche pour passer d'une couleur à la suivante :
100 FOR l = 0 TO 31
110 CLS:PRINT"BORDER";I:BORDER I
120 A$ = INKEY$:IF A$ = THEN 120 'Attente appui sur une touche
130 NEXT I
Ligne 110 : Modification du « BORDER ».
Ligne 120 : Attente de l'appui sur une touche.
Autre utilisation Pendant l'exécution d'un programme, une erreur survient. Vous, pro­
grammeur, voulez attirer l'attention de l'opérateur (utilisateur). Un moyen
simple pour y arriver est de faire clignoter le BORDER.
Supposons que le BORDER à l'état normal soit BORDER 0:
100 SPEED INK 5,5 'Vitesse de clignotement
110 BORDER 2,6 'BORDER clignotant
120 FOR 1=1 TO 2000:NEXT I 'Duree du clignotement
130 BORDER 0 'Retour au BORDER d'origine
Ligne 100 : Choix de la vitesse de clignotement.
Ligne 110 : Deux couleurs pour le BORDER : Bleu vif (2) et Rouge vif (6).
Ligne 120 : Durée d'affichage du BORDER clignotant.
Ligne 130 : Retour au BORDER normal.

CLS[N° canal]

Efface l'écran ou la fenêtre définie par « WINDOW » avec la couleur du


papier (PAPER ou INK O).
Utilisation Vous êtes en MODE 1 et vous utilisez tout l'écran. Un programme affi­
che des données numériques sur l'écran, l'une au-dessous de l'autre,
et il n'y a pas assez de lignes pour afficher toutes les données. Pour faciliter
la lecture de ces données, vous décidez :
1) d'arrêter l'affichage dès que la ligne 23 est atteinte,
2) d'afficher un message d'attente,
3) d'attendre l'appui sur une touche pour continuer l'affichage.
100 'Calcul et affichage d'une donnée ou fin de programme si toutes
les données sont affichées
110 IF VPOS(#O)< >23 THEN 100 'Ligne 23 pas encore atteinte
120 PRINT "Appuyez sur une touche pour voir la suite"
Partie 4 Chapitre 1.2 page 4 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

130 A$ = INKEY$:IF A$ = "" THEN 130 'Attente appui sur une touche
140 CLS:GOTO 100 'Effacement écran et poursuite affichage
Ligne 100 : Cette ligne matérialise le programme d'affichage de données.
Ligne 110 : Test de la position du curseur. Si la ligne 23 n'est pas atteinte,
affichage d'une autre donnée.
Ligne 120 : Message signalant qu'il reste des données à afficher.
Ligne 130 : Attente d'une action au clavier.
Ligne 140 : Initialisation du prochain écran d'affichage.
Autre utilisation Vous avez défini une fenêtre de texte, par exemple dans un jeu d'aven­
tures, et vous voulez afficher un nouveau texte dans cette fenêtre en effa­
çant le précédent :
100 WINDOW 1,40,22,25 'Définition de la fenetre de texte
110 'Programme de jeu
120 CLS 'Curseur en x,y
130 PRINT "Affichage du nouveau texte"
Ligne 100 : Définition d'une fenêtre (voir mot-clé « WINDOW »
Partie 4 chap. 1.2 p. 105).
Ligne 110 : Cette ligne matérialise le corps du programme de jeu.
Ligne 120 : Effacement d'écran. Curseur en haut à gauche.

INK <a>, b[, <c>]

Définit la couleur « b » fixe d'un stylo « a », ou définit les couleurs alter­


nantes « b » et « c » d'un stylo « a ».
Utilisation Animation d'une rivière par rotation de la palette de couleurs :
Vous êtes en MODE 0, et vous avez dessiné une rivière avec les quatre
couleurs bleues que possède l'AMSTRAD. Ces couleurs ont été utilisées
en PEN 1, 2, 3 et 4. Il s'agit des couleurs :
1 : Bleu, 2 : Bleu Vif, 11 : Bleu Ciel, 14 : Bleu Pastel.
Une animation très réaliste peut être obtenue en opérant une rotation
de la palette des bleus, à condition bien sûr que le reste du décor n'uti­
lise pas ces couleurs.
Phase 1 Phase 2 Phase 3 Phase 4
1 - 2 1 - 11 1 - 14 1 - 1
Rotation
des 2-11 2-14 2-11 2-2
INK 11 - 14 11 - 1 11-2 11 - 11
14 - 1 14-2 14-11 14 - 14
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 5

Partie 4 : Langages du CPC

100 A = 1 :B = 2:C- 11 :D = 14 'Définition des couleurs à modifier


110 INK 1,A:INK 2,B:INK 3,C:INK 4,D 'Rotation des bleus
120 l = A:A = B:B = C:C = D:D = l 'Définition des rotations
130 FOR J = 1 TO 100:NEXT J 'Attente entre deux rotations
140 GOTO 110 'Passage a la prochaine rotation
Ligne 100 : Les couleurs à modifier sont rangées dans les variables A,
B, C et D.
Ligne 110 : Affectation des encres aux stylos 1, 2, 3 et 4.
Ligne 120 : Rotation des encres.
Ligne 130 : Pause entre deux rotations.
Autre utilisation Vous avez dessiné un château délabré. Il faut nuit, et, pour rendre les
lieux encore plus lugubres, vous décidez d'illuminer certaines parties du
château lorsque le tonnerre fait rage.
Supposons que le dessin soit en MODE 0, que le fond de l'écran soit
noir et que l'éclair utilise PEN 6.
Pour obtenir l'effet souhaité :
100 MODE 0
110 FOR J = 1 TO 3 '3 éclairs successifs
120 INK 6,26 'On fait apparaître l'eclair
130 INK 0,13 'Le fond de l'écran devient blanc
140 FOR I = 1 TO 100* INT (RND(1 ) * 10):NEXT l'Duree de l'eclair
150 INK 6,0 'L'eclair disparait
160 INK 0,0 'et le fond redevient noir
170 FOR 1 = 1 TO 100:NEXT I 'Duree entre deux éclairs
180 NEXT J
Ligne 120 : Affectation de l'encre « Blanc brillant » 26 au stylo 6 ; l'éclair
apparaît.
Ligne 130 : Affectation de l'encre « Blanc » 13 au stylo 0 (PAPER).
Ligne 150 : Affectation de l'encre « Noir » 0 au stylo 6 ; l'éclair disparaît.
Ligne 160 : Affectation de l'encre « Noir » 0 au stylo 0 ; le PAPER rede­
vient noir.

LOCATE[<N° de canal>], cCoord. X>, <Coord. Y>

Déplace le curseur texte (l'endroit où le prochain caractère sera affiché


par une instruction du type PRINT, INPUT ou équivalent) à une position
quelconque sur l'écran.
Partie 4 Chapitre 1.2 page 6 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Utilisation Ce mot-clé permet de définir et d'utiliser facilement des masques de sai­


sie. Prenons l'exemple suivant : vous voulez constituer le fichier de vos
amis et relations et, pour cela, utiliser des écrans de saisie standard de
type :

Nom :
Prénom :
Adresse :
Téléphone :
Première rencontre :
Divers :

Le texte « Nom, prénom ... divers » représente les données fixes de l'écran
de saisie et est affiché par l'ordinateur.
Appelons chacune de ces données un « champ ».
L'utilisateur devra entrer des données après chaque champ.
Le programme de saisie sera le suivant :
100 CLS
110 PRINT "Nom
120 PRINT "Prénom
130 PRINT "Adresse
140 PRINT "Téléphoné
150 PRINT "Première rencontre
160 PRINT "Divers
170 LOCATE 8,1:INPUT N0M$ 'Saisie champ 1
180 LOCATE 11,2:INPUT PRE$ 'Saisie champ 2
190 LOCATE 12,3:INPUT ADR$ 'Saisie champ 3
200 LOCATE 14,4:INPUT TEL$ 'Saisie champ 4
210 LOCATE 23,5:INPUT PRR$ 'Saisie champ 5
220 LOCATE 11,6:INPUT DIV$ 'Saisie champ 6
Lignes 110 à 160 : Affichage des champs.
Lignes 170 à 220 : Positionnement du curseur et lecture des données
après chaque champ.
Autre utilisation Dans le jeu du pendu, il faut trouver un mot en un minimum d'essais
en proposant des lettres au hasard. Supposons que le mot à trouver soit
« ORDINATEUR » et que l'écran de jeu soit le suivant :
Mot à trouver : ----------
Lettre proposée : -
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 7

Partie 4 : Langages du CPC

La gestion de l'affichage se fera comme suit :


100 MODE 1
110 mot$ = "ORDINATEUR” 'Mot a trouver
120 NL = O 'Nombre de lettres trouvées
130 PRINT "Mot a trouver : ............."
140 LOCATE 1,10:PRINT "Lettre proposée : -"
150 LOCATE 17,10:INPUT L$ 'Entrée d'une lettre
160 FOR I = 1 TO LEN (M0T$)
170 IF MID$(M0T$, I, 1)=L$ THEN LOCATE 1 + 16, 1:PRINT L$:NL(I) = 1
180 NEXT I
190 NL = 0:FOR 1=1 TO LEN (MOT$):NL = NL +NL(I):NEXT
200 IF NL = LEN(MOT$) THEN END 'Fin du jeu, mot trouve
210 GOTO 140 'Boucle de jeu
Ligne 140 : Positionnement du message « lettre proposée »
Champ d'entrée.
Ligne 150 : Positionnement du curseur après le champ d'entrée.
Ligne 160 à 190 : Corrélation entre lettre entrée et mot à trouver.

MODE <n> (où n = 0, 1 ou 2)

Définit le mode d'affichage : résolution et nombre de couleurs affichées


en même temps sur l'écran.

Remarque :
L'écran est effacé avec la couleur du « PAPER » ; la fenêtre, si elle existe,
est détruite et le curseur texte se trouve en haut et à gauche de l'écran
après l'emploi d'un tel ordre.
Utilisation Dans une application scientifique, vous avez défini une fenêtre graphi­
que dans laquelle sont tracées des courbes. Ces courbes sont commen­
tées par un texte affiché autour de la fenêtre.
L'application étant terminée, vous voulez revenir au mode d'affichage
standard (MODE 1) et effacer les dernières informations affichées.
Le programme suivant réalisera ces actions :
100 'Définition de la fenetre graphique
110 'Calculs et affichages divers
300 INPUT "Fin de l'application (O/N)" ;R$
310 IF R$< >"O" THEN 110 'Poursuite de l'application
320 MODE 1 'Retour au mode caractère pleine page
330 END 'Fin de l'application
Ligne 320 : Destruction de la fenêtre et passage au MODE d'affichage
40 colonnes.
Partie 4 Chapitre 1.2 page 8 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Autre exemple :
Dans un jeu d'aventures, après un écran de présentation en MODE 0
( 16 couleurs), vous voulez afficher un texte pour préciser le contexte de
l'aventure. Si ce texte est long, il aura intérêt à être affiché en MODE 2.
Ce qui se traduit par le programme suivant :
100 MODE 0:LOAD “image”, &C000 'Chargement de l'écran de pré­
sentation
110 MODE 2 'Effacement de l'image et passage en 80 colonnes
120 'Affichage du texte de l'aventure
Ligne 100 : Chargement de l'écran de présentation.
Ligne 110 : Effacement de l'écran de présentation et passage au MODE
texte 80 colonnes.

PAPER [<N° de canal>, ]<encre>

Définit la couleur de fond d'écran ou de fond de fenêtre.


Utilisation Vous voulez connaître les possibilités de couleur de fond d'écran dans
les trois MODES de résolution.
Ce programme pourra vous aider dans votre étude :
100 MODE 0
110 FOR l = 0 TO 15'16 Couleurs possibles en MODE 0
120 PAPER l:PEN 1 5-l:CLS:PRINT”PAPER” ; I
130 FOR J = 1 TO 500:NEXT J 'Temporisation
140 NEXT I
150 MODE 1
160 FOR l = 0 TO 3 '4 Couleurs possibles en MODE 1
170 PAPER l:PEN 3-l:CLS:PRINT “PAPER” ; I
180 FOR J=1 TO 500:NEXT J 'Temporisation
190 NEXT I
200 MODE 2
210 FOR l = O TO 1 '2 Couleurs possibles en MODE 2
220 PAPER l:PEN 1-l:CLS:PRINT”PAPER”; I
230 FOR J = 1 TO 500:NEXT J 'Temporisation
240 NEXT I
Ligne 120 : PAPER en MODE 0.
Ligne 170 : PAPER en MODE 1.
Ligne 220 : PAPER en MODE 2.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 9

Partie 4 : Langages du CPC

Remarque :
La déclaration d'un nouveau PAPER affecte l'écran à partir de la posi­
tion courante du curseur et jusqu'à la fin de l'écran, sur tout le texte
affiché.
Pour vous en rendre compte, faites en MODE 1, par exemple : « PAPER
2 ». Le mot « Ready » apparaît sur un fond correspondant à la couleur
d'encre 2. Pour que tout l'écran prenne cette couleur, il faudra faire :
« PAPER 2:CLS ».

PEN [<N° de canal >, ]<encre>

Définit la couleur d'encre utilisée pour écrire du texte sur l'écran.


Utilisation Vous voulez connaître les possibilités de couleur d'écriture dans les trois
MODES de résolution.
Ce programme pourra vous aider dans vos recherches.
100 MODE 0
110 FOR l = 0 TO 15
120 PEN I
130 READ A$:PRINT A$
140 NEXT I
1 50 DATA Bleu, Jaune vif, Turquoise vif, Mauve, Blanc brillant, Noir
160 DATA Bleu vif, Magenta vif, Turquoise, Jaune, Bleu pastel, Rose
1 70 DATA Vert vif, Vert pastel, « Bleu/Jaune vif », « Rose/Bleu ciel »
180 '
181 A$ = INKEY$:IF A$ = "" THEN 181
190 MODE 1
200 FOR l = 0 TO 3
210 PEN I
220 READ A$:PRINT A$
230 NEXT I
240 DATA Bleu, Jaune vif, Turquoise vif, Rouge vif
250 '
251 A$ = INKEY$:IF A$ = "” THEN 251
260 MODE 2
270 FOR l = 0 TO 1
280 PEN I
290 READ A$:PRINT A$
300 NEXT I
310 DATA Bleu, Jaune vif
Partie 4 Chapitre 1.2 page 10 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Lignes 120, 210 et 280 : Choix d'un stylo en MODES 0, 1 et 2.


Lignes 130, 220 et 290 : Affichage de la couleur du stylo en MODES
0, 1 et 2.
Autre application Vous voulez faire ressortir un mot en rouge dans un texte écrit en MODE
1 en blanc sur fond noir :
100 INK 0,0:INK 1,13:INK 2,3 'Fond noir, Coul. 1=Blanc, Coul.
2 = Rouge
110 CLS:PEN 1:PRINT "... Texte ..."
120 PRINT "... Texte ..." ; :PEN2:PRINT "Mot a détacher" ;
130 PEN 1:PRINT "... suite ..."
Ligne 100 : Fond noir, encre 1 blanche, encre 2 rouge.
Ligne 120 : Affichage du message « Mot a détacher » en rouge.
Ligne 130 : Retour à la couleur normale PEN 1.

POS (< #N° de canal>}

Donne la position du curseur texte par rapport à la position d'origine de


la fenêtre, ou donne la position du chariot sur l'imprimante.
Utilisation Dans un masque de saisie, vous voulez limiter la longueur d'un champ
alphanumérique à N caractères.

Téléphone : --------

100 PRINT "Téléphoné" ;


110 A$ = INKEY$:IF A$ = "" THEN 110 'Attente appui sur une
touche
120 PRINT A$ ; :IF POS (#0)< >11 +8 THEN 110
130 SOUND 1,100:END 'BEEP de débordement et fin de programme
Ligne 120 : POS ( # 0) = 11 + 8(1er chiffre affiché colonne 11, et lon­
gueur d'affichage = 8)
Autre utilisation Vous avez créé un programme de traitement de textes, et vous voulez
limiter la largeur d'affichage à N caractères.
100 A$ = INKEY$:IF A$ = '"' THEN 100
110 IF POS (#0) <>60 THEN PRINT A$ ; ELSE PRINT:PRINT A$ ;
'A la ligne
120 GOTO 100 'Suite de la saisie
Ligne 110 : Si la position du curseur est inférieure à 60, le caractère est
affiché, sinon passage à la ligne et affichage du caractère.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 1 1

Partie 4 : Langages du CPC

PRINT[<N° de canal>, ]<Liste à imprimer>

Impression de données alphanumériques sur un canal :


#0 ou rien pour l'écran,
#8 pour l'imprimante.

Remarques :
• Le caractère « , » agit comme tabulateur entre deux affichages suc­
cessifs.
• Le caractère « ; » interdit le retour à la ligne en fin d'affichage et fait
afficher les données les unes à la suite des autres.
• La commande « SPACE$(N) » permet d'afficher N espaces.
• La commande « TAB(N) » permet de déplacer le curseur vers la droite
de N positions.
Utilisation Vous voulez constituer une table trigonométrique sur imprimante :
100 DEG 'On manipule des degres
1 10 PRINT#8, "Angle SIN COS TAN"
120 FOR 1 = 1 TO 360
130 PRINT#8, I ; SIN(I) ; COS(I) ; TAN(I)
140 NEXT I
Ligne 130 : Affichage sur imprimante (Canal #8).

PRINT[<N° Canal>, JUSING <option>[<liste à imprimer>]

L'option « USING » du « PRINT » permet de normaliser l'affichage numé­


rique ou alphanumérique sur écran ou imprimante.
Les options peuvent être les suivantes :
• indique l'emplacement d'un chiffre.
indique la position du point décimal.
, positionné devant le point décimal, il indique que les chiffres précé­
dant le point seront regroupés par groupes de trois et séparés entre
eux par une virgule.
{ Le signe { apparaîtra avant le premier chiffre ou le point décimal.
• Les espaces non utilisés devant le nombre seront remplis par des
astérisques.
Cumule les options * et {.
$ Le signe $ apparaîtra avant le premier chiffre ou le point décimal.
• $ Cumule les options * et $.
Partie 4 Chapitre 1.2 page 12 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

+ Le signe du nombre sera apparent.


- Le signe - est positionné derrière le nombre.
A Indique que le nombre doit apparaître suivi d'un exposant
décimal.
Utilisation Vous voulez constituer une table trigonométrique sur imprimante, où les
SINus, COSinus et TANgente ont 4 chiffres après la virgule :
100 DEG 'On manipule des degres
110 PRINT #8, "Angle SIN COS TAN"
120 FOR 1 = 1 TO 360
130 PRINT #8, I;
140 PRINT#8" :PRINT#8, USING "#.####"; SIN(I) ;
:PRINT#8, " ";
150 PRINT#8, USING "#,####”; COS(I) ; :PRINT#8, " ";
160 PRINT #8, USING " #. H K # # " ; TAN(I)
170 NEXT I
Lignes 130 à 160 : Affichage sur imprimante de données réelles au for­
mat 1 chiffre avant la virgule, et 4 après ( # .####).

SPEED INK < Nombre entier >, < Nombre entier >

Fixe la fréquence d'alternance des couleurs utilisées par les ordres PEN,
PAPER ou BORDER définis par deux couleurs. Le premier nombre donne
la durée d'affichage de la première couleur en 1/50 sec., le deuxième
nombre donne la durée d'affichage de la deuxième couleur en 1 /50 sec.
Utilisation Dans un écran de saisie comportant plusieurs champs, vous voulez signa­
ler à l'opérateur que l'ordinateur est en attente du champ N

Libellé 1 : -------- Les libellés qui précèdent les champs


Libellé 2 : -------- sont de couleur fixe. Vous allez faire
Libellé 3 : -------- clignoter l'un des libellés pour indi­
Libellé 4 : -------- quer le champ attendu.

Par exemple, pour le champ 3 :


100 MODE 1 :INK 2,2,6 'Positionnement de l'encre 2
110 SPEED INK 10,10 'Vitesse de clignotement
120 LOCATE 10,10:PEN 2:PRINT "Libelle 3" ; :PEN 1:INPUT C3$
130 LOCATE 10,10:PRINT "Libelle 3"
Ligne 110 : Affichage du libellé 3 en PEN 2 et attente d'une réponse de
l'utilisateur.
Ligne 120 : La réponse entrée, le libellé est réécrit en PEN 1.
Autre utilisation Dans un jeu d'arcades, vous voulez faire une animation simple sur un
mobile avant de le faire exploser. Par exemple, vous êtes en MODE 0,
et la couleur 12 n'est utilisée que par ce mobile.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 13

Partie 4 : Langages du CPC

100 INK 12,2,6 'Couleurs du clignotement


110 FOR 1 = 15 TO 1 STEP - 5
120 SPEED INK l,l
130 FOR J = 1 TO I* 100:NEXT J 'Boucle d'attente de clignotement
140 NEXT I
Ligne 100 : Définition des couleurs de clignotement.
Ligne 120 : Evolution de la vitesse de clignotement dans le temps.
Ligne 130 : Clignotement à la même cadence.

TAG[< # N° Canal>]

Permet d'obtenir un positionnement graphique (au pixel près) du cur­


seur texte.
Utilisation Vous voulez afficher du texte sur la périphérie d'un cercle, deux afficha­
ges consécutifs étant très rapprochés.
100 MODE 2
110 FOR 1 = 1 TO 360 STEP 3 'Pas de l'affichage
120 MOVE 270+ 190*COS(I), 200+ 190*SIN(l)
130 TAG:PRINT"CPC 464''
140 NEXT I
Ligne 1 20 : Positionnement du curseur graphique sur la périphérie d'un
cercle.
Ligne 130 : Positionnement du curseur texte sur le curseur graphique
et affichage.
Autre utilisation Vous voulez graduer les axes d'un repère Oxy :
100 MODE 1
110 MOVE 60,20:DRAW 570,20 'Axe Ox
120 MOVE 60,20:DRAW 60,390 'Axe Oy
130 FOR 1 = 1 TO 10 '10 graduations sur Ox
140 MOVE 60 + 1*50,10
150 DRAWR 0,20
160 NEXT I
170 FOR 1 = 1 TO 10 '10 graduations sur Oy
180 MOVE 50,20 + 1*35
190 DRAWR 20,0
200 NEXT I
210 FOR 1 = 1 10 'Annotations sur Ox
Partie 4 Chapitre 1.2 page 14 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

220 MOVE 1*50-3 + 40, 15


230 TAG:PRINT I ;
240 NEXT I
250 FOR l= 1 TO 10 'Annotations sur Oy
260 M0VE -10,25 + 1*35
270 TAG:PRINT I ;
280 NEXT I
Lignes 110-120 : Tracé des axes.
Lignes 130-200 : Graduations Ox et Oy.
Lignes 220 et 260 : Positionnement du curseur graphique pour annotation.
Lignes 230 et 270 : Positionnement du curseur texte et annotations.

TAGOFF[< #l\l° de Canal>]


Positionne le curseur à l'endroit où il était avant la commande TAG.

VPOS (< #N° Canal>)


Donne la position verticale du curseur pour le canal demandé.

WRITE [<#N° Canal>, ]<Liste à écrire>


Ecrit des expressions ou des valeurs sur un canal :
Canal 8 : Imprimante
Canal 9 : Cassette/Disquette

Remarque :
Les chaînes doivent être entre guillemets et deux expressions doivent
être séparées par une virgule.
Utilisation Ecriture d'un fichier sur cassette :
100 NOMS = "Dupond”
110 PRE$ = "Pierre"
120 AD$ = "20 rue Gérard, 75013 Paris"
130 TEL$ = "Inconnu"
140 OPENOUT"FILEDUP" 'Ouverture du fichier en écriture
150 WRITE#9, N0M$, PRE$, AD$, TEL$ 'Ecriture des données
160 CLOSEOUT 'Fermeture du fichier
Lignes 100-130 : Articles à l'écran.
Ligne 150 : Ecriture.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 15

Partie 4 : Langages du CPC

ZONE < Nombre entier >

Change la largeur de l'affichage à l'écran ou d'impression sur imprimante


lors de l'utilisation de l'ordre « PRINT ».

Remarque :
L'effet de « ZONE » est annulé par les ordres « NEW », « LOAD »,
« CHAIN » et « RUN ».
Utilisation Vous écrivez un programme de traitement de textes, et vous voulez une
sortie sur imprimante sur 60 colonnes. Une façon élégante de résoudre
le problème est la suivante :
100 MODE 2 'Passage en mode 80 colonnes
110 ZONE 60 'Restriction a 60 colonnes

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 posi­
tion des touches CTRL et SHIFT.

Sortie SHIFT CTRL Touche


-1 ? ? haute
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 lors­
que 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 Q sollicitée"
130 IF INKEY (67) = 32 THEN PRINT "SHIFT+ Q enfonces"
140 IF INKEY (67)= 128 THEN PRINT "CTRL + Q enfonces"
1 50 IF INKEY (67) = 160 THEN PRINT "SHIFT + CTRL + Q enfonces"
160 GOTO 110
Partie 4 Chapitre 1.2 page 16 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

innnnjwuuuinjmiwwmnnw^^
cpc 464 car,,.,’
0
AMSTRAD 64k COLOUR PERSONAL COMPUTER
300
nar
18

47

uwuwinmumnmuumnnjinMnjw^
J0L
AMSTRAD 64k COLOUR PERSONAL COMPUTER CPC 464 n ■ colou»
□ B0
00000000000000ED nmr
EU H H 0 H 0 0 H 0 0 0 El 0 [~
EE1BH0000000S0 ml..
. 1000000000001 -■
Ir i □I

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.

La détection de « CTRL + Q » se fait par INKEYI67) = 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) = 1 60.
De ces constatations, nous pouvons écrire une partie de la boucle prin­
cipale (Idle Loop) du traitement de textes :
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 1 7

Partie 4 : Langages du CPC

100 A$ = INKEY$:IF A$ = "” THEN 100 'Attente d'un caractère


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

INKEYS

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 afficha­
bles 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 CTRL+ @
1 CTRL + A
2 CTRL+B
// //
26 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é.
Partie 4 Chapitre 1.2 page 18 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

INPUT[< #N° Canal>, ][ ; ][< Chaîne> ; ]< 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 ;
LSupprime le passage à la ligne
-Un « ? » apparaît après le texte
Remplacé par « , », aucun « ? »
n'apparaît
Utilisation 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.
100 DIM X(100), Y(100) '100 points au maximum
110 1=1 'Mémorisation du premier point
120 INPUT "Entrez les coordonnées X et Y";X(I), Y(l)
130 IF X(l)<>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 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, N0M$, PRE$, AD$, TEL$
120 CLOSEIN
130 PRINT "Nom N0M$
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).
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 19

Partie 4 : Langages du CPC

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 Haut
1 Bas
2 Gauche
3 Droite
4 Feu 2
5 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) < > O THEN GOSUB BAS 'Déplacement vers le bas
Partie 4 Chapitre 1.2 page 20 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

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 à 1 59 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.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 21

Partie 4 : Langages du CPC

___
AMSTRAD CPC 464 ŒH.....
64k COtOUR PERSONAL COMPUTER
300
00000000000000 EEJ
(Zn 0HHIïô|0@0E5]Iï30I16]|ï7] 000
I 70 I 0 0 0 S g 0 0 0 0 0 @ 0? 0 00
000
I 10 0 0H

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

QWERTY AZERTY

Sans SHIFT Avec SHIFT Sans SHIFT Avec SHIFT

(67) q Q a (97) A (65)


(59) w W z (122) Z (90)
(69) a A q (113) Q (81)
(29) : * m (109) M (77)
(71) z Z w (119) W (87)
(38) m M , (44) ? (63)
(39) , < ; (59) . (46)
(31) . > : (58) / (47)
(30) / ? = (61) + (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
1 20 KEY DEF 39, 1, 59, 46 : KEY DEF 31, 1, 58, 47 : KEY DEF 30,
1, 61, 43
Partie 4 Chapitre 1.2 page 22 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

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 1 = 1 'Ligne 1
140 LINE INPUT A$(l)
150 IF A$(l) < > "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.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 23

Partie 4 : Langages du CPC

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 TO8
120 PRINT "......... "
130 NEXT I
140X=1:Y=1 'Initialisation
1 50 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) = O:PRINT".”
200 IF A = 243 AND X<8 THEN X = X+1
210 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 Y<8 THEN Y = Y+ 1
240 IF A<>13 THEN 150
250 LOCATE 1,15:PRINT "Données correspondantes :PRINT
260 FOR 1 = 1 TO 8
270 A = 0 'Initialisation
280 FOR J = 1 TO 8
290 A=A + (2A(8-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 :
Partie 4 Chapitre 1.2 page 24 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

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 + I, 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 redéfinir
220 '
230 'Affichage du motif
240 FOR 1 = 1 TO HAUTEUR
250 FOR J = 1 TO LARGEUR
260 LOCATE OX + J - 1, OY + I - 1 'Positionnement du curseur
270 PRINT CHR$(1 29 + (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 posi­
tions N à 255.
Par exemple, pour que les caractères 60 à 255 soient redéfinissables,
taper : SYMBOL AFTER 60.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 25

Partie 4 : Langages du CPC

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 /50e sec.

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

III - Gestion de l'unité de cassette

CAT

Donne la liste des fichiers présents sur cassette sans affecter un éven­
tuel programme qui se trouve en mémoire.

Remarque :

Les caractères indicateurs suivants renseignent l'opérateur sur le type


de fichier rencontré lors du CAT :

$ Programme BASIC
% Programme BASIC protégé
❖ Fichier ASCII
& Fichier binaire

CHAIN < Nom programme > [, < N ° ligne > ] et CHAIN MERGE < Nom
programme>[, <N° Ligne>] [, DELETE <ensemble de lignes>]

CHAIN charge un programme en effaçant celui qui était en mémoire.


L'option <N°ligne> précise à quelle ligne doit commencer l'exécution.

Remarque :

CHAIN conserve la valeur des variables en mémoire, mais les fonctions


définies par l'utilisateur et les fichiers ouverts sont oubliées ; quelques
fonctions sont remises à zéro (reportez-vous au manuel d'utilisation AMS­
TRAD pour plus de détails).

Utilisation L'ordre « CHAIN » permet de structurer en fonctions indépendantes et


successives les programmes qui ne tiennent pas en mémoire.

Supposons qu'un programme puisse être décomposé en trois fonctions


séquentielles F1, F2 et F3, et que la totalité du programme ne tienne pas
en mémoire. Chaque fonction pourra alors être exécutée sous forme d'un
programme, F2 sera chaînée à F1 et F3 à F2. Le problème suivant se
pose : F1 aura peut-être fait des calculs nécessaires à F2 et/ou F3 ; de
même, F2 aura peut-être fait des calculs nécessaires à F3.
Partie 4 Chapitre 1.2 page 26 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Deux solutions sont possibles :


1) Mettre les données ou calculs résultant d'une fonction et à destina­
tion d'une autre fonction dans un fichier.
2) Utiliser l'ordre « CHAIN MERGE ».

1) Passage de données par fichier :


Nous allons ouvrir un fichier séquentiel et y stocker les données à
conserver puis utiliser l'ordre « CHAIN ». Supposons que les données à
passer soient les suivantes : Chaîne A$, Tableau A[1 ...6], Entier X%.
Le programme qui suit est à installer en fin de "F1 ". Il assurera la créa­
tion du fichier de passage et le chaînage à "F2".
1000 OPENOUT "PASSAGE"
1010 WRITE#9, A$
1020 FOR 1 = 1 TO 6
1030 WRITE #9, A[l]
1040 NEXT I
1050 WRITE #9, X%
1060 CLOSEOUT
1070 CHAIN "F2"
Ligne 1000 : Ouverture du fichier de transfert de données.
Lignes 1010-1050 : Ecriture des données à transférer.
Ligne 1060 : Fermeture du fichier de transfert.
Ligne 1070 : Chaînage au programme F2.
De plus, il faudra installer le programme suivant en début de « F2 ».
100 OPENIN"PASSAGE"
110 INPUT#9, A$
120 FOR 1=1 TO 6
130 INPUT #9, A[l]
140 NEXT I
150 INPUT #9, X%

160 CLOSEIN
Ligne 100 : Ouverture du fichier de transfert.
Lignes 110-150 : Lecture des données.
Lignes 160 : Fermeture du fichier de transfert.
.ocomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 27

Partie 4 : Langages du CPC

2) Utilisation de l'ordre « CHAIN MERGE » :


Supposons que "F1" occupe les lignes 1000 à 2000,
"F2" occupe les lignes 2010 à 3000,
et "F3” occupe les lignes 3010 à 4000.
En fin de "F1" : CHAIN MERGE "F2", 2010, DELETE 1000-2000
En fin de "F2" : CHAIN MERGE "F3", 3010, DELETE 2000-3000

CLOSEIN

Ferme un fichier ouvert en lecture sur cassette.


Remarque :
NEW et CHAIN MERGE ferment automatiquement tous les fichiers cas­
settes ouverts.
Utilisation Voir CHAIN.

CLOSEOUT

Ferme un fichier ouvert en écriture sur cassette.


Remarque :
NEW et CHAIN MERGE ferment automatiquement tous les fichiers cas­
settes ouverts.
Utilisation Voir CHAIN.

OPENIN<Nom du fichier>

Ouvre un fichier sur cassette dans le but de lire les informations qu'il
contient.

OPENOUT<Nom du fichier>

Ouvre un fichier sur cassette dans le but d'y écrire des données.

Remarques concernant OPENIN et OPENOUT :


a) Le « ! » supprime les messages d'entrée/sortie sur cassette de type
« PRESS PLAY THEN ANY KEY » ou équivalent, et lance directement
le moteur de l'unité de cassette.
b) L'ordinateur AMSTRAD CPC stocke les données sur cassette par blocs
de 2 kilo-octets.

SAVE < Nom Fichier >[, <Type>][, < Paramètres binaires >]
Sauvegarde sur cassette un fichier BASIC, ASCII ou BINAIRE.
Partie 4 Chapitre 1.2 page 28 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

L'option Type définit la structure d'organisation des données sur cassette :


Non indiqué Programme BASIC résident
,A ASCII : peut être récupéré par un traitement de textes.
,P Protégé : illisible et inexécutable après un LOAD.
Ne peut être exécuté que par CHAIN ou RUN.
,B Données binaires.

Remarque :
L'utilisation du type de données binaires (,B) oblige l'utilisateur à indi­
quer l'adresse de départ de la sauvegarde, la longueur (en nombre
d'octets) de la sauvegarde, et éventuellement le point d'entrée du pro­
gramme (si c'est un programme binaire qui est sauvegardé).

EOF

Teste la fin de fichier sur cassette.


Cette fonction booléenne vaut - 1 si la fin de fichier est atteinte, 0 sinon.
Utilisation Lecture d'un fichier dont on connaît la structure mais pas le nombre
d'enregistrements. Supposons que le fichier « DATA » ait la structure
suivante :

Nom Age Adresse

Un enregistrement

La lecture d'un tel fichier et sa mémorisation se feront de la manière


suivante :
Supposons que ce fichier comporte 100 articles au maximum.
100 1 = 1 :DIM NOM$(100), AGE(100), ADR$(100)
110 OPENIN "DATA”
120 INPUT#9, NOM$(I), AGE(I), ADR$(I)
1 30 IF EOF = 0 THEN 1 = 1 + 1 :GOTO 120 'Poursuite lecture
140 CLOSEIN
150 'Suite du traitement
Ligne 110 : Ouverture du fichier.
Ligne 120 : Lecture des données.
Ligne 130 : Si toutes les données ne sont pas lues, lecture de l'enregis­
trement suivant.
Ligne 140 : Fermeture du fichier.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 29

Partie 4 : Langages du CPC

LOAD<Nom Fichier>[, Adresse]

Charge un programme BASIC ou un fichier binaire à partir de l'adresse


donnée.

Remarque :
La commande « LOAD < Nom Fichier> » efface le programme BASIC rési­
dant en mémoire.
Utilisation Suite à la redéfinition des caractères standards par un programme d'édi­
tion de caractères, vous ne voulez pas réduire à néant vos efforts en attei­
gnant la machine. Aussi décidez-vous de sauvegarder les données de
redéfinition des caractères qui étaient stockées en mémoire, par exem­
ple à partir de l'adresse hexa &H9000.

Exemple :
Vous avez redéfini 6 caractères, soit 8# 6 = 48 octets stockés à partir
de &H9000.
Les caractères occupent donc les adresses &H9000 à &H9O2F. (En effet,
48D = &H30). Ils seront sauvegardés par :
SAVE "CARACT", B, &H9OOO, &H3O
Vous les récupérerez par :
LOAD"CARACT”, &H9000

Remarque :
La commande « LOAD » destinée à charger un programme BASIC et insé­
rée dans un programme BASIC ne lance pas le programme chargé. Pour
faire cela, reportez-vous aux ordres « CHAIN » ou « CHAIN MERGE ».

MERGE<Nom Fichier>

Permet d'amalgamer deux programmes dont un est en mémoire et l'autre


sur cassette.

Remarques :
a) Avant d'utiliser cette commande, assurez-vous que les deux program­
mes à amalgamer ne possèdent pas de numéros de lignes communs (au
besoin, utilisez la commande « RENUM » à cet effet).
b) Un « ! » devant le nom du fichier à lire supprime tous les commentai­
res d'entrée/sortie cassette.
c) Les variables, fonctions utilisateur et dossiers ouverts sont écrasés ou
abandonnés.
Pour plus de détails, consultez les commandes « CHAIN », « CHAIN
MERGE » ou le manuel utilisateur AMSTRAD.
Partie 4 Chapitre 1.2 page 30 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

SPEED WRITE <0 ou 1 >

Définit la vitesse d'écriture sur unité de cassette :


0 = 1 000 Bauds (option par défaut),
1 - 2 000 Bauds (si précisé).
Si vous n'êtes pas sûr de l'azimutage de la tête de lecture de votre magné­
tophone, ou si la qualité des cassettes utilisées laisse à désirer, utilisez
la vitesse lente « SPEED WRITE 0 ».

Remarque :
Si vous utilisez un CPC 464 avec une qualité de bande moyenne, la vitesse
rapide fonctionnera neuf fois sur dix. Le problème n'est plus le même
si vous utilisez un 664 ou un 6128 avec un lecteur de cassettes externe
de qualité courante...
Utilisation Sauvegarde d'un fichier binaire en vitesse rapide :
1000 SPEED WRITE 1 'Vitesse rapide
1010 SAVE"DATA", B, &3000, &30 'Sauvegarde mémoire

IV. Manipulation de chaînes de caractères

ASC (< Chaîne Alphanumérique > )

Donne la valeur ASCII du premier caractère d'une chaîne alphanumérique.


Utilisation : Vous voulez mettre une majuscule sur la première lettre d'un mot. Soit
un mot « M0T$ » qui représente un nom propre, et prend donc une majus­
cule. Si ce mot a été entré par l'opérateur, il peut automatiquement pren­
dre une majuscule de la façon suivante :
1000 A = ASC(M0T$)
1010 IF A>96 THEN M0T$ =CHR$(A-32) + RIGHT$(MOT$,
LEN(MOT$)-1)
2000 PRINT M0T$
A>96 indique que la lettre est une minus­
cule,
CHR$(A-32) transforme une minuscule en
majuscule,
RIGHT$(MOT$, LEN(M0T$)-1) est égal à M0T$, la première lettre
exclue.
De même, on peut imaginer dans un traitement de textes une telle option
qui met automatiquement des majuscules après les points, les supprime
après les points-virgules, les virgules, ou met un blanc après les virgu­
les, points-virgules et points.
Analyse du problème :
Le fichier texte étant stocké en mémoire sous forme ASCII, il suffit de
le décrire du début à la fin en recherchant les caractères point, virgule
et point-virgule.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 31

Partie 4 : Langages du CPC

Ce qui se traduit par l'organigramme suivant :

CHR$(< Nombre entier>)

Inverse de la fonction ASC.

Transforme un code ASCII en un caractère alphanumérique corres­


pondant.

Utilisation CHR$ permet, par exemple, d'insérer des codes de contrôles dans la
redéfinition d'une touche.

Par exemple, le « 0 » du pavé numérique peut être redéfini en


« RUN + CR » de la façon suivante : KEY 138, "RUN" + CHR$(13), ce
qui provoquera l'exécution de la commande RUN.

Autre utilisation Permet de définir des chaînes de caractères complexes (de longueur infé­
rieure à 255 caractères) pour afficher avec un seul ordre tout un écran.
Partie 4 Chapitre 1.2 page 32 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Soit l'écran suivant :

L1C12

TITRE

L C02
L6C3 C01 L6C20
L*C04
L7C3 C03 L7C20

L15C12 C05

Appelons A$ la chaîne de caractères qui représentera l'écran.


Cette chaîne aura la structure suivante :
A$ = SPACE$(1 2) + "TITRE" + CHR$(1 3) + CHR$(13) + CHR$(1 3)
+ CHR$(13) + CHR$(13)
A$ = A$ + SPACE$(3) + "C01 " + etc.
L'ordre « PRINT A$ » affichera l'écran que l'on vient de définir.

INSTR([<Nombre entier n>, ]<Chaîne 1>, <Chaîne 2>)

Cherche si une sous-chaîne (Chaîne 2) appartient à une chaîne (Chaîne


1) en commençant la scrutation à partir du caractère indiqué « n » ou
du premier caractère si rien n'est indiqué.
Si « Chaîne 1 » contient « Chaîne 2 », INSTR donne la première occur­
rence de « Chaîne 2 » dans « Chaîne 1 » ; sinon INSTR donne 0.
Utilisation Par exemple, dans le jeu du pendu, l'instruction INSTR peut être utilisée
pour voir si la lettre proposée fait partie du mot à découvrir.
Soit M$ le mot à découvrir, et L$ la lettre proposée :
INSTR (M$, L$)= 0 si la lettre ne fait pas partie de M$,
INSTR (M$, L$) = Position de la première lettre L$ dans M$ sinon,
Autres utilisations a) Dans un environnement industriel bruité1 >, cette commande peut servir
à la reconnaissance de données transitant sur une ligne de communica­
tions entre deux ordinateurs.

1) Un environnement industriel bruité est un local dans lequel des parasites électriques
peuvent parvenir sur un ordinateur (parasites liés à des champs électrostatiques ou magné­
tiques, ou à des ruptures de courant de haute intensité).
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 33

Partie 4 : Langages du CPC

Soit D$ l'ensemble des mots reconnus par l'ordinateur récepteur, appelé


dictionnaire par la suite.
Soit M$ un message reçu par l'ordinateur récepteur, émis par l'émet­
teur, tel que M$ appartienne au dictionnaire.
Le vocabulaire émis étant limité, l'ordre INSTR peut servir à identifier un
mot émis qui a été plus ou moins bien reçu, et dont une partie seule­
ment est identique à un des mots du dictionnaire.
Supposons que le mot reçu soit composé de n caractères, nous allons
comparer ce mot à tous les mots du dictionnaire, pour essayer de le recon­
naître, puis une partie du mot, jusqu'à ce que INSTR (d$, M$) < >0
(où d$ est un mot de D$).
Nous aurons alors probablement identifié le mot émis.

b) Analyse syntaxique dans un jeu d'aventures :


Dans les jeux d'aventures, une grande partie du jeu est basée sur un
analyseur syntaxique qui « comprend » les phrases que vous entrez au
clavier. Comment fonctionne cet analyseur ? Prenons un cas très sim­
ple : il ne peut reconnaître que les phrases constituées d'un verbe et d'un
sujet. (Par exemple : « PRENDRE HACHE »).
Partie 4 Chapitre 1.2 page 34 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Les verbes sont définis dans un dictionnaire de verbes qui rassemble tous
les verbes « compréhensibles » par la machine. Soit V$ ce dictionnaire.
De même pour les sujets. Soit S$ le dictionnaire des sujets. Nous appel­
lerons v$ un élément de V$, et s$ un élément de S$. Soit enfin une phrase
P$ entrée par le joueur. L'extraction des verbe et sujet de P$ se fera de
la manière suivante : (voir organigramme p. 33).
De même pour les sujets.

LEFT$(<Chaîne>, <Entier n>)

Extrait les n caractères les plus à gauche de la chaîne soumise.


Utilisation Reprenons l'exemple précédent : l'analyseur syntaxique.
Il peut paraître lassant au joueur de taper les mots-clés verbes et sujets
en entier à chaque commande, et une bonne amélioration du jeu pourra
consister à taper les quatre premières lettres (par exemple) de chaque
mot-clé pour aller plus vite.
Réalisation Au lieu d'analyser INSTR(P$, v$(l)), nous analyserons :
INSTR(P$, LEFT$(v$(l), 4)) donc les 4 premières lettres du mot-clé.

LEN(< Chaîne >)

Donne le nombre de caractères de la chaîne.

Utilisation Une chaîne de caractères doit être stockée dans un fichier et la place
maximale prévue est de 30 caractères. Si la chaîne à stocker A$ fait plus
de 30 caractères (LEN(A$)>30), on stockera par exemple les 30 pre­
miers caractères (LEFT$(A$, 30)) dans le fichier.
Autre utilisation De même, on peut utiliser LEN pour tester la limite supérieure d'une chaîne
alphanumérique entrée au clavier, et, par exemple, interdire de dépas­
ser une certaine limite dans un masque de saisie. Soit N cette limite.
100 B$ = " " 'Chaîne lue
110 A$ = INKEY$:IF A$ = ” " THEN 110 'Attente d'un caractère
120 PRINT A$; 'Lettre lue
130 B$ = B$+A$
140 IF LEN(B$) = N THEN 160 'Fin de lecture
150 GOTO 110
160 'Passage a un autre champ
Ligne 110 : Acquisition au clavier
Ligne 140 : Test sur la longueur de la saisie.

L0WER$(< Chaîne alphanumérique >)

Change dans une chaîne alphanumérique tous les caractères majuscu­


les en caractères minuscules.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 35

Partie 4 : Langages du CPC

Utilisation Soit un ensemble de mots M$, et un mot m$ entre au clavier. Nous vou­
lons savoir si m$ appartient à M$ en considérant que seul compte l'ordre
des lettres du mot, et pas le fait qu'il soit écrit en majuscules ou en
minuscules.
Si les mots de M$ sont écrits en minuscules, nous pourrons tester l'appar­
tenance de m$ à M$ de la façon suivante :

Ainsi, l'utilisateur pourra taper son texte en CAPS LOCK (Majuscules) ou


en CAPS UNLOCK (Minuscules) ; la comparaison n'en sera pas affectée.

Autre utilisation L'ordre LOWER facilite les tests du genre :

100 INPUT "Voulez-vous continuer (0/N) ";R$


110 IF R$="O" OR R$ = "o” THEN SUITE
120 IF R$="N" OR R$ = "n" THEN FIN
130 PRINT "Je ne comprends pas":GOTO 100

Ligne 110 : Test de la touche "O" avec et sans SHIFT.


Ligne 120 : Test de la touche "N" avec et sans SHIFT.

qui sera remplacé par :

100 INPUT "Voulez-vous continuer (O/N) ";R$


Partie 4 Chapitre 1.2 page 36 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

110 IF LOWER$(R$) = "o" THEN SUITE


120 IF LOWER$(R$) = "n" THEN FIN
130 PRINT "Je ne comprends pas": GOTO 100
Ligne 110 : Test de la touche « O ».
Ligne 120 : Test de la touche « N ».

MID$(<Chaîne>, <Nombre entier n1>[, <Nombre entier n2>]).

Extrait une portion de chaîne à partir du caractère n1 jusqu'au caractère n2.

Remarque :
Cette fonction englobe les fonctions LEFT$ et RIGHT$.
En effet : MID$ (A$, 1, N) = LEFT$ (A$, N), et
MID$ (A$, LEN (A$)-N,N)= RIGHT$ (A$, N).
Utilisation Extraction d'une sous-chaîne B$ d'une chaîne A$.
Supposons que B$ soit encadrée d'astérisques. Le programme suivant
réalise l'extraction de B$:
100 P1 = INSTR(A$,"*") 'Limite inferieure de B$
110 P2 = INSTR(P1 +1, A$, "*") 'Limite supérieure de B$
120 C$ = MID$(A$, P1 + 1, P2-P1 -1) 'Chaîne extraite
Ligne 120 : C$ est la première chaîne entre trouvée dans A$.
Autre utilisation Extraction de données numériques d'une chaîne alphanumérique du type :
« La hausse du pouvoir d'achat aura été de 0,4 % en septembre ».
100 FOR 1 = 1 TO LEN(A$)
110 B$ = MID$(A$, I, 1)
120 IF B$ = "." OR (B$<":" AND B$> "/") THEN PRINT B$;
130 NEXT I
Ligne 120 : les caractères « : » et « / » encadrent les chiffres 0 et 9 dans
la table des caractères ASCII.

RIGHT$(<Chaîne alphanumérique>, <Nombre entier N>)

Extrait les N caractères les plus à droite d'une chaîne alphanumérique.


Utilisation Extraction du dernier mot d'une chaîne.
Par exemple dans la saisie d'un fichier du personnel travaillant dans une
société, les articles « Nom » et « Prénom » ne sont pas forcément disso­
ciés. Pour accéder au nom d'une personne, il faudra alors dissocier nom
et prénom.
Par exemple, pour l'article A$ « Prénom Nom », il faudra faire :
100 N = INSTR(A$, " ")
110 N$ = RIGHT$(A$, N + 1, LEN(A$)-N-1) 'Extraction
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 37

Partie 4 : Langages du CPC

SPACE$(< Nombre entier N<255>)

Permet d'afficher N blancs dans une instruction PRINT ou d'affecter


N blancs à une chaîne de caractères complexe (Voir l'exemple donné
dans CHR$).

Remarque :
Utiliser « SPACE$ » au-delà de 6 caractères pour optimiser la mémoire
occupée par cet ordre.
Utilisation Vous désirez centrer un titre sur la largeur de l'écran :
100 MODE 2:L = 80 'en MODE 2, 40 en MODE 1 et 20 en MODE 0
110 A$ = "Texte a centrer"
120 LE = LEN(A$) 'Longueur du texte a centrer
130 PRINT SPACE$ ((80-LE)/2);A$ 'Affichage centre
Ligne 130 : Calcul du nombre d'espaces à afficher pour centrer le texte
et affichage.

STR$(< Expression numérique >)

Convertit une donnée hexadécimale ou binaire en la même donnée expri­


mée en décimal.
Utilisation Dans un utilitaire de mise au point de programmes assembleur (DEBUG-
GER), il peut être intéressant d'avoir de telles fonctions. Par exemple,
dans le menu général, il peut y avoir une option « Changement de base ».
Cette option activera le programme suivant :
1000 PRINT "Entrez le nombre Hexa. ou Bin. a convertir en Décimal"
1010 PRINT "sous la forme Snnnn en Hexa. et & x nnnnnnnn en Bin."
1020 INPUT "Nombre a convertir”;N
1030 PRINT STR$(N); "en décimal. "
Ligne 1020 : Lecture du nombre à convertir.
Ligne 1030 : Conversion et affichage.

STRING$(< Nombre entier>, < Caractère>)

Affiche N fois le même caractère. Cette fonction est une extension de


« SPACE$ » qui se contente d'afficher N blancs.
Effectivement, on a : STRING$(N,32) = SPACE$(N).
Utilisation Par exemple pour tracer un tableau, les lignes de commentaires et de
valeurs pourront être séparées par « » en utilisant PRINT
STR$(Longueur tableau, "_ ").
Partie 4 Chapitre 1.2 page 38 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

UPPER$(< Chaîne Alphanumérique> )

Transforme les caractères minuscules d'une chaîne alphanumérique en


caractères majuscules.

Remarque :
Cette fonction est l'inverse de LOWER$.
Utilisation Voir LOWER$.

VAL(< Chaîne de caractères >)

Fournit la valeur numérique des premiers caractères de la chaîne indi­


quée. Si le premier caractère de la chaîne n'est pas un chiffre, cette fonc­
tion renvoie 0.

Remarque :
Si le signe « - » ou « . » suivi d'un caractère non numérique apparaît
en début de chaîne, le message d'erreur « Type Mismach » sera affi­
ché à l'écran.

Exemples :
VAL("12 fois 10= 120") = 12
et VAL(".TD") produit une erreur « Type Mismach ».

V. Gestion de données

DATA < une ou plusieurs constantes >

Définit des données constantes à l'intérieur d'un programme. Ces don­


nées seront lues par la commande « READ » et le pointeur de données
pourra être réajusté par la commande « RESTORE ».
Reportez-vous à ces commandes pour avoir plus de détails.
Les données sont séparées par le caractère « virgule ».

Remarque :
Si une donnée alphanumérique comporte un ou plusieurs des signes sui­
vants : Virgule ou séparateur « : », elle doit être obligatoirement enca­
drée de doubles côtes dans un « DATA ».
10 READ A$, B$, C$
20 DATA "Fonction : Supprime"
30 DATA "Le caractère le plus a droite, et repositionne"
40 DATA "Le curseur en début de ligne"
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 39

Partie 4 : Langages du CPC

Utilisation Vous voulez créer un masque de saisie qui comporte n libellés. Appe­
lons ces libellés li (avec i compris entre 1 et n). Ils doivent être affichés
aux coordonnées XI i, Y1i et le remplissage des champs associés doit
se faire aux coordonnées X2i, Y2i.
Au lieu de répéter n fois les séquences
LOCATE X1I, Y2I : PRINT LI 'Affichage d'un libelle
et
LOCATE X2I, Y2I : INPUT Cl 'Entrée d'un champ
Vous pourrez faire :
110 CLS
120 READ NL 'Nombre de libelles
130 DIM C$[NL] 'Dimensionnement tableau des champs
140 FOR 1 = 1 TO NL
150 READ Y1, X1, Ll$ 'Lecture pos libelles et libelles
160 LOCATE X1, Y1 : PRINT Ll$ 'Affichage libelles
170 NEXT I
180 FOR 1 = 1 TO NL
190 READ Y2, X2
200 LOCATE X2, Y2 : INPUT C$[l] 'Lecture des champs
210 NEXT I
220 'Traitement
230 DATA 4
240 DATA 1,5,Nom,2,5,Prénom,3,5,Age,4,5,Adresse
250 DATA 1,13,2,13,3,13,4,13
Autre utilisation : Dans un jeu d'aventures où l'opérateur peut entrer ses commandes sous
la forme « VERBE SUJET » (par exemple : « RAMASSER BATON »), vous
voulez définir le dictionnaire des mots (verbes, sujets) qui seront inter­
prétables par la machine :
100 READ NV 'Nombre de verbes dans le dictionnaire
110 DIM VE$(NV) 'Dimensionnement du tableau des verbes
120 FOR 1=1 TO NV
130 READ VE$(I)
140 NEXT I
1 50 READ NS 'Nombre de sujets dans le dictionnaire
160 DIM SU$(NS) 'Dimensionnement du tableau des sujets
170 FOR 1=1 TO NS
180 READ SU$(I)
Partie 4 Chapitre 1.2 page 40 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

190 NEXT I
1000 DATA NV 'Déclaration du nombre de verbes
1010 DATA libelles des verbes
1020 DATA NS 'Déclaration du nombre de sujets
1030 DATA libelles des sujets

READ < libellé de la ou des variable(s) à lire >

Lit une ou plusieurs donnée(s) à partir du pointeur de lecture. Ces don­


nées seront stockées dans les variables spécifiées. La commande
« READ » est associée aux commandes « DATA » et « RESTORE ». Pour
plus de détails, reportez-vous à ces commandes.

Utilisation Voir la commande « DATA ».

RESTORE[<N° de ligne>]

Force le pointeur de prochaine donnée à lire


— sur la première déclaration « DATA » si « RESTORE » est utilisé sans
argument,
— à la ligne spécifiée si « RESTORE » est utilisé avec argument.
Utilisation Vous écrivez un programme musical qui comporte N morceaux. Un menu
permet d'exécuter un des morceaux. Les données (pour activer l'ordre
« SOUND ») sont écrites sous forme de « DATA ».
Le programme pourra avoir la structure suivante :
1000 'Affichage du menu
1010 'et choix d'un morceau
1020 'Soit « M » ce morceau
2000 FOR 1 = 1 TO N
2010 READ LIGNE(I) 'N° de ligne ou commence chaque morceau
2020 NEXT I
2030 RESTORE LIGNE(M) 'Pos. du pointeur de données
2040 READ NN 'Nombre de notes dans le morceau
2050 FOR 1=1 TO NN
2060 'Activation de l'ordre SOUND
2070 NEXT I
2080 GOTO 1000 'Retour au menu
3000 DATA définition des N° de lignes de début de notes
3010 DATA nombre de notes morceau 1
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 41

Partie 4 : Langages du CPC

3020 DATA notes du morceau 1

3030 DATA nombre de notes morceau 2

3040 DATA notes du morceau 2

3050 etc.

VI. Sous-programmes et branchements

GOSUB<N° ligne>

Déroute le programme sur un sous-programme BASIC commençant à


la ligne indiquée. Ce sous-programme doit se terminer par l'ordre
« RETURN » qui fera reprendre l'exécution du programme à l'instruction
qui suit le « GOSUB ».
Programme S/P

L'utilisation de sous-programmes se justifie dans deux cas :


1 ) Une action doit être répétée plusieurs fois dans un programme : mettez-
la dans un sous-programme au lieu de la réécrire plusieurs fois.
2) Vous avez écrit un programme en utilisant les concepts de program­
mation hiérarchisée (voir partie 4 chap. 1.4): l'ordre « GOSUB » permet
d'appeler une fonction de niveau moins élevé que le niveau actuel.
Partie 4 Chapitre 1.2 page 42 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

GOTO<N° Ligne>

Déroute le programme en cours d'exécution à la ligne indiquée.

Remarque :
Pour augmenter la lisibilité des programmes, évitez d'employer cet ordre
trop fréquemment.

Programme

GOTO X

ON < sélecteur> GOSUB < liste de numéros de lignes>

« Sélecteur » est une variable entière comprise entre 0 et 255.


Cet ordre permet de dérouter l'exécution d'un programme en fonction
de la valeur du sélecteur.
Si le sélecteur vaut 0, le déroutement n'aura pas lieu.
Si le sélecteur vaut 1, le programme ira au 1er numéro de ligne spécifié.
Si le sélecteur vaut n (n< >0), le programme ira au ne numéro de ligne
spécifié.
Cet ordre s'emploie typiquement pour activer les options d'un menu vers
lequel on doit revenir après traitement de l'option choisie.

Par exemple :

Menu

Option 1 Option 2 Option 3


Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 43

Partie 4 : Langages du CPC

1000 'Affichage du menu


1010 INPUT "Option (1, 2 ou 3)" ; O
1020 ON O GOSUB 2000, 3000, 4000
1030 GOTO 1000 'Retour au menu
2000 'Traitement 1
3000 'Traitement 2
4000 'Traitement 3

Remarque :
Comme pour l'ordre « GOSUB », chacun des sous-programmes activé
par l'ordre « ON GOSUB » doit se terminer par « RETURN » pour redon­
ner le contrôle au programme appelant.

ON < sélecteur > GOTO < liste de numéros de lignes >

« Sélecteur » est une variable entière comprise entre 0 et 255.


Cette instruction permet de dérouter l'exécution d'un programme en fonc­
tion de la valeur du sélecteur.
Si le sélecteur vaut 0, le déroutement n'a pas lieu.
Si le sélecteur vaut 1, le programme sera dérouté vers le premier numéro
de ligne spécifié.
Si le sélecteur vaut n (n< >0), le programme sera dérouté vers le ne
numéro de ligne spécifié.
Cet ordre s'emploie typiquement pour activer les options d'un menu vers
lequel on ne reviendra pas après traitement de l'option choisie.

RETURN

Signale la fin d'un sous-programme appelé par un des ordres « GOSUB ».


Partie 4 Chapitre 1.2 page 44 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Redonne le contrôle au programme appelant, à l'instruction suivant l'appel.

Phase 1 Phase 2
Programme Sous-programme Programme Sous-programme

Remarque :
L'ordre « RETURN » est obligatoire en fin des sous-programmes activés
par les ordres « GOSUB », « ON GOSUB », « ON SQ GOSUB », « AFTER
GOSUB », « EVERY GOSUB » et « ON BREAK GOSUB ».

VII. Gestion des erreurs

ERR et ERL

Variables positionnées par le système lorsqu'une erreur se produit dans


l'exécution d'un programme ou en mode direct.
« ERR » donne le numéro d'erreur et, le cas échéant, « ERL » donne le
numéro de ligne où s'est produite l'erreur.
Les codes d'erreur sont les suivants :
1 NEXT attendu
2 Erreur de syntaxe
3 RETURN attendu
4 Pas assez de données pour les READ correspondants
5 Valeur ou argument incorrect
6 Débordement dans un calcul (valeur réelle > 1.7 E 38)
7 Dépassement de la capacité mémoire
8 Numéro de ligne inexistant
9 Indice de tableau hors limites
10 Redimensionnement d'un tableau
11 Division par 0
12 Commande invalide en mode direct
.ocomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 45

Partie 4 : Langages du CPC

13 Affectation d'une chaîne à une variable numérique ou inverse


14 L'espace réservé aux chaînes n'est pas suffisant
15 Chaîne trop longue
16 Expression trop compliquée
17 CONT impossible (une erreur s'est produite ou END rencontré)
18 Fonction inconnue
19 La commande RESUME manque
20 La commande RESUME n'est pas attendue
21 Commande directe trouvée pendant le chargement d'un programme
22 Signe d'opération absent
23 Ligne trop longue
24 Fin de fichier (EOF) rencontrée
25 Erreur dans le type du fichier
26 NEXT manquant
27 Fichier déjà ouvert
28 Commande inconnue
29 WEND manquant
30 WEND inattendu

et, sur CPC 664 et 6128 :


31 Fichier non ouvert
32 Lecture/écriture interrompue

Exemple :
L'utilitaire qui suit facilitera la mise au point de vos programmes en indi­
quant en clair le type d'erreur rencontrée.

10000 ON ERROR GOTO 20000


10010 DIM E$(30) 'Tableau des erreurs
10020 FOR 1 = 1 TO 30
10030 READ E$(l) 'Lecture des libelles des erreurs
10040 NEXT I
10050 DATA Next attendu, Erreur de syntaxe, Return attendu. Pas
assez de données
10060 DATA Valeur ou argument incorrect. Débordement dans un
calcul
10070 DATA Dépassement de la capacité mémoire, Numéro de ligne
inexistant
Partie 4 Chapitre 1.2 page 46 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

10080 DATA Indice de tableau hors limites, Redimensionnement de


tableau
10090 DATA Division par zéro, Commande invalide en mode direct
10100 DATA Affectation d'une chaîne a une variable numérique ou
inverse
10110 DATA L'espace reserve aux chaînes débordé, Chaîne trop
longue
10120 DATA Chaîne trop compliquée, CONT impossible. Fonction
inconnue
10130 DATA Commande RESUME absente, Commande RESUME
inattendue
10140 DATA Commande directe trouvée sur le chargement d'un pro­
gramme
10150 DATA Signe d'operation absent, Ligne trop longue, Fin de
fichier rencontrée
10160 DATA Erreur dans le type de fichier, NEXT manquant, Fichier
déjà ouvert
10170 DATA Commande inconnue, WEND manquant, WEND
inattendu
10180 RETURN
20000 PRINT E$(ERR) ; "ligne" ; ERL
20010 END

Pour être activé, cet utilitaire devra être appelé sur la première ligne du
programme à tester par « GOSUB 10000 » et il faudra prendre garde
qu'aucun tableau E$ n'existe dans le programme que vous mettez au
point.

Remarque :
Sur CPC 664 et 6128, modifiez les lignes suivantes :
10010 DIM E$(32)
10020 FOR 1 = 1 TO 32: READ E$(I):NEXT I
10200 DATA Fichier non ouvert, Lecture/ecriture interrompue

ERROR< Nombre entier >

Simule une erreur en affectant à une action un numéro d'erreur compris


entre 1 et 255.
Si le numéro d'erreur est compris entre 1 et 32, le message d'erreur sera
le même que pour l'erreur BASIC de même numéro.
Si le numéro d'erreur est compris entre 33 et 255, l'utilisateur pourra
définir ses propres messages d'erreur.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 47

Partie 4 : Langages du CPC

Utilisation Définition de nouveaux messages d'erreur :


10 GOSUB 1010
20 ON ERROR GOTO 2000
1000 'Définition des nouvelles erreurs de No> =33
1010 DIM E$(N) 'Nombre d'erreurs definies
1020 FOR 1 = 1 TO N
1030 READ E$(l)
1040 NEXT I
1050 DATA Libelle des nouvelles erreurs
2000 'Traitement des erreurs

ON ERROR GOTO<N° de Ligne>

Définit la ligne qui sera activée dès qu'une erreur est détectée.

Remarques :
a) Cette commande est souvent placée en début de programme ou du
moins sur la ligne à partir de laquelle une erreur peut se produire.
b) L'ordre « ON ERROR GOTO 0 » supprime le déroutement du pro­
gramme en cas d'erreur.
Utilisation Voir les commandes « ERR », « ERL » et « ERROR ».

RESUME[<N° ligne>]

Redonne le contrôle au programme ayant déclenché l'erreur après l'exé­


cution d'une routine d'erreur.
Si aucun numéro de ligne n'est indiqué, l'exécution du programme
reprend à la ligne qui suit celle où une erreur a été détectée.
Si une ligne est indiquée, l'exécution du programme reprend à cette ligne.
Utilisation Vous considérez que l'erreur est grave et qu'il faut reprendre l'exécu­
tion du programme à la première ligne :
10 ON ERROR GOTO 1000
20 'Programme
1000 'Traitement de l'erreur
1010 RESUME 10
Vous considérez que l'erreur n'est pas grave, qu'elle doit seulement pro­
voquer l'affichage d'un message d'erreur, et être suivie de la réactiva­
tion de la ligne ayant provoqué l'erreur :
Partie 4 Chapitre 1.2 page 48 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

10 ON ERROR GOTO 1000


20 'Programme
1000 'Traitement de l'erreur
1010 RESUME

RESUME NEXT

Reprend l'exécution d'un programme (après le déroutement et l'exécu­


tion d'un programme de gestion d'erreur) juste après l'instruction ayant
provoqué l'erreur, donc, en ne réexécutant pas l'ordre ayant provoqué
l'erreur.

VIII. Gestion de la mémoire

CALL< Adresse > [, < liste de paramètres >]

Donne le contrôle à un programme en langage machine dont le point


d'entrée est l'adresse donnée dans le premier argument du CALL.
Un ou plusieurs paramètres (32 au maximum) peuvent être fournis au
programme activé. Ces paramètres doivent être séparés par une virgule
et peuvent être :
— des constantes entières (de -32768 à 32767 ou de 0 à &FFFF),
— des variables entières ou alphanumériques,
— des pointeurs (pour plus de renseignements, reportez-vous à la des­
cription de l'ordre « VARPTR »).
Si aucun paramètre n'est fourni, le programme en langage machine est
activé, et le retour sous BASIC se fait quand la commande assembleur
« RTS » est rencontrée.
Si un ou plusieurs paramètres sont fournis, les registres du Z80 contien­
nent toutes les informations pour y accéder et sont définis comme suit
au moment du débranchement :
PC contient l'adresse du point d'entrée du programme en langage
machine,
A contient le nombre de paramètre(s) passé(s),
DE contient le dernier paramètre,
IX pointe sur la zone RAM du dernier paramètre passé.
Chaque paramètre est défini par deux octets : poids faible, poids fort (LSB,
MSB).
Si le paramètre est entier ou contient un entier, ces deux octets donnent
la valeur numérique de l'entier.
Si le paramètre est une variable alphanumérique, ces deux octets
contiennent l'adresse d'implantation de la variable (VARPTR).
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 49

Partie 4 : Langages du CPC

Par exemple :
B=4
B$ = "Texte”
CALL Adresse, B, &334, @B, A$, @B$
Registre A - 5 (nombre de paramètres passés)
Registre IX = LSB @ B$
IX + 1 = MSB @ B$
IX + 2 = LSB @ A$
IX + 3 = MSB @ A$
IX + 4 = LSB @ B
IX + 5 = MSB @ B
IX + 6 = 34 (LSB de &334 sur 16 bits)
IX + 7 - 3 (MSB de &334 sur 16 bits)
IX + 8 = 4 (LSB de 4 sur 16 bits)
IX + 9 = 0 (MSB de 4 sur 16 bits)

ERASE< Nom(s) de variable(s)>

Permet d'écraser l'espace RAM réservé à des variables numériques,


alphanumériques et tableaux quand elles ne sont plus nécessaires.

FRE(< Nombre >) ou FRE(< Chaîne alphanumérique > )

— « Nombre » peut être une valeur numérique ou une variable numérique.


— « Chaîne alphanumérique » peut être le contenu d'une chaîne ou une
variable représentant une chaîne.
Donne la place RAM disponible sous BASIC.
La première forme donne la valeur « brute » de la RAM disponible.
La deuxième forme donne la valeur de la RAM disponible après avoir éli­
miné les variables qui ne servent à rien ou sont inutilisées (GARBAGE
COLLECTION).

Pemarque :
La deuxième forme peut prendre une ou deux secondes, mais permet,
après réarrangement de la RAM, de disposer d'un espace plus grand.

HIMEM

Donne l'adresse RAM supérieure utilisée par le BASIC. Cette adresse


n'évolue pas en cours de programme sauf si vous utilisez les ordres de
redéfinition de caractères « SYMBOL AFTER ».
Partie 4 Chapitre 1.2 page 50 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Utilisation Implantation et exécution d'un sous-programme en langage machine :


— Mémoriser HIMEM,
— Implanter des routines en langage machine au-delà de HIMEM,
— Exécuter ces routines sous BASIC,
— Restituer le HIMEM pour profiter pleinement du BASIC.
100 S = HIMEM 'Mémo @ RAM la plus haute utilisée par BASIC
110 MEMORY XX 'On baisse cette adresse
120 'Implantation de programmes en LM entre XX et S
130 'Execution de ces programmes LM
140 MEMORY S 'Retour a l'espace RAM maximum utilisable sous
BASIC
150 'Les sous-programmes ASM pourront maintenant etre écrasés
par BASIC
160 'Si la mémoire utilisée par le BASIC est supérieure a XX

INP (Adresse)

Donne la valeur courante du port d'entrée/sortie spécifié par l'adresse.


Cette adresse est exprimée sur 16 bits et permet donc un adressage de
2A16 ( = 65536) ports.
En réalité, très peu de ports sont accessibles en entrée sur l'AMSTRAD
de base. La fonction « INP » n'est donc pas très utilisée (voir Partie 2,
chap. 3 pour avoir plus de détails sur les ports d'entrée/sortie).

MEM0RY< Adresse>

Définit l'adresse RAM la plus haute utilisée par le BASIC.


Cette instruction a pour but de protéger une zone mémoire afin d'y ins­
taller des programmes en langage machine ou des données en étant sûr
qu'ils ne seront pas écrasés par le BASIC.
Si l'adresse fournie est trop petite ou trop grande, le message « Memory
Full » apparaîtra et l'instruction n'aura aucun effet.

OUT< Adresse de sortie >, < Valeur >

Permet d'envoyer la valeur spécifiée sur le port d'entrée/sortie spécifié.


L'adresse doit être exprimée sur 16 bits (donc, 2A16 ports sont adres­
sables). Sur l'AMSTRAD de base, peu de ports sont utilisables par la com­
mande « OUT » (voir Partie 3 chap. 3 pour plus de détails sur les ports
d'entrée/sortie).
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 51

Partie 4 : Langages du CPC

Remarque :
Une erreur sur cette instruction peut avoir des conséquences graves
comme le « plantage »1> de l'unité centrale, ou l'écriture intempestive
sur l'unité de cassette ou de disquette.

PEEK (< Adresse >)

Permet de lire dans la mémoire RAM ou ROM à l'adresse spécifiée.


Reportez-vous à l'ordre POKE pour connaître la répartition de la mémoire
sur les ordinateurs CPC.
Utilisation Cet ordre peut être très utile si vous désirez faire communiquer des pro­
grammes ASSEMBLEUR et des programmes BASIC. Imaginons que vous
désiriez incorporer une routine ASSEMBLEUR dans un programme BASIC,
pour des raisons de vitesse d'exécution par exemple. La routine ASSEM­
BLEUR pourra faire des calculs et les communiquer au programme BASIC
par des mémoires RAM. Le programme BASIC lira ces données avec
l'ordre PEEK.

POKE < Adresse >, < Entier >

Permet d'écrire dans la mémoire RAM à l'adresse spécifiée la valeur spé­


cifiée qui doit être comprise entre 0 et 255.

Remarque :
Une erreur sur cette instruction peut avoir des conséquences graves
comme le « plantage » de l'unité centrale, ou l'écriture intempestive sur
l'unité de cassette ou de disquette.
La RAM occupe les 64 kilo-octets d'adresse 0 à &FFFF de la manière
suivante :
&0000 à &003F : Copie conforme du ROM BIOS
&0040 à &3FFF : Espace de travail pour le langage utilisé
&4000 à &BAFF: RAM utilisateur
&BBOO à &BFFF: Zone des variables système et table des
points d'entrée des routines du FIRMWARE.
&C000 à &FFFF: RAM écran.
Reportez-vous en partie 2 chapitre 2 pour avoir plus de détails sur la
mémoire.
Utilisation Vous pouvez insérer les codes en langage machine d'un programme écrit
en assembleur dans un programme BASIC et mettre ces codes en
mémoire RAM de la façon suivante :

1 ) L'unité centrale est « plantée » lorsqu'elle n'est plus sous le contrôle du programmeur.
Partie 4 Chapitre 1.2 page 52 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

100 FOR l = 0 TO NB 'Nombre de codes hexa


110 READ A:POKE &9000 + I, A 'Lecture du LM et implantation
en RAM
120 NEXT I
130 DATA Données Hexa
Autre utilisation Vous pouvez modifier la valeur d'une variable en utilisant l'ordre « POKE »
pour écrire dans la zone RAM où elle est stockée. Reportez-vous à l'ordre
« VARPTR » pour avoir plus de détails.

VARPTR (Adresse)

Donne l'adresse où est implantée une variable BASIC.


Format AD = @VAR
— « VAR » est une variable entière, réelle, alphanumérique ou élément
de tableau.
— AD sera l'adresse de la variable sur 16 bits.
Son contenu est fonction du type de variable fournie.
AD-1 contient le type de la variable :
Variable AD-1
entière 1
alphanumérique 2
flottante 4
AD-2 contient le dernier caractère du nom de la variable dont le bit de
poids fort a été mis à 1 (OR & 80).
AD-3 à AD-n contiennent les autres caractères du nom de la variable
si celle-ci comporte n lettres.
• Variable entière :
AD : 8 bits LS B
AD + 1 : Bits 8 à 15 : 7 bits MSB
Bit 16 : Signe = 1 si < 0
= 0 si > = 0
• Variable réelle (flottante) :
Codée sur 5 octets (AD à AD+ 4)
Bit 7 de AD + 3 : Signe = 0 si > = 0
= 1 si <0
AD + 4 = Log2(m) + &81 ou m représente le nombre réel.
Les bits 0 à 6 de AD + 3 et les octets AD, AD + 1 et AD + 2 sont
codés en sens inverse : le MSB est le bit 6 de AD + 3 et le LSB le bit
0 de AD. Ils représentent :
— bit 6 de AD + 3 = 1/2 (AD + 4) qui doit être ajouté à AD + 4 pour
donner m,
— bit 5 de AD + 3 = 1 /4 (AD + 4) qui doit être ajouté à AD + 4 pour
donner m,
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 53

Partie 4 : Langages du CPC

— bit 4 de AD + 3 = 118 (AD + 4) qui doit être ajouté à AD + 4 pour


donner m,
etc.,
— bit 0 de AD = 1/2~31 (AD + 4) qui doit être ajouté à AD + 4 pour
donner m.
• Variable alphanumérique :
AD = longueur de la chaîne en nombre d'octets ;
AD + 1 = LSB de l'adresse où se trouve la chaîne
AD + 2 = MSB de l'adresse où se trouve la chaîne
• Variable tableau :
Une dimension :
AD = Adresse du pointeur sur VAR(O)
AD - 1 et AD - 2 = MSB et LSB de la dimension du tableau
AD - 3 = Dimension de VAR - 1
AD - 4 et AD - 5 = MSB et LSB de l'offset entre deux variables
AD - 6 = Type de variable : 1 si entière
2 si alphanumérique
4 si flottante
AD - 7 = (Valeur ASCII de la dernière lettre) OR &80
AD - 8 = (Valeur ASCII de l'avant-dernière lettre) OR &80
AD - n - 4 = (Valeur ASCII de la première lettre) OR &80

x dimensions ( x > 1 ) :
AD — n = (Valeur ASCII de la dernière lettre) OR &80
AD - n + 1 = Type de la variable : 1 si entière
2 si alphanumérique
4 si flottante
AD-n + 2etAD-n + 3 = Longueur offset entre 2 variables
AD - n + 4 = Nombre d'indices
AD - n + 5 et AD - n + 6 = Nombre d'éléments du 1er indice
AD - n + 7 et AD - n + 8 = Nombre d'éléments du 2e indice avec
n = 6 + 2* Nombre d'indices.

IX. Gestion des interruptions

AFTER <délai> [,<N° chronomètre>] GOSUB <N° de ligne>

— « délai » = durée de l'attente en multiples de 0.02 sec.,


— « N° chronomètre » est compris entre 0 et 3.
Partie 4 Chapitre 1.2 page 54 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Cet ordre lance l'exécution d'un sous-programme BASIC après une attente
définie par le paramètre « délai ».
Si le numéro du chronomètre est omis, le chronomètre 0 est pris par
défaut.

DI

Interdiction des interruptions issues des compteurs d'interruptions et acti­


vées par les commandes « EVERY » et « AFTER ».

Remarques :
a) La commande « BREAK » n'est pas affectée par cette instruction.
b) Cette commande est annulée par :
- El,
— la rencontre d'un « RETURN » en fin d'un sous-programme d'inter­
ruptions.

El

Rétablit les interruptions issues des compteurs d'interruptions qui avaient


été interdites par DI.

EVERY <délai>[, <N° de chronomètre >] GOSUB <N° ligne>

— « délai » est la durée de l'attente en multiples de 0.02 sec.,


— « N° chronomètre » est compris entre 0 et 3.
Lance cycliquement l'exécution d'un sous-programme BASIC après une
attente définie par « délai ». Si le numéro du chronomètre est omis, le
chronomètre 0 est pris par défaut.
Utilisation Réalisation d'une horloge sous interruptions :
120 CLS:PRINT "Entrez l'heure sous la forme : HH/MM/SS"
130 PRINT:PRINT:INPUT H$
140 PRINT:INPUT "Appuyez sur <ENTER> pour valider" ; A$
150 :
160 H = VAL(LEFT$(H$,2))
170 M = VAL(MID$(H$,4,2))
180 S = VAL(RIGHT$(H$,2))
185 CLS
190 :
200 EVERY 50,0 GOSUB 300
210 :
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 55

Partie 4 : Langages du CPC

220 GOTO 220


300 REM Calcul et affichage de l'heure
310 :
320 S = S+1:IF S = 60 THEN S = 0:M = M + 1:IF M = 60
THEN M = 0:H = H +1:1F H = 24 THEN H = 0
330 LOCATE 10,10:PRINT H"/"M"/"S” "
340 :
350 RETURN
Lignes 120 à 130 : Initialisation du temps
Lignes 160 à 180 : Conversion de la chaîne H$ en HH/MM/SS
Ligne 200 : EVERY
Lignes 30 à 350 : Calcul et affichage de l'heure.

REMAIN (< entier >)

L'« entier » est compris entre 0 et 3 et représente le numéro du chrono­


mètre actif.
Donne le temps qui reste avant le lancement d'un programme sous inter­
ruptions par les instructions « EVERY » ou « AFTER ».

Remarque :
Cette commande arrête le chronomètre spécifié. L'appel du sous-
programme sous interruptions affecté au chronomètre lu n'a donc pas
lieu après l'utilisation de cet ordre.

TIME

Donne le temps écoulé depuis la mise en route de l'ordinateur ou la der­


nière commande « RESET » (CALL 0) en 1/300e sec.

X. Instructions musicales

Reportez-vous à la partie 6 pour avoir tous les détails concernant le géné­


rateur sonore AY3-8912 (PSG).

ENT<N° enveloppe>[,<section d'enveloppe>],


[,<section d'enveloppe> ], ...

Définit les variations de ton des notes pendant leur émission.


« N° enveloppe » est un entier compris entre 1 et 15.
Partie 4 Chapitre 1.2 page 56 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Remarque :
Si le numéro d'enveloppe est négatif (entre - 15 et - 1 ), le son se répète
jusqu'à la fin de sa durée fixée par « SOUND ».
Une section d'enveloppe peut contenir 2 ou 3 paramètres :
— nombre de pas,
— amplitude du pas,
— durée du pas.
1) La section d'enveloppe contient 3 paramètres :
Nombre de pas : de 0 à 239.
Nombre de divisions dans la tonalité à l'intérieur d'une section
d'enveloppe.
Amplitude du pas : de -128 à 127
— Si ce paramètre est <0, augmente la hauteur de la note ;
— Si ce paramètre est >0, diminue la hauteur de la note.
Durée du pas : de 0 à 255 en 1 /100e sec.
2) La section d'enveloppe contient 2 paramètres :
Période sonore : Valeur de la période : c'est la hauteur du son (voir tableau
donné à l'ordre « SOUND », p. 67).
Durée du pas : en 1/100e sec.

Fréquence Fréquence

t t
1 1
1
1
1
1

3 étapes j 2 étapes
v/e =10 1 v/e = 10
1
d/e = 2 « d /e = 8

ENT 1,4,-2,1,8,2,1,4,-2,1 ENT 3,3,10,2,2,-10,8

avec v/e = variation par étape


et d/e = durée par étape
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 57

Partie 4 : Langages du CPC

ENV<N° d'enveloppe >[,<section d'enveloppe>]


[,< section d'enveloppe>]...

Définit l'enveloppe de volume pour une enveloppe repérée par son numéro
de 1 à 15. Cette commande est utilisée conjointement à la commande
« SOUND ».
Une section d'enveloppe peut contenir 2 ou 3 paramètres.
Si elle contient 3 paramètres, ils indiquent :
— nombre de pas,
— amplitude du pas,
— durée du pas.
Si elle contient 2 paramètres, ils indiquent :
— enveloppe matérielle,
— période de l'enveloppe.
1) La section d'enveloppe contient 3 paramètres :
Nombre de pas : Nombre de divisions définissant l'évolution d'un son
à l'intérieur d'une section. Ce nombre est compris entre 0 et 127.
Amplitude du pas : comprise entre - 128 et 127 ; de - 128 à 0 : aug­
mente le volume de la note ; de 0 à 127 : diminue le volume de la note.
Durée du pas : en 1/100° sec. (de 0 à 256)
2) La section d'enveloppe contient 2 paramètres :
Enveloppe matérielle : Valeur à envoyer au registre d'enveloppe (voir Par­
tie 6).
Période de I enveloppe : Valeur à envoyer aux registres de période d'enve
loppe (voir Partie 6).

Volume

1 2 3 4 ! 6 t

1
1
1
1
1
l
-6-
1
l
1 ENV 1.4.-4.2.2.4,6,2.-4,2
-9- l
3 étape s 3 étapes l

v/e * 3 v/e = 3 I
1
i
d/e - 1 d/e « 1
v/e = variation par étape
ENV 1,3,3.1.3.-3.1 et d/e - durée par étape

6° Complément
Partie 4 Chapitre 1.2 page 58 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

RELEASE < Canaux >

Libère les canaux sonores bloqués par la commande « SOUND ». Le para­


mètre « Canaux » peut prendre les valeurs suivantes :
Valeur Canal
1 A
2 B
3 A et B
4 C
5 C et A
6 C et B
7 A et B et C
Remarque :
Si aucun canal n'est bloqué (le bit 6 de la commande « SOUND » repré­
sente le bloquage d'un son : b6= 1 -> son bloqué, et b6 = 0 -» son non
bloqué), la commande « RELEASE » n'a aucun effet.

SOUND< état du canal>, < période sonore> [, <durée>[, < volu­


me > [, < enveloppe de volume > [, enveloppe de ton > [, < période de
bruit >]]]]]

Définit les caractéristiques d'un son.


Etat du canal :
Bit Fonction
0 Sortie canal A
1 Sortie canal B
2 Sortie canal C
3 Rendez-vous canal A
4 Rendez-vous canal B
5 Rendez-vous canal C
6 Bloquage d'un canal
7 Vidage d'un canal
Définitions :
— Rendez-vous : technique utilisée pour la synchronisation forcée de
deux canaux : lorsqu'un canal s'arrête et qu'en même temps un autre
commence à jouer, il y a rendez-vous entre ces deux canaux.
Reportez-vous à l'exemple ci-dessous pour avoir des détails sur l'utilisa­
tion des rendez-vous.
— Période sonore : hauteur de la note.
On a : Fréquence = 440 * (2 1 (Octave + ((N - 10) / 12»)
et : Période = ROUND (62 500 /Fréquence)
avec N = 1 pour DO N = 7 pour FA#
N = 2 pour DO# N = 8 pour SOL
N = 3 pour RE N = 9 pour SOL#
N = 4 pour RE# N = 10 pour LA
N = 5 pour Ml N = 11 pour LA#
N = 6 pour FA N = 12 pour SI
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 59

Partie 4 : Langages du CPC

Si la période sonore vaut 0, aucune fréquence n'est émise. Cette valeur


est utilisée pour générer du bruit blanc.
— Durée : Longueur d'un son en 1/100® sec. Initialisée à 20 par défaut
(1/20® sec.)
— Si « durée » = 0, c'est l'enveloppe de volume qui détermine la durée
des sons.
— Si « durée » < 0, l'enveloppe de volume est répétée un nombre de
fois égal à la valeur absolue du paramètre « durée ».
— Volume : volume initial d'une note. Compris entre 0 et 15. Initialisé
par défaut à 12. Ce volume sera modifié par l'enveloppe de volume (ENV)
si elle est définie.
— Enveloppe de volume : désigne l'une des 1 5 enveloppes de volume
définissables par l'utilisateur et codées de 1 à 15.
— Enveloppe de ton : désigne l'une des 15 enveloppes de ton définis­
sables par l'utilisateur et codées de 1 à 15.
— Période de bruit : compris entre 0 (aigu) et 31 (grave).
Pour illustrer l'utilisation des « rendez-vous », écrivons les données BASIC
correspondant à la partition suivante :

Voie ( octave 1 )

Voie ( octave 2 )

Voie C 3
JL i* - ( octave 3 )
y
t ----- J—
ou Ra = Rendez-vous avec le canal A
et Rb = Rendez-vous avec le canal B
Partie 4 Chapitre 1.2 page 60 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Table des fréquences pour les octaves 0 à 3

Do 261.62 478
Do# 277.18 451
Re 293.66 426
Re# 311.12 402
Mi 329.62 379
Fa 349.22 358
Fa# 369.99 338 Octave 0
Sol 391.99 319
Sol# 415.3 301
La 440 284
La# 466.16 268
Si 493.88 253

Do 523.25 239
Do# 554.36 225
Re 587.32 213
Re# 622.25 201
Mi 659.25 190
Fa 698.45 179
Fa# 739.98 169 Octave 1
Sol 783.99 159
Sol# 830.6 150
La 880 142
La# 932.32 134
Si 987.76 127

Do 1046.5 119
Do# 1108.73 113
Re 1174.65 106
Re# 1244.5 100
Mi 1318.51 95
Fa 1396.91 89
Fa# 1479.97 84 Octave 2
Sol 1567.98 80
Sol# 1661.21 75
La 1760 71
La# 1864.65 67
Si 1975.53 63

Do 2093 60
Do# 2217.46 56
Re 2349.31 53
Re# 2489.01 50
Mi 2637.02 47
Fa 2793.82 45
Fa# 2959.95 42 Octave 3
Sol 3135.96 40
Sol# 3322.43 38
La 3520 36
La# 3729.31 34
Si 3951.06 32
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 61

Partie 4 : Langages du CPC

SOUND 1,478 DO1 VOIE 1


SOUND 4,119 DO3 VOIE 3
SOUND 1,379 MI1 VOIE 1
SOUND 4,95 MI3 VOIE 3
SOUND 17,319 S0L1 VOIE 1 RDV B
SOUND 10,119 DO2 VOIE 2 RDV A
SOUND 4,80 S0L3 VOIE 3
SOUND 2,190 MI2 VOIE 2 RDV =
SOUND 4,60 D03 VOIE 3 Rendez-vous
SOUND 17,319 S0L1 VOIE 1 RDV B
SOUND 10,119 DO2 VOIE 2 RDV A
SOUND 4,95 MI3 VOIE 3
SOUND 1,379 MI1 VOIE 1
SOUND 4,80 S0L3 VOIE 3
SOUND 1,478 DO1 VOIE 1
SOUND 4,60 DO3 VOIE 3

10 FOR 1 = 1 TO 16
20 READ A,B
30 SOUND A,B
40 NEXT I
50 DATA 1,478,4,119,1,379,4,95,17,319,10,119,4,80,2,190
60 DATA 4,60,17,319,10,119,4,95,1,379,4,80,1,478,4,60

SQ (<N° de canal> )

Donne l'état de la file d'attente sonore d'un canal.


N° de canal = 1 pour le canal A
= 2 B
= 3 C
Cette fonction donne un entier dont les bits ont la signification suivante :
0 à 2 Nombre de places libres dans la file
3 Rendez-vous avec le canal A
4 Rendez-vous avec le canal B
5 Rendez-vous avec le canal C
6 Début de file en attente
7 Canal en activité au moment de l'acti­
vation de SQ

ON SQ (<N° canal>)GOSUB <N° ligne>

No Canal =1 pour lecanal A


____________ 2________ B
____________ 3________ C
Provoque un déroutement à la ligne indiquée si la file d'attente du canal
spécifié n'est pas pleine. Cette fonction permet, par exemple, d'exécu­
ter une musique en permanence, tout en faisant autre chose.

6‘ Complément
Partie 4 Chapitre 1.2 page 62 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Si nous mettons les notes sous forme de DATA, le programme aura l'allure
suivante :
1OOO 'Programme principal
1010 ON SQ(1 ) GOSUB 3000 'Activation du S/P de remplissage de
file sonore
1020 GOTO 1000
3000 READ NOTE 'Lecture d'une note
3010 IF NOTE = 0 THEN RESTORE:GOTO 3000
3020 SOUND 1, NOTE 'Mise en file d'attente
3030 RETURN
3040 DATA notes, 0 'Notes et terminateur

XI. Instructions graphiques

CLG[< couleur d'encre >]

Efface l'écran graphique.


Si l'encre est spécifiée, la couleur d'écran graphique devient cette couleur.
La couleur d'encre vaut 0 par défaut.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 63

Partie 4 : Langages du CPC

Pour comprendre la différence existant entre CLS et CLG, faites :


10 LOCATE 1,10 et 10 LOCATE 1,10
20 CLG 20 CLS

DRAW < x abs >, < y abs > [,[ < encre > Lf < mode d'encre > ]] sur 6128
DRAW<x abs>, <y abs>[, <encre>] sur 464 et 664

— « encre » est un entier compris entre 0 et 15.


— « mode d'encre » est un entier qui prend les valeurs suivantes : 0 pour
le mode normal, 1 pour le mode XOR, 2 pour le mode AND et 3 pour
le mode OR.
— « x abs » est un entier compris entre 0 et 639,
— « y abs » est un entier compris entre 0 et 399.

Remarque :
Voir l'utilisation du mode d'encre à l'instruction « PLOT ».
L'ordre DRAW dessine une ligne sur l'écran entre la position courante
du curseur graphique et la position absolue indiquée par « x abs » et « y
abs ».
Utilisation Traçons le graphe ci-dessous à l'aide de l'instruction « DRAW ».

La droite dO sera tracée par MOVE 0, 330:DRAW 0,0


La droite d1 sera tracée par MOVE 0, 300:DRAW 60,0
La droite di sera tracée par MOVE 0, 300- (i^30):DRAW (i + 1 >#60,0
Partie 4 Chapitre 1.2 page 64 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

d'où le programme suivant :


100 CLS
110 FOR l = - 1 TO 10
120 MOVE 0,300-1*30
130 DRAW (1+1)*60,0
140 NEXT I

DRAWR<décalage enx>, <décalage en y >[[, < encre>][, <mode


d'encre>]] sur 6128,
DRAWR <décalage en x>, <décalage en y>[, <encre>] sur 464
et 664

— « décalage en x » est un entier compris entre -639 et 639,


— « décalage en y » est un entier compris entre —399 et 399,
— « encre » est un entier compris entre 1 et 15,
— « mode d'encre » est un entier compris entre 0 et 3 : (0 - NORMAL,
1 = XOR, 2 = AND, 3 = 0R).

Remarque :
Voir l'utilisation du mode d'encre à l'instruction « PLOTR ».
Dessine une ligne sur l'écran à partir de la position courante du curseur
graphique vers une position relative : Si x,y est la position courante du
curseur, une ligne sera tracée entre x,y et x + décalage en x,y + décalage
en y.
Utilisation L'instruction de remplissage de surfaces à contour fermé existe dans le
BASIC 6128, mais pas dans les BASIC 464 et 664. Nous allons la recréer
partiellement :
Soit un rectangle défini par ses coordonnées x1 ,y1 en bas à gauche et
x2,y2 en haut à droite.
Pour le remplir, il faudra faire :
— Curseur en x1, y1.
— Tracé d'une ligne horizontale de longueur x2-x1.
— Curseur en x1 ,y 1 + 1.
— Tracé d'une ligne horizontale de longueur x2-x1.
et ce n fois jusqu'à ce que y1 + n = y2.
d'où le programme suivant :
100 X1 = 100:X2 = 300:Y1 = 100:Y2 = 200
110 FOR I = Y1 TO Y2
120 MOVE X1, I
130 DRAWR X2-X 1,0
140 NEXT I
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 65

Partie 4 : Langages du CPC

MOVE<x abs>, <y abs>[, [<encre>][, <mode d'encre>]] sur


6128
MOVE <x abs>, <y abs> sur 464 et 664

— « x abs » est compris entre 0 et 639,


— « y abs » est compris entre 0 et 399,
— « encre » est compris entre 0 et 15,
— « mode d'encre » est compris entre 0 et 3.
(0 = Normal, 1=XOR, 2 = AND, 3 = OR)

Remarque :
Voir l'utilisation du mode d'encre à l'instruction « PLOTR »
Positionne le curseur graphique aux coordonnées absolues xabs, yabs
spécifiées.

MOVER<décalage x>, <décalage y>[[, <encre>][, <mode


d'encre>]] sur 6128
MOVER <décalage x>, <décalage y> sur 464 et 664

— « décalage x » est compris entre -639 et 639,


— « décalage y » est compris entre -399 et 399,
— « encre » est compris entre 0 et 15,
— « mode d'encre » est compris entre 0 et 3.
(0 = Normal, 1 =XOR, 2 = AND, 3 = OR).
Si les coordonnées courantes du curseur sont x,y, les nouvelles coor­
données seront X + décalage x, y + décalage y.

ORIGIN<x>, <y>[, <gauche>, <droite>, <haut>, <bas>]

Permet de définir :
a) Le point d'origine du curseur graphique.
Remarque :
x-0, y = 0 est le point en bas à gauche de l'écran.
b) Les dimensions de la fenêtre graphique.
Remarque :
Si les coordonnées de la fenêtre dépassent la taille de l'écran, c'est l'écran
qui est considéré comme fenêtre graphique.

Exemple de définition de fenêtre :


100 CLS : ORIGIN 0,0,100,540,300,100
110 CLG 3 'Affiche la fenêtre graphique d'une autre couleur que le
fond de l'écran.
Partie 4 Chapitre 1.2 page 66 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

PLOT <x abs>,<y abs>,[,[<encre>][, <mode d'écran>]] sur 6128


PLOT <x abs>,<y abs>,[,<encre>] sur 464 et 664.

— « x abs » est compris entre 0 et 639,


— « y abs » est compris entre 0 et 399,
— « encre » est compris entre 0 et 15,
— « mode d'encre » est compris entre 0 et 3.
(0 = Normal, 1=XOR, 2 = AND, 3 = OR)

Utilisation Lorsque le paramètre mode d'encre est utilisé, l'opération logique est
du mode d'encre faite entre la couleur du point courant et la couleur du point que l'on veut
afficher.
Les tables de vérité au niveau bit des fonctions XOR, AND et OR sont
les suivantes :

x OR 0 1 AND 0 1 OR 0 1

0 0 1 0 0 0 0 0 1

1 1 0 1 0 1 1 1 1

Soient a et b deux bits ; nous aurons pour XOR :


a XOR b = 1 si a = 0 et b = 1 ou a = 1 et b = 0, donc si a < > b (puisque
a vaut 0 ou 1 et b également).
De même, nous aurons pour AND :
a AND b = 1sia = b=1,eta AND b = 0 dans les autres cas.
et, nous aurons pour OR :
a OR b = 0 si a = b = 0, et a OR b = 1 dans les autres cas.
Nous pouvons étendre les notions binaires XOR, AND et OR à des entiers
en considérant leur décomposition en base 2.

Exemple :
Soient les nombres a = 12 0 0 0 0 1 1 0 0
et b = 9 0 0 0 0 1 0 0 1
nous aurons a XOR b 0 0 0 0 0 1 0 1 = 5 en décimal
a AND b 0 0 0 0 1 0 0 0 = 8 en décimal
a OR b 0 0 0 0 1 1 0 1 = 13 en décimal

Utilisation du mode d'encre :


En MODE 0, supposons que nous ayons :
INK 5,1 (bleu), INK 8,2 (bleu vif), INK 9,3 (rouge), INK 12,4 (magenta),
INK 13,5 (mauve).
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 67

Partie 4 : Langages du CPC

Si nous faisons :
PLOT x,y,12,0 -» un point magenta apparaît
PLOT x,y,9,1 -* un point bleu apparaît
mode XOR: 9 XOR 12 = 5 = bleu
PLOT x,y,12,0 -> un point magenta apparaît
PLOT x,y,9,2 -> un point bleu vif apparaît
mode AND: 12 AND 9 = 8 = bleu vif
PLOT x,y,12,0 -> un point magenta apparaît
PLOT x,y,9,3 -> un point mauve apparaît
mode OR: 12 OR 9 = 13 = magenta

Remarque :
Le mode d'encre peut être activé dans les ordres : DRAW, DRAWR,
PLOT, PLOTR, MOVE, MOVER comme 4e paramètre.
Utilisation Tracé des courbes Y = F(x)
Le programme se décompose en trois phases :
— saisie de l'équation,
— saisie du domaine de définition,
— tracé.
10 REM Trace de courbes d'équations Y = F(x)
20 GOSUB 1000 'Saisie de l'equation
30 STOP
40 GOSUB 2000 'Saisie du domaine
50 GOSUB 3000 'Trace
60 :
70 END
80 REM ........................................................ —............................. ..............
1000 REM Saisie de l'equation
1010 :
1020 CLS
1030 PRINT "Tapez 2060 DEF FNA(X) = "
1040 PRINT "Suivi de l'equation a etudier."
1050 PRINT:PRINT "Tapez ensuite RUN 40"
1060 :
1070 RETURN
1080 REM ........ ........................... -.............................................. .................
Partie 4 Chapitre 1.2 page 68 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

2000 REM Saisie du domaine de définition


2010 :
2020 CLS
2030 PRINT "Entrez le domaine d'etude:”
2040 PRINT:INPUT "X min"; X1
2050 PRINT-.INPUT "X max"; X2
2060 DEF FNA(X) = SIN(X)
2070 :
2080 RETURN
2090 REM ....................................... -.............................................................
3000 REM Trace de la courbe
3010 :
3020 REM Calcul de l'echelle en Y
3030 :
3035 M1 = — 1 E + 33:M2 = 1E + 33
3040 FOR X = X1 TO X2 STEP (X2-X1)/100
3050 A-FNA(X)
3060 IF A>M1 THEN M1 =A
3070 IF A<M2 THEN M2 = A
3080 NEXT X
3090 EX = 640/(X2 -X1 ):EY = 399/(M 1-M2)
3100 PX = (X2 - X1 )/100
3110 :
3120 REM trace
3130 :
3140 CLS
3150 FOR X = X1 TO X2 STEP PX
3160 PLOT (X-X1)*EX, (FNA(X)-M2)*EY
3170 NEXT X
3180 :
3190 RETURN
Lignes 20 à 70 : programme principal
Lignes 1000 à 1070 : Saisie de l'équation
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 69

Partie 4 : Langages du CPC

Lignes 2000 à 2080 : Saisie du domaine d'étude


Ligne 2060 : Définition de la fonction à étudier
Lignes 3000 à 3100 : Calcul d'échelle
Lignes 3120 à 3190 : Tracé de la courbe

PLOTR < décalage en x >, < décalage en y >, [, [ < encre > ], [ < mode
d'encre> ]] sur 6128
PLOTR <décalage en x>, <décalage en y>, [, <encre>] sur 464
et 664

— « décalage x » est compris entre - 639 et 639,


— « décalage y » est compris entre - 399 et 399,
— « encre » est compris entre 0 et 15,
— « mode d'encre » est compris entre 0 et 3.
(0 = Normal, 1=XOR, 2 = AND, 3 = OR)
Si les coordonnées du curseur graphique étaient x,y « PLOTR dec x,
dec y » affiche un point aux coordonnées x + dec x, y + dec y.

TEST(<x>,<y>)

— x est compris entre 0 et 639,


— y est compris entre 0 et 399.
Place le curseur graphique à la position absolue x,y et donne la valeur
de l'encre à cette position, modulo 16 en MODE 0, modulo 4 en MODE
1 et modulo 2 en MODE 2.
Utilisation Soient deux points : P1 (x 1 ,y 1 ) et P2 (x2,y2) appartenant à une ligne hori­
zontale d'ordonnée Y. Nous voulons tracer un trait entre P1 et P2 sachant
qu'ils peuvent être n'importe où sur la droite et que leur couleur est PEN
1 en MODE 2. (Evidemment, la droite n'a pas la couleur PEN 1.)
100 FOR l = 0 TO 639
110 IF TEST (l,Y) = 1 THEN IF X1=0 THEN X1=l ELSE X2 = l
'Recherche de points
120 NEXT I
130 PLOT X1,Y
140 DRAW X2,Y

TESTR (< décalage x>, <décalage y>)

— « décalage x » est compris entre - 639 et 639


— « décalage y » est compris entre - 399 et 399.
Partie 4 Chapitre 1.2 page 70 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Si le curseur graphique était en x,y, il sera positionné en x +décalage


x,y +décalage y après cette commande, et TESTR donnera la couleur
de ce point, modulo 16 en MODE 0, modulo 4 en MODE 1 et modulo
2 en MODE 2.

VPOS

Donne la position verticale du curseur texte par rapport à la position d'ori­


gine dans la fenêtre courante.

XPOS

Donne la position horizontale du curseur graphique.


La position renvoyée est comprise entre 0 et 639.

YPOS

Donne la position verticale du curseur graphique.

La position renvoyée est comprise entre 0 et 399.

XII. Fonctions à caractère mathématique

ABS (< expression numérique >)

ou « expression numérique » est une valeur entière ou réelle.

Définition :

La valeur absolue d'un nombre « a » est celui des deux nombres a et


-a qui est le plus grand.
La fonction « ABS » donne la valeur absolue de l'expression entre paren­
thèses.

Exemples :

ABS( —32.5) = 32.5 ABS(- 1456) = 1456


ABSI32.5) = 32.5 ABS(3.2 E 12) = 3.2 E 12

< Argument 1> AND < Argument 2>

Exécute un « ET » logique entre tous les bits des deux arguments entiers
fournis.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 71

Partie 4 : Langages du CPC

La table de vérité de la fonction AND au niveau bit est la suivante :


AND 0 1
0 0 0
1 0 1

Exemple :
1 0 1 1110 0 &BC
AND 0 1 1 1110 1 &7D
= 0 0 1 1110 0 &3C

ATN (< expression numérique >)

où « expression numérique » est une valeur réelle.

Définition :
Correspondance réciproque de la fonction tangente. ATN(x) = b où b est
compris entre - pi/2 et pi/2 et tel que TAN(b) = x.

Remarques :
a) Les commandes « DEG » et « RAD » peuvent être utilisées pour spé­
cifier que le résultat doit être exprimé en degrés ou en radians.
b) Par défaut, la valeur sera calculée en radians.

BIN$ (cnombre entier sans signe>[, cnombre entier>])

Donne l'équivalent binaire (base 2) d'un nombre entier décimal (base


10) sur un nombre de digit (de chiffres) indiqué par le paramètre option­
nel. Ce nombre peut varier entre 0 et 16. Le nombre à convertir doit être
compris entre -32768 et 65535.

Exemple :
BIN$( — 3,8) = 111111111111110 1
BIN$(3,8) = 0 0 0 0 0 0 11
BIN$(3,16) = 0000000000000011

Remarque :
Le codage binaire d'un nombre négatif se fait de la façon suivante :
- n = n + 1 sur 16 bits.
Exemple :
n = 3 sur 1 6 bits : 0 0 0 0 0 0 O 0 0 0 0 0 0 0 1 1
n 1111111111111100
n+1 1111111111111101
Partie 4 Chapitre 1.2 page 72 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Ainsi, on a BIN$(- 1 ) : 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
= 1111111111111111 + 1

CINT (< expression numérique >)

Conversion d'une valeur numérique réelle en une valeur numérique entière


arrondie entre -32768 et 32767.

Utilisation Si vous êtes un peu déconcerté devant l'abondance des instructions per­
mettant d'extraire les parties fractionnaires ou entières d'un nombre réel,
voici un programme qui pourra vous fixer les idées sur leur utilisation :

100 REM INT,CINT,CREAL,FIX,ROUND sans argument secondaire

110 :

120 MODE 2

130 PRINT "Test de INT,CINT, CREAL, FIX et ROUND sans argument


secondaire" :PRINT:PRINT

140 INPUT "Entrez un nombre"; N

150 PRINT

160 PRINT 'INT ("N") = "INT(N)

170 PRINT 'CINT ("N") = "CINT(N)

180 PRINT 'CREAL ("N") = "CREAL(N)

190 PRINT 'FIX ("N") = "FIX(N)

200 PRINT 'ROUND ("N") = "ROUND(N)

210 PRINT

220 LOCATE 1,20:INPUT "Un autre essai (O/N):" ; R$

230 IF UPPER$(R$)< > "O" AND UPPER$(R$)< > "N" THEN PRINT
CHR$(7):GOTO 220

240 IF UPPER$(R$) = "O" THEN 100

250 END

Ligne 130 : Saisie du nombre réel à convertir

Lignes 140 à 210 : Affichage du résultat des fonctions INT, CINT, CREAL,
FIX et ROUND.

Lignes 220 à 240 : Poursuite ou arrêt du programme.


Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 73

Partie 4 : Langages du CPC

COS (< expression numérique >)

Définition :
Rapport du côté adjacent sur l'hypoténuse.

Remarques :
a) Les commandes « DEG » et « RAD » peuvent être utilisées pour spé­
cifier que le résultat doit être exprimé en degrés ou en radians.
b) Sauf indication contraire, la valeur sera calculée en radians.

CREAL (< expression numérique >)

ou « expression numérique » est un entier ou un réel.


Convertit l'expression numérique en un nombre réel.
Reportez-vous à la fonction « CINT » pour avoir des renseignements sur
l'utilisation de « CREAL ».

DEF FN<nom>[(<paramètre(s) formel(s))]= < expression >

La fonction DEF FN permet de définir simplement une fonction mathé­


matique qui sera utilisée dans la suite du programme.
Le but de cette fonction est double :
— Exécuter une seule fois la définition de cette formule et l'utiliser par
la suite sous forme réduite (gain de place et de temps d'exécution),
— permettre à un utilisateur non programmeur de définir simplement
la fonction qui l'intéresse.
Utilisation Soit une fonction mathématique dont nous voulons connaître les mini­
mum et maximum dans un intervalle donné.
Partie 4 Chapitre 1.2 page 74 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

1000 REM Recherche du minimum et du maximum


1010 REM d'une fonction sur un intervalle donne
1020 REM
1050 CLS:PRINT”Tapez 11 50 DEF FNA(X) = "
1060 PRINT"suivi de la foncion a etudier"
1070 PRINT"Tapez ensuite RUN 1100”
1080 STOP
1100 REM Saisie de l'intervalle d'etude
1110 PRINT:PRINT”Entrez l'intervalle d'etude:”
1120 PRINT:INPUT "Minimum”;MI
1130 PRINT:INPUT ”Maximum”;MA
1140 REM
1150 DEF FNA(X) = COS(X)
1160 REM
1170 U=-1E+15:V=1E + 15
1180 FOR X = MI TO MA STEP (MA-MD/100
1190 B = FNA(X)
1200 IF B>U THEN U = B 'Maximum
1210 IF B<V THEN V = B 'Minimum
1220 NEXT X
1230 REM
1240 REM Affichage des résultats
1250 PRINT:PRINT”Le maximum est :";U
1260 PRINT:PRINT"Le minimum est :";V
1270 END
Lignes 1050 à 1080 : Présentation,
Lignes 1100 à 1140 : Saisie de l'intervalle d'étude,
Ligne 1150 : Définition de la fonction,
Lignes 1160 à 1230 : Calcul des minimum et maximum,
Lignes 1240 à 1270 : Affichage des minimum et maximum.

DEG

Etablit le mode de calcul des fonctions trigonométriques en degrés. Par


défaut, les valeurs fournies aux fonctions SIN, COS, TAN et ATN sont
supposées exprimées en radians.

Remarque :
Les commandes RAD, NEW, CLEAR, LOAD, RUN, CALL O, ... annulent
l'effet de la commande « DEG ».
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 75

Partie 4 : Langages du CPC

EXP (< expression numérique >)

Donne l'exponentielle naturelle (base e) de l'expression numérique fournie.

Remarques :
a) Pour calculer la puissance dans une base autre que e, (soit a cette
base), nous ferons :
a~x = e*(x ❖ LOG(a)) où LOG est le logarithme népérien.
b) La fonction réciproque de EXP est le logarithme népérien LOG.

FIX (< expression numérique >)

Enlève la partie décimale d'un nombre réel sans l'arrondir à sa valeur


la plus proche.
Reportez-vous à la fonction « OINT » pour avoir des renseignements sur
l'utilisation de « CREAL ».

HEX$(<nombre entier sans signe>, [,<nombre entier>])

Le 1er argument est un nombre entier compris entre - 32768 et 65535.


Le 2e argument est un nombre entier compris entre 0 et 16. Il donne
le nombre de digit (chiffres) pour la conversion.

Exemples :
HEX$(250,4) = OOFA : Des « 0 » sont rajoutés à gauche du nombre
exprimé en hexadécimal pour obtenir le nombre de digit demandé.
HEX$(250,1 ) = FA : Impossible à exprimer sur 1 digit.
HEX$(250,1 6) = OOOOOOOOOOOOOOFA

INT (< expression numérique >)

où « expression numérique » est un entier ou un réel.


Arrondit à l'entier inférieur en enlevant la partie décimale.
Le résultat est le même que pour la fonction « FIX » pour les nombres
positifs, et de un inférieur à la fonction « FIX » pour les nombres négatifs.
Reportez-vous à la fonction « CINT » pour avoir des renseignements sur
l'utilisation de « CREAL ».

LOG (< expression numérique >)

Définition :
Soit x un nombre strictement positif écrit sous la forme x = a"y où :
Partie 4 Chapitre 1.2 page 76 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

— a est un réel différent de 1,


— y est appelé le logarithme de x dans la base a.

Dans le BASIC de l'AMSTRAD, la base est e pour la fonction « LOG »


et 10 pour la fonction « LOG 10 ».

Remarque :

L'expression numérique fournie à la fonction LOG doit être strictement


positive.

LOG 10 (< expression numérique >)

D'après la définition donnée à la fonction LOG du logarithme en base


a, nous avons, pour tout nombre réel x strictement positif :

x= 10"y -> y = LOG10 (x)

Remarque :

L'expression numérique fournie à la fonction LOG doit être strictement


positive.

MAX (< liste d'expressions numériques>)

où « liste d'expressions numériques » représente un ensemble de varia­


bles ou de valeurs entières ou réelles.

Cette fonction donne la plus grande des expressions fournies.

Exemple :

10 A = 4
20 PRINT MAX(3*4,A,1 )

affichera 12.

MIN(<liste d'expressions numériques>)

où « liste d'expressions numériques » représente un ensemble de varia­


bles ou de valeurs entières ou réelles.
Cette fonction donne la plus petite des expressions fournies.

Exemple :

10 A = 4
20 PRINT MAX(3*4,A,1 )

affichera 1.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 77

Partie 4 : Langages du CPC

NOT < argument >

Exécute une inversion logique sur tous les bits de l'argument entier fourni.
La table de vérité de la fonction NOT au niveau bit est la suivante :
A 0 1
NOT A 1 0

Exemple :
10 11110 0 &BC
NOT &BC = 0 1 0 0 0 0 1 1 &43

< Argument 1> OR < Argument 2>

Exécute un « OU » logique entre tous les bits des deux arguments entiers
fournis.
La table de vérité de la fonction OR au niveau bit est la suivante :
OR 0 1
0 0 1
1 1 1

Exemple
1 0 1 1 110 0 &BC
OR 0 1 1 1 110 1 &7D
1 1 1 1 110 1 &FD

PI

Définition :
Rapport de la longueur d'un cercle à son diamètre. C'est un nombre irra­
tionnel transcendant.
Le nombre « PI » sur AMSTRAD donne la valeur approchée du nombre
PI : 3.141592653468251.

Remarque :
Les valeurs rationnelles suivantes peuvent suffire dans beaucoup de cas :
22/7 à 2* 10*-3 près, et 3Ï5/113 à 3* 10*-7 près.

RAD

Définition :
Arc dont la longueur égale le rayon du cercle (le cercle entier mesure
2 pi radians).
Partie 4 Chapitre 1.2 page 78 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Cette commande établit le mode de calcul des fonctions trigonométri-


ques en radians.

Remarque :
On a 1 radian = 180/pi degrés,
et 1 degré = pi/180 radians.

RANDOMIZEl< expression numérique> ]

Cette instruction permet de fixer la séquence pseudo-aléatoire du géné­


rateur de nombres aléatoires de l'AMSTRAD.
Lorsque vous désirez utiliser le générateur aléatoire dans un programme,
l'instruction « RANDOMIZE » permet d'avoir des séquences aléatoires dif­
férentes.
Si vous utilisez l'argument « expression numérique », la séquence géné­
rée sera la même si vous fournissez deux fois le même argument.
Pour fixer l'argument du « RANDOMIZE », vous pouvez demander à la
personne qui exécute le programme d'entrer un nombre N, et faire RAN­
DOMIZE N, ou utiliser l'un des programmes suivants qui vous évitera cette
démarche un peu lourde.
Attente de l'appui sur une touche. Pendant l'attente, un compteur s'incré-
mente. Quand une touche est actionnée, le programme génère un RAN­
DOMIZE <Compteur>.
120 CLS:PRINT « Appuyez sur une touche »:PRINT
130 :
140 A$ = INKEY$
150 J = J + 1
160 IF A$ = "''THEN 140
170 :
180 RANDOMIZE J
190 :
200 FOR 1=1 TO 10
210 PRINT INTfRND* 10) ;
220 NEXT I
230 :
240 END
Ligne 120 : Message à l'écran
Lignes 140 à 160 : Attente d'une action au clavier
Ligne 180 : RANDOMIZE
Lignes 200 à 230 : Affichage d'une séquence pseudo-aléatoire.
Utilisation de l'instruction « TIME » dans un RANDOMIZE :
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 79

Partie 4 : Langages du CPC

L'instruction « RANDOMIZE TIME » donne d'assez mauvais résultats, et


une expression un peu plus complexe a été choisie.
120 RANDOMIZE RND(TIME)* 1000
130 FOR 1 = 1 TO 10
140 PRINT INT(RND* 10) ;
1 50 NEXT I
160 :
170 END
Ligne 120 : RANDOMIZE
Lignes 130 à 150 : Affichage d'une séquence pseudo-aléatoire.

RND[<expression numérique>]

Donne un nombre tiré au hasard dans la séquence pseudo-aléatoire cou­


rante si le paramètre « expression numérique » n'existe pas ou est positif.
Si l'expression numérique est nulle, RND(O) renvoie le dernier nombre tiré.
Si l'expression numérique est négative, une nouvelle séquence aléatoire
est générée.

ROUND (< expression numérique>[, < nombre de décimales>])

Arrondit l'expression numérique au nombre de décimales indiqué dans


le deuxième argument.
Si le deuxième argument est négatif et de valeur absolue n, l'expression
est arrondie à un entier dont les n derniers chiffres sont nuis.

Exemple :
ROUND(12343.656,-3) = 12000
ROUNDd 2343.656,2) = 12300
ROUND(12343.656,0) ou ROUND (12343.656) = 12344
ROUND(125,-4) = 0
Reportez-vous à l'ordre « CINT » pour avoir des exemples de valeurs de
ROUND.

SGN(< expression numérique>)

Donne le signe de l'expression numérique :


- 1 si elle est négative, 0 si elle est nulle et 1 si elle est positive.

Exemples :
SGN( — 12.5) = -1
SGN(0) = 0
SGN (1.4E30) = 1
Partie 4 Chapitre 1.2 page 80 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

SIN (< expression numérique >)

Définition :
Pour un angle aigu, rapport du côté opposé sur l'hypoténuse.

Remarques :
a) Les commandes « DEG » et « RAD » peuvent être utilisées pour spé­
cifier que le résultat doit être exprimé en degrés ou en radians.
b) Sauf indication contraire, la valeur sera calculée en radians.

SQR (< expression numérique >)

où « expression numérique » est un nombre entier ou réel.

Définition :
a est appelé racine d'un nombre A si aA2 = A.
Cette fonction donne la racine d'un nombre réel ou entier.

TAN (< expression numérique >)

Définition :
Rapport du sinus sur le cosinus.

SIN = BC/AC et COS = AB/AC,


d'où TAN = SIN/COS = (BC/AC)/(AB/AC) = BC/AB
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 81

Partie 4 : Langages du CPC

Remarques :
a) Les commandes « DEG » et « RAD » peuvent être utilisées pour spé­
cifier que le résultat doit être exprimé en degrés ou en radians.
b) Sauf indication contraire, la valeur sera calculée en radians.

UNT(<nombre hexadécimal)

Convertit l'argument en un nombre entier signé sur 16 bits en complé­


ment à 2.

Exemples :
UNT(SFFFF) = -1
UNT(SFFFE) = -2
UNT(O) = 0
Définition du complément a 2 :
on a -n = n + 1 où n est un entier positif
par exemple :
-3 = 3+1
3 =0000000000000011
3 =1111111111111100
3+ 1 =1111111111111101= &FFFD en hexadécimal

< Argument 1> XOR < Argument 2>

Exécute un « OU EXCLUSIF » logique entre tous les bits des deux argu­
ments entiers fournis.
La table de vérité de la fonction XOR au niveau bit est la suivante :
XOR 0 1
0 0 1
1 1 0

Exemple :
1 0 1 1 1 1 0 0 &BC
XOR 01111101 &7D
= 1 1 0 0 0 0 0 1 &C1

XIII. Aides à la programmation


AUTO[<N° de ligne>[, <écart entre deux lignes>]]

Affiche automatiquement les numéros de lignes après chaque retour ligne


pour un programme BASIC.
Partie 4 Chapitre 1.2 page 82 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Remarques :
a) Sur 464 et 664, si une ligne est déjà en mémoire, un « H: » apparaît
après son numéro pour indiquer le conflit. Tapez « Enter » si vous voulez
conserver l'ancienne ligne.
Sur 6128, si une ligne est déjà en mémoire, elle apparaît en clair et est
modifiable comme par la commande « EDIT ». Tapez « Enter » si vous
voulez conserver l'ancienne ligne.
b) Si vous ne donnez aucun argument à cette commande, la numérota­
tion commence en ligne 10 et l'écart entre deux lignes est de 10.

CLEAR

Efface des variables BASIC entières, réelles, tableaux et fonctions utili­


sateur, ferme les fichiers ouverts, et force le calcul des fonctions trigo-
nométriques en radians.

CONT

Permet de continuer l'exécution d'un programme après avoir rencontré l'ins­


truction « STOP » ou après que la touche « ESC » ait été pressée deux fois.

Remarques :
a) Si le programme est modifié entre son arrêt et la demande de redé­
marrage, ou s'il est protégé, la commande « CONT » sera mise en défaut.
b) L'utilisation des ordres « STOP » et « CONT » est très efficace pour
aider à la mise au point des programmes écrits en BASIC. En effet, si
le programme à tester est de grande taille, il pourra être judicieux de le
tester par petits blocs en y insérant des commandes « STOP ».

DEFINT < liste de lettres concernées >

Définit le type des variables par défaut comme étant entier. Si une varia­
ble est entrée sans marqueur du type « ! » pour un nombre binaire, « % »
pour un entier et « $ » pour une chaîne, elle est automatiquement défi­
nie entière si sa première lettre commence par une des lettres citées dans
la commande « DEFINT ».

Exemple :
DEFINT A -> Toutes les variables de nom commençant par « A » et non
marquées seront de type entier.
DEFINT A-Z -> Toutes les variables non marquées seront de type entier.

DEFREALc Liste de lettres concernées >

Définit le type des variables par défaut comme étant réel. Si une variable
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 83

Partie 4 : Langages du CPC

est entrée sans marqueur du type « ! » pour un nombre binaire, « % »


pour un entier et « $ » pour une chaîne, elle est automatiquement défi­
nie réelle si sa première lettre commence par une des lettres citées dans
la commande « DEFREAL ».

Exemple :
DEFREAL A -» Toutes les variables de nom commençant par « A » et
non marquées seront de type réel.
DEFREAL A-Z -> Toutes les variables non marquées seront de type réel.

DEFSTR< liste de lettres concernées >

Définit le type des variables par défaut comme étant alphanumérique.


Si une variable est entrée sans marqueur du type « ! » pour un nombre
binaire, « % » pour un entier et « $ » pour une chaîne, elle est automati­
quement définie chaîne si sa première lettre commence par une des let­
tres citées dans la commande « DEFSTR ».

Exemple :
DEFSTRA - Toutes les variables de nom commençant par « A » et non
marquées seront de type alphanumérique.
DEFSTR A-Z -* Toutes les variables non marquées seront de type alpha-
numérique.

DELETE<une ligne ou un ensemble de lignes>

Efface la ou les ligne(s) spécifiée(s).

Exemples :
DELETE Efface la totalité des lignes en mémoire.
Identique à la commande « NEW » à ceci près que DELETE
n'efface pas la valeur des variables en mémoire.
DELETE a-b Efface toutes les lignes comprises entre « a » et « b ».
DELETE -a Efface toutes les lignes du début du programme jusqu'à
la ligne « a ».
DELETE a- Efface toutes les lignes à partir de la ligne « a » jusqu'à
la fin du programme.

Remarque :
Utilisez cette commande avec précaution, car il n'est pas possible de
récupérer les lignes effacées par une simple commande BASIC.

EDIT<N° de ligne>

Affiche une des lignes d'un programme BASIC en mémoire. Le curseur


Partie 4 Chapitre 1.2 page 84 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

est positionné sur le premier caractère du premier mot BASIC de la ligne,


et le mode d'édition est lancé : toute lettre tapée sera insérée avant le
curseur et les caractères suivant le curseur seront décalés d'un carac­
tère vers la droite.

Remarques :
a) Lors de l'exécution d'un programme BASIC, s'il survient une erreur, le
mode EDIT est lancé automatiquement sur la ligne ayant provoqué l'erreur.
b) Si vous tentez d'éditer une ligne qui n'existe pas, le message suivant
apparaîtra : « Line does not exist ».

END

Marque la fin d'un programme. Plusieurs ordres « END » peuvent être


présents dans un programme, mais il n'y en aura qu'un si vous utilisez
les concepts de programmation hiérarchisée-structurée exposés en par­
tie 4 chapitre 1.4.

LIST[< ensemble de lignes>][, <numéro de canal>]

où <ensemble de lignes> peut prendre les valeurs suivantes :


Inexistant : liste la totalité des lignes du programme en mémoire.
-a : liste toutes les lignes du début du programme à la ligne a.
a- : liste toutes les lignes du programme à partir de la ligne a
jusqu'à la fin du programme.
a-b : liste toutes les lignes comprises entre a et b.
et « numéro de canal » = #0 pour lister sur l'écran,
= #8 pour lister sur imprimante.
Cette commande permet d'afficher une ligne ou un ensemble de lignes
sur le canal spécifié.

NEW

Efface le programme et les données en mémoire et ferme tous les fichiers


ouverts. Les touches redéfinies ne sont pas effacées.

Remarque :
Utilisez cette commande avec précaution, car il n'est pas possible de
récupérer les lignes effacées par une simple commande BASIC.

REM < texte >

Abréviation du mot anglais « remark ». Permet d'insérer des commen­


taires dans un programme BASIC.
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 85

Partie 4 : Langages du CPC

Remarques :
a) Tous les caractères rencontrés après la commande « REM » sont
considérés comme des commentaires, y compris le séparateur d'instruc­
tions « : » qui ne permet pas de valider une instruction derrière un REM.
b) L'ordre REM peut être remplacé par une apostrophe, mais il produira
une erreur s'il est utilisé de cette façon dans un ordre DATA.

RENUM[< nouveau numéro de ligne >][[, < ancien numéro de


ligne >][, < incrément >]]

où « ancien numéro de ligne » est la 1re ligne touchée par le RENUM,


« nouveau numéro de ligne » définit le numéro de la 1re ligne à la sortie
de la commande RENUM.
« incrément » définit l'espacement entre deux lignes consécutives.
Pour comprendre la façon dont fonctionne cette commande, le plus simple
est de raisonner sur un exemple.
Soit le programme suivant :
10 REM Programme principal
20 :
30 GOSUB 80 'Entrée
40 GOSUB 100 'Traitement
50 GOSUB 120 'Sortie
60 :
70 END
80 REM Entrée
90 RETURN
100 REM Traitement
110 RETURN
1 20 REM Sortie
130 RETURN
que nous voulons renuméroter de la façon suivante :
10 REM Programme principal
20 :
30 GOSUB 1000 'Entrée
40 GOSUB 2000 'Traitement
50 GOSUB 3000 'Sortie
60 :
70 END
1000 REM Entrée
1100 RETURN
Partie 4 Chapitre 1.2 page 86 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

2000 REM Traitement


2100 RETURN
3000 REM Sortie
3100 RETURN
Il faudra faire RENUM 1000, 80, 100.
Cette commande aura l'effet suivant :
10 REM Programme principal
20 :
30 GOSUB 1000 'Entrée
40 GOSUB 1200 'Traitement
50 GOSUB 1400 'Sortie
60 :
70 END
1000 REM Entrée
1100 RETURN
1200 REM Traitement
1300 RETURN
1400 REM Sortie
1500 RETURN
Puis RENUM 2000, 1200, 100
Cette commande aura l'effet suivant :
10 REM Programme principal
20 :
30 GOSUB 1000 'Entrée
40 GOSUB 2000 'Traitement
50 GOSUB 2200 'Sortie
60 :
70 END
1000 REM Entrée
1100 RETURN
2000 REM Traitement
2100 RETURN
2200 REM Sortie
2300 RETURN
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 87

Partie 4 : Langages du CPC

Et enfin RENUM 3000, 2200, 100.


Et nous retrouverons la numérotation voulue :
10 REM Programme principal
20 :
30 GOSUB 1000 'Entrée
40 GOSUB 2000 'Traitement
50 GOSUB 3000 'Sortie
60 :
70 END
1000 REM Entrée
1100 RETURN
2000 REM Traitement
2100 RETURN
3000 REM Sortie
3100 RETURN

RUN < chaîne alphanumérique >

Charge et exécute un programme présent sur unité de cassette sur 464


ou de disquette (selon la direction des entrées/sorties définie par I CAS
ou I DISC).

Remarque :
Les programmes BASIC protégés doivent être exécutés par cette commande
directement, sans être chargés en mémoire par l'instruction « LOAD ».

RUN[<N° de ligne>]

Exécute un programme BASIC présent en mémoire à partir de la ligne


indiquée ou à partir de la première ligne si aucun numéro de ligne n'est
précisé.

STOP

Cet ordre arrête l'exécution d'un programme quand il est rencontré. Uti­
lisé conjointement à la commande CONT, cet ordre permet de « debug-
ger » les programmes BASIC que vous mettez au point.

TRON

Permet de suivre l'exécution d'un programme BASIC ligne par ligne en


affichant entre crochets le numéro de la ligne en cours d'exécution.
Partie 4 Chapitre 1.2 page 88 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Cette commande peut être activée par programme ou en mode direct.


TRON est à utiliser avec TROFF, STOP et CONT pour aider à mettre au
point vos programmes BASIC.

TROFF

Dévalide l'utilisation du mode « trace » lancé par l'ordre TRON. Cette com­
mande peut être activée par programme ou en mode direct.

XIV. Divers

DIM < une ou plusieurs variables >

Dimensionnement d'un ou de plusieurs tableaux. Le ou les tableaux spé-


cifié(s) peuvent contenir des entiers, des réels, ou des chaînes alphanu­
mériques selon l'indicateur accolé à leur nom comme suit :
% indique que le tableau ne pourra contenir que des entiers,
$ indique que le tableau pourra contenir des chaînes alphanumériques.
Par exemple :
DIM A%(50) déclare un tableau d'entiers de 50 valeurs,
DIM A(50) déclare un tableau de 50 valeurs qui pourra contenir des nom­
bres entiers ou réels.
DIM A$(50) déclare un tableau de 50 valeurs alphanumériques. Les
tableaux peuvent être multidimensionnés. Dans ce cas, chaque dimen­
sion sera indiquée dans la parenthèse, séparée des autres par une virgule.
Par exemple DIM VIR$( 10, 12, 4) déclare un tableau à trois dimensions
qui pourra contenir 10* 12^4 = 480 éléments alphanumériques. Cha­
que élément sera accédé par VIR$(x, y, z) où x< = 10, y< = 12, z< -4.

FOR < variable > = début TO fin [STEP<pas>]

Exécute une ou plusieurs commande(s) répartie(s) sur un ou plusieurs


numéro(s) de ligne entre le mot-clé « FOR » et le mot-clé « NEXT » n fois,
où n = INT((fin-début)/pas).

Remarque :
L'argument « pas » peut être positif ou négatif, du moment que l'expres­
sion ((fin-début)/pas) est positive.

IF < expression logique > THENcinstruction(s) 1> [ELSEcinstruc-


tion(s) 2>]

où « expression logique » est une entité qui doit être vraie ou fausse, par
exemple A = 5 ou MID$(A$, 6, 2)>"A", etc..
Locomotive BASIC : Définitions et rappels de base Partie 4 Chapitre 1.2 page 89

Partie 4 : Langages du CPC

« instruction(s) 1 » et « instruction(s) 2 » représentent un ou plusieurs


ordre(s) BASIC.
Si « expression logique » est vraie, « instruction(s) 1 » sera exécuté.
Si « expression logique » est fausse, « instruction(s) 2 » sera exécuté si
ELSE est présent. Sinon, aucune action ne se produira.

LET< variable > = < expression >

où « variable » est du type entier, réel ou chaîne


et « expression » est du même type que « variable ».
Affecte une expression à une variable.
Cet ordre peut être omis et, par exemple, A = 4 sera équivalent à
LET A = 4.

NEXT[<Une ou plusieurs variables >]

Marque la fin d'une boucle FOR. Si aucun nom de variable n'est déclaré,
la variable par défaut sera celle qui a été déclarée dans le dernier FOR
rencontré. Plusieurs variables peuvent être précisées. Dans ce cas, elles
doivent être séparées par des virgules.

WAIT< Adresse port>, < masque >[, < octet de sélection >]

Lit le contenu du port dont l'adresse est spécifiée. Soit A ce contenu.


L'ordre« WAIT «fait (A AND <masque>) XOR (< octet de sélection > )
et ne rend la main à l'interpréteur BASIC que lorsque le résultat est non nul.

Exemples :
Attente jusqu'à ce que le bit 4 du port &3000 soit < > 0 : WAIT &3000,4.
Attente jusqu'à ce que le bit 4 du port &3000 soit égal à 0 : Wait &3000,
4, 4.

WEND

Marque la fin d'une section d'instructions répétitives qui a débuté par


l'ordre WHILE.

WHILE< expression logique >

où « expression logique » est une entité qui doit être vraie ou fausse :
par exemple A = 5 ou MID$(A$, 6, 2)>"A", etc.
Répète une section d'instructions tant que « expression logique » est vraie.
Partie 4 Chapitre 1.2 page 90 Locomotive BASIC : Définitions et rappels de base

Partie 4 : Langages du CPC

Exemple : a
Répéter le calcul de la décomposition polynomiale — tant que le taux
d'erreur est supérieur à 0.001. n = i 2n

1000 X = O:N = 1:TE = 1


1010 WHILE TE>0.001
1020 X = X + N/(2AN)
1030 N=N+ 1
1040 TE = N/(2AN)
1050 WEND
1060 PRINT X;"a";TE;"pres."

WIDTH< nombre entier >

Donne le nombre maximum de caractères par ligne lors d'une sortie sur
imprimante. La valeur par défaut est 132.

WINDOW# <N° de canal>, ]<gauche>, <droite>, <haut>,


<bas>

Donne le numéro et la dimension de la fenêtre d'écran.


Par défaut, les paramètres <gauche>, <droite>, <haut> et<bas>
prennent les valeurs suivantes :
1, 20, 1, 25 en MODE 0
1, 40, 1, 25 en MODE 1
1, 80, 1, 25 en MODE 2
Le numéro de canal vaut #0 par défaut, et peut prendre une valeur com­
prise entre 0 et 7.

WINDOW SWAP<N° de canal>, <N° de canal>

Définit le numéro de fenêtre courante où vont s'afficher tous les messa­


ges du BASIC.
Par exemple, si vous voulez que ce soit la fenêtre 5, il faudra faire WIN­
DOW SWAP 0,5.

Vous aimerez peut-être aussi