Obligement - L'Amiga au maximum

Lundi 02 juin 2025 - 04:06  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in English


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


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 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.


[Retour en haut] / [Retour aux articles]