			Les fonctions AES
			*****************


1 Prsentation
**************

	Le principe d'appel des fonctions AES repose sur le remplissage de
tableaux d'entre et de rcupration ventuelle de paramtres dans les
tableaux de sortie. Certaines fonctions prsentes ici sont propres au FORTH
et ne servent qu'a faciliter l'utilisation des primitives AES.

	Les tableaux d'entre;

control
-------
       	laisse sur la pile l'adresse du champ control contenant les
informations suivantes:
		control	code de la fonction
		control+2	nombre de mots dans intin
		control+4	nombre de mots dans intout
		control+6	nombre d'adresses dans addrin
		control+8	nombre d'adresses dans addrout

intin
-----
	laisse sur la pile l'adresse du champ intin contenant les paramtres
d'entre sur 2 octets chacun.

addrin
------
	laisse sur la pile l'adresse du champ addrin contenant les adresses
d'entre sur 4 octets chacune.

	Les tableaux de sortie:

intout
------
	laisse sur la pile l'adresse du champ intout contenant en retour les
informations sur 2 octets renvoyes par la fonction.

addrout
-------
	laisse sur la pile l'adresse du champ addrout contenant en retour les
adresses sur 4 octets fournies par la fonction.

	En utilisation normale les tableaux d'entre sont remplis pour vous, il
ne reste qu' lire ventuellement les informations dans les champs de sortie.
Pourtant, pour certaines fonctions qui ne seraient pas encore implantes un
appel " la main" sera ncessaire:

	Fonctions manuelles:

actrl
-----
	fn  ii  io ad  actrl  :  remplit le champ control avec f=code de la
fonction, ii=nombre mots intin, io=nombre de mots intout, ad=nombre de
mots addrin. La partie addrout n'est pas prise en compte et initialise  zro
tant il y a peu de fonctions l'utilisant. Au pire il faudrait ajouter "n control 8
+ w!" aprs cet appel.

aintin!
-------
	remplit le champ intin selon le nombre de valeurs indiqu en
control+2. Les valeurs sont prises sur la pile.

addrin!
-------
	remplit le champ addrin selon le nombre de valeurs indiqu en
control+6. Les valeurs sont prises sur la pile.

aes
---
	appelle la fonction aes en supposant que les trois tableaux d'entre
sont correctement remplis.

aes!
----
	suppose que le tableau control est rempli, ensuite remplit le tableau
addrin, puis le tableau intin, puis appelle l'AES.

	Voici maintenant la liste des fonctions AES, pour la syntaxe on a
respect cet ordre:
		valeurs intin		valeurs addrin	nom de la fonction
	Ceci est aussi valable pour la fonction aes!. Attention, ceci n'est pas
toujours l'odre de la syntaxe en C, parfois les adresses prcdent les autres
donnes (allez savoir pourquoi...).

2 Les fonctions gnrales
*************************

appl_init
---------
	dclare une application au GEM. La fonction est inutile, mme sous le
compilateur puisque le FORTH s'en charge tout seul. Nanmoins, la valeur
retourne par app_init est elle importante (dans la gestion de certains
messages ou vnements), donc c'est une simulation de la fonction qui est
ralise et qui renvoie le paramtre id:
		intout		: id de l'application en cours ou -1 si erreur.

appl_read
---------
	id  n  adr  appl_read  :  lit n octets dans le registre des vnements et
les dpose  partir de l'adresse adr. Le paramtre id est votre identificateur.
La fonction est inutile pour tous les vnements standards du GEM.
		intout		0 si erreur

appl_write
----------
	id  n  adr  appl_write  :  crit n octets dans le registre des vnements,
ces octets sont pris  partir de l'adresse adr. Le paramtre id est votre
identificateur.
		intout		0 si erreur
appl_find
---------
	" nom"  appl_find  :  renvoit l'appl_id de l'application dont le nom est
