|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Gourou de l'Amiga aux côtés de R. J. Mical (auteur d'Intuition), de Rob Peck et de John Draper, tous trois fins "C"istes, on retrouve Matt Dillon tout au long de la réputée collection de Fred Fish, dans laquelle il apparaît dès la quatorzième disquette, en février 1986. Bel exemple de fidélité ! D'abord, il édite des Shell bien connus du monde C. Puis Shell devient CSH, et enfin il "sort" un éditeur. La version que nous proposons d'étudier et d'utiliser est disponible sur la disquette Fish numéro 530, bien qu'elle apparaisse sur d'autres disquettes Fish précédentes. C'est la version 1.42 du 22 août 1990. Tout ce qui est nécessaire est dans la disquette, mais ce n'est pas parce que Matt Dillon à tout mis qu'il ne reste rien à faire ! Deux documentations sont incluses : DME.doc (dix-huit pages environ) et ARexxmac.doc (cinq pages environ), plus de nombreux exemples qui, joints à ceux de la disquette ARexx, forment un bel ensemble de travail. Le code source de l'éditeur est présent, compacté par LHarc. Cependant, un avertissement de Matt Dillon lui-même précise que la version n'est peut-être pas encore compilable par Aztec ou Lattice (SAS), avis aux amateurs ! Le code source peut aussi être demandé directement à Matt Dillon qui ne refusera pas une donation bien que, selon ses dires, il ne soit pas un artiste affamé ! L'éditeur Il s'agit donc d'un éditeur pouvant servir à n'importe qui. N'importe qui ? Cela ne semble pas être l'avis de Matt Dillon qui précise et assure (sic) : "DME a été étudié pour permettre une facile extension et j'ai l'intention de réaliser beaucoup d'améliorations futures. Il n'a pas été étudié pour la facilité d'emploi par l'utilisateur, mais il y est tout prêt si vous le lisez complètement et avec attention" (essai de traduction du jeu de mots (care)fully). La première caractéristique qu'il convient de maîtriser est la capacité de DME à être personnalisé. Cela peut être réalisé grâce à un fichier nommé ".edrc", qui contient vos préférences à la mise en application et est placé dans la startup-sequence. Il en existe un ou deux préconfiguré(s), mais vous pouvez inventer le vôtre ou encore accepter les fonctions par défaut. D'abord, DME accepte à l'invocation un nombre quelconque d'arguments. Un argument se distingue d'un fichier par la présence d'un tiret devant et accolé à lui. "wN" serait compris comme un fichier alors que "-wN" ouvre une fenêtre large de N pixels... Voici à titre indicatif les différents paramètres possibles :
...ouvre une fenêtre à la position (63,56), de hauteur 145 lignes et de largeur 80 pixels. Lorsqu'une valeur manque, la fenêtre est ouverte avec les valeurs par défaut. Enfin, pour invoquer un texte à charger dans l'éditeur, il suffit de l'écrire avant ou après les paramètres d'ouverture. Exemple :
...ouvrirait une fenêtre aux caractéristiques dimensionnelles vues plus haut, avec un fichier d'initialisation pour d'autres caractéristiques nommé "rexinit" et qui placerait le fichier "texte" dans la fenêtre ainsi ouverte et sous l'environnement défini dans "rexinit". Jusqu'à présent rien de très original, sinon une bonne versatilité. Mais voyons la suite :
...ouvre deux fenêtres, la première comme la précédente, et une autre de dimensions différentes avec une autre initialisation et un autre fichier ! Nous avions dit plus haut que DME acceptait un nombre quelconque d'arguments, voilà très exactement ce que cela veut dire. On pourrait imaginer quatre fenêtres simultanées avec des fonctions différentes, ce qui est déjà moins commun. Et ce n'est que le début ! Dans les fichiers d'initialisation (dont ".edrc" est un exemple), on peut préciser plusieurs kilooctets de spécifications, dont certaines sont plutôt étonnantes voire inattendues. Le "mapping" (réassignation) Sous cette appellation se cache un monde de spécifications diverses. Nous ne pourrons sans doute pas expliciter toutes les possibilités, à cause de leur nombre pour les cas simples mais aussi parce que les combinaisons entre elles sont possibles de façon plus ou moins complexes à la demande. Dans DME, la réassignation signifie qu'à peu près (pour laisser la place à une improbable éventualité) toutes les touches, boutons de la souris compris, peuvent être programmées de façon à avoir une action prédéfinie et décrite justement dans le fichier d'initialisation. Pour la souris, le programme accepte trois (oui, 3 !) boutons, pour peu qu'elle soit correctement installée. Pour ceux que la tâche rebuterait au début, une réassignation par défaut est fourni qui ne comporte pas moins de soixante et une définitions, et dans lequel toutes les valeurs ASCII imprimables sont assignées correctement, à savoir Backspace, Delete, Haut, Bas, Droite, Gauche, Tabulation, Shift-Tab et Enter. Certaines combinaisons, bien que possibles, ne sont pas recommandées parce qu'Intuition les utilise pour dupliquer les commandes de sélection de la souris. Réassignation de la souris On a vu que la souris n'échappait pas à la règle de réassignation de l'usage. Les fonctions par défaut sont les suivantes :
Et ARexx dans tout cela ? Sans doute une sensation de faiblesse ou d'impuissance de Matt Dillon, qui ouvre son DME au domaine de la macro, fichier de commande considérablement plus puissant que tout ce que nous venons d'effleurer. L'association ARexx-DME produit un éditeur de texte dépassant tout ce que l'on connaît aujourd'hui, mais qu'il reste à pacifier tant dans le frontal pour le rendre ergonomique, que dans l'exploitation pour trouver la mieux adaptée à chaque style. Installation Il est nécessaire de procéder à une petite installation avant d'exploiter DME. Pour que la commande Execute fonctionne, il faut installer le périphérique logique NULL:. Il y a plusieurs opérations à effectuer :
Le lancement s'effectuera à partir du Shell afin de voir certains résultats, en particulier lorsqu'il y a une instruction SAY dans la macro. Notons en passant que le répertoire principal doit être celui où se trouve DME car les commandes et appels aux macros sont invoqués par DME sans chemin d'accès. Enfin, on gardera (au moins pour quelque temps) les définitions par défaut de la réassignation des touches de façon à parler un langage commun. Il va sans dire que tout l'ensemble fonctionne sous ARexx. Emploi des macros L'idée de base consiste à donner la possibilité d'utiliser des "macros" (petits programmes réalisés par l'utilisateur) à l'intérieur d'un programme prévu à cet effet et comportant un potentiel de commandes. Habituellement, ces commandes sont accessibles par le programme uniquement selon une ergonomie immuable prévue par l'auteur. Ici, l'utilisation des macros donne un champ illimité de possibilités au gré de l'utilisateur. Pour que l'association DME/ARexx fonctionne le plus harmonieusement possible, quelques règles élémentaires doivent être observées.
Dans le cas où le nom de la macro coïncide avec celui d'une commande DME, il faut utiliser la forme explicite, soit :
Une macro args.DME est fournie pour expérimenter le mécanisme. Elle est constituée de la façon suivante :
L'instruction "PARSE SOURCE" fournit un résultat qui dépend du système. On y trouve dans l'ordre : le nom de la commande ou fonction, un terme indiquant si le demandeur attend un résultat, le nom (chemin compris) du programme, l'extension de recherche par défaut et l'adresse de l'hôte pour les commandes. Cette instruction n'est pas utile ici, sauf pour savoir ce qui s'est passé. La deuxième instruction "PARSE ARG" retrouve les arguments envoyés lors de l'invocation de args.DME. Expérience Lancer DME depuis le Shell. On doit voir apparaître une fenêtre dans la ligne de titre de laquelle on peut suivre tout ce qui se passe. Arranger la taille de cette fenêtre en hauteur, de façon à laisser apparaître un peu de la fenêtre Shell. En pressant la touche "Esc", on voit apparaître une ligne de commande dans le bas de la fenêtre DME. Taper alors dans cette ligne la forme explicite sans arguments, soit "rx args" (ou "rx args .DME"). Admirez le résultat ! Taper maintenant "rx1 args TOto tiTI" (en respectant les majuscules et minuscules) et constater l'existence d'une seconde ligne listant les arguments. Attention : le traitement des erreurs n'est pas encore ce qu'il devrait être. Patience, la régularisation viendra avec de prochaines versions. Les règles suivantes ont aussi de l'intérêt :
Il est temps d'écrire notre première macro. Le moment d'émotion passé, on choisit quelque chose qui ne soit pas trop compliqué. Notre choix s'est finement porté sur l'exécution d'une commande Shell quelconque. Voici donc le texte de cette macro :
La commande ARexx "ADDRESS COMMAND" intime l'ordre de réaliser une commande Shell à partir d'un programme ARexx. On sauve cette macro sous le nom de COM.DME dans le répertoire contenant DME, comme il a été exposé plus haut. On ouvre ensuite une fenêtre Shell à partir de laquelle on se place dans le répertoire contenant DME et sa future kyrielle de macros. Ensuite, après avoir appelé DME et tapé "Esc", on tape la commande en mode implicite, soit, pour avoir un répertoire, "COM dir DF0:". Si tout a été bien installé, le répertoire s'affiche. On essaye ensuite en mode explicite : "rx COM dir df0:". Mais là, déception ! On vous l'avait bien dit, rx ne passe pas d'arguments. Puisqu'il y en a deux, on doit utiliser rx2, ce qui donne "rx2 COM dir DF0:". Ouf, ça fonctionne. Encore un essai, avec cette fois rx1, soit "rx1 COM dir DF0:". Cette fois-ci, il se passe quelque chose, mais ce n'est pas ce que l'on veut : d'abord le répertoire qui s'affiche n'est pas le bon (après vérification, c'est le répertoire principal, celui de DME), puis le disque DF0: s'allume quelques instants... Pour le répertoire, rien de plus normal : rx1 ne prend qu'un seul argument (le premier) ; c'est donc ici le terme dir qui déclenche normalement la lecture du répertoire courant. Quant au démarrage du lecteur, il est également normal, car à cause de la capitalisation propre à ARexx, il y a lancement de la seconde commande (ici, DF0:). Le Shell essaie alors d'accéder au lecteur, avant de s'apercevoir qu'aucun nom de commande ne lui a été transmis. On dispose donc d'une macro qui, en deux lignes, permet d'accéder aux commandes Shell. A toutes ? Non, mais à une grande majorité. On peut par exemple lancer un autre programme tel qu'un tableur, un logiciel de dessin, etc. Mais il en est au moins une qui n'est pas efficace, c'est la commande de changement de répertoire, CD. Si l'on tape "rx2 cos cd DF1:" (alors que DME se trouve par exemple en DH0:), il ne se passe rien de visible. Mais si l'on tape ensuite "rx1 COM dir" (qui devrait donc afficher le contenu du nouveau répertoire courant), c'est toujours l'ancien répertoire courant, celui de DME, qui est affiché. Dans une certaine mesure, c'est compréhensible, mais il n'y a pas d'explication lumineuse à ce sujet (NDLR : si, si... C'est le répertoire courant du Shell qui a changé, pas celui de DME). Réassignation des touches "on-line" La réassignation des touches est normalement effectuée à l'initialisation grâce aux informations contenues dans le fichier .EDRC, à moins que l'on n'utilise la réassignation par défaut. C'est la méthode standard pour retrouver une configuration identique à chaque utilisation. Mais DME nous réserve malgré tout quelques surprises. La réassignation "on-line" en est une. La définition d'une touche peut être effectuée à partir de la ligne de commande de DME. On peut donc associer à chaque instant une commande à une touche. La syntaxe est facile, il suffit d'écrire dans la ligne de commande de DME.
Où "nomtouche" correspond à la séquence de touches, "commande" à l'une des nombreuses commandes de DME et "nommacro" à la macro désirée éventuellement accompagnée des arguments associés. Nous avons essayé diverses formes pour la macro COM.DME. Pour les passer en réassignation sur la touche F1, par exemple, on pratique de la manière suivante : dans la ligne de commande de DME, on tape "MAP F1 (com dir df1:)". Par la suite, l'appui sur la touche F1 produira la lecture du répertoire DF1:. Attention : la réassignation d'une lettre du clavier est tout à fait possible et il ne faut en principe pas l'utiliser puisque cela limite alors l'emploi normal du clavier. L'utilisation d'un qualificateur (Ctrl, Shift ou Alt) est indispensable dans la majorité des cas. Pour revenir en arrière en cas de changement, la commande "UNMAP touche" permet soit de retrouver la réassignation originale soit une réassignation neutre. Pour essayer, on peut réassigner la touche X de façon à ce qu'elle écrive "turlututu" chaque fois qu'elle est frappée. Première séquence, taper dans la ligne de commande "MAP x ((turlututu))". Par la suite, à chaque fois que l'on tapera X, la chaîne turlututu s'affichera sous le curseur. Cette méthode est géniale pour la mise en place de mots réservés du genre "D0, STRUCTURE" et tout le vocabulaire des différents langages. Pour revenir à une valeur plus habituelle de la touche X, on tape dans la ligne de commande "UNMAP X", et le clavier retrouve son usage normal. Et ce n'est pas tout ! On peut en emboîtant les réassignations, faire en sorte que la réassignation ne soit pas immédiate. "MAP F1 (MAP F1 ((tagada))" agit de la façon suivante : au premier appui sur F1, la touche se reconfigure pour qu'au deuxième appui (et les suivants), elle provoque l'apparition de "tagada" sous la position courante du curseur. On peut envisager des combinaisons à l'infini.
|