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 : GFA Basic - gestion des disquettes (2)
(Article écrit par Pierre-Philippe Launay et extrait d'Amiga News - juin 1991)
|
|
Comme d'habitude, il y a bel et bien trois erreurs dans le bout de code suivant. Les deux premières ne
sont que de simples fautes de syntaxe que nous signalera aussitôt GFA. La troisième est plus subtile et
amène le plantage du système. Sauvez donc votre programme avant de le lancer.
Pour vous aider, je vous indique que cette troisième erreur se situe avant la ligne 13 (cliqueter le numéro
après "Test" dans la barre de menu puis écrire 13).
Voilà l'exemple qui différencie le GFA du BASIC. En GFA, on ne se sert plus des numéros de lignes. J'aurais
du dire "avant la boucle "REPEAT UNTIL"". En BASIC, on écrivait des numéros de lignes. En effet,
le format d'une ligne BASIC est :
N°:LONGUEUR:INSTRUCTION(S)...
10:21:PRINT "BONJOUR !":REM écriture
20:23:PRINT "AU REVOIR !":REM écriture
|
Dans ces jargons, la ligne est en réalité conçue comme un bloc d'instructions et le numéro est en fait
une étiquette nommant le bloc. Cela explique la possibilité d'écrire plusieurs instructions sur la même
ligne, l'obligation de stocker la longueur de ligne par l'interpréteur et la lenteur de ces langages.
En C, il n'y a plus de numéro de lignes mais les blocs sont délimités par () ou {}. En GFA, cela est
beaucoup plus simple. Ce sont les instructions qui obligent, de manière transparente à l'utilisateur,
à respecter une délimitation de bloc. Ainsi, il n'y a qu'une instruction par ligne en GFA comme en
C ou en assembleur.
Revenons au code. Je confirme vos soupçons. C'est le cinquième nombre qui est incorrect. Pourquoi ?
L'instruction "FILESELECT" serait-elle gravement boguée ? Certes, elle est boguée, mais ce n'est pas le
bogue qui est ici en cause. Voici la vraie vérité : "FILESELECT" est une fenêtre de dialogue, et comme
son homologue en assembleur, une boîte de dialogue dépend de l'écran en cours. Ici, sa hauteur est plus
grande que ne le permet notre écran. Remplacez le nombre de la hauteur par 200 et le programme semblera
fonctionner normalement. Quant au bogue, il est impossible à corriger sur d'autres machines que l'Amiga :
Franck, quand vas-tu donc nous libérer ce fameux Lock ?
Cet oubli nous vient de l'époque où notre génial Ostrowski n'avait pas encore assimilé la philosophie de
l'Amiga et sa manière de programmer proprement. C'était alors un jeune programmeur de PC puis d'Atari
plein d'avenir. La programmation sur Amiga étant réservé à l'élite, Franck n'osait pas encore s'attaquer
à notre machine et confia le cahier des charges à un collaborateur. Ainsi "FILESELECT"
se réserve 24 octets pour ses besoins internes grâce à la fonction "Lock" (fonction Open). Il
oublie de les libérer. Cela explique que l'icône GFA reste parfois après la fin de la session de
travail.
Bien. Remplacez par 0 le numéro 1 désignant l'écran sur la première ligne de code GFA, et supprimez la
ligne d'ouverture de fenêtre. Lancez. C'est la surprise. Cet écran est l'écran Workbench. Par contre,
les paramètres le décrivant non pas été pris en compte. Le programme se poursuit et GFA s'aperçoit que
nous voulons écrire du texte sans avoir défini de fenêtre d'écriture. Vous me ferez trois Ave et
lirez cinq Sourates et ça passera pour cette fois : GFA nous posera sa fenêtre plein écran.
En assembleur, crac.
Justement, me dites-vous, comment serait le code en assembleur. Facile, on utilise des structures C
comme on le fait déjà en GFA sans le savoir (GFA est écrit en assembleur mais utilise le Workbench
pensé en BCPL et C). Attention, l'assembleur est moins lisible et plus complexe. En macro, mettre :
Je vous avais prévenu que GFA est le meilleur langage de programmation. Je rassure cependant les débutants en
Devpac, on peut faire plus simple. On peut aussi créer une fonction qui ressemblera à s'y méprendre à la fonction
GFA OPENS.
|