J'ai mis plein de commentaires. En espérant que cela puisse vous aider un jour ou l'autre :-)
.bra {
.ket }
; ce script peut être appelé avec zéro, un ou deux arguments.
; Syntaxe : versionkmods [DIR] [TO]
;
; DIR est utilisé pour donner le nom d'un dossier (contenant des fichiers kmods) à analyser
; TO est utilisé pour écrire le résultat dans un fichier texte plutôt qu'à l'écran.
; En effet, du fait du fonctionnement du shell AmigaOS, on ne pourra pas envoyer le résultat de ce script dans un fichier comme on le ferait sur un Unix avec "Versionkmods >Ram:fichier"
; on efface chaque variable qu'on va utiliser lors de cette exécution pour éviter d'utiliser à tort des données qui avait été utilisées par un précédent appel à ce même script
UNSET mydir tofile tmpscript
; On met dans la variable "mydir" le contenu de l'argument DIR passé au script. C'est le dossier (contenant des fichiers kmods) à analyser
SET mydir {DIR}
; On met dans la variable "tofile" le nom du fichier devant contenir le résultat de l'exécution du script.
SET tofile {TO}
; Nom d'un fichier temporaire dont on va avoir besoin plus tard
SET tmpscript T:versionkmods.sh
; Si les fichiers existent, on les supprime. Pas obligatoire dans tous les cas, mais c'est une bonne pratique de le faire.
IF EXISTS $tmpscript
delete $tmpscript
ENDIF
IF EXISTS $tofile
delete $tofile
ENDIF
; Si "mydir" est vide (donc le script a été appelé sans argument DIR), on utilise alors le dossier SYS:Kickstart
IF NOT SET mydir
SET mydir SYS:Kickstart
ENDIF
; Je veux afficher une sorte d'entête pour afficher le nom du dossier qu'on traite avant l'exécution de la commande List.
; Après cette ligne-entête, je veux afficher une ligne vide.
; Comme je vais utiliser la même commande dans le IF ci-dessous, je la met dans une variable. ça me permet de ne pas avoir à taper 2 fois la même commande et donc d'être sûr de ne pas avoir fait d'erreur entre les deux saisies.
SET mycmd1 Echo "Versions in $mydir"
SET mycmd2 Echo ""
IF SET tofile
$mycmd1 >>$tofile
$mycmd2 >>$tofile
ELSE
$mycmd1
$mycmd2
ENDIF
; La commande List va lire tous les fichiers contenus dans le dossier $mydir, en excluant certains fichiers que je ne veux pas traiter (je ne veux pas chercher de version dans ces fichiers).
; Lors de cette lecture, List va trier et traiter les fichiers dans leur ordre alphabétique grâce à "sort name"
; Pour chaque fichier trouvé, List va écrire "version file ". Ce texte sera écrit dans $tmpscript
; Si on veut le résultat dans un fichier $tofile, alors on va écrire chaque résultat dans ce fichier
; Sinon, on l'affiche à l'écran.
IF SET tofile
LIST files $mydir/~(#?kick#?|loader|BootDevice|diskboot.config) sort name LFORMAT "version file $mydir/%N >>$tofile" TO $tmpscript
ELSE
LIST files $mydir/~(#?kick#?|loader|BootDevice|diskboot.config) sort name LFORMAT "version file $mydir/%N" TO $tmpscript
ENDIF
; Il ne reste plus qu'à exécuter $tmpscript qui va traiter toutes les lignes générées.
Execute $tmpscript
Delete $tmpscript