Suivez-nous sur X

|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : AmigaBasic - interception d'erreur et algorithme de simulation de système solaire
(Article écrit par Christian Sager et extrait d'Amiga News - novembre 1990)
|
|
J'aurais aimé continuer l'étude et la programmation d'algorithme
mais cela dépasse largement le stade d'initiation et n'a pratiquement plus rien à voir avec l'AmigaBasic.
Toutefois, je ne peux céder au
plaisir de vous présenter un algorithme de simulation du système solaire. Ci-après les données des différentes planètes.
D'après ma représentation, vous devriez pouvoir écrire ce programme dans n'importe quel langage.
Avant de poursuivre cette initiation, j'ai encore été empoisonné par un "Overflow Line Buffer" alors que
j'avais encore de la place ! (c'est un des bogues de l'AmigaBasic parmi d'autres). Pour y remédier,
je place mon curseur sur un espace que j'efface avec la touche "Back Space". Par contre, la petite boîte
"ok" annonce une erreur dans le programme et termine son exécution.
Je vais essayer de vous expliquer la possibilité d'intercepter l'erreur et par là mème de la rectifier
et parfois de pouvoir poursuivre le déroulement normal du programme. Une interruption fonctionne de
la même manière qu'un GOSUB. Ce n'est pas par un appel du programme que cela fonctionne mais lors d'une
action déterminée comme l'utilisation de la souris ou du menu. Pour simplifier la programmation,
les concepteurs de l'AmigaBasic vous permettent d'intercepter les messages d'erreur de l'interpréteur
mais aussi d'en définir d'autres. Pour cela, on utilise la commande :
Bon, nous avons intercepté l'erreur, mais quelle erreur ? Pour cela, il existe une variable prédéfinie ERR qui
contient le numéro de l'erreur car le BASIC attribue à chaque erreur un numéro (référez-vous à votre livre du
BASIC habituel). Remarquez que sur les 255 erreurs possibles, il n'y a que quelques-unes qui ont une explication.
Pour afficher ces dernières, on peut utiliser la commande : "ERROR numéro". L'exemple simple, c'est forcer
une "SYNTAX ERROR" en plaçant dans votre programme "ERROR 2". Attention, cela ne fonctionne que si vous avez
placé en début de programme la commande "ON ERROR GOTO Etiquette". Le programme avant de s'interrompre va sauter
à la routine. Dans cette dernière vous pouvez tester la valeur de la variable ERR qui aura bien la valeur 2
pour SYNTAX ERROR. Vous pouvez détourner cette erreur et éviter l'interruption de votre programme. Je l'utilise
en mettant une routine avec les principales erreurs accompagnées d'un texte qui explique ce qui arrive (voir exemple).
L'erreur est traitée tant que le programme ne rencontre pas la commande RESUME. Elle s'utilise de deux manières :
RESUME seul et le programme retourne à l'endroit qui a provoqué l'erreur et recommence la même chose. Vous pouvez
écrire RESUME Etiquette. ce qui obligera le BASIC à faire un saut à cette routine. Attention, cette dernière
possibilité est à utiliser avec discernement. Il n'y a que deux cas où cette possibilité se justifie : le
saut en fin de programme ou un NEXT à la place de l'Etiquette. Le premier choix est parlant de lui-même,
tandis que le second a pour effet de revenir à la ligne immédiatement après celle qui a provoqué l'erreur et
permet de poursuivre le programme.
Passons à un exemple pratique. Je vais ouvrir un fichier séquentiel, s'il n'existe pas je le crée, et
ajouter du texte puis refermer le fichier. Dans le déroulement du programme cela se présente ainsi :
J'active l'interruption d'erreur et j'ouvre le fichier à lire. Si d'aventure l'erreur 53 s'annonce c'est que
le fichier n'existe pas donc je l'ouvre, sinon j'affiche le fichier (voir tableau des messages d'erreurs dans
tout livre parlant de l'AmigaBasic). En programmation basic cela vous donne le listing suivant :
Avant de terminer ce traitement de l'erreur, je vous parlerais encore de la variable système ERL. Vous avez une
annonce d'erreur et c'est cette variable qui contient le numéro de la dernière ligne traitée. Dommage que
cette variable n'utilise pas d'étiquette, car dans l'AmigaBasic on peut ne pas utiliser de numéro de ligne.
Si si, c'est vrai ! Contrairement à l'affirmation d'un éminent confrère de "Joystick" (remarquez que j'ai
encore d'autres lectures...), magazine de jeux sur micro et consoles qui dans sa rubrique de "Jeux... Crack AMIGA"
annonce invariablement depuis son numéro 1 mensuel (janvier 1990) à celui de septembre (je recopie exactement le
texte) :
"Il y a évidemment différents (!) BASIC, le GFA Basic et l'AmigaBasic qui est, lui, fournit avec votre Amiga.
Le GFA Basic ne nécessite pas de numéro devant chaque ligne et chaque instruction est sur une ligne.
L'AmigaBasic nécessite des numéros de lignes et il est possible de mettre plusieurs instructions sur la même
ligne en les séparant avec le signe ":" ". J'ai bien envie d'être caustique... vaut mieux les laisser jouer !
L'interruption "event trapping" est, comme l'indique l'expression américaine, une trappe. Dès
qu'un événement déterminé par le programme survient, l'Amiga arrête tout immédiatement afin de traiter
l'erreur puis revient et poursuit le programme. Je vous ai donc déjà parlé de deux formes d'interruptions :
le traitement d'erreur et précédemment ranimation graphique et ses collisions. Une autre possibilité
c'est le test d'appui sur un bouton de souris et son déplacement dans un menu. Vous savez déjà que les
deux boutons de la souris ont des fonctions différentes. Le bouton de droite sert au choix dans un "Pull
Down menu" (menu déroulant) tandis qu'avec l'autre vous sélectionnez les icônes ou gadgets. Cette différence
est notée dans l'AmigaBasic par :
ON MOUSE GOSUB Etiquette
ON MENU GOSUB Etiquette
|
Je vais vous expliquer la commande pour la souris. Si vous activez le bouton gauche de la souris, vous utilisez
la fonction MOUSE(n). Selon la valeur de "n", vous connaîtrez le statut de votre souris. La valeur la plus
importante est MOUSE(0). Le BASIC retient les coordonnées du point de départ et d'arrivée de la souris. Pour
simplifier, les valeurs impairs sont pour les coordonnées de "x" et les pairs pour celles de "y".
Rien ne vaut l'expérience. Je vous propose donc un petit exemple :
Tapez ce programme puis bougez votre souris sans actionner de bouton, et toutes les autres possibilités
(lire Clés pour Amiga page 70-71 pour l'instruction MOUSE).
Dans l'exemple suivant, je rajoute le timer, autre interruption. A vous d'expérimenter les réactions de ce petit programme.
Ce programme s'arrête après 20 secondes si la souris n'a pas été utilisé. Ceci se fait en fin de programme avec
le sous programme "Montre".
Le bouton de droite a l'exclusivité des menus. Vous devez indiquer à l'interpréteur le nombre de menus (maximum 10) et
de sous-menus (maximum 19). Ces sous-menus (items) ne peuvent pas avoir de sous-items (dans l'état actuel de nos
connaissances, mais je vous montrerais plus tard comment contourner cela grâce aux bibliothèques).
Je vous propose un programme de menu que vous pourrez adapter comme vous le voulez, sans pour autant nécessiter une
réécriture des titres des différents menus. C'est un cadeau d'A-News... Les explications suivront (c'est évidemment
pour le prochain numéro si j'oublie pas !).
Voilà, avec tout ça vous pouvez voyager dans notre système solaire sans avoir à apprendre des langues étrangères
comme le C.
|