prcis. Le nom doit contenir 8 caractres exactement (combl avec des
blancs et sans l'extension du fichier).
		intout		appl_id ou -1 si non trouv.

appl_search
-----------
	mode  nom type ap_id  appl_search

appl_trecord
------------
	n  adr  appl_trecord  :  l'AES enregistre n vnements se trouvant
dcrits  l'adresse adr. Chaque vnement utilise 6 octets:
	mot		: code de l'vnement
	long mot	: paramtres

	intout		: nombre d'vnements enrgistrs.

appl_tplay
----------
	n  sc  adr  appl_tplay  :  l'AES rejoue n vnements  l'adresse adr. Le
paramtre sc indique la vitesse voulue (100=normal, 1000=x10, 50=moiti,
etc..)

appl_getinfo
------------
	type  appl_getinfo  :  renvoit des informations sur l'AES.

scrp_read
---------
	adr  scrp_read  :  renvoie  partir de l'adresse adr le nom du chemin
d'accs au clipboard (presse papier GEM). Si intout contient 0, il suffit de
crer un rpertoire \clipbrd et de le spcifier  l'aide de scrp_write.

scrp_write
----------
	adr  scrp_write  :  indique au systme le chemin d'accs au clipboard.
adr pointe sur une chane termine par 0, par exemple : "C:\CLIPBRD\".
Fonction  n'utiliser que si scrp_read renvoie 0 (donc que me clipboard
n'existe pas encore).

shel_get
--------
	n  adr  shel_get  :  copie n octets du buffer AES (le desktop.inf) vers
l'adresse adr.

shel_put
--------
	n  adr  shel_put  :  copie n octets de l'adresse adr vers le buffer AES.

shel_envrn
----------
	" var="  shel_envrn  :  recherche la valeur d'une variable
d'environnement.
		addrout	: adresse du premier octet de la chane trouve.

shel_write
----------
	mode  wisgr  wiscr  cmd  tail  shel_write

shel_read
---------
	name  tail  shel_read

shel_find
---------
	buffer  shel_find

fsel_intput
-----------
	chemin fichier  fsel_input  :  ouvre le slecteur de fichiers. A cet effet
chemin et fichier sont deux chanes contenant le chemin d'accs et le nom du
fichier par dfaut propos  l'utilisateur. Il est dangereur d'utiliser des
constantes de chanes car toute modification du chemin et du fichier modifie
la chane de dpart (et donc ventuellement sa longueur).
		intout		: 0 si erreur
		intout+2	: 0=annuler, autre=confirmer
		fichier et chemin modifis selon les actions de l'utilisateur.

fsel_exinput
------------
	chemin  fichier  titre  fsel_exinput  :  mme principe que fsel_input,
sauf qu'on ajoute un texte s'affichant comme titre dans le slecteur indiquant
ainsi l'opration ralise (30 caractres maxi).

path
----
	chemin  fichier  path  :   utiliser en liaison avec la fonction
prcdente. Les deux chanes sont dpiles et fusionnes dans pad dont
l'adresse est laisse sur la pile. Par exemple:
	chemin="C:\FORTH\*.FOR"	et	fichier="TEST.FOR"
	On trouvera alors dans pad="C:\FORTH\TEST.FOR". Notons que le
masque ventuel dans chemin est ot.

form_alert
----------
	b  chane  form_alert  :  ouvre une bote d'alerte, b correspond au
numro ( 1, 2 ou 3 ) du bouton li  la touche RETURN (0 si aucun). La
chane a cette structure:
	" [n][ligne1|ligne2|....][bouton1|bouton2|...]",  il peut y avoir
jusqu' 5 lignes de 30 caractres et trois boutons, n est le numro de l'icne
(0 aucune, 1=!, 2=?, 3=stop).
		intout		: numro du bouton slectionn.

form_error
----------
	n  form_error  :  affiche une bote d'alerte correspondant  l'erreur
TOS n. Certaines valeurs de n correspondent  un message bien prcis,
d'autres  une simple bote "Erreur TOS #n". Pour passer de l'erreur
GEMDOS (-32  -49) au code n correspondant on soustrait 31  sa valeur
absolue. Exemple, le code -36 (accs refus) correspond  la bote 36-31=5.
	n=2, 3 ou 18		: dossier ou fichier non trouv.
	n=4			: mmoire insuffisante pour ouvrir un document
supplmentaire.
	n=5			: document dj existant ou protg en criture.
	n=8, 10 ou 11	: mmoire insuffisante pour lancer l'application.
	n=15			: lecteur scpcifi inexistant.

3 Les fichiers ressource RSC
****************************

	Ce sont eux qui contiennent traditionellement les boites de dialogue,
les menus et les messages d'alerte d'une application. Dans les paragraphes
consacrs  ces diffrents lments on verra comment crer de tels objets
sans passer par un fichier indpendant.

rsrc_load
---------
	chane  rsrc_load  :  charge un fichier ressource et l'adapte  la
rsolution actuelle, reloge les adresses.
		intout		: 0 si erreur

rsrc_free
---------
	libre la mmoire utilise par un fichier ressource.

rsrc_gaddr
----------
	t  i  rsrc_gaddr  :  recheche l'adresse du ime objet de type t dans le
fichier ressource charg en mmoire.
		t=0	arbre			t=8	tedinfo-text
		t=1	objet			t=9	tedinfo-masque
		t=2	tedinfo			t=10	tedinfo-valid
		t=3	ICONBLK			t=11	sous pointeur ICONBLK
		t=4	BITBLK			t=12	idem
		t=5	chane			t=13	idem
		t=6	pointeur sur BITIMAGE	t=14	sous pointeur BITBLK
		t=7	ob_spec			t=15	idem
						t=16	idem

		intout		: 0 si erreur
		addrout	: l'adresse recherche.
	Dans un fichier  un seul arbre, pour obtenir le pointeur indispensable
aux fonctions objc_draw et form_do on utilisera :	0  0  rsrc_gaddr

rsrc_saddr
----------
	t  i  adr  rsrc_saddr  :  modifie l'adresse du ime objet de type t, adr
est l'adresse que l'on impose.
		intout		: 0 si erreur.

rsrc_obfix
----------
	o  adr  rsrc_obfix  :  convertit les coordonnes de l'objet o de l'arbre
point par adr en pixels  partir de valeurs en caractres selon la fonte
systme en cours.

rsrc_rcfix
----------
	h  rsrc_rcfix  :  fixe toutes les coordonnes et les pointeurs du
ressource dont l'adresse du header est h. Si un fichier a dj t charg par
rsrc_load, on doit utiliser rsrc_free avant cet appel.

form_center
-----------
	adr  form_center  :  calcule les coordonnes d'un arbre pour qu'il
apparaisse centr sur l'cran.
		intout+2  +8	: X,Y,L,H

form_dial
---------
	f  x  y  l  h  X  Y  L  H  form_dial  :  prpare l'cran au dessin d'un
arbre d'objets, sans cet appel, les messages redraws ne seront pas
correctement grs par l'AES.
	f=0	: rservation de l'cran (X,Y,L,H),  (x,y,l,h sont indfinis, 0 par
exemple)
	f=1	: dessin d'un rectangle qui grandit de (x,y,l,h) vers (X,Y,L,H)
	f=2	: dessin d'un rectangle qui rtrcit de (X,Y,L,H) vers (x,y,l,h)
	f=3	: libration de l'cran (X,Y,L,H), (x,y,l,h aussi indfinis)
	Les tapes 1 et 2 sont optionnelles.

form_do
-------
	i  adr  form_do  :  passe le contrle  l'AES pour la gestion du
