Obligement - L'Amiga au maximum

Dimanche 24 juin 2018 - 16:33  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · 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
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


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 - Les structures d'écran et de fenêtre
(Article écrit par Max et extrait d'Amiga News Tech - avril 1989)


Nous allons voir de plus près comment sont construites les structures d'écran et de fenêtre, nécessaires à toute ouverture d'un quelconque de ces éléments.

Structures ?

Avant tout, deux petites précisions : premièrement, une structure n'est rien d'autre qu'un bloc de paramètres en mémoire (le nom vient du langage C, où les structures sont couramment employées). Et deuxièmement, ne confondez pas "structure Screen" et "structure NewScreen". La seconde est la structure dont vous allez effectivement passer l'adresse à Intuition pour l'ouverture d'un nouvel écran, la première étant la structure qu'Intuition s'est bâtie elle-même pour gérer votre écran. La remarque est également valable pour les structures Window et NewWindow.

Une structure d'écran (NewScreen) se compose de 32 octets, arrangés comme suit :

Assembleur

Voyons maintenant tout cela de plus près. Les deux premiers mots indiquent la position en X et en Y du nouvel écran, relativement au coin supérieur gauche de l'affichage (bref, le moniteur). Seule la position en Y a ici une importance, un écran ne pouvant être que "monté" ou "descendu" (à l'aide de la souris ou par programme). La position en X n'a été implémentée par les concepteurs de l'Amiga, que dans un souci de compatibilité avec d'éventuelles futures versions du système.

Les deux mots suivants indiquent respectivement la largeur et la hauteur de l'écran. Il faut ensuite définir le nombre de couleurs que notre écran sera capable d'afficher, ce qui revient à définir un certain nombre de plans de bits. Plus ce nombre est élevé, plus le nombre de couleurs représentables simultanément l'est aussi. La relation est la suivante : nombre de couleurs = 2 puissance nombre de plans de bits. Le nombre maximum prévu par Intuition est de 5, ce qui permet d'afficher 32 couleurs.

Les octets "Detail Pen" et "Block Pen" indiquent respectivement le numéro du registre de couleur à employer pour dessiner la ligne de titre et les gadgets, ainsi que la couleur d'écriture et le numéro du registre de couleur, à employer pour les gadgets sélectionnés et le fond du texte. Le mot appelé "View Modes" sert à définir le mode de représentation de l'écran. Voici la signification et le nom des différents bits utiles de ce mot lorsqu'ils sont positionnés :

Assembleur

Les autres bits devraient, pour bien faire, être mis à 0 dans la structure, Intuition se chargeant tout seul comme un grand de les positionner à sa guise.

Le mot "Screen Type" qui vient par la suite, définit le type de l'écran. Apparemment, personne ne sait exactement à quoi il sert, mais une valeur standard de 15 fonctionne toujours.

Et on arrive aux quatre derniers mots longs qui compose cette structure NewScreen. Avec en tête du peloton, "Font", qui détermine l'adresse de la police à utiliser dans le nouvel écran. Il suffit pour cela de définir une structure "TxtAttr" décrivant la nouvelle police et de placer ici son adresse. Comment ? Vous préférez la police Topaz par défaut ? Pas de problème, il suffit de mettre ce mot long à 0. Facile, non ?

"Default Title" est l'adresse du titre de l'écran (par exemple, le titre de l'écran du Workbench est "Workbench Screen"). Si vous ne voulez pas de titre particulier, indiquez 0.

"Gadgets" doit pour l'instant, dans l'état actuel d'Intuition, être fixé sur 0. Il sera peut-être utilisé plus tard...

Et finalement "Bitmap" désigne l'adresse d'une Bitmap personnelle, si le drapeau "CUSTOMBITMAP" du mot "Type" est fixé. Comme ce n'est apparemment jamais le cas, autant le mettre à 0 (c'est même impératif).

Voilà, notre structure NewScreen est complète. On transmet son adresse à Intuition via la fonction OpenScreen et le tour est joué, notre écran est ouvert. En retour, Intuition renvoie un "handle" d'écran, c'est-à-dire un gestionnaire, qui sera utilisé lors de chaque accès à notre écran. Ce "handle" est en fait un pointeur sur une structure Screen. Elle est composée de quelque 342 octets, aussi vous ne m'en voudrez pas de la passer sous silence. D'autant plus qu'elle est entièrement détaillée dans pas mal de bouquins et notamment dans "Le livre du Graphisme" chez Micro-Application.

Ouvre un peu la fenêtre

L'opération est quasi-identique pour ouvrir une fenêtre : passage de l'adresse de la structure NewWindow à Intuition, appel de la fonction OpenWindow et sauvegarde du handle retourné. Voyons de plus près la structure de la structure (excusez-moi pour les répétitions, mais bon, on fait ce qu'on peut...) NewWindow. Elle est composée de 48 octets :

Assembleur

Et c'est reparti pour l'étude de détail. Les quatre premiers mots parlent d'eux-mêmes, il s'agit de la position et de la taille de la fenêtre lors de son ouverture. On trouve ensuite les deux octets, Detail Pen et Block Pen qui se comportent de la même manière que dans la structure NewScreen. Les drapeaux IDCMP (Intuition Direct Communication Message Ports) méritent plus d'attention. Il s'agit d'un mot long, destiné à demander à Intuition, de prévenir le programme "père" de la fenêtre, des divers évènements qui peuvent survenir. Seuls les vingt premiers bits ont une signification. Voici les valeurs possibles :

Assembleur

Ces valeurs sont, bien entendu, cumulables (vos esprits acerbes auront remarqué que certaines valeurs ne sont pas décrites... C'est tout simplement parce que - je l'avoue - j'en ignore la signification intrinsèque... Mon méat coule pas, comme dirait un copain à moi).

Le mot suivant définit encore des drapeaux (flags), mais qui caractérisent la fenêtre :

Assembleur
Assembleur

Là encore, les valeurs peuvent être cumulées, et là encore, je ne connais pas la signification de certaines valeurs. Veuillez pardonner mes excuses. Le mot long "FirstGadget" permet de placer ses gadgets personnels dans la fenêtre ; il s'agit donc d'un pointeur sur la structure de ces gadgets. Si aucun gadget particulier n'est utilisé, il faut le mettre à 0.

Le mot long "CheckMark" est un pointeur sur une structure graphique, permettant de représenter les points de menus sélectionnés. Si l'on met 0, c'est le crochet stantard qui est utilisé. WindowTitle pointe sur le titre la fenêtre en mémoire, Screen est le pointeur sur la structure Screen de l'écran auquel la fenêtre appartient (vous savez, le "handle" renvoyé par OpenScreen) et Bitmap sert de pointeur sur une bitmap personnelle le cas échéant (Cf. la structure NewScreen). Les quatre mots suivants indiquent les tailles minimales et maximales de la fenêtre en pixels et le dernier mot indique le type d'écran auquel appartient notre nouvelle fenêtre (encore une fois, Cf. NewScreen).

Stooooop !

Voilà, ça n'a pas été sans mal, mais le plus dur est fait. Le mois prochain, nous verrons comment réagir aux différents messages qu'Intuition peut envoyer à un programme, ce qui sera l'occasion de devinez quoi ? Un listing, oui.


[Retour en haut] / [Retour aux articles] [Article suivant]