Obligement - L'Amiga au maximum

Samedi 22 juillet 2017 - 12:40  

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 : 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 bitplanes, "n" bitplane^2 = "n" couleurs.

Le mode est à choisir parmi les suivants par additions :
  • DUALPLAYFIELD : &H400, si vous désirez disposer de playfields.
  • 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.


[Retour en haut] / [Retour aux articles]