formulaire point par adr, i est l'indes du champ ditable recevant le curseur
(0 si il n'y en a pas).
		intout		: index de l'objet ayant mis fin au dialogue, le bit
15 est mis en cas de double clic. Pour avoir l'index quoi qu'il arrive : intout
%h7fff and.

form_button
-----------
	o  c  adr  form_button

form_keybd
----------
	o  n  kc  adr  form_keybd

4 Les menus
***********

	Soit le menu est charg dans un fichier RSC, soit il est cr en FORTH.
C'est seulement dans ce second cas que la premire partie de ce paragraphe
est  utiliser.

menu
----
	adr  menu  : cre un menu. A cet effet, adr doit tre l'adresse de la
premire chane d'un tableau de chanes (type array$) organis comme suit:
	- d'abord tous les titres de la barre de menu
	- une chane vide
	- l'option du titre 1 (en gnral Info)
	- une chane vide
	- les otpions du titre 2
	- une chane vide
	- ...
	Ainsi de suite pour chaque titre. Par exemple, pour crer le menu
suivant :


	Bureau	Fichier		Il faudra 10 chanes de 12 octets on
						declarera 12  10 array$  MENU
	Infos...	Charger			12 10 array$ MENU
			Sauver		Ensuite il faudra remplir le tableau
			--------		de chaines dans l'ordre. La partie
			Quitter		concernant les accessoires est gre
						par le FORTH.

	"  Bureau "	0 MENU $!
	"  Fichier "	1 MENU $!		Toujours prvoir un blanc  droite
	" "		2 MENU $!		et  gauche pour les check_marks
	"  Infos... "	3 MENU $!		et l'esthtique.
	" "		4 MENU $!
	"  Charger "	5 MENU $!
	"  Sauver " 	6 MENU $!
	" -----------"	7 MENU $!
	"  Quitter "	8 MENU $!
	" "		9 MENU $!

	Puis pour finir :  0 MENU  menu.
	renvoie sur la pile l'adresse de l'arbre (comme celle obtenue par
rsrc_gaddr) qu'il faut conserver pour tous les appels ultrieurs. Par exemple :
0 MENU menu constant ARBRE.

gemindex
--------
	n  gemindex  :  fournit l'index GEM correspondant  la chane n du
menu. Dans l'exemple prcedent, la chane n6 (Sauver) n'est pas forcment
le 6 objet de l'arbre en mmoire. Or c'est cet index interne qu'il nous faut
connatre pour utiliser correctement les fonctions AES. Par exmple, pour
dsactiver l'option 7 (un trait de sparation):
		7 gemindex  0  ARBRE  menu_ienable

strindex
--------
	n  strindex  :  fournit le numro de chane d'une option dont on
connait l'index interne. Par exemple, evnt_mesag renvoie cet index
lorsqu'une entre du menu a t selectionne:
	1 ARBRE menu_bar		\ dessine le menu
	begin
		here evnt_mesag
		here w@ 10 =	\ attend l'vnement "menu selected"
	until
	here 8 + w@			\ index interne de l'option choisie
	strindex			\ son numro de chane
	case
		3 of ...			\ il ne peut tre que 3, 5, 6 ou 8
		5 of ...			\ les autres chanes n'tant pas des
		6 of ...			\ options.
		8 of ...
	endcase

setmenu
-------
	adr  setmenu	 :  adr est l'adresse de l'arbre d'un menu (celle renvoye
par menu), le menu ainsi point devient le menu courant (celui utilis pour
gemindex, strindex et autres oprations de menu). Cette fonction n'est utile
que lors de l'utilisation de plusieurs menus.

	Les instructions qui suivent sont les appels AES proprement dits, ils sont
donc applicables  tout menu (charg avec rsrc_load ou cr en FORTH).

menu_bar
--------
	f  adr  menu_bar  :  dessine (f=1) ou annule (f=0) la barre de menu
dont l'arbre est point par adr.
		intout		: 0 si erreur

menu_icheck
-----------
	i  f  adr  menu_icheck  :  met une marque (f=1) ou l'efface (f=0)
devant l'entre d'index GEM i du menu point par adr.
		intout		: 0 si erreur

menu_ienable
------------
	i  f  adr  menu_ienable  :  active (f=1) ou dsactive (f=0) l'entre
d'index GEM i du menu point par adr. Les options dsactives apparaissent
en clair.
		intout		: 0 si erreur

menu_tnormal
------------
	i  f  adr  menu_tnormal  :  passe en vido inverse (f=0) ou en vido
normale (f=1) le titre d'index GEM i du menu point par adr. Ds qu'une
entre du menu est choisie, le titre reste en vido inverse tant que
l'utilisateur ne l'a pas resatur.
		intout		: 0 si erreur

menu_register
-------------
	id  chane  menu_register  :  intgre un accessoire ou une application
(sous MultiTOS)  la barre de menu. Le paramtre id est celui renvoy par
appl_init, la chane contient le texte qui apparaitra dans le premier menu
droulant.
		intout		: id de l'accessoire  conserver (pour
event_mesag) ou -1 si erreur.

menu_text
---------
	i  arbre  chane  menu_text  :  modifie le nom de l'otion d'index GEM i
dans l'arbre de menu. La chane contient le nouveau nom. Afin de ne pas
dborder du cadre, la longueur de la chane ne devrait pas exder celle de
l'ancienne.
		intout 		: 0 si erreur

menu_attach
-----------
	flag  item  adr  mdata  menu_attach

menu_istart
-----------
	flag  imenu  item  adr  menu_istart

menu_popup
----------
	xpos  ypos  menu  mdata  menu_popup

menu_settings
-------------
	flag  set  menu_settings

5 Les vnements
****************

evnt_keybd
----------
	attend qu'une touche soit presse et renvoie:
		intout		: code clavier/code ASCII (octet fort/faible)

evnt_button
	c  m  s  evnt_button  :  attend un vnement sur les buttons de la
souris.
		c	: nombre de clics maximum  attendre
		m	: bouton  surveiller (1=droit,2=gauche,3=les deux)
		s	: retour si bouton relach (s=1), appuy (s=2),
				peu importe (s=3)
	On obtient en retour :
		intout		: nombre de clics observs
		intout+2	: mouse x lors de l'vnement
		intout+4	: mouse y
		intout+6	: copie de s
		intout+8	: tat des touches spciales
				(bit0=sh_d,bit1=sh_g,bit2=ctrl,bit3=Alt).

evnt_mouse
----------
	f  x  y  l  h  evnt_mouse  :  attend l'entre (f=0) ou la sortie (f=1) du
curseur de la souris d'un rectangle dfini par x,y,l,h.  On obtient en retour:
		intout+2	: mouse x		intout+6	: mouse k
		intout+4	: mouse y		intout+8	: tchs spciales

evnt_timer
----------
	t  evnt_timer  :  attend que le temps t (en millisecondes sur 4 octets)
s'coule.

evnt_dclick
-----------
	v  f  evnt_dclick  :  lit (f=0) ou fixe (f=1) la vitesse du double click. Si
f=1, v doit tre un entier de 0  4, si f=0, v est sans signification.
		intout		: vitesse prise en compte.

evnt_mesag
----------
	adr  evnt_mesag  :  attend qu'un vnement se produise et remplit le
