Obligement - L'Amiga au maximum

Jeudi 29 juin 2017 - 16:22  

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

 


En pratique : AmigaOS 3.x - créer des fichiers scripts
(Article écrit par Laurent Camarassa et extrait d'Amiga News - juin 1994)


Nous allons montrer dans cet article comment utiliser le CLI et surtout les scripts, qui, comme vous allez le voir, permettent de réaliser des petits programmes intéressants où l'utilisateur peut intervenir.

Un script élaboré

Le TP de ce mois-ci consiste en deux scripts, séparés pour des raisons techniques. Les voici :

;--- Choice.script par Laurent Camarassa
Setenv Q Non
Echo "Skip " Noline >T:Temp.script

RequestChoice "Menu Principal" "Choisissez parmi ces options :"
"Éditer un fichier|Lancer un programme|Quitter" >> T:Temp.script

;--- Attention la ligne précédente est longue, il n'y a pas de retour à la ligne !

Join >NIL: T:Temp.script Scripts:Principal.script To T:Temp2.script
Execute >NIL: T:Temp2.scrip
Delete >NIL: T:Temp2.script
Delete >NIL: T:Temp.script
If $Q EQ "Oui"
RequestChoice "Quitter..." "Au revoir !" "Bye|Salut|Ciao" >NIL:
Unsetenv Q
Skip End
Endif
Execute Scripts:Choice.script
LAB End

;--- Principal.script par Laurent Camarassa
Lab 1 ; option choisie : Éditer un fichier
Echo "Ed " Noline >T: TempEdit.script

RequestFile TITLE "Éditer un fichier..." DRAWER "Documents:" PATTERN "#?.txt" >> T:TempEdit.script
Execute >NIL: T:TempEdit.script
Delete >NIL: T:TempEdit.script
Skip TheEnd : fin de l'option 1

Lab 2 ; option choisie : Executer un programme

RequestFile TITLE "Lancer un programme..." DRAWER "C:" >T:TempRun.script
Execute >NIL: T:TempRun.script
Delete >NIL: T:TempRun.script
Skip TheEnd : fin de l'option 2

Lab 0 ; option choisie : Quitter

Setenv Q Oui
Lab TheEnd

Avant de les expliquer, je vous précise comment les installer : créez un répertoire, là où vous voulez. Tapez ces deux scripts et sauvez-les dans ce répertoire. Il vous suffit ensuite de faire :

assign scripts: Chemin_Complet_Du_Répertoire

...et vous êtes prêts à travailler. Notez bien que les scripts nécessiteront tout au plus une petite modification pour spécifier quel éditeur de texte vous voulez appeler (moi j'appelle Ed, il est livré avec le Workbench, donc tout le monde devrait l'avoir).

Examinons tout d'abord "Choice.script". La commande "SETENV Q Non" sert à affecter les variables d'environnement.

Les variables

Le système peut gérer des variables, c'est-à-dire des "cases" contenant une chaîne de caractères ou un nombre et dont on peut retrouver le contenu à l'aide d'un nom (=nom de la variable). L'utilisation est simple, mais elle permet de créer des scripts complexes.

Il y a deux sortes de variables : les variables locales, propres au Shell (CLI) dans lequel elles ont été déclarées. Ces variables sont connues de ce Shell et de tous les Shells lancés à partir de celui-ci. Pour les utiliser, il y a trois commandes (Set, Get et Unset) : "Set" permet d'affecter une valeur à une variable, "Get" affiche la valeur de cette variable, et "Unset" retire cette variable de la mémoire.

Il y a également les variables globales. Celles-ci sont accessibles par n'importe quel Shell à partir du moment où elles sont déclarées. Comme on peut lancer plusieurs Shells en multitâche, les variables globales peuvent être utilisées pour faire communiquer des scripts entre eux. Les commandes pour les gérer sont presque les mêmes : Setenv, Getenv et Unsetenv.

Quel que soit le type d'une variable (locale ou globale), on peut les utiliser dans un script grâce au signe "$". En effet, si la variable "NOM" confient "Laurent" :

echo "Bonjour "$NOM

...affichera en fait :

Bonjour Laurent

Ce remplacement est valable pour n'importe quelle commande, le script se comporte exactement comme si on avait tapé directement le contenu de la variable au lieu de son nom.

Dans notre script, on utilise la variable "Q" pour savoir si l'utilisateur a choisi de quitter, auquel cas "Q" contient "Oui", ce qui est testé et permet de sortir du script.

La redirection de fichiers

La deuxième ligne du script "Choice.script" est :

echo "Skip " NOLINE >T:Temp.script

Il y a beaucoup de choses à remarquer dans cette ligne. Tout d'abord, le "NOLINE" est un paramètre optionnel de la commande "echo" qui lui demande de ne pas aller à la ligne après avoir affiché le texte spécifié. Dans notre exemple, le texte est redirigé vers le fichier T:Temp.script.

L'élément essentiel de la redirection est le chevron (">" ou "<"). On a le choix entre les deux selon ce que l'on désire faire. Chaque fois que le système rencontre un chevron dans une commande, il redirige soit les entrées (chevron "<") soit les sorties (chevron ">") de la commande à partir ou vers un fichier. On peut rediriger à la fois les entrées et les sorties.

De plus, ce qu'on appelle un fichier peut être pratiquement n'importe quoi (car les fichiers sont gérés par des "handlers", mais les fenêtres du CLI aussi, etc. et les handlers sont très bien faits sur Amiga), c'est pourquoi on peut ouvrir une fenêtre avec le titre, la taille et les paramètres que l'on veut.

Il faut pour cela utilisé le périphérique CON: qui peut être paramétré lorsqu'on y fait appel de cette manière :

Commande >"CON:Coord X/Coord Y/Taille X/Taille Y/Titre/Close (optionnel)/Wait (optionnel)"
  • "Coord X" est la coordonnée X du coin en haut à gauche.
  • "Coord Y" est la coordonnée Y.
  • "Taille X" et "Taille Y" sont les tailles selon, X et Y.
  • "Titre" est une chaîne de caractères.
  • "Close" est une option demandant la présence d'un gadget de fermeture.
  • "Wait" est une option demandant à la fenêtre de ne pas se fermer à moins qu'on appuie sur le gadget de fermeture.
L'utilisation des redirections en entrée est pratiquement aussi simple : si le fichier "T:Reponse" contient "y" par exemple :

Ask "Quelle réponse ?" <T:Reponse

...n'attendra pas une entrée au clavier (qui est l'entrée standard, tout comme la fenêtre courante est la sortie standard) mais ira chercher la réponse dans le fichier "T:Réponse" (et agira comme si on avait tapé "y").

