Obligement - L'Amiga au maximum

Vendredi 06 juin 2025 - 12:21  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

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

Articles in English


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


En pratique : Utilisation de DME
(Article écrit par François Gueugnon et extrait d'Amiga News Tech - juin 1992)


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 :
  • -ffile : permet d'ouvrir DME avec un fichier autre que ".edrc" ; on peut donc disposer d'une batterie de fichiers d'ouverture, chacun correspondant au type de travail ou de langage que l'on utilisera.
  • -b : lorsque des fichiers multiples sont ouverts à l'invocation, DME les ouvre normalement dans de petites fenêtres. "-b" impose de les ouvrir avec des fenêtres de taille normale.
  • -tN : ouvre la fenêtre à la ligne N (ligne de balayage écran).
  • -lN : ouvre la fenêtre à la colonne N (pixel largeur).
  • -wN : ouvre une fenêtre de N pixels en largeur.
  • -hN : ouvre une fenêtre de N pixels en hauteur.
Les arguments peuvent être placés dans n'importe quel ordre, pourvu qu'ils aient chacun leur tiret et qu'ils soient séparés par au moins un espace. Exemple :

DME -t63 -h145 -w80 -156

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

DME -t63 -h145 -w80 -156 -frexinit texte

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

DME texte -t63 -h145 -w80 -156 -frexinit -fautreinit texte2 -t50 -h125 -w110 -172

...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 :
  • Bouton gauche : place le curseur à l'endroit pointé.
  • Bouton droit : iconifie la fenêtre... C'est déroutant au début, l'habitude des menus déroulants étant très forte.
  • Bouton gauche appuyé pendant le déplacement de la souris : entraîne le curseur sous le pointeur de la souris.
En plus des assignations nombreuses, multiples et variables, on trouve un jeu impressionnant de commandes simples, puisqu'il dépasse le cap des 120. Les associations vont devenir rapidement considérables et leur choix pas facile.

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 :
  • Écrire dans la startup-sequence la ligne "Mount NULL:".
  • Insérer la définition de NULL: dans la liste de montage MountList.
  • Insérer le Null-Handler.
On trouvera la définition du Null-Handler dans le fichier Devs/MountList de la disquette Fish. On l'ajoutera donc à la suite du fichier DEVS:MountList du système. On trouvera de même le Null-Handler dans le répertoire L de la disquette et on le copiera dans le répertoire L: du système. Taper ensuite depuis le Shell "Mount NULL:".

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.
  • Les macros ARexx doivent être nommées de la même façon que la chaîne de commande d'invocation.
  • Les macros ARexx utilisées pour DME doivent avoir ".DME" comme extension de fichier, par exemple : nommacro.DME.
  • Elles doivent résider soit dans le répertoire courant, soit dans le répertoire Rexx:.
Deux méthodes sont possibles pour invoquer une macro DME :
  • Depuis la ligne de commande de DME (accessible par la touche "Esc"). L'invocation peut être soit explicite, soit implicite (voir plus bas).
  • Par les touches du clavier. Une macro (avec un nombre quelconque d'arguments) peut être réassignée à une touche, comme n'importe quelle commande DME.
L'invocation d'une macro depuis la ligne de commande de DME peut être implicite : taper alors simplement le nom de la macro, suivi de ses arguments. La chaîne de commande est passée telle quelle à l'interpréteur ARexx, les majuscules, minuscules, ponctuations, etc. étant respecté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 :
  • "rx nommacro" s'il n'y a pas d'arguments à passer à la macro.
  • "rx1 nommacro arg" s'il n'y en a qu'un seul.
  • "rx2 nommacro arg1 arg2" s'il y en a seulement deux.
Pour les macros à plus de deux arguments, on utilise indifféremment rx1 ou rx2, en entourant l'ensemble des arguments avec des délimiteurs, par exemple :

rx1 nommacro.DME (arg1 arg2 arg3 arg4 arg5)
rx2 nommacro.DME (arg1 arg2) 'arg3 arg4 arg5'

Une macro args.DME est fournie pour expérimenter le mécanisme. Elle est constituée de la façon suivante :

PARSE SOURCE a b c d e f g h i
SAY a b c d e f g h i
PARSE ARG a1 a2 a3 a4 a5 a6
SAY a1 a2 a3 a4 a5 a6
EXIT 0

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 :
  • Les macros peuvent contenir des commandes DME ou d'autres noms de macros. Il n'y a pas pour l'instant de test de profondeur (d'imbrication) pas plus d'ailleurs que de test d'appels circulaires (A appelle B, puis B appelle A). Si l'on crée une telle horreur on obtiendra très probablement ce que l'on mérite ! Ce n'est pas du LISP (Lots of Insipid and Stupid Parenthesis).

  • Il semble qu'il y ait un problème dans le transfert ou l'appel d'arguments dans les macros imbriquées. Qu'on se rassure, Matt le gourou est en train d'investiguer.

  • Il faut bien se rappeler qu'ARexx capitalise les arguments et qu'il considère un espace comme un séparateur. Ainsi donc, pour exécuter par exemple "FIND toto" où "toto" est un argument, il faut que toto soit encadré par des délimiteurs pour être interprété comme tel, sinon il y aura essai d'exécution de FIND puis de toto (qui, selon toute probabilité, s'y refusera énergiquement avec peut-être de douloureuses conséquences).
Première macro

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 :

PARSE ARG A 
ADDRESS COMMAND A 

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.

MAP nomtouche commande/nommacro

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.


[Retour en haut] / [Retour aux articles] [Article suivant]