buffer de 16 octets point par adr. On obtient en retour:
		adr		: numro de l'vnement
		adr+2		: id du programme qui l'a dclanch
		adr+4		: 0 si buffer suffisant, ou nombre d'octets
				 supplmentaires (appl_read)
	Le numro peut tre l'un des suivants :
	10: MN_SELECTED	: adr+6=index du titre, adr+8=index de l'option
	20: WM_REDRAW	: adr+6=handle de la fentre  redessiner,
					 adr+8  adr+14=x,y,l,h
	21: WM_TOPPED	: adr+6=handle de la fentre  activer.
	22: WM_CLOSED	: adr+6=handle de la fentre  fermer.
	23: WM_FULLED	: adr+6=handle de la fentre que l'on veut en
					 plein cran.
	24: WM_ARROWED	: adr+6=handle de la fentre dont on a actionn
				les flches adr+8: 0=page_up, 1=page_down,
				2=up, 3=down, 4=page_left, 5=page_right,
				 6=left, 7=right
	25: WM_HSLID	: adr+6=handle, adr+8=position du curseur
				 horizontal (0  1000)
	26: WM_VSLID	: adr+6=handle, adr+8=position du curseur
				 vertical (0  1000)
	27: WM_SIZED	: adr+6=handle, adr+8  adr+14=x,y,l,h les
				nouvelles dimensions
	28: WM_MOVED	: adr+6=handle, adr+8  adr+14=x,y,l,h la
				nouvelle position
	40: AC_OPEN	: adr+8=id de l'accessoire  activer (celui
				renvoy par menu_register)
	41: AC_CLOSE	: adr+6=id de l'accessoire  refermer.

evnt_multi
----------
	choix  c  m  s  f1 x1 y1 l1 h1  f2 x2 y2 l2 h2  t  adr  evnt_multi  :
attend une combianison d'vnements selon le masque de bits dans choix:
	choix	bit 0	: evnt_keybd
		bit 1	: evnt_button ( c  m  s )
		bit 2	: evnt_mouse (f1 x1 y1 l1 h1)
		bit 3	: evnt_mouse (f2 x2 y2 l2 h2)
		bit 4	: evnt_mesag (buffer en adr)
		bit 5	: evnt_timer (temps t)
	Les paramtres inutiles doivent quand mme apparaitre (des 0 par
exemple). renvoie les valeurs suivantes:
	intout		: vnement observ (cod comme "choix")
	intout+2	: mouse x	intout+8	: tat des touches spciales
	intout+4	: mouse y	intout+10	: code touche actionne
	intout+6	: mouse k	intout+12	: nombre de clicks observs


6 Les fentres GEM et les pages FORTH
*************************************

	L'criture dans une fentre GEM permet une programmation propre car la
partie correspondante de l'cran est rserve, les diffrents mouvements de fentres,
ouvertures ou fermetures sont automatiquement accompagns de messages GEM
permettant de redessiner les parties ventuellement redcouvertes. Cependant, 
l'intrieur d'une fentre, rien ne nous empche d'y crer plusieurs pages FORTH
(pour faire du multicolonnage par exemple, ou pour sparer dessin et texte).
Cependant, si les pages ne sont pas loges  l'intrieur d'une fentre GEM il se
peut que des parties d'cran soient ainsi salies sant qu'aucune des applications ne
soit avertie.
	Au lancement du FORTH, la fentre principale est dj ouverte, avec un
programme compil c'est fastopen qui s'en chargera. La page FORTH
correspondante, page0, sera automatiquement calque sur la fentre. Elle permet
les sorties de texte, de graphiques, les saisies au clavier. Elle sera amplement
suffisante pour bon nombre d'applications.
	Il est  noter que le FORTH ouvre une deuxime station VDI pour les
sorties de texte standard ceci afin que les rglages de l'utilisateur ne viennent pas
perturber le bon fonctionnement de l'diteur par exemple. Dans cette station VDI,
le clipping est automatiquement ralis sur la page0 ainsi les sorties de textes mme
bugus (a peut arriver) ne sortiront pas de la fentre.

&page
-----
	&page  XXX  :  cre un nouveau mot XXX correspondant  une page
FORTH. Il n'a pour l'instant aucune dfinition de taille ni de position.
Lorsqu'il est xcut, XXX laisse sur la pile une adresse contenant:
	adr		: x		adr+8		: x en pixels du curseur texte
	adr+2		: y		adr+10	: y en pixels du curseur texte
	adr+4		: l		adr+12	: l d'un caractre
	adr+6		: h		adr+14	: h d'un caractre

defpage
-------
	x  y  l  h  XXX defpage  :  donne des dimensions  la page XXX.
Initialise la position du curseur de texte dans la page (0,0 en haut  gauche).
Mais, la page n'est pas encore utilisable, il faut la dclarer comme page
active.

setpage
-------
	XXX setpage  :  fixe XXX comme page active. Toutes les sorties de
texte se feront dans cette page, si le mode relative est enclanch, toutes les
sorties VDI seront relatives au coin suprieur gauche de cette page.

pageclip
--------
	ralise un clipping sur la page active afin de limiter les sorties VDI.

page0
-----
	page de base du FORTH se comportant comme cre par &page. C'est
celle ouverte sous l'interprteur ou avec fastopen dans un programme
compil. Ce mot laisse donc l'adresse d'une zone de 16 octets dcrite sous
&page.

page
----
	page courante, mme comportement que page0.

fastopen
--------
	dans un programme compil ouvre une fentre plein cran avec les
