AES ou Application Environment Service
L'AES est une partie du GEM. Elle s'occupe essentiellement de la gestion des fenêtres.
Un appel à
une fonction AES va se planter si vous êtes en mode superviseur.
Les paramètres de l'AES
DD control: tableau de control. composé de 5 mots (32 bits).
DD global: variables Global variables. 15 mots.
DD int_in: paramètres de type Integer
DD int_out: Résultats de type Integer
DD addr_in: Addresse (DWORD) des paramètres
DD addr_out: Addresse (DWORD) des resultats
Control étant composé ainsi:
DW function: n° de la fonction AES (de 10 à 132)
DW nombre de words dans int_in passés à la fonction AES
DW nombre de words dans int_out à la sortie de la fonction AES
DW nombre de words dans in addr_in
DW nombre de words dans in addr_out
GFA-BASIC
En GFA Basic, les tableaux se composent ainsi:
tableaux aes:
- gcontrl
- gintin
- gintout
- addrin
- addrout
Les appels se font par gemsys fn
Utiliser l'AES en Assembleur
Initialiser l'AES
Le
GEM n'est accessible qu'aux programmes qui ont été lancés depuis le bureau
chargé. Un PRG lancé depuis un
répertoire AUTO ne pourra donc pas utiliser l'AES ou le VDI, car le GEM n'a
pas encore été initialisé (de même pour un programme lancé via le secteur
BOOT).
Une fois votre programme ACC ou PRG initialisé (pour un ACC, initialisation de la pile, pour un PRG, libération de la mémoire qui ne sera pas utilisée par celui-ci), vous pouvez initialiser l'AES.
Il s'agit d'utiliser la fonction 10 de l'AES. Celle-ci (comme les autres) va utiliser des paramètres. Il vous faudra définir votre propre tableau de paramètres que vous pourrez ensuite utiliser à votre guise pour vos appels.
Vous
retrouvez aussi des références à du VDI.
Normal, le VDI utilise aussi le même type de tableau. Ce fichier est donc commun
au VDI et à l'AES (d'où son nom GEMDATA plustôt qu'AESDATA ou VDIDATA).
control
et contrl sont identiques (dépendra de vos habitudes en fait). opcode
et contrl sont aussi identiques. Mais à l'initialisation de l'AES, vous allez
définir où se trouve le tableau. Comme il est étrange d'utiliser contrl dans
une fonction pour définir entre autre contrl, il sera plus souvent utiliser
le terme opcode ...
La fonction 10 permet d'initialiser l'AES. L'appel à cette fonction se fera de la façon suivante:
bsr aes est une fonction qui va appeler l'AES. Vous pourrez ainsi toujours utiliser cette fonction pour vos futurs appels à l'AES.
Appeller une fonction AES
Voici une fonction qui va permettre d'exécuter des fonctions AES. Il vous suffit au préalable de renseigner les différents éléments attendus par cette fonction AES à appeler.
Le principe est le suivant: passer votre tableau de paramètres dans d1 et la fonction $c8 dans d0 pour indiquer un appel aes. enfin trap #2 pour déclencher l'appel au gestionnaire de fonctions (ici AES avec $c8).
Un appel à une fonction AES va détruire le contenu des registres d0 et d1. Vous pouvez donc les sauver dans la pile avant l'appel. Ce que je fais ici.
Terminer et libérer les ressources AES
L'utilisateur désire mettre fin à votre programme ? Il faut libérer les ressources AES avant de sortir !
Exemple de codes
D'où un exemple assez simple qui initialise l'aes, affiche un message et termine le programme...
Contexte graphique
Une autre initialisation sera importante si vous voulez utiliser le VDI. Le handle VDI GEM qui est un contexte graphique qui sera utilisé par le VDI lors de ses opérations graphiques.
Pour récupérer ce handle, il faut appeler la fonction 77 de l'AES.
Cette fonction retroune 5 valeurs entières:
- Le handle du contexte graphique (mémorisez le dans grhandle !) dans int_out[0].
- La largeur des caractères dans int_out[1].
- La hauteur des caractères dans dans int_out[2].
- La largeur de la boite dans lequel sera contenu le caractère dans int_out[3] (calculé à partir de la hauteur de int_out[4].
- La hateur de la boite dans lequel sera contenu le caractère dans int_out[4] (soit la hauteur d'un caractère + 3 que l'on trouve sous int_out(2]).