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 : ARexx - aide à la compilation en C (avec Lattice C 5.0 et TxEd)
(Article écrit par Cédric Beust et extrait d'A-News (Amiga News) - janvier 1990)
|
|
Après le quelque peu théorique (qui a dit nébuleux ?) article de la dernière fois,
nous allons à présent passer à un exemple un peu plus parlant. Les lecteurs étant rois, choisissez
vous-même le domaine de cette application. Voyons... Oui ? Une aide à la compilation en C ?
C'est une bonne idée. Et l'éditeur ? TxEd Plus ? Mmmmhhh d'accord. C'est vous qui décidez.
Introduction
Comme toute bonne recette, définissons clairement les ingrédients dont nous aurons besoin.
- ARexx, évidemment. Peu importe la version (du moins je crois).
- Lattice C v5.0.
- TxEd Plus. Si vous avez TxEd et que vous ne savez pas s'il s'agit de la version "Plus",
celle-ci possède dans les menus une fonction "Cmd Line" (que l'on obtient par la combinaison de touches
"Amiga+5").
Fixons-nous un but, maintenant : pouvoir appeler par une simple touche de fonction la compilation du
fichier en mémoire et en cas d'erreur, circuler parmi celles-ci à l'aide de deux autres touches,
le libellé de l'erreur s'affichant dans le titre de la fenêtre. Non, vous ne rêvez pas ! Tout ceci
est possible, grâce à ARexx.
J'entends déjà s'élever des concerts de protestation de la part de ceux d'entre vous qui n'ont pas
la version 5.0 du compilateur sus-cité... Eh bien s'ils avaient regardé plus en détail leur disquette
de TxEd Plus, ils se seraient rendu compte qu'il existe déjà un utilitaire écrit dans ce but (il est
même meilleur que celui que je vous propose, mais j'ai un quota de papier à respecter, alors...).
Celui-ci ne marchera qu'avec la version 4.0 car celle-ci identifie les erreurs
différemment (et moins lisiblement) que la version 5.0.
Mise en oeuvre
Si vous avez lu le précédent article sans avoir envie d'avaler votre A-News avec du ketchup, vous savez
probablement déjà tout ce que je vais vous raconter dans ce chapitre. Mais un rappel n'est sans doute
pas inutile. Avant tout, il faut rendre ARexx résident à l'aide de la commande :
Puis décider de l'endroit où vous allez placer vos listings ARexx et y faire l'assignation suivante :
1> assign rexx: <votre répertoire>
|
...ceci afin qu'ARexx sache où il doit aller chercher vos petits chefs-d'oeuvre. Enfin, pour que TxEd
reconnaisse ses ouailles parmi tous les programmes que vous ne manquerez pas d'écrire pour d'autres utilitaires
prestigieux tels CygnusEd, QEd, Cpr, etc. il est impératif que ceux-ci aient le suffixe ".txed".
Comme la plupart des logiciels interfacés avec ARexx, TxEd Plus utilise le système de la ligne de commande
pour exécuter les macros que vous avez écrites, c'est-à-dire qu'il vous suffit d'invoquer
"Cmd Line" dans le menu (ou avec la touche "Help") et d'y entrer le nom de votre programme (sans
le suffixe ".txed"). Rassurez-vous, il existe un moyen d'assigner certains programmes à des touches,
mais je laisse ce petit point pour le dénouement.
Quelques explications
Maintenant, entrons dans les détails. Tout se réglera en l'espace de trois courts programmes :
- c2.txed : le programme principal. Il lance la compilation et définit les touches pour se balader parmi
les erreurs.
- next_error.txed : appelé par la touche "8" du pavé numérique, saute à la prochaine erreur et l'inscrit
dans le titre de la fenêtre.
- previous_error.txed : pareil que le précédent, sauf que c'est l'inverse (touche "7" du pavé numérique).
Le principe est simple : c2 exécute la commande du Shell qui lance la compilation tout en redirigeant le
résultat dans un fichier appelé "1stfile'. Puis next_error et previous_error analysent ce fichier en
décortiquant les lignes indiquant les erreurs afin de récupérer la ligne, la colonne et le nom de l'erreur.
A ce propos, une remarque : à des fins de lisibilité, le Lattice 5.0 a pris la décision (façon de parler,
disons qu'on l'a prise pour lui...) d'indiquer la position de l'erreur en marquant le caractère incriminé
en inverse (le 4.0 le signalait avec un "A" à la ligne suivante, ce qui prenait deux fois plus de lignes
et induisait parfois en erreur). Pour récupérer la colonne, on doit savoir que pour passer en inverse,
il faut envoyer une séquence spéciale de caractères. Celle-ci étant aux normes ANSI, elle commence par
un 0x9b. Il suffit donc de rechercher ce caractère dans la ligne pour connaître la colonne. CQFD.
Autre aspect important à souligner : l'utilisation de la ClipList pour garder en mémoire le numéro de l'erreur
sur laquelle on se trouve en ce moment. De manière générale, il est souvent nécessaire quand on utilise ARexx
de lancer des programmes séparément. Comment dans ce cas pourraient-ils communiquer des variables ?
La réponse, c'est la ClipList (il est fort ce William Hawes !). Il s'agit de paires (un peu comme les paires
pointées de Lisp) définissant des noms et leur valeur, celle-ci pouvant être numérique aussi bien qu'alphanumérique.
Dans la programmation, on agit sur cette ClipList avec les deux instructions :
- SETCLIP (nom, <valeur>).
- GETCLIP (nom).
Il est également possible de fixer une valeur directement à partir du Shell avec la commande "rxset".
Le mode d'action des deux chercheurs d'erreur devient alors très simple : ils retirent tout d'abord le numéro
de l'erreur courante, comptent les erreurs jusqu'à arriver à celle qui est juste derrière (ou juste devant
pour previous_error) et réactualisent la valeur de l'erreur courante en la récrivant dans la ClipList. Simple et efficace.
Comment ça marche ?
Une fois que vous aurez tapé ces trois listings, vous aurez immédiatement la possibilité de lancer une compilation
(chargez un fichier C au préalable !). Il vous suffit d'appuyer sur "Help", puis de taper "c2".
Bon, très bien, me direz-vous (ou vous ne me le direz pas, dans ce cas c'est moi qui le dis) mais tout ça n'est
pas vraiment pratique. Vous ne nous avez pas promis un raccourci clavier au début ? C'est une TBQ
(une très bonne question), mais n'oublie pas de baisser les yeux quand tu me parles et de m'appeler
Maître (on se tutoie, hein ?). Très bien, je vais te révéler comment procéder. Tu
n'as qu'à créer un fichier startup.txed que tu placeras dans le répertoire "rexx:" et qui contiendra par exemple :
/* Exemple de startup.txed */
MACRO 9 c2
MSG "Tapez F9 pour compiler"
|
Ce fichier sera exécuté à chaque fois que tu chargereas TxEd (petite remarque au passage : il ne faut pas le nommer
"TxEd" mais "e"). Transcendant, non ?
Améliorations possibles
Ainsi que je l'ai déjà dit, c'est un exemple très simple mais mettant bien en évidence quelques aspects
importants de l'interfaçage d'ARexx avec d'autres programmes. Vous aurez sûrement noté que c2
ne fait pas vraiment de compilation totale : il se contente d'appeler lc1. Rien de plus simple que de l'adapter
pour qu'il appelle également lc2 et blink. Et, pourquoi pas le faire marcher également sous Manx.
A vous de jouer
Bon, j'espère que désormais je n'aurai plus besoin de vous menacer avec mon bazooka
pour que vous assistiez au cours (au fait, personne ne vendrait quelques missiles ?
J'ai dû surveiller une permanence et le coup est parti tout seul).
|