Obligement - L'Amiga au maximum

Mardi 23 mai 2017 - 16:39  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

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


Trucs et astuces

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


Glossaire

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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Soutien

N'hésitez pas à soutenir le projet Obligement



Contact

David Brunet

Courriel

 


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 :

1> rexxmast

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.

ARexx

ARexx

ARexx

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).


[Retour en haut] / [Retour aux articles]