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 : Amiga E - le clipboard.device
(Article écrit par Pierre Girard et extrait d'Amiga News - octobre 1996)
|
|
Ce mois-ci, je vous propose d'étudier un élément très utile du système Amiga, surtout si vous décidez de programmer un traitement
de texte : le clipboard.device. Vous savez, le copier-coller de CygnusEd ou de Final Writer qui vous permet d'économiser des
heures de mise en page. Eh oui, vous aussi vous pouvez le faire.
Coupez !
Le clipboard.device a deux utilisations principales : tout d'abord, couper ou copier un morceau de document pour l'insérer
ailleurs (sous un éditeur quelconque). Mais le plus utile, à mon avis, est la communication entre les différentes tâches.
Prenons un exemple concret : vous éditez un document sous CygnusEd et il vous faut récupérer un paragraphe de celui-ci sous
Final Writer. C'est facile ! On copie ou coupe sous CED, on passe sous Final Writer et on colle. Cela ne marche, bien sûr, que
si le logiciel utilise le clipboard.device et n'utilise pas un "clipboard" (presse-papiers) à usage "interne" (par exemple
l'éditeur de fichier Zaphod propose les deux options). Ce qui est vrai pour le texte l'est aussi pour les autres données.
Ainsi, suivant le logiciel, il vous est possible d'utiliser le presse-papiers pour stocker des graphiques, des sons, etc.
en fait un peu n'importe quoi, tant qu'il s'agit d'un fichier IFF.
Comment qu'on fait ?
La programmation des périphériques logiques m'a toujours parue difficile et pourtant, quand on a vu un exemple, cela paraît tout de suite plus
simple. Avant de commencer le travail sérieux, il faut préparer le terrain. En effet, les périphériques logiques ont besoin, comme toutes les
tâches qui ont pour vocation de communiquer, d'un port de message (ici, il s'appelle message - comme c'est original !). Nous
utilisons à cet effet une instruction qui porte bien son nom, CreateMsgPort(). Mais cela ne suffit pas. Il convient aussi de
définir une structure IORequest qui contiendra les informations utiles au périphérique logique. Maintenant, ouvrons le périphérique logique, comme on ouvre
une bibliothèque. On utilise pour cela l'instruction OpenDevice(nom, unité, iorequest, drapeaux). Bon, tout est prêt.
Le traitement
Tout d'abord, il faut s'occuper de déterminer la longueur des données à transférer. Nous utilisons deux variables pour stocker la
longueur du texte brut (slen) et la longueur totale des données, c'est-à-dire avec l'en-tête IFF (length). Si la longueur du
texte est impaire, nous lui ajoutons 1. L'en-tête IFF a une description précise qui se décompose en longs-mots. En premier, on
trouve le signe de reconnaissance des fichiers IFF, c'est-à-dire FORM. Ensuite, vient la longueur totale du fichier, c'est-à-dire
la longueur du texte + celle de l'en-tête (slen+12). On trouve après deux longs-mots qui sont FTXT et CHRS ce qui signifie que
nous écrivons un fichier texte IFF qui ne comprend que des caractères. Tout ces longs-mots sont envoyés au presse-papiers grâce
à la procédure putlong() qui transmet un long au presse-papiers. Revenons maintenant un peu en arrière, car j'ai oublié de vous
dire qu'il faut initialiser les valeurs de décalage ("offset"), erreur ("error") et clipid.
Il ne reste plus qu'à envoyer les données au clipboard.device. Pour cela, il nous faut d'abord remplir la structure IORequest
avec ior.data qui pointe sur text et ior.length sur slen. Vient le moment de déterminer l'action à accomplir définie dans
ior.command (ici, CMD_WRITE). Un petit DoIO(ior) et c'est parti. A ce moment-là, si tout va bien, votre argument est déjà copié
dans le presse-papiers. Cependant, il faut ajouter un octet vide si la longueur est impaire, et surtout signaler au clipboard.device
que l'on a fini d'écrire (CMD_UPDATE).
Que dire de plus ?
Sinon que la gestion des autres périphériques logiques se fait à peu près de la même manière. Il est à noter que certains périphériques logiques utilisent
uniquement les fonctions d'exec comme DoIO() ou AbortIO() et tout se passe donc dans la structure IORequest. D'autres, par
contre, ont leurs propres fonctions comme le timer.device avec CmpTime() ou encore SubTime(). Voilà, il ne vous
reste plus qu'à vous pencher sur le trackdisk.device pour réaliser des superbes trackdémos. Bye.
|