mmes attributs que sous le FORTH et renvoie ensuite son handle sur la pile.
On peut le conserver si on dsire agir sur cette fenetre (changer le titre par
exemple... ). Si la fentre est dj ouverte (comme sous l'interprteur)
fastopen se contente de renvoyer le handle.

fastclose
---------
	referme la fentre ouverte avec fastopen. Mme dans un programme
cette opration n'est pas ncessaire puisqu'elle est automatiquement ralise
avant la sortie du programme.

relative
--------
	mode dans lequel les coordonnes des fonctions VDI sont relatives au
coin suprieur gauche de la page active et ou les fonctions textes du VDI sont
simules dans cette page.

absolute
--------
	mode dans lequel les coordonnes des fonctions VDI sont absolues
(relatives  l'cran total) et dans lequel les fonctions texte du VDI sont
excutes de manire normale.

cls
---
	efface la page courante et place le curseur de texte en haut  gauche.

wind_create
-----------
	def  x  y  l  h  wind_create  :  cre une fentre GEM (elle n'est pas
encore affiche), xylh sont les dimensions maximales qu'elle pourra prendre,
def est un masque de bits indiquant les lmnets de la fentre:
		bit 0	: nom			bit 6	: flche vers le haut
		bit 1	: closer (ferme)	bit 7	: flche vers le bas
		bit 2	: fuller (maxi)	bit 8	: ascenseur vertical
		bit 3	: mover (dplace)	bit 9	: flche vers la gauche
		bit 4	: info			bit 10	: flche vers la droite
		bit 5	: sizer (taille)		bit 11	: ascenseur horizontal
	Il faut absolument conserver la valeur renvoye, c'est le handle de la
fentre, c'est  dire un identificateur qui servira dans toutes les fonctions
suivantes:
		intout		: handle ou -1 si la fentre n'a pas pu tre cre.

wind_open
---------
	hdl  x  y  l  h  wind_open  :  ouvre la fentre de handle hdl aux
coordonnes spcifies.
		intout		: 0 si erreur.

wind_close
----------
	hdl  wind_close  :  ferme la fentre hdl. (Elle n'est pas dtruite, on
pourra toujours la rouvrir plus tard).

wind_delete
-----------
	hdl  wind_delete  :  dtruit la fentre hdl. Il faut d'abord tre pass
par wind_close.
		intout		: 0 si erreur
wind_new
--------
	efface toutes les fenetres de l'application et initialise les compteurs de
v_hide_c ainsi que de wind_update.

wind_set
--------
	modifie une fentre, il y a plusieurs syntaxes possibles:
	hdl  def  1  wind_set  :  modifie les lments prsents de la fentre hdl
					 (voir wind_create)
	hdl  chane  2  wind_set  :  assigne une chane de titre  la fentre hdl
	hdl  chane  3  wind_set  :  assigne une chane d'info  la fentre hdl
	hdl  pos  8  wind_set  :  position curseur horizontal (pos=1  1000)
	hdl  pos  9  wind_set  :  position du curseur vertical (pos=1  1000)
	hdl  10  wind_set  	:  active la fentre hdl
	adr  obj  14  wind_set  :  installe un arbre d'objets ( partir de l'objet
				obj) point par adr  la place du fond du bureau.
	hdl  t  15 wind_set  :  fixe la taille du curseur horizontal (t=1  1000)
	hdl  t  16 wind_set  :  fixe la taille du curseur vertical (t=1  1000)

	Pour toute autre valeur du flag (autre que 1,2,3,8,9,10,14,15,16), il
faut reprendre la syntaxe gnrale de wind_set:
	hdl  param1 param2 param3 param4  flag  wind_set

	hdl  x  y  l  h  5  wind_set  :  nouvelle position de la fentre.

wind_get
--------
	hdl  f  wind_get  :  renvoie des informations sur la fentre hdl selon la
valeur de f:
		f=4	: dimensions de l'espace de travail
		f=5	: dimensions de l'espace total
		f=6	: dimensions de l'espace total prcdant (avant fuller)
		f=7	: dimensions de l'espace total maximal
		f=8	: position du curseur horizontal (1  1000)
		f=9	: position du curseur vertical (1  1000)
		f=10	: renvoie le handle de la fentre active (hdl n'a pas de
			sens alors)
		f=11	: dimensions du premier catalogue REDRAW
		f=12	: le suivant
		f=15	: taille du curseur horizontal (1  1000)
		f=16	: taille du curseur vertical (1  1000)

	Valeurs retournes:
		intout		: 0 si erreur
		intout+2	: x ou position (f=8,9) ou handle (f=10) ou
					taille (f=15,16)
		intout+4	: y
		intout+6	: l
		intout+8	: h



wind_find
---------
	x  y  wind_find  :  renvoie le handle de la fentre sous les coordonnes
x,y.
		intout		: handle (0 si c'est le fond du bureau)

wind_update
-----------
	f  wind_update  :  gre le contrle de l'cran et de la souris
		f=0	: l'cran est libre
		f=1	: vous rservez l'accs  l'cran pour entreprendre des
				modifications
		f=2	: l'AES reprend le contrle de la souris (menus,
				formulaire)
		f=3	: vous prenez le contle de la souris.
	Lors de modifications il faut d'abord appeler wind_update avec f=1
avant d'effacer la souris.

wind_calc
---------
	f  def  x  y  l  h  wind_calc  :  fournit l'espace total (f=0)  par tir de
l'espace de travail ou l'espace de travail (f=1)  partir de l'espace total en
tenant compte des lments de la fentre dans le masque de bits def (voir
wind_create).
		intout		: 0 si erreur
		intout+2  intout+8	: x, y, l, h.

get_xywh
--------
	adr  get_xywh  :  ramne sur la pile les 4 valeurs de mots se trouvant
 l'adresse adr.

get_xyxy
--------
	adr het_xyxy  :  ramne sur la pile les 4 valeurs de mots se trouvant 
l'adresse adr puis transforme w et h en x' et y' pour le dialogue avec le VDI:
			x'=x+w-1	y'=y+h-1
	En effet, les rectangles VDI sont dfinis par deux points opposs et
non par la lageur et hauteur  parir du coin suprieur gauche.

set_redraw
----------
	hdl  x  y  l  h  set_redraw  :  prpare la boucle de redraw pour la
fentre hdl. Les dimensions du rectangle sont donnes par evnt_mesag ou
evnt_multi.

redraw
------
	 l'aide des paramtres spcifis dans set_redraw, renvoie un  un les
rectangles  redessiner. Lors du premier appel, on rserve l'cran (1
wind_update) et on efface la souris (v_hide_c). Lorsqu'il n'y a plus de
rectangles l'cran est libr (0 wind_update) et la souris raffiche (1
v_show_c).
	renvoie 1 et x y x' y' si un rectangle est  redessiner
	renvoie 0 si c'est termin.


	Petit exemple:

	here evnt_mesag
	here w@ 20 =		;  c'est le message REDRAW
	if
		here 6 + w@		; le handle
		here 8 + get_xywh
		set_redraw		; prpare la boucle
		begin
			redraw
		while
			....		; ici x y x' y' sont disponibles pour un
						dessin
			v_recfl		; remplit un rectangle par exemple!
		repeat
	then

7 La librairie Graf
*******************

graf_handle
-----------
	renvoie les informations suivantes:
	intout		: handle pour ouvrir une station VDI
	intout+2	: largeur caractre	intout+6	: largeur cellule
	intout+4	: hauteur caractre	intout+8	: hauteur cellule

graf_mkstate
------------
	renvoie les informations suivantes:
	intout+2	: mouse x		intout+6	: mousek
	intout+4	: mouse y		intout+8	: touches spciales

graf_mouse
----------
	f  graf_mouse  :  fixe la forme de la souris:
		f=0	flche			f=4	main  plat
		f=1	curseur		f=5	rticule fin
		f=2	abeille			f=6	rticule pais
		f=3	main qui pointe	f=7	contour de rticule
