Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 25 270 930

  • Nb. de membres 187
  • Nb. d'articles 1 270
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» Petit cours de script AmigaOS 4 (afficher/extraire la version de multiples fichiers)

Petit cours de script AmigaOS 4 (afficher/extraire la version de multiples fichiers)#2694

1Contributeur(s)
Elwood
3 Modérateur(s)
K-LElwoodcorto
Elwood Elwoodicon_post
Vu que j'ai écrit ce script pour m'aider, je me suis dit que vous pourriez être intéressé.
C'est utile pour moi en tant que betatesteur mais vous pourriez être intéressé aussi si vous avez, comme moi, plusieurs configurations "kickstart" différentes.

Sur mon système j'ai :
- SYS:Kickstart : mes fichiers kickstart de tous les jours
- SYS:Kickstart/SAFE : mes fichiers kickstart que je garde précieusement et je mets très rarement à jour. C'est nu peu mon "mode sans échec" de Windows. :-)
- SYS:Kickstart/OS4-FE : les fichiers de Final Edition

En tant que betatesteur, les fichiers qui se trouvent dans Kickstart bougent au gré des mises à jour. Cela m'arrive assez souvent d'avoir besoin de comparer les fichiers de ce dossier et ceux qui ont été distribués avec Final Edition par exemple.
Pour l'instant je faisais un peu à la main, et avec (l'excellent) CompareDir . Mais c'était avant ! :-)

Voici un script qui permet d'afficher/extraire la version des fichiers dans un de ces dossiers.
Il vous suffit alors de comparer cette liste de versions avec la liste provenant d'un autre dossier analysé, pour comprendre quelles sont les différences entre les 2 dossiers.

Ce script peut être utilisé pour garder un "état instantané" des modules installés. Et quand vous en avez besoin, vous pouvez comparer vos modules actuels avec ceux qui avait été distribués un jour dans le passé.

J'ai placé ce script dans S:Shell/versionkmods (prendre le soin de mettre les bits d'attribut S et E).

J'ai mis plein de commentaires. En espérant que cela puisse vous aider un jour ou l'autre :-)

.key DIR,TO
.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


Exemples d'appels :
versionkmods : va afficher à l'écran les versions des fichiers dans SYS:Kickstart
versionkmods SYS:Kickstart/SAFE : va afficher à l'écran les versions des fichiers dans SYS:Kickstart/SAFE
versionkmods SYS:Kickstart/SAFE RAM:fichier : va remplir RAM:fichier avec les versions des fichiers dans SYS:Kickstart/SAFE
versionkmods TO=RAM:fichier : va remplir RAM:fichier avec les versions des fichiers dans SYS:Kickstart

A noter, dans ce dernier appel, je suis obligé de préciser le nom de l'argument TO car je n'ai pas d'argument DIR.
Le Shell prenant les arguments dans l'ordre, sans TO, il croirait que RAM:fichier est le dossier à analyser.

--
Philippe Ferrucci
Avec une Sam460 et AmigaOS 4.1, je suis eco-responsable. Cool !
 
Message édité par : Elwood / 18-05-2022 20:07
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme