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 : AmigaBasic - programmation des bibliothèques système
(Article écrit par Workbinch et extrait d'A-News (Amiga News) - mai 1989)
|
|
Suite à vos demandes insistantes, j'abandonne mes habituels délires pour ouvrir dès ce mois un dossier sur l'accès aux
fonctions des bibliothèques en BASIC. La première des bibliothèques étudiées sera Intuition. Sans vous en rendre compte
peut-être, vous l'utilisez chaque jour en ouvrant écrans, fenêtres, en utilisant les gadgets, Preferences, et même le
gourou !
Ouverture d'écran en BASIC
Comme vous le savez sans doute, il existe en BASIC deux instructions fort intéressantes pour ouvrir les écrans et les fenêtres.
Hélas, bon nombre de paramètres leurs sont inaccessibles. Par exemple, comment ouvrir un écran HAM en BASIC, et comment faire
disparaître le bord de la fenêtre ? Réponse : Intuition bien-sûr !
La bibliothèque Intuition contient deux routines que nous allons voir dans ce numéro : "OpenScreen" et "OpenWindow".
Tout d'abord, j'allais oublier, pour ouvrir la bibliothèque Intuition, tapez :
LIBRARY "intuition library"
|
Les deux commandes citées plus haut doivent être déclarées comme fonction, c'est-à-dire qu'elles renverront une valeur lors
de leur appel sous la forme : valeur=instruction(paramètres). Pour déclarer une routine comme fonction, on utilise tout bêtement
l'instruction :
DECLARE FUNCTION nom_de_routine& LIBRARY
|
Dans le cas des commandes "OpenScreen" et "OpenWindow", celles-ci renverront le pointeur sur la structure de la fenêtre ou
de l'écran.
Venons-en enfin aux paramètres : ces deux instructions attendent comme unique valeur l'adresse de début de la structure contenant
les caractéristiques de la fenêtre ou de l'écran à ouvrir. Nous allons maintenant étudier en détail ces structures. Elles
devront hélas être mises en place grâce à un "pokage" acharné mais enfin... Sachez aussi que pour décrire la structure, j'utiliserai
les mots "COURT" et "LONG" pour désigner si l'élément est codé sur deux ou quatre octets.
La structure NewScreen pour ouvrir un écran
COURT BordGauche,BordHaut,Largeur,Hauteur,Profondeur
COURT Couleur_écriture,Couleur_bloc,Mode,Type
LONG Pointeur_font,Pointeur_titre,Pointeur_Gadget,Bitmap
|
"BordGauche" et "BordHaut" correspondent aux coordonnées du coin supérieur gauche de l'écran. La profondeur est le
nombre de plans de bits, "n" plans de bits ^2 = "n" couleurs.
Le mode est à choisir parmi les suivants par additions :
- DUALPLAYFIELD : &H400, si vous désirez disposer de champs de jeu.
- HIRES : &H8000, si vous désirez la haute résolution.
- INTERLACE : &H4, pour un affichage entrelacé.
- HAM : &H800, pour le mode Hold And Modify.
- SPRITES : &H4000, pour utiliser des sprites.
- EXTRA_HALFBRIGHT : &H80, si vous voulez le mode Half Brite (demi teintes).
Le type sera le plus souvent "CUSTOMSCREEN : &HF", quant à tous les pointeurs, ils ne nous intéressent pas pour
l'instant, fixez-les à 0.
La structure NewWindow, pour les fenêtres
COURT BordGauche,BordHaut,Largeur,Hauteur
COURT Couleur_écriture,Couleur_bloc
LONG IDCMP,Flags,Pointeur_gadget,Pointeur_image,Pointeur_titre
LONG Pointeur_écran,Bitmap
COURT LargeurMin,HauteurMin,LargeurMax,HauteurMax
COURT Type
|
Les deux premières lignes sont semblables à la structure "NewScreen". Le drapeau "IDCMP" n'intéresse absolument pas le programmeur
BASIC, donc passons. Les drapeaux contiennent les caractéristiques de la fenêtre, encore une fois par addition :
- WINDOWSIZING : &H1, pour modifier la taille.
- WINDOWDRAG : &H2 pour déplacer la fenêtre.
- WINDOWDEPTH : &H4 pour le gadget avant/arrière.
- WINDOWCLOSE : &H8 pour la fermeture.
- BACKDROP : &H100 pour que votre fenêtre soit derrière toutes les autres.
- GIMMEZEROZERO : &H400 pour séparer les gadgets de la surface graphique.
- BORDERLESS : &H800 pour éliminer les bords de la fenêtre.
Cette liste est incomplète faute de place... Encore une fois fixez tous les pointeurs à 0 (sauf "Screen" mais nous en parlerons
à la fin), les derniers paramètres parlent d'eux-mêmes. Enfin, "Type" sera encore une fois "CUSTOMSCREEN : &HF".
En pratique
Maintenant toute cette belle théorie mise en place, comment agir en pratique me direz-vous ? Nous y venons...
Tout d'abord, il faut réserver de la mémoire pour stocker les paramètres cités plus haut. On utilisera ici la méthode des
tableaux de type entier. Comptez un pour chaque élément "COURT", deux pour les éléments "LONG", faites la somme et vous obtenez
32 pour l'écran et 48 pour la fenêtre. Ajoutez deux comme sécurité et réservez votre mémoire comme suit :
DIM Sc%(34),Wi%(50).
Pour obtenir l'adresse de base de ces tableaux, utilisez : Sc&=VARPTR(Sc%(0));Wi&=VARPTR(Wi%(0)).
Avant d'initialiser, videz la mémoire avec une simple boucle qui fixe les éléments de ces deux tableaux à 0.
Ok, à présent il faut remplir cette mémoire par les éléments de la structure correspondante. On utilisera "POKEW"
pour les éléments "COURT" et "POKEL" pour les "LONG".
Le premier élément est "poké" à l'adresse Sc& (ou Wi&) puis on incrémente l'adresse de 2 si l'élément précédent est "COURT",
de 4 s'il est "LONG". Exemple : "POKEW Sc&,0" pour BordGauche, "POKEW Sc&c+4,320" pour Largeur, "POKEL Sc&c+18,0"
pour le Pointeur_font. Compris ?
Maintenant que vos structures sont en mémoire, il ne vous reste plus qu'à appeler les routines comme suit :
PtScreen&=OpenScreen&(Sc&)
PtWindow&=OpenWindow&(Wi&)
|
Les instructions renvoient les pointeurs des écrans et fenêtres. Le pointeur_écran de la structure "NewWindow"
est PtScreen&, Ok ?
Surtout n'oubliez pas de les fermer en appelant :
CALL CloseWindow(Wi&)
CALL CloseScreen(Sc&)
|
Attention ! L'article ne suit pas l'ordre chronologique : il faut d'abord réserver la mémoire puis ouvrir la bibliothèque
et déclarer les routines, ensuite "poker" la structure "NewScreen", ouvrir l'écran, "poker" la structure "NewWindow",
ouvrir la fenêtre et refermer le tout.
On va s'arrêter là ce mois-ci. Le mois prochain, vous aurez droit à encore plus d'informations sur les écrans et fenêtres.
|