Bouton Extract pour Directory Opus et FileMaster
La plupart des utilisateurs de Directory Opus empilent maladroitement les boutons pour extraire chaque archive : un pour le zip, un pour le lha, un pour le lzx, un pour l'adf, etc.

Mais pourquoi ne pas créer un unique bouton "Extraire" comme sur les OS modernes ? Quand on extrait une archive, on a pas besoin de préciser son format : on extrait simplement tous les fichiers. Étant donné que les gestionnaires de fichiers permettent de lancer des scripts AmigaDOS ou Arexx, alors pourquoi ne pas l’implémenter ?
Je propose l'élégance et la simplicité d'un seul bouton Extract comme ci-dessous :

N'est-ce pas déjà prévu par défaut ?
Dans la configuration de base de Directory Opus 4, il existe un bouton Arc Ext. Ce bouton est relié à un obscur script USER1 qui extrait uniquement les archives lha, et ce script n'est pas facilement modifiable. Suite à un double-clic sur une archive, DOpus reconnait également quelques types de fichiers comme le lha et d’autres formats, bien obsolètes, comme le zoo, et les "Arc archives". Si je parvenais à ajouter la reconnaissance des zip et lzx, cela fonctionnerait au double-clic sur l'archive.
Mais je tiens à l'ergonomie de mon unique bouton Extract. De plus, je souhaite que mon script fonctionne avec d'autres gestionnaires de fichiers comme l'excellent FileMaster.
Recherche de minimalisme et d'ergonomie dans Directory Opus
Affichant une haute résolution non entrelacée, précisément 724 x 270 pixels avec l'overscan, j'ai décidé de réduire la zone des boutons de Directory Opus à deux rangées afin de garder le maximum de place pour l'affichage des fichiers. Beaucoup de boutons sont accessoires ou peuvent, par exemple, être remplacés par un simple bouton Multiview. C'est dans ce contexte minimaliste que m'est venue l'idée du bouton Extract.

La recherche du script parfait
Après avoir écumé des scripts trop complexes s'appuyant sur des fonctionnalités tierces sur Aminet, j'ai décidé de le coder moi-même, avec les commandes de base de l'AmigaDOS, de la façon la plus minimaliste possible, à l'aide de mon manuel DOS et de ChatGPT qui s'est révélé... assez approximatif concernant l'AmigaDOS. En effet, l'IA propose parfois des commandes qui n'existent pas, provenant de MS-DOS, ou en cas d'échec, m'oriente systématiquement vers Arexx. Mais Arexx est à utiliser quand AmigaDOS se révèle insuffisant, et je suis certain qu'AmigaDOS peut le faire. L'IA est pointue sur les langages utilisés par le plus grand nombre et beaucoup moins sur les langages "de niche". ChatGPT a néanmoins été un bon assistant et m'a suggéré quelques bonnes idées.
Les extracteurs utilisés
Pour que le script fonctionne, il faudra bien évidemment télécharger et installer dans le dossier C les extracteurs suivants :
Remarque : Sous AmigaOS 3.2, la commande DAControl peut monter un volume ADF dans le Workbench. Cependant, elle ne permet pas d'en extraire le contenu dans la destination indiquée par DOpus ou FileMaster. C'est la raison pour laquelle je préfère utiliser la commande UnADF. Notez également qu’il est impossible d’extraire les ADF non DOS.
Le script AmigaDOS
Stratégie N° 1 : lire le type de fichier dans l'entête
La difficulté avec AmigaDOS, c'est d'arriver à déterminer le type d'archive. J'ai d'abord essayé de lire les entêtes avec la commande SEARCH en recherchant, par exemple, l'expression "-lh" pour les lha. Cela fonctionnait, mais c'était très lent pour les archives volumineuses et je voulais que mon script tourne sur les petites config. J'ai ensuite essayé de copier les premiers octets de l'archive dans un fichier temporaire de la RAM pour y faire une recherche. Mais la commande TYPE copie la totalité du fichier, il est impossible d'en extraire un bout. Je n’ai donc pas réussi à extraire l’entête des fichiers avec toutes les commandes AmigaDOS. J'ai vu qu'il existait une commande Head dans Aminet qui permet d'extraire l'entête d'un fichier, mais je tiens à le faire avec les commandes de base d'AmigaDOS.
Stratégie N° 2 : lire l'extension de l'archive
Changement de stratégie : j'opte pour la lecture de l'extension de l'archive. Et pour extraire une extension, c'est plutôt Arexx qui sait faire avec la commande Parse. Au bout de quelques heures de tâtonnements, j'ai finalement trouvé une façon rapide de le faire en AmigaDOS :
- Je copie le nom de l'archive dans un fichier texte temporaire avec la commande ECHO.
- J'y recherche l'extension lha, zip ou lzx avec la commande SEARCH (insensible à la casse) qui laisse un 0 dans l'indicateur de condition si l'extension n'est pas trouvée, et un 5 (WARN) dans le cas contraire.
- Je lance la commande d'extraction appropriée grâce à l'instruction conditionnelle IF NOT WARN.
Même si le script est basique, je me suis bien trituré les méninges pour arriver à cette simplicité :
.key file/A
ECHO <file> >T:file_tmp
SEARCH T:file_tmp "lha" QUIET
IF NOT WARN
Lha x "<file>"
ENDIF
SEARCH T:file_tmp "zip" QUIET
IF NOT WARN
Unzip "<file>"
ENDIF
SEARCH T:file_tmp "lzx" QUIET
IF NOT WARN
Lzx x "<file>"
ENDIF
SEARCH T:file_tmp "adf" QUIET
IF NOT WARN
unadf "<file>" DEST=""
ENDIF
DELETE T:file_tmp QUIET
Le .key file/a est relié à la variable {f} dans Directory Opus et FileMaster. Il désigne le fichier à extraire, c'est à dire celui sur lequel l'utilisateur aura cliqué, et se manipule dans le script avec la balise <file>. L'expression NOT WARN ne fonctionne qu'avec le Workbench 2.0, c'est donc la version minimum requise par ce script.
Ajout du bouton Extract dans DirectoryOpus ou FileMaster
Après avoir enregistré le script sous le nom Extract dans le dossier S du Workbench, il faut ajouter un bouton Extract dans Directory Opus :

Il faudra cocher la fonction CD destination et je conseille vivement l'option Fenêtre de sortie pour contempler le déroulé de l'extraction.
Parce qu'il n'y a pas que Directory Opus dans la vie et qu'il y'a aussi FileMaster :



Conclusion
Je suis heureux d'avoir pris le temps de faire ce petit script et qui aurait dû être implémenté par défaut dans tous les gestionnaires de fichiers. J'espère qu'il sera utile à d'autres, et comme il est simple et compréhensible, chacun pourra y ajouter d'autres formats d'archives.
- Le script Extract est téléchargeable ici : Extract
- Ma config minimaliste pour Directory Opus 4 sous Workbench en haute résolution non entrelacée : DirectoryOpus.CFG