Il y a plusieurs autres périphériques d'E/S (entrée/sortie) :
  • PAR: représente le port parallèle : on peut y envoyer des caratères (ou des fichiers avec la redirection) et lire ceux qui y arrivent.
  • SER: est comme PAR: mais pour le port série.
  • PRT: représente l'imprimante, quelle que soit la façon dont elle est connectée à l'ordinateur.
Ainsi, il est possible d'imprimer un fichier en faisant simplement :

Type Nom_Du_Fichier >PRT:

Ou bien :

Copy Nom_Du_Fichier to PRT:

Copy est une commande qui par définition utilise la redirection des E/S, c'est pour cela qu'on n'utilise pas les chevrons ; en fait, ils sont implicites dans ce cas-là. Il y a d'autres périphériques, mais il faudrait expliquer leur mise en oeuvre et c'est un peu long. Revenons à notre script.

Un script interactif

La deuxième ligne, en fait, écrit "Skip " dans un fichier situé dans T: (c'est un répertoire dans RAM:, jouant le rôle de répertoire temporaire, qui est assigné automatiquement) sans aller à la ligne.

La commande "RequestChoice" retourne le numéro du gadget cliqué (Cf. paragraphe "RequestFile & RequestChoice") dans le même fichier. Mais pourquoi est-ce qu'il y a deux chevrons (>>) ? En fait, si il n'y en avait qu'un le fichier aurait été effacé. Lors de l'utilisation d'un chevron, le fichier reste ouvert durant l'utilisation de la commande, puis il est refermé. Si on y accède à l'aide d'un chevron par la suite, il est ouvert d'une façon qui vide son contenu. Par contre, si on l'ouvre grâce à deux chevrons, on se place à la fin du fichier et on continue à écrire dedans sans modifier ce qu'il y avait avant.

La commande "RequestChoice" retourne donc soit 1, 2 ou 0 selon le bouton que l'on a choisi. Elle met ce résultat dans T:Temp.script, qui contient alors : Skip 1 (ou 2 ou 0).

Puis on tombe sur la commande "Join". Elle sert à coller un fichier à la suite d'un autre dans un troisième. Concrètement, on va lire T:Temp.script, le mettre dans T:Temp2.script, continuer à lire dans "Scripts:Principal.script" et continuer à écrire dans T:Temp2.script. C'est exactement comme si on avait inséré en première ligne de "Principal.script" la ligne "Skip 1" (ou 2 ou 0).

Comme vous le constatez, il y a des LAB dans "Principal.script". Leur urilisation est simple : on écrit à un endroit "LAB Label", et dès que l'on tombe sur un "Skip Label", l'exécution du script continue à la ligne qui suit le "LAB Label". C'est comme un GOTO en BASIC. C'est ce principe que j'ai utilisé dans le script : comme RequestChoice retourne soit 1 soit 2 soit 0, grâce au Skip, on saute à une partie du script que l'on veut exécuter en fonction du gadget choisi. Ainsi, après le LAB 1 se trouvent les commandes servant à éditer un fichier, après le LAB 2 celles qui permettent de lancer un programme, et après LAB 0 la commande qui met "Oui" dans la variable "Q".

Notez que le Skip peut avancer mais aussi reculer (en faisant "Skip Label BACK"). J'ai d'ailleurs voulu l'utiliser dans Choice.script pour revenir au début, mais ça ne fonctionnait pas. C'est curieux car dans un script plus simple (style "LAB Label -*- Echo "Coucou" -*- Skip Label BACK") ça fonctionne. Peut-être que mon script est trop compliqué...

Cela peut paraître un peu "tordu" comme façon de faire, mais cela présente l'avantage d'utiliser exclusivement les capacités du système d'exploitation de l'Amiga et quelques commandes livrées es standard avec l'AmigaDOS. Ainsi tout le monde peut le faire puisqu'il ne faut aucun logiciel particulier et aucune connaissance d'un langage de programmation.

Choice.script lance le script qu'on a créé (execute T:Temp2.script), puis l'efface ainsi que le fichier temporaire T:Temp.script. Enfin, on teste si "Q" contient "Oui", auquel cas on affiche un RequestChoice pour dire "Au revoir !" mais dont la sortie est envoyée sur NIL:.

"NIL:" est un périphérique particulier : tout ce qu'on lui envoie disparaît comme par magie. Cela permet d'exécuter des commandes de façon silencieuse (utile dans le startup-sequence ; si une commande affiche quelque chose avant que l'on ait lancé IPrefs, une fenêtre apparaît et c'est assez disgracieux. Jetez un coup d'oeil sur votre fichier S:Startup-Sequence).

Puis on efface la variable de la mémoire (Unsetenv Q) et on quitte le programme (Skip End).

Si "Q" contient toujours "Non", on exécute à nouveau Choice.script. Cela n'est pas très propre, mais comme je vous l'ai dit, je n'ai pas réussi à faire fonctionner correctement l'option "BACK" de la commande Skip.

Le script principal

Examinons-le maintenant. La majeure partie des commandes a déjà été exploitée dans Choice.script, et vous n'aurez pas de mal à les comprendre. On utilise RequestFile (Cf. paragraphe "RequestFile & RequestChoice") qui retourne un fichier au lien d'un numéro de gadget. Si vous voulez changer l'éditeur, il suffit de remplacer "Ed " par "Nom_Editeur " (avec le chemin complet. En effet, Ed est dans le "path", mais votre éditeur ne l'est pas forcément).

Pour ajouter des options, c'est simple, vous savez que RequestChoice retourne un chiffre (0 pour le dernier gadget, attention) selon le bouton sur lequel vous aurez cliqué. Il faut donc :

1. Modifier Choice.script pour adapter les paramètres de RequestChoice en fonction des options que vous voulez ajouter.

2. Mettre à jour Principal.script et ajouter un LAB suivi du numéro du gadget correspondant ainsi que de toutes les commandes que vous voulez lancer le cas échéant. N'oubliez pas le "Skip TheEnd" pour ne pas exécuter les commandes qui suivent.

C'est tout ! Cela n'est pas si compliqué. Cependant, il est tout à fait possible de proposer à nouveau un choix dans Principal.script, en utilisant RequestChoice, et ainsi de suite... Mais si vous voulez gérer tous vos utilitaires de cette manière, je vous conseille fortement d'utiliser ToolManager par exemple. Car les scripts c'est bien, mais c'est long à mettre au point, surtout si l'on veut faire des choses très complexes.

RequestFile & RequestChoice

Ces deux commandes font partie des nouveautés du système 3.0. Elles permettent à l'utilisateur d'utiliser Intuition sans programmer. Leur utilisation est décrite dans le manuel de l'AmigaDOS, mais comme beaucoup d'A1200 sont livrés sans les manuels, voici leur principe (je vous rappelle que sous système 3.0, la majeure partie des commandes comprend une aide en ligne, essayez de tapez dans un Shell "RequestFile ?" ou "RequestChoice ?").

RequestChoice TITRE CORPS BOUTON1|BOUTON2|...|BOUTONn
  • "Titre" est une chaîne de caractères qui sera le titre de la fenêtre.
  • "Corps" est le texte qui sera écrit dans la fenêtre.
  • "Bouton1" est le texte de chacun des boutons.
  • Chaque bouton est séparé par la barre verticale (|).
Cette commmande retourne dans la sortie standard le numéro du bouton cliqué ("1" pour le premier, "2" pour le deuxième, etc. et "0" pour le dernier).

Astuce : on peut utiliser cette commande pour simplement informer l'utilisateur que quelque chose s'est produit :

;--- Feuilleton.script v2.0
Wait UNTIL 18h00
RequestChoice Alarme "C'est l'heure du feuilleton !" Ok >NIL:

Syntaxe : RequestFile DRAWER Répertoire FILE Fichier PATTERN Sélection TITLE Titre, etc. "Répertoire" est le répertoire dans lequel on se positionne lors de la requête de fichier. "Sélection" peut être sous la forme de jokers ("#?.txt" par exemple) et spécifie les fichiers qui doivent être affichés.

Ces deux commandes comprennent d'autres paramètres un peu plus "pointus".

Conclusion

Le système d'exploitation de l'Amiga permet à n'importe qui, même débutant, d'utiliser les fenêtres, les requêtes, etc. C'est remarquable car sur d'autres standards, il faut le programmer, ce qui est loin d'être simple.


[Retour en haut] / [Retour aux articles]