en plus:	f=256		dsactiver la souris
		f=257		activer la souris
		f>65535	considr comme une adresse pointant sur un
bloc de dfinition de la souris, la dfinition est la mme que pour la fonction
vsc_form du VDI.

graf_dragbox
------------
	l  h  x  y  X  Y  L  H  graf_dragbox  :   l'intrieur d'un rectangle
(XYLH), permet le dplacement d'un petit rectangle de dimensions (l,h) 
partir des coordonnes (x,y). Le bouton de la souris doit tre appuy avant
l'appel, la fonction s'arrte lorsqu'il est relch.
		intout		: 0 si erreur
		intout+2	: x final du petit rectangle
		intout+4	: y final
graf_growbox
------------
	x  y  l  h  X  Y  L  H  graf_growbox  :  dessine un rectangle qui
s'agrandit.

graf_movebox
------------
	l  h  x  y  x'  y'  graf_movebox  :  dessine un rectangle (l,h) qui se
dplace de x,y  x',y'.

graf_rubberbox
--------------
	x  y  l  h  graf_rubberbox  :  dessine un rectangle dont un coin (x,y)
est fixe et dont l'angle oppos suit le mouvement de la souris. (l,h) sont les
dimensions minimales du rectangle. Il faut que le bouton de la souris soit
appuy avant l'appel, la fonction s'arrte lorsqu'il est relch.
		intout		: 0 si erreur
		intout+2	: largeur finale
		intout+4	: hauteur finale

graf_shrinkbox
--------------
	X  Y  L  H  x  y  l  h  graf_shrinkbox  :  dessine un rectangle qui va en
rtrcissant.

graf_slidebox
-------------
	p  f  dir  adr  graf_slidebox  :  dans un arbre d'objets point par adr,
permet le dplacement horizontal (dir=0) ou vertical (dir=1) d'un objet fils
d'index f  l'intrieur d'un objet pre d'index p. Il faut que le bouton de la
souris soit appuy avant l'appel, la fonction s'arrte lorsqu'il est relch.
		intout		: position du fils de 0 (gauche ou haut)  1000
					(droite ou bas).

graf_watchbox
-------------
	0  i  s_in  s_out  adr  graf_watchbox  :  surveille le passage de la souris
dans l'objet d'index i de l'arbre point par adr. Si la souris est dedans son
ob_state=s_in, si elle est dehors alors ob_state=s_out. La fonction s'arrte
ds que le bouton est relch.
		intout		: souris en dehors (0)  la fin ou en dedans (1).

8 Les arbres d'objets
*********************

	Ce paragraphe traite la cration d'un arbre d'objets (formulaire)
directement en FORTH, c'est  dire sans passer par un fichier RSC spar.
Cette manipulation demande quelques petits calculs et surement plusieurs
essais pour les rglages. Le premier travail est la rservation des zones dans
lesquelles seront ranges les dfinitions des objets.

dialogue
--------
	ob_zone  ted_zone  aut_zone  dialogue  :  entame la cration d'un
arbre.
		ob_zone	: adresse du bloc objet, 24 octets par objet.
		ted_zone	: adresse du bloc TEDINFOS, 28 octets pour
				chaque objet de type TEXT, BOXTEXT, FTEXT
				 ou FBOXTEXT.
		aut_zone	: autres structures, 14 octets pour chaque IMAGE,
				34 par ICON et 36 par USERDEF.
	Il est vident qu'au dbut ces zones sont vides.

child<<      >>
---------------

	n child<< ... >>   :  dclare que tous les objets crs dans cette
structure sont les enfants de l'objet n. La structure ne peut pas tre
imbrique (a ne veut pas dire qu'on ne pourra pas avoir d'enfants 
l'intrieur d'enfants).

lastobj
-------
	marque le dernier objet comme tant le fin de l'arbre. Indispensable
avec des FTEXT pour viter toute erreur.

	Illustrons ceci par un exemple, soit  crer le formulaire suivant :
		-----------------------------------------
		|	Rechercher:________		|
		|					|
		|	Avant 	            Arrire	|
		| 					|
		|	   Ok		Annuler		|
		-----------------------------------------


	L'objet 0 est un BOX contenant un FTEXT, deux BUTTONs et une
IBOX qui contient deux radioBUTTONs.

	24 7 * allot constant OB_ZONE			\ 7 objets en tout
	28 allot constant TED_ZONE			\ une seule TEDINFO
								\ (celle du FTEXT)
	OB_ZONE   TED_ZONE  0 dialogue		\ le dernier
								\ paramtre est fictif
	"cration de la boite"				\ objet 0

	0  child<<						\ les enfants du 0
		"cration du FTEXT"                		\ objet 1
		"cration de la IBOX"			\ objet 2
		"cration du 1 bouton (Ok)"		\ objet 3
		"cration du 2 bouton (Annuler)"		\ objet 4
		>>

	2 child<<						\ les enfants de IBOX
		"cration du radiobouton (Avant)"		\ objet 5
		"cration du radiobouton (Arrire)"	\ objet 6
		>>
	lastobj							\ fini!

	Chaque objet cr demande 24 octets ainsi utiliss (par exemple pour
l'objet d'index i):

		ob_zone+24*i	: pointeur sur le suivant
				+2	: pointeur sur le premier enfant
				+4	: pointeur sur le dernier enfant
				+6	: type d'objet
				+8	: flag
				+10	: state
				+12	: spec (mot long, 4 octets)
				+16	: X
				+18	: Y
				+20	: L
				+22	: H

	flag est ainsi dfini :		state est ainsi dfini:
	bit 0	: selectable			bit 0	: selected
	bit 1	: default			bit 1	: crossed (type BOX)
	bit 2	: exit				bit 2	: checked
	bit 3	: editable (FTEXT)		bit 3	: disabled
	bit 4	: radio button		bit 4	: outlined
	bit 5	: last object			bit 5	: shadowed
	bit 6	: touch exit
	bit 7	: hide tree
	bit 8	: indirect

	Les coordonnes sont donnes en caractres sur deux octets:
		octet faible 	: nombre de caractres
		octet fort	: nombre sign de points  ajouter.
	Exemple : 	5 		-> 5 caractres
			%h0205 	-> 5 caractres plus 2 points.
			%hff05 	-> 5 caractres moins un point.
	Pour la cration des objets, voici les mots utiles:

BOX
IBOX
BOXCHAR
-------
	flag  state  spec  x  y  l  h  BOX  :  mme syntaxe pour les trois. spec
