Suivez-nous sur X

|
|
|
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,
ALL
|
|
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
|
|
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
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
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 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
|