Obligement - L'Amiga au maximum

Jeudi 27 juillet 2017 - 06:42  

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


Contact

David Brunet

Courriel

 


Programmation : Assembleur - commande NewMakeLink
(Article écrit par Lionel Guillang et extrait d'Amiga News - juin 1993)


Chose promise, chose due : après avoir vu comment résoudre les liens AmigaDOS (avec la commande ReadLink), voici de quoi en créer de tout poil...

Utilité publique

Si vous n'êtes pas encore convaincus de l'utilité et de la puissance des liens, c'est que vous n'avez peut-être pas bien saisi ce qu'ils sont et ce qu'ils permettent concrètement : pour un possesseur de disque dur, les liens sont au Shell ce qu'AmiDock est au Workbench. Pour les utilisateurs plus modestes, travaillant sur disquettes, il y a une application à mon avis très intéressante des liens : l'utilisateur type travaillant sur disquettes se sert en général peu du Workbench et donc beaucoup du Shell ; il démarre sur sa disquette système, sur laquelle se trouvent les programmes dont il se sert le plus.

Seulement voilà, 880 ko c'est vite rempli, et nombreux sont les programmes qui se trouvent sur d'autres disquettes ; et le problème c'est qu'il ne se souviendra pas toujours où se trouve tel ou tel programme, et il faudra qu'il joue du grille-pain et de la commande "dir" pour s'y retrouver.

Les liens symboliques peuvent supprimer cette perte de temps et l'énervement qu'elle engendre : au lieu de remplir la disquette système de programmes, il suffit de créer une sorte de catalogue de liens sur les programmes, en indiquant à chaque fois le nom du volume. Il n'y aura plus, par la suite, qu'à taper le nom du programme dans le Shell et l'AmigaDOS demandera gentiment d'insérer la disquette sur laquelle il se trouve en indiquant son nom. Sympathique, non ?

Si on considère, en plus, qu'on pourra indexer plus de 1000 programmes de cette façon sur une disquette dont le système n'occupe pas plus d'un tiers de la capacité, il n'y a vraiment pas besoin d'aller chercher plus loin d'autres arguments en faveur des liens.

Oui mais...

Malheureusement, les opérations du genre création de catalogue ne sont pas réalisables avec la commande MakeLink du Shell 2.0, parce qu'elles mettent en jeu des liens symboliques. Si vous ne l'aviez pas encore compris, la routine proposée aujourd'hui va permettre de combler cette lacune : il s'agit d'une commande de remplacement, NewMakeLink, à MakeLink. Elle est 100% compatible avec MakeLink et accepte donc les mêmes options avec en plus une option "SOFT" (symbolique).

La syntaxe de MakeLink est la suivante :

MakeLink [FROM] <nom du lien> [TO] <nom dest> [HARD] [FORCE]

Et celle de NewMakeLink :

NewMakeLink [FROM] <nom du lien> [TO] <nom dest> [SOFT] [FORCE]

La seule différence est le remplacement de l'option "HARD" qui ne servait à rien, par l'option "SOFT" qui, elle, sert à quelque chose. Je suppose que l'option "HARD" était là en prévision d'une amélioration future de la commande. Je l'ai malgré tout remplacée par l'option "SOFT" (inverse) pour établir une certaine logique par rapport à la fonction MakeLink() : donc, si elle est omise, le lien sera, par défaut, de type matériel.

La commutation "FORCE" est obligatoire lorsqu'on veut créer un lien sur un répertoire. Je l'ai conservé pour des raisons de compatibilité, bien que je n'aie pas vraiment compris la raison de son existence (si ce n'est peut-être qu'en cas d'erreur, la suppression d'un lien sur un répertoire est un peu plus délicate que celle d'un lien sur un fichier ?).

Il faut noter que MakeLink n'autorise pas les boucles (terminologie AmigaDOS). Cela signifie, en clair, qu'on ne peut pas créer de lien sur le répertoire dans lequel le lien lui-même se trouverait si l'opération était possible.

Comment ça marche ?

Pour ce qui est du fonctionnement de NewMakeLink, il n'y a rien de bien compliqué. La seule chose que l'on ait à faire est de préparer le terrain à la fonction MakeLink() qui se chargera de créer le lien. Cette fonction reçoit trois paramètres en entrée : succès = MakeLink (nom,dest,soft) D1 D2 D3.
  • nom : nom du lien à créer.
  • dest : pointeur sur chemin (lien symbolique) ou "lock" sur chemin (lien matériel).
  • soft : "TRUE" pour un lien symbolique et "FALSE" pour un lien matériel.
Elle retourne en D0 une valeur booléenne (succès) pour indiquer si l'opération a réussi ou non.

La préparation consiste donc à :
  • Récupérer les paramètres et options : ceci se fait facilement avec la fonction ReadArgs().

  • Tester la validité de la destination : on demande pour cela un "lock" sur celle-ci, que l'on pourra réutiliser ultérieurement si le lien est matériel.

  • Déterminer la nature de la destination : si c'est un fichier, on peut sauter directement à la création du lien. Sinon...

  • Tester et empêcher une éventuelle tentative de boucle : pour cela on remonte, à partir du nom du lien, jusqu'à la racine de l'arborescence en comparant le "lock" de chaque répertoire trouvé à celui de la destination, à l'aide de la fonction SameLock() : si les deux "locks" correspondent au même répertoire, il y a tentative de boucle et une erreur est signalée.

  • Tester la présence du mot-clé "FORCE" nécessaire à la création d'un lien sur un répertoire : s'il a été omis, signaler une erreur.
C'est tout ! Il ne reste plus qu'à appeler MakeLink() avec les paramètres appropriés et sortir proprement.

Avis !

Pour conclure et avant de clore le chapitre sur les liens, j'ajouterai trois petites choses :

Faites très attention lorsque vous détruisez un lien renvoyant à un répertoire : sous Shell, un "delete" se contentera d'éliminer le lien en question (ce qu'on lui demande, d'ailleurs), mais dans un programme du genre DiskMaster ou Directory Opus, c'est tout le répertoire physique qui passera à la trappe, en plus du lien ! Donc, pas de gestes précipités...

Les liens symboliques apparaissent, dans les répertoires, toujours comme des sous-répertoires, même s'ils renvoient à des fichiers : ceci vient de ce que le système utilise un code d'identification unique pour les liens symboliques (pour plus de détails, reportez-vous à cet article) ; seul le Workbench, par l'intermédiaire de la fonction "Information" du menu "Icônes", les visualise correctement.

Et la transition est toute faite pour terminer en vous signalant que vous pouvez, sans aucun problème, créer des icônes à vos liens, de quelque nature qu'ils soient.

Listing

Assembleur
Assembleur
Assembleur
Assembleur


[Retour en haut] / [Retour aux articles]