est un masque de bits ainsi dfini:
	bits 31-24	: code ASCII du caractre (pour BOXCHAR)
	bits 23-16	: largeur du bord (+ intrieur, - extrieur)
	bits 15-12	: couleur de bord
	bits 11-8	: couleur caractre
	bit 7		: 0 transparent, 1 opaque
	bits 6-4	: style de remplissage
	bits 3-0	: couleur de remplissage.

BUTTON
STRING
TITLE
------
	flag  state  chane  x  y  l  h  BUTTON  :  mme syntaxe pour les trois.


TEXT
BOXTEXT
-------
	flag  state  x y l h  chane fonte just couleur  TEXT  :  mme syntaxe
pour les deux.
	La fonte est petite (5) ou normale (3), la justification centre (2), 
gauche (0) ou  droite (1). couleur correspond  spec d'un BOX (bits 0  23).

FTEXT
FBOXTEXT
--------
	flag state x  y  l  h  chaine1 chaine2 chaine3 just couleur FTEXT  :
mme syntaxe pour les deux. just et couleur sont identiques  TEXT. Les trois
chanes sont le texte, le masque de saisie et le masque de validation.

IMAGE
-----
	flag  state  x  y  l  h  adr  couleur  IMAGE  :  pour cet objet, l est la
largeur en octets (pair) et h la hauteur en points. La couleur est de 1  16.
Adr pointe sur les donnes, chaque mot constitue 16 points conscutifs.

ICON
----
	flag state x  y  x'  y'  coul_car  chane  adr  ICON  :  cre une icone de
dimensions 32x32.
		x'  y'  :  coordonnes du caractre dans l'image 32x32.
		coul_car  :  couleur du caractre : bits15-12=couleur 1plan,
			 	bits11-8=couleur fond,
				bits7-0=code ASCII du caractre.
		chane  :  affiche sous l'icone en fonte 6x6 sur 13 caractres
				maximum.
		adr  :  adresse des donnes, 128 octets pour 32*32 points du
			masque, et 128 octets pour 32x32 points de l'icone.

USERDEF
-------
	flag  state  x  y  l  h  code  param  USERDEF  :  cre un objet dont
l'aspect et le comportement est gr par une routine de l'utilisateur. La
routine doit tre un mot compil ou assembl, il reoit sur une pile
provisoire (n'oublions pas qu'on se trouve dans l'AES) l'adresse d'un bloc
ainsi dfini:
		adr		: adresse de l'arbre
		adr+4		: index de l'objet
		adr+6		: state prcdent
		adr+8		: nouveau state
		adr+10	: X, Y, L, H absolus de l'objet
		adr+18	: x, y, x', y' du rectangle de clipping
		adr+26	: param (sur 4 octets)
	Si les deux valeurs de state sont gales, c'est qu'il faut dessiner l'objet
dans cet tat (un appel de ob_draw). Si elles sont diffrentes, il faut
s'occuper de passer l'objet d'un tat  l'autre (par exemple, l'objet a t
slectionn). La valeur de param est laisse libre  l'utilisateur, on peut par
exemple concevoir une mme routine pour plusieurs objets, le param
permettant de les distinguer.
	La routine doit renvoyer un state dont les bits restants sont ceux dont
le traitement sera laiss  l'AES, on renvoie 0 si on s'occupe de tout. Les
coordonnes sont en mode absolu par rapport  l'cran physique. Si une
routine VDI doit tre utilise, il faut spcifier "absolute" avant.

objc_change
-----------
	index 0 x y l h  state  f  adr  objc_change  :  modifie le state de l'objet
d'index i dans l'arbre point par adr, x y l h sont les dimensions du cadre de
clipping si l'objet doit tre redessin vaec son nouvel tat (f=1), f=0 sinon et
x y l h sont indfinis.
		intout		: 0 si erreur

objc_draw
---------
	i  prof  X  Y  L  H  adr  objc_draw  :  dessine un arbre d'objets point
par adr, les coordonnes sont celles renvoyes par form_center, i est l'idex
du premier objet  dessiner (0 le plus souvent) et prof est le nombre de
gnrations  dessiner en profondeur (avec 2, l'AES ira jusqu'aux enfants des
enfants de l'objet de dpart), on choisira une valeur dpassant 7 pour avoir
tout l'arbre.
		intout		: 0 si erreur

objc_find
---------
	i  prof  x  y  adr  objc_find  :  renvoie l'index de l'objet se trouvant
sous les coordonnes x,y. i et prof dfinissent la fourchette de recherche
(voir objc_draw) et adr est l'adresse de l'arbre.
		intout		: index de l'objet cherch ou -1 si aucun.

objc_edit
----------
	obj  kc  idx  mode  tree  objc_edit

objc_offset
-----------
	i  adr  objc_offset  :  calcule les coordonnes de l'objet i de l'arbre
point par adr par rapport  l'origine de l'cran.
		intout		: 0 si erreur
		intout+2	: x
		intout+4	: y

objc_add
--------
	p  e  adr  objc_add  :  lie l'enfant d'index e au parent d'index p dans
l'arbre d'adresse adr.
		intout		: 0 si erreur

objc_delete
-----------
	o  adr  objc_delete  :  dfait les liens de l'objet d'index o dans l'arbre
point par adr. Les objets ne sont pas effacs.
		intout		: 0 si erreur





objc_order
----------
	o  p  adr  objc_order  :  donne  l'enfant d'index o la position p dans
l'ordre des enfants du mme parent, l'arbre est point par adr.
	p=-1		: o de vient le dernier enfant
	p=0		: o devient le premier enfant
	p=1		: o devient le second enfant
	p=2		: etc...

objc_sysvar
-----------
	m  a  x1 x2  objc_sysvar  :  renvoit (m=0) ou fixe (m=1) les attributs
des objets en 3D, a dertermine quels attributs et x1,x2 sont les valeurs ( si
m=1 et sans signification si m=0).
	intout		: 0 si erreur
	intout+2	: x1 en lecture
	intout+4	: x2 en lecture

9 Les formulaires dans les fentres
***********************************

	L'appel de form_do est bloquant, c'est  dire que l'utilisateur doit
absolument y rpondre et en sortir avant de pouvoir  nouveau utiliser le menu ou
un autre formulaire. Pour pallier  ceci, on place les formulaires dans des fentres.
Ainsi on pourra passer d'un formulaire  l'autre en slectionnant la fentre
approprie, l'accs au menu sera galement possible.

&wdial_create
-------------
	tree &wdial_create XXXX	: cre un mot XXXX correspondant  une
structure qui permettra l'inclusion de l'arbre d'objets tree dans une fentre. A
ce stade rien n'est encore affich, seul un appel  form_center a t fait pour
que la premire ouverture se fasse au centre de l'cran.
	A l'excution XXX laisse sur la pile l'adresse de la structure suivante:
	adr		: tree (long)
	adr+4		: x,y,l,h (mots) de l'espace de travail (taille de l'arbre)
	adr+12	: x,y,l,h (mots) de l'espace total.
	adr+20	: handle fenetre ou 0 (pas encore ouvert ou referm)
	adr+22	: index de l'objet ditable contenant le curseur ou 0.
	adr+24	: position (en caractres) du curseur

wdial_open
----------
	i  " titre"  XXXX  wdial_open	: ouvre la fentre pour la stucture
XXXX (elle contient les coordonnes, l'adresse de l'arbre). " titre" est le titre
de la fentre, i l'index de l'objet ditable qui recevra le curseur en premier ou
0 si il n'y en a pas.
	Si la fentre est dj ouverte, elle est ramene au premier plan.
	La fonction renvoit le handle de la fentre ou un code d'erreur.
	(l'arbre n'est pas dessin, c'est par evnt_multi et wdial_formdo que le
dessin se fera par l'intermdiaire des REDRAWS)

wdial_close
-----------
	XXXX wdial_close	: referme la fentre et le formulaire disparait.

wdial_evnt
----------
	buf  intout  wdial_evnt	: il s'agit d'un appel standardis 
evnt_multi comprenant les vnements suivants:
	evnt_mesag	(dont le buffer est buf)
	evnt_keybd
	evnt_button  (seul le bouton gauche est surveill)
	Il permet donc de surveiller les actions sur les fentres, le menu, les
boutons des formulaires et les objets ditables (FTEXT ou FBOXTEXT). Il
remplit buf (16 octets mini) et intout (14 octets mini) comme evnt_multi.
	Le fait d'imposer le paramtre intout permet de choisir n'importe
quelle autre zone (au lieu du intout standard) et ainsi d'effectuer d'autres
appels AES ou VDI avant de traiter l'vnement (il serait sinon effac par un
autre appel).

wdial_formdo
------------
	buf  intout  wdial_formdo   : gre les formulaires dans les fentres ds
qu'un vnement a surgi. Buf et intout sont ceux de evnt_multi ou de
wdial_evnt. (Si il s'agit du intout de evnt_multi, c'est le intout standard et il
peut tre effac  chaque appel AES ou VDI!).
	-  pour un vnement fentre, vrifie qu'elle est dans la liste de celles
crees avec wdial_open et prend en charge: REDRAW, MOVED, TOPPED et
CLOSED.
	-  pour un vnement bouton vrifie que le clic est au dessus d'un
objet de la fenetre au premier plan ouverte avec wdial_open et prend en
charge les boutons SELECTABLEs, le passage du curseur d'un FTEXT 
l'autre.
	-  pour un vnement clavier vrifie que la fentre au premier plan
contient bien un objet EDITABLE (ou un bouton DEFAULT) et prend en
charge l'dition complte du champ, le passage d'un FTEXT  l'autre (tab ou
flches) ainsi que la touche ENTER (bouton DEFAULT).
	Valeurs renvoyes:
	0	: l'vnement ne concerne pas une fentre ouverte avec
wdial_open ou l'vnement a entirement t gr par la fonction.
	1	: l'vnement ncessite un complment de traitement par
l'utilisateur, on trouve alors sur la pile XXXX (la stucture concerne) ainsi
que  l'index i du bouton EXIT ayant provoqu l'vnement:
		i=-1	: bouton CLOSER de la fentre
		i>=0	: autre bouton EXIT du formulaire.
	Une fois ce complment d'action pris en charge, il faut rappeler
wdial_formdo afin de s'assurer qu'aucun autre vnement n'tait en attente.
Ce n'est que lorsqu'on reoit 0 que l'on peut rappeler wdial_evnt pour une
autre srie d'vnements. C'est pour ceci qu'il est important de dfinir une
seconde zone 'intout' indpendante de la zone standard afin d'en conserver
les valeurs sur plusieurs appels  wdial_formdo.
	A chaque appel, le masque d'vnement (dans intout) est mis  jour
pour oter ceux dj traits.




wdial_change
------------
	i  XXXX  wdial_change   :  permet de dselectionner le bouton EXIT i
ayant t slectionn par l'utilisateur. Si la fentre de l'arbre d'objets est au
premier plan le bouton sera redessin, sinon seul son STATE est modifi et il
sera correctement redessin ds que la fentre repassera en avant.

	Voici un squelette de programme utilisant ces mots:

	cration des arbres avec 'dialogue' ou chargement avec 'rsrc_load'

	arbre1  &wdial_create  fen1		\ cration des structures
	arbre2  &wdial_create  fen2
	....
	16 allot constant BUF			\ buffer MESAG
	14 allot constant OUT			\ nouvel intout

	affichage ventuel d'un menu et/ou d'un formulaire (wdial_open)


	begin
		BUF  OUT wdial_evnt	\ surveille les vnements
		raction aux vnements ne concernant pas
		les formulaires (menu->ouverture de formulaires avec
		 wdial_open, autres fentres...)
		begin
			BUF  OUT wdial_formdo	\ s'occupe du reste
		while				\ si autre que 0
			case
			fen1 of		\ traitement spar par arbres
				case
				-1 of  fen1 wdial_close endof	\ fermer
				i1 of  ragir au bouton i1 		\ bouton EXIT
					i1  fen1  wdial_change	\ tat normal
					endof
				i2 of ....
				endcase
			endof
			fen2  of	\ idem pour les autres
				....
			endof

			encase
		repeat			\ continuer formdo pour finir vnements
	again				\ reprendre evnt, autres vnements






global
------
	laisse sur la pile l'adresse du champ global rempli par appl_init et
rsrc_load.
	global		: version de l'AES
	global+2	: nombre d'applications simultanes (-1 sous MultiTOS)
	global+4	: ID renvoye par appl_init
	global+6	: long mot utilisateur (FORTH l'utilise pour les menus!)
	global+10	: pointeur sur le fichier RSC charg avec rsrc_load.
	global+14	: 12 octets rservs
	global+26	: _AESmaxchar (version 4.00 ou >)
	global+28	: _AESminchar (version 4.00 ou >)