	11 . Routines additionnelles


	11.1 Macros


		Les macro-instructions sont trs utiles pour rendre un code plus lisible, elles aug-
mentent la portabilit mais il faut les utiliser  bon escient sinon on grossit la taille du code 
gnr de faon dmesure : tudier si un BSR ne serait pas aussi efficace.
		Les macros prennent parfois des paramtres en entre : ils sont \1 pour le premier, \2 
pour le second et ainsi de suite.

save:
	Cette macro sert  sauvegarder un ou plusieurs registres sur la pile. Il faut prciser la taille 
des registres : mot ou mot long.
	exemple : save.w d0/d5 ou bien save.l d0-a6

load:
	Cette macro vient en complment de la prcdente : elle permet de recharger des registres 
stocks sur la pile, prcisez ici aussi la taille des registres.
	exemple : load.w d0/d5 ou bien load.l d0-a6

appel:
	Cette macro permet d'appeler une fonction bios, xbios ou autre en une seule ligne :
	exemple :
	 appel dos,7,2 : fera un appel  la fonction 7 du DOS en restaurant la pile le 2 octets (1 
mot) aprs l'appel. C'est quivalent aux 3 lignes de code suivantes :

		move.w #7,-(sp)
		trap #dos
		addq.l #2,sp

SYNCHRO_GEM:
	Permet de se synchroniser avec le GEM avant de sortir d'un programme. Vide les buffers 
clavier en attente, synchronisation trame verticale.

RESOLUT:
	Permet de changer de rsolution, en prenant quatre paramtres :
		\1 : le mode vido parmi :
			- res64048016
			- res640480256	
			- res320480tc
			- res32020016		: compatible basse
			- res32024016
			- res32048016
			- res320240256
			- res320240tc
		\2 : le type de rsolution => 0:ST / 3:FALCON
		\3 : l'adresse de l'cran logique
		\4 : l'adresse de l'cran physique

MOUSEOFF:
	Permet de cacher la souris.

MOUSEON:
	Permet de montrer la souris si elle a t cache avec mouseoff par exemple.

Ces deux macros sont des appels TOS. On leurs prfrera les appels VDI v_hide_c et 
v_show_c

FILE_OPEN:
	permet d'ouvrir un fichier en lecture, criture en un seul appel : 3 paramtre :
		\1 : read (lecture seule) /write (cration ou efface s'il existe) / read_write (lecture ou 
criture :  associer avec des fseek)
		\2 : nom du fichier soit dans un registre (a0-a6) soit un label : pour un pea.
		\3 : registre de destination pour le handle ou le code d'erreur en retour.

RESERVE_SCREENS:
	permet de rserver un certain nombre d'crans et de changer de rsolution. (pour un swap-
ping d'crans d'une dmo par exemple) Les deux paramtres sont :
		\1 : nombre d'crans
		\2 : resolution (cf. RESOLUT)
	Doivent tre dfinies aussi les 3 constantes suivantes :
		x_max_p : nombre de pixels horizontaux
		y_max_p : nombre de pixels verticaux
		nb_bits_per_pix : nombre de bits pour un pixel dans la rsolution spcifie.

	Les x adresse (x * 1.L) des crans seront disponibles dans un tableau commenant au label 
ecrans. Ces crans seront aligns sur des multiples de 256 octets.

CHANGE_RESOLUT:
	Cette macro est la mme que RESERVE_SCREENS avec uniquement la partie change-
ment de rsolution, sans rservation d'cran.

RESTORE_SCREENS:
	Cette macro restaure l'adresse et la rsolution de l'cran aprs l'usage de CHANGE_RE-
SOLUT.

COLOR256:	
	Cette macro permet de mettre la couleur du fond  une certaine couleur si vous tes en mo-
de 256 couleurs. Si le flag FLG_INIBE_COLOR est dfini, le changement ne sera pas effec-
tu. Cette macro est utile pour estimer un temps machine en phase dbug et on dfinit le flag 
quand on ne veut plus de changement.

COLOR:
	Identique a la macro COLOR256 mais en 16 couleurs ici.

ZILOGR:
	Ceci sert  lire un registre du Zilog prsent sur le Falcon. Les 3 paramtres sont :
		\1 : registre du Zilog
		\2 : registre de destination de lecture
		\3 : canal : 'A' ou 'B'

ZILOGW:
	Ceci sert  crire un registre du Zilog prsent sur le Falcon. Les 3 paramtres sont :
		\1 : registre du Zilog
		\2 : octet  t crire
		\3 : canal : 'A' ou 'B'

COPY_STRING:
	Trs utile lors de la manipulation de chanes de texte pour copier une chane d'une adresse 
vers une autre. Les 3 paramtres sont :
		\1 : adresse de la chane source pointe par une registre.
		\2 : adresse de destination pointe par une registre.
		\3 : octet qui marque la fin de la chane source : lui aussi sera copi.

COPY_STRING_0:
	Idem  COPY_STRING mais pour le cas trs frquent d'une chane termine par un 0. Ne 
prend que 2 paramtres :
		\1 : adresse de la chane source pointe par une registre.
		\2 : adresse de destination pointe par une registre.


Les macros suivantes sont des fonctions systme mises en macro car elles sont souvent utili-
ses.

CRAWCIN:
	Attend une touche au clavier et la renvoie dans d0.

SUPEXEC:
	Execute une fonction superviseur dont l'adresse est dans : \1 et qui se termine par un rts.

VSYNC:
	Synchronisation avec le balayage vertical.

VSETMODE:
	Change de mode vido.

CCONWS:
	Affiche une chane  l'cran en mode terminal: \1 adresse de la chane.

FATTRIB:
	Lit est modifie les attributs d'un fichier : \1 attribut, \2 flag, \3 nom du fichier.

FDELETE:
	Efface un fichier : \1 nom du fichier.

FREAD:
	Lecture d'un fichier :	
		\1 : adresse du buffer.
		\2 : longueur  lire
		\3 : handle du fichier

FWRITE:
	criture d'un fichier :	
		\1 : adresse du buffer.
		\2 : longueur  crire
		\3 : handle du fichier

FSEEK:
	Dplacement du pointeur de lecture/criture dans un fichier.
		\1 : mode : 0:depuis le dbut 1:depuis l'endroit courant 2:depuis la fin
		\2 : handle du fichier
		\3 : offset dans le fichier

FCLOSE:
	Fermeture d'un fichier dont le handle est : \1.

FSFIRST:
	Trouve le premier ficher correspondant aux attributs :
		\1 : attributs du chier
		\2 : pointeur sur une chane reprsentant le masque du nom du fichier.
	Le rsultat sera dans le buffer DTA courant.

FSNEXT:
	Trouve le fichier suivant correspondant aux critres spcifis avec FSFIRST.
	Le rsultat sera dans le buffer DTA courant.

DGETDRV:
	Donne le lecteur courant dans d0.

DSETDRV:
	Change le lecteur courant  celui spcifi dans \1.

DGETPATH:
	Recherche du chemin courant sur le lecteur spcifi :
		\1 : lecteur dont on veut le chemin courant.
		\2 : tampon o stocker le chemin en retour.

DSETPATH:
	Change le chemin par dfaut sur le lecteur courant  celui spcifi dans \1.

FSETDTA:
	Change l'adresse du buffer DTA  l'adresse spcifie dans \1.

FGETDTA:
	Rcupre d'adresse du DTA courant dans d0.

MALLOC:
	Alloue la quantit de mmoire \1 et retourne dans d0 l'adresse.

MXALLOC:
	Permet d'allouer de la mmoire en choisissant son type :
		\1 : type de mmoire : 
			RAM_ST		: ST - Ram uniquement
			RAM_TT		: TT - Ram uniquement
			RAM_ST_TT	: si possible ST - Ram sinon TT - Ram
			RAM_TT_ST 	: si possible TT - Ram sinon ST - Ram
		\2 : quantit en octets

MFREE:
	Libration d'un bloc de mmoire allou quel que soit son type. \1 pointe sur le dbut du 
bloc.

SUPER:
	Passe en mode superviseur si \1=0 ou bien dtermine en quel mode on se trouve (User ou 
Superviseur) si \1=1.

USER:
	Passe du mode Superviseur en mode User.


	11.2 Librairies tendues


	Ce sont des fonctions dont se sert le noyau Visual. Vous pouvez y faire appel pour votre 
gestion systme, l'ensemble des routines qui peuvent tre utiles  un programmeur averti en 
GEM y sont prsentes.
	Certaines de ces fonctions sont implantes en fonction des dfinitions places dans le fi-
chier .DEF. Reportez-vous  la section concernant le fichier .DEF pour plus de renseigne-
ment.

GWVA_COUNT_BYTES_0
	Entre		a0.l	= pointeur.
	Sortie		d0.l	= longueur de la chane.

	Retourne dans d0.l la longueur de la chane pointe en son dbut par a0.l et termine par un 
0.

GWVA_COUNT_BYTES
	Entre		a0.l	= pointeur,
			d1.b	= valeur de fin de chane.
	Sortie		d0.l	= longueur de la chane.

	Retourne dans d0.l la longueur de la chane pointe en son dbut par a0.l et termine par 
l'octet contenu dans d1.b.

GWVA_APP_OBJ_STORE_CURRENT_PATH
	Entre		a0.l	= pointeur
	Sortie

	Stocke  l'adresse pointe par a0.l le chemin complet courant sous le format suivant :
	X:\PATH\		X est l'unit et PATH le chemin entier par ex. \TOOLS\COMMS\

GWVA_APP_OBJ_SET_PATH
	Entre		a0.l	= pointeur
	Sortie

	Change le chemin et le lecteur courant pour qu'il soit celui spcifi par la chane pointe par 
a0.l et termin par un 0. Par ex. X:\PATH\

GWVA_APP_OBJ_SEARCH_SYSTEM_COOKIES
	Entre
	Sortie

	Cette fonction sert  l'initialisation pour chercher les cookies par dfaut, vous ne devriez 
pas vous en servir autrement qu'en exemple.
	Fonction  appeler par un SUPEXEC.

GWVA_APP_OBJ_SEARCH_ONE_COOKIE
	Entre		Dans GWVA_APP_OBJ_SEARCH_IN_OUT
	Sortie		Dans GWVA_APP_OBJ_SEARCH_IN_OUT

	Recherche d'un cookie.
	Il faut spcifier dans GWVA_APP_OBJ_SEARCH_IN_OUT la chane de 4 caractres 
identifiant le cookie et on aura en sortie dans le mme pointeur soit 0.l s'il n'a pas t trouv 
soit un pointeur sur le mot long suivant la chane qui tait cherche.
	Fonction  appeler par un SUPEXEC.

GWVA_APP_OBJ_SEARCH_ONE_XBRA
	Entre		Dans GWVA_APP_OBJ_SEARCH_IN_OUT
	Sortie		Dans GWVA_APP_OBJ_SEARCH_IN_OUT

	Cette fonction permet de rechercher une routine XBRA pour un vecteur donn.
	Indiquez dans GWVA_APP_OBJ_SEARCH_IN_OUT le vecteur (exemple : $44e.l), et in-
diquez dans GWVA_APP_OBJ_SEARCH_IN_OUT+4 le texte du vecteur (exemple 
"XHDI").
	En retour, vous recevrez dans GWVA_APP_OBJ_SEARCH_IN_OUT un pointeur sur le 
mot long aprs la chane textuelle demande ou 0.L si la chane reste introuvable.
	Fonction  appeler par un SUPEXEC si une adresse de base se situe dans une zone inac-
cessible en mode user.

GWVA_APP_OBJ_INSTALL_ONE_XBRA
	Entre		Dans GWVA_APP_OBJ_SEARCH_IN_OUT
	Sortie		Dans GWVA_APP_OBJ_SEARCH_IN_OUT

	Cette routine permet d'insrer facilement une routine XBRA dans un vecteur systme.
	Prcisez dans GWVA_APP_OBJ_SEARCH_IN_OUT le vecteur o installer la routine, et 
prcisez dans GWVA_APP_OBJ_SEARCH_IN_OUT+4 un pointeur sur la nouvelle routine 
(les trois mots longs qui la prcde doivent tre : XBRA, "TEXT" et 0.L)
	Vous aurez en retour dans GWVA_APP_OBJ_SEARCH_IN_OUT un 0.L si l'installation 
s'est passe correctement.
	Fonction  appeler par un SUPEXEC si une adresse de base se situe dans une zone inac-
cessible en mode user.

GWVA_APP_OBJ_REMOVE_ONE_XBRA
	Entre		Dans GWVA_APP_OBJ_SEARCH_IN_OUT
	Sortie		Dans GWVA_APP_OBJ_SEARCH_IN_OUT

	Cette routine permet de supprimer facilement une routine XBRA dans un vecteur systme.
	Prcisez dans GWVA_APP_OBJ_SEARCH_IN_OUT le vecteur o se trouve la routine  
dsinstaller et prcisez dans GWVA_APP_OBJ_SEARCH_IN_OUT+4 le texte correspon-
dant  la routine XBRA  dsinstaller.
	Vous recevrez en retour dans GWVA_APP_OBJ_SEARCH_IN_OUT soit -1 si la routine 
n'a pas t trouve, ou 0.L si la routine a t correctement enleve.
	Fonction  appeler par un SUPEXEC si une adresse de base se situe dans une zone inac-
cessible en mode user.

GWVA_SHOW_MENU
	Entre		a0.l	= pointeur du menu
	Sortie		

	Affiche une barre de menu en haut de l'cran avec dans a0.l le pointeur sur son arbre.

GWVA_HIDE_MENU
	Entre		a0.l	= pointeur du menu
	Sortie		

	Permet de cacher un menu (avant de faire un PEXEC en systme monotche par exemple) 
en passant dans a0.l l'adresse de l'arbre du menu.

GWVA_CHECK_MENU
	Entre		a0.l	= pointeur du menu
			d0.w	= numro du menu
			d1.w	= effacer le tag (0), afficher le tag (1)
	Sortie		

	Permet de tagger un lment de menu en passant dans a0.l l'adresse de l'arbre menu dans 
d0.w le numro du menu et dans d1.w soit 0 pour effacer le tag soit 1 pour l'afficher.

GWVA_GREY_MENU
	Entre		a0.l	= pointeur du menu
			d0.w	= numro du menu
			d1.w	= griser(0), d-griser (1)
	Sortie		

	Permet de griser un lment de menu en passant dans a0.l l'adresse de l'arbre menu, dans 
d0.w le numro du menu et dans d1.w soit 0 pour le griser soit 1 pour l'tat normal.

GWVA_FIND_SON_OBJECT_FROM_ORDINAL
	Entre		a0.l	= pointeur sur l'objet root d'un arbre,
			d0.w 	= ordinal du fils (0,...) recherch,
			d1.w	= numro du pre du fils recherch.
	Sortie		a0.l	= pointeur sur le fils,
	 		d0.w 	= numro de l'objet fils recherch,
			d7.w = 0 si on a trouv le fils, <0 sinon.

Recherche le numro d'un fils par son ordinal.

GWVA_FIND_ORDINAL_SON_OBJECT
	Entre		a0.l	= pointeur sur l'objet root d'un arbre,
	 		d0.w 	= numro de l'objet fils recherch,
			d1.w	= numro du pre du fils recherch.
	Sortie		a0.l	= pointeur sur le fils,
			d0.w 	= ordinal du fils (0,...) recherch,
			d7.w = 0 si on a trouv le fils, <0 sinon

Recherche l'ordinal d'un fils par son numro parmi ses frres.

GWVA_FIND_FATHER_OBJECT
	Entre		a0.l	= pointeur du menu
			d0.w	= numro de l'objet
	Sortie		a0.l	= pointeur sur le pre
			d0.w	= numro du pre
			d7.w	= 0 si le numro du pre est valide, -1 sinon

	Cette routine permet de trouver le pre d'un objet dans un formulaire en connaissant son 
fils. Indiquez dans a0.l le pointeur sur l'arbre formulaire contenant l'objet, et dans d0.w le nu-
mro du fils dont on cherche le pre.

GWVA_ENABLE_DISABLE_OBJECT
	Entre		d0.w	= numro de l'arbre formulaire
			d1.w	= numro de l'objet dans l'arbre
			d2.w	= nouvel tat  : 0=activ 1=dsactiv
	Sortie

	Permet de changer l'tat (activ/dsactiv) d'un objet dans un formulaire.

GWVA_SHOW_HIDE_TREE
	Entre		d0.w	= numro de l'arbre formulaire
			d1.w	= numro de l'objet dans l'arbre
			d2.w	= nouvel tat : 0=normal 1=cach
	Sortie

	Permet de cacher ou non un objet et ses fils dans un formulaire.

GWVA_CALL_FSEL_CP_BSS_UPDATE_FORM
	Entre		a0.l	= texte destin  l'utilisateur pour le fileselector : 35 caractres max.
			a1.l	= masque pour le fileselector: 18 caractres max
			a2.l	= pointeur sur un ventuel ancien pathname : "A:\TEMP\" ou sinon 0.l
			a3.l	= pointeur sur le BSS  remplir avec le retour du fileselctor
			a4.l	= pointeur sur la structure de la fentre-formulaire o est l'objet  redes-
siner
			d0.w	= numro du formulaire o se trouve le texte  remplir pour mise  jour
				   graphique ou 0.w si pas de mise  jour (d1-d2 inutiliss dans ce cas)
			d1.w	= numro de l'objet graphique texte  remplir avec le contenu du
				   fileselector en faisant attention de ne pas dpasser la taille
			d2.w	= si longueur de la slection > longueur de l'objet dans le formulaire 
alors :
					0 : alignement  gauche (PATH~)
					1 : alignement  droite (~PATH)
					2 : centr (PATH~NAME)
			d3.w	= 0 : recopier le nom (8+3) uniquement (cf. file_selector)
				   1 : recopier le path uniquement
				   2 : recopier tout le pathname
	Sortie		d7.w	= 0 : opration OK ou bien <>0 : erreur fileselector

	Cette fonction trs puissante, permet d'appeler un slecteur de fichier et de faire la mise  
jour d'un buffer avec le rsultat et en option la copie vers un objet graphique (objet texte dans 
formulaire).
	Typiquement : vous avez un texte dans un formulaire ; sur un click dessus, vous dsirez 
qu'un slecteur de fichiers soit appel et qu'un de vos buffers interne soit rempli avec la slec-
tion de l'utilisateur et qu'en plus, bien sur, le contenu de votre objet graphique soit rempli avec 
la nouvelle slection et qu'un REDRAW soit effectu.
	Cette fonction a besoin, pour compiler, que les labels LIB_FSEL_BSS_FORM et LIB_FI-
LESELECTOR soient dfinis.

GWVA_NO_FSEL_CP_BSS_UPDATE_FORM
	Entre		a0.l	= pointeur sur la structure de la fentre o est l'objet  redessiner (ne sert
				   pas si pas de redraw)
			a1.l	= pointeur sur le buffer texte source pour la recopie dans le formulaire.
			d0.w	= numro du formulaire o se trouve le texte  remplir pour la mise  
jour
				   graphique
			d1.w	= numro de l'objet graphique texte  remplir avec le contenu du buffer
				   source.
			d2.w	= si la longueur de la slection>longueur de l'objet dans le formulaire 
alors :
					0 : alignement  gauche (PATH~)
					1 : alignement  droite (~PATH)
					2 : centr (PATH~NAME)
			d3.w	= 0 : pas de redraw de la fentre, 1=faire un redraw

	Cette fonction est la pendante de la prcdente (qui l'appelle d'ailleurs).
	Elle copie un texte dans un objet graphique texte d'un formulaire avec justification si le tex-
te source a une longueur suprieure  la longueur prvue dans le formulaire.
	Typiquement cette fonction servira en association avec la prcdente, pour l'initialisation 
des champs de texte du formulaire avant le premier appel d'un slecteur de fichier.
	Elle a besoin des mmes dfinitions que sa soeur. (cf. ci-avant)

RSC_ALERT_BOX
	Entre		d0.w	= numro de l'alert-box dans le ressource
			d1.w	= numro du bouton par dfaut : gauche(1), milieu(2), droite(3)
	Sortie		d0.w	= numro du bouton slectionn

	La faon la plus simple de faire une bote d'alerte dans un programme, c'est de l'inclure 
dans le ressource puis d'appeler cette routine avec comme paramtres :
	On a en retour dans d0.w le numro du bouton choisi finalement.

ALERT_BOX
	Entre		a0.l	= pointeur sur une chane d'alerte
			d0.w	= numro du bouton par dfaut gauche(1), milieu(2), droite(3)
	Sortie		d0.w	= numro du bouton slectionn

	Cre une boite d'alerte GEM. La chane d'alerte  le format :
	"[numro boite d'alerte][ligne1|ligne2|...|ligne5][bouton1|bouton2|bouton3]",0
	Le numro de la boite peut aller de 0  3 (jusqu' 5 sur l'AES 4.1.)

RETURN_TREE_OBJ_PTR
	Entre		a0.l	= pointeur,
			d0.w	= numro de l'arbre.
	Sortie		Dans (a0.l)

	Cette fonction va stocker dans le mot long point par a0.l l'adresse de base du formulaire 
dont le numro de l'arbre est spcifi dans d0.w.

GWVA_PRG_MODAL_FORM
	Entre		d0.w	= numro de l'arbre
	Sortie		d0.w	= numro de l'objet

	Cette fonction permet d'appeler un formulaire d'une faon bloquante, en passant dans d0.w 
le numro de l'arbre, on rcupre en retour dans d0.w le numro de l'objet exit ou touch-exit 
qui a t click.

RETURN_FORM_OBJ_SCULPTURE
	Entre		d0.w	= numro de l'arbre
	Sortie		a0.l	= pointeur sur l'objet
			d0.w	= bord gauche
			d1.w	= bord haut
			d2.w	= bord droit
			d3.w	= bord bas

	Cette fonction permet de connatre la taille des sculptures additionnelles d'un formulaire.

RETURN_OBJ_IN_FORM_OBJ_PTR
	Entre		d0.w	= numro du formulaire
			d1.w	= numro de l'objet
	Sortie	 	a1.l	= pointeur sur l'objet

	Cette fonction permet de retourner un pointeur sur un objet dans un formulaire.

RETURN_TEXT_OBJ_IN_FORM_OBJ_PTR
	Entre		d0.w	= numro du formulaire
			d1.w	= numro de l'objet
	Sortie		a1.l	= pointeur sur le champs texte.

	Cette fonction, parmi les plus utilises, permet de retourner un pointeur sur le texte d'un ob-
jet quelque soit son type (bouton, texte ...)
	A n'utiliser que pour des objets contenant du texte.

AFFICH_HEXA
	Entre		d0.l	=donne
			d1.b	=nombre de bits  afficher (jusqu' 32)
	Sortie

	Affichage sur le terminal d'un registre en mode hexadcimal.

STOCK_HEXA
	Entre		a1.l	= adresse de destination pour le stockage
			d0.w	= donne
			d1.b	= nombre de bits  prendre en compte dans d0 (8/16/32)
	Sortie		Dans (a1.l)

	Routine de transformation du contenu d'un registre en chane ASCII, et stockage.
	En sortie on a la proprit suivante :  (a1-1)=0.b

HEXA2VALUE
	Entre		a0.l	= pointeur sur la chane
			d0.w	= octet reprsentant le marqueur de fin de chane
	Sortie		d1.l	= valeur convertie
			d7.w	= erreur de traitement si d7=-1

	Cette fonction transforme une chane ASCII en valeur hexadcimale :
	En sortie on a la proprit suivante  : (a0-1)=d0 si d7=0

STOCK_DECI
	Entre		a1.l	= destination o stocker le chiffre en dcimal sign
			d0.l	= valeur  traiter
	Sortie		Dans (a1.l)

	Une des fonctions les plus utilises : conversion d'une valeur dcimale en chane ASCII, et 
stockage.
	En sortie on a la proprit suivante  : (a1-1)=0.b

DECI2VALUE
	Entre		a0.l	= pointeur sur la chane
			d0.b	= octet de fin de chane
	sortie		d1.l	= valeur convertie
			d7.w	= erreur de conversion si d7=-1

	Transforme une chane ASCII en une valeur dcimale.
	En sortie on a la proprit suivante  : (a0-1)=d0 si d7=0

FILE_SELECTOR
	Entre		a0.l	= texte d'explication (35 caractres maximum)
			a1.l	= masque (exemple *.ASC,*.SP) (18 caractres maximum)
			a2.l	= ancien chemin (X:\PATH) pour le remettre ou bien 0.l si aucun
	Sortie		a0.l	= nom du fichier slectionn (8+1+3 caractres : EX.PRG)
			a1.l	= chemin du fichier slectionn (C:\AUTO\)
			a2.l	= chemin+nom de fichier slectionn (C:\AUTO\EX.PRG)
			d0.w	= si d0=0 l'utilisateur a annul si d0<0 alors erreur DOS.

	Appelle le slecteur de fichier GEM.

SAVE_PALETTES
	Entre
	Sortie

	Sauvegarde la palette physique 16 et 256 couleurs dans un BSS.

RESTORE_PALETTES
	Entre
	Sortie

	Sert pour restaure les 2 palettes physique sauves avec SAVE_PALETTES.

GET_FILE_LENGTH
	Entre		a0.l	= pointeur sur une chane reprsentant le nom du fichier.
	Sortie		d0.l	= longueur du fichier demand (d0<0 si fichier non trouv)

	Permet de se renseigner sur la longueur d'un fichier.

LOAD_FILE_IN_MEM
	Entre		a0.l	= pointe sur une chane reprsentant le nom du fichier
			d0.w	= mode d'allocation de la mmoire (cf. macro MXALLOC)
	Sortie		a0.l	= pointeur sur la zone de mmoire alloue
			d0.l	= longueur de la zone alloue, identique  la taille fichier
				(d0<0 si fichier non trouv)

	Permet de charger un fichier en mmoire en s'occupant de rien d'autre que le nom complet 
du fichier et dans quel type de mmoire on veut qu'il soit charger.
	Cette fonction ncessite que LIB_FLENGTH soit dfini dans le fichier .DEF de l'applica-
tion.

RS232_SEND_STRING_WITH_TIMEOUT
	Entre		a0.l	= pointeur sur le buffer
			d0.l	= longueur de la chane
			d1.w	= numro du port BIOS
			d2.l	= timeout en 1/200s au bout duquel il faut ressortir si le buffer de sortie 
				est plein et ne s'est pas vid.
	Sortie

	Permet d'envoyer une chane de caractres sur un port BIOS sans rester bloqu si le buffer 
de sortie ne se vide pas.

RS232_SEND_STRING_WITHOUT_CONTROL
	Entre		a0.l	= pointeur sur le buffer
			d0.l	= longueur de la chane
			d1.w	= numro du port BIOS
	Sortie

	Permet d'envoyer une chane de caractres sur un port BIOS sans vrification de timeout 
(plus rapide mais bloquante si le port est satur).

RS232_TEST_IF_CHAR_PRESENT
	Entre		d0.w	= port sortie
	Sortie		d7.w	= 0=(au moins 1 car prsent) -1=(aucun car prsent)

	Teste un port BIOS pour savoir s'il y a au moins un caractre en attente de lecture.

RS232_GET_AVAILABLE_CHARS
	Entre		a0.l	= adresse d'un buffer o seront stocks les caractres
			d0.l	= nombre maximum de caractres  capturer (longueur de votre buffer  
				priori)
			d1.w	= port BIOS
	Sortie		d0.l	= nombre d'octets effectivement capturs

	Permet de lire un certain nombre d'octets sur un port BIOS.

GWVA_GET_FORMATED_DATE
	Entre		a1.l	= pointeur
	Sortie		Dans (a1.l)

	Stocke dans le buffer point par a1.l une chane ASCII reprsentant la date courante forma-
te comme suit : "JJ/MM/AAAA" exemple : 29/06/1995

GWVA_GET_FORMATED_TIME
	Entre		a1.l	= pointeur
	Sortie		Dans (a1.l)

	Stocke dans le buffer point par a1.l une chane ASCII reprsentant l'heure courante forma-
te comme suit : "HH:MM:SS" exemple : 19:20:00

GWVA_GET_200HZ_COUNTER
	Entre
	Sortie		Dans GWVA_CUR_200HZ_COUNTER

	Stocke le compteur 200 hertz dans le pointeur GWVA_CUR_200HZ_COUNTER. Excu-
tez cette routine en superviseur ou avec un SUPEXEC.
	LIB_200HZ doit tre dfini pour utiliser cette fonction.

GWVA_GET_200HZ_DELAY_SINCE_LAST_CALL
	Entre		Dans GWVA_OLD_200HZ_COUNTER
	Sortie		d0.l	= dlai en 1/200s entre deux appels

	Permet de savoir combien de temps s'est coul entre deux instants donns.
	Commencez par faire un "clr.l GWVA_OLD_200HZ_COUNTER" avant votre premier ap-
pel. Puis  chaque fois que vous appellerez cette routine vous obtiendrez dans d0.l le nombre 
de fois 1/200 seconde qui spare votre appel  cette routine du prcdent.
	LIB_200HZ doit tre dfini pour utiliser cette fonction.

COMPARE_DISK_FREESPACE
	Entre		d0.w	= drive o comparer	(Attention: d0=0 : drive courant, d0=1 : drive A 
...)
			d1.l	= valeur  comparer
	Sortie		d0.l	= place libre sur le disque
			d7.w	= 0 si la place restante est suprieure ou gale  la valeur  comparer
				donne en entre ou -1 sinon.

	Cette fonction permet de savoir la place relle qu'il reste sur le disque et dans la foule de la 
comparer  une valeur donne en entre. Typiquement, cette fonction est destine  voir si, 
sur un disque donn, il reste assez de place pour crire un fichier dont on connat la taille qu'il 
prendra.
	LIB_COMPARE_DISK_FREESPACE doit tre dfini pour utiliser cette fonction.


	11.3 Librairie de relocation de ressource


Cette librairie permet d'avoir son fichier ressource en mmoire (entendez en DATA dans 
votre excutable) et de le reloger en passant dans a0.l l'adresse de dbut.
Cette routine est excute par le Visual Assembleur au lancement du programme si vous le 
dfinissez comme tel dans le fichier .OBJ de votre application (bit 0 de 
GWVA_APP_OBJ_FLAGS). Vous devez alors aussi placer MDL_RELOCATE_RSC dans le 
fichier .DEF.
La relocation du ressource fonctionne sur tous les AES. Le seul problme existant est pour 
les icnes couleurs. Si vous disposer d'une version de l'AES infrieur  4.0, les icnes auront 
de mauvaises couleurs en true-color.


	11.4 Librairie d'appels XHDI


Cette librairie regroupe l'ensemble des appels XHDI qui vous sont offerts. Ils dpendent 
grandement du driver de disque utilis, alors commencez par tester la version du driver avant 
de faire des appels.
En premier lieu, vous devez initialiser les routines en faisant :
		JSR XH_LOCATE_DRIVER
En retour dans d7.w : 0 si le driver XHDI est prsent, -1 sinon


	11.5 Librairie de recherche rcursive de fichiers


Cette librairie contient une routine qui permet de rechercher un ou plusieurs fichiers  tra-
vers une arborescence, ventuellement rcursivement, en spcifiant uniquement un chemin de 
dpart et un masque de recherche.
Pour ce fair, vous devez dclarer le label suivant : LIB_RECURSIVE_FILE_SEARCH.
Un simple saut  la routine SEARCH_FILE_RECURSIVELY suffira  lancer la recherche, 
qui ressortira quand tous les fichiers auront t examins. Une routine dont vous spcifiez 
l'adresse sera appele chaque fois qu'un fichier rencontr correspondra aux critres que vous 
avez fixs.

	Paramtres d'entre :
		a0.l	= pointeur sur une chane donnant le chemin de dpart de recherche.
			Exemple : U:\PATH
		a1.l	= pointeur sur un masque multiple termin par deux 0.b
			(maximum 100 caractres)
			Exemple : *.F?D 0 AZERTY.* 0 *.MOD 0 0
		a2.l	= adresse de la routine o sauter
		d0.w	= 0 recherche normale dans le rpertoire spcifi, 1 recherche rcursive.

	Paramtres de sortie :
		d7.w	= 0 =OK -2=bad path -1=user stop(vous avez rendu d0<0 lors de
			l'appel  votre routine)

	Appel de votre routine :
		Entre	a0	: pointeur sur un nom de fichier rpondant aux critres que
					vous avez donns. Exemple : U:\PATH\FILE.EXT
		Sortie		faites un rts avec d0=0 = continue ou bien d0=-1 arrte la
				recherche. cf ci dessus d7=-1


	11.6 Librairie pour le multi-formulaire


Dans ce fichier, sont regroups les trois routines pour la gestion des sauvegardes des formu-
laires. Ces routines ont t prcdemment dcrites dans les mthodes des fentres formulaires.


	11.7 Librairie pour l'utilisation de STiK


Cette librairie reprend toutes les fonctions de stik. Vous n'avez qu' positionner dans les re-
gistres vos paramtres : dans les registres d'adresses les pointeurs et dans les registres de don-
nes les constantes.
Pour l'inclure, dclarez LIB_STIK dans votre .DEF


	11.8 Librairie pour la gnration de threads fentre.

Cette librairie permet l'excution de routines  frquence rgulire sans avoir  se soucier 
de l'utilisation du timer GEM.
Pour ce faire, vous devez initialiser le champ GWVA_APP_OBJ_EVNT_TIMER avec la 
valeur : GWVA_WIND_THREAD_TIMER_MANAGEMENT. Ainsi que le champ 
GWVA_APP_OBJ_COUNT avec une valeur raisonnable (frquence 10 fois suprieure au 
plus,  la frquence la plus leve de votre routine en thread)
La base de raisonnement de cette librairie est d'tre 100% GEM, ainsi, lorsque le timer fait 
appel  la routine de traitement des threads, un et un seul thread sera ventuellement excut 
avant de rendre la main (une exception est faite si on a dfini  
GWVA_WIND_THREAD_FLAG_BIT_REAL_TIME, cf. plus bas). Par contre au timer sui-
vant, si la charge (les frquence d'excution par rapport au temps d'excution) est bien calcu-
le le mme thread ne sera pas r-excut et ce sera le tour d'un autre et ainsi de suite ...

Un thread de priorit n+1 peut ne jamais tre activ si la somme des temps d'excution des 
threads de priorit suprieure ou gale  n dpasse le temps la charge maximum du proces-
seur. Dans ce cas, les threads de priorit n (priorit pendant le traitement de laquelle se pro-
duit la rupture de charge) ne seront jamais activs tous  suivre (forcment il y aura entrelace-
ment avec un thread de priorit >n) par contre ils seront excuts une fois chacun.
	Exemple :
		THREAD1	: toutes les 10 ms prend 5 ms de temps d'excution, priorit 2
		THREAD2	: toutes les 10 ms prend 8 ms de temps d'excution, priorit 1
		THREAD3	: toutes les 10 ms prend 6 ms de temps d'excution, priorit 1
		THREAD4	: toutes les 10 ms prend 1 ms de temps d'excution, priorit 0

	L'ordre d'xcuction sera THREAD1, THREAD2, THREAD1, THREAD3 ...
	Remarque : THREAD4 n'est jamais excut.
Vous avez deux routines primaires  votre disposition : une pour crer un thread et une pour 
le dtruire. Sachez que si un thread est attach  une fentre (a0 pointeur sur une fentre), il 
mourra quand cette fentre sera dtruite.
Contrairement au nom de la librairie, un thread peut tre utilis en association avec autre 
chose qu'une fentre. Par contre les couples d0/d1/d2 doivent tre uniques  la cration.
Une troisime routine optionnelle est  votre disposition si vous dclarez le flag adquat. 
Elle vous permettra d'avoir des statistiques sur les temps d'excution de vos threads. Attention 
elle consomme du temps machine, ne l'utilisez qu' bon escient !

Sachez enfin, que moins vous dclarerez de threads et de niveaux de priorit dans votre 
.DEF, plus vous irez vite ; alors, dimensionnez vos besoins au plus juste !


GWVA_WIND_THREAD_CREATE:
	Entre :	d0.l : valeur qui devra tre passe dans a0 lors de l'appel au thread fentre
			d1.l : idem d0             ...
mme s'ils ne sont pas utiliss d0/d1 doivent tre renseigns (pour dtection de la cration 
d'un mme thread 2 fois)
			d2.l : adresse de la routine  excuter avec un JSR !
Attention : on ne peut pas crer 2 fois un thread avec le mme d0/d1/d2
			d3.l : frquence d'activation en multiples de 200 Hz (200 pour toutes les se-
condes)
			d4.b : priorit de 0  GWVA_WIND_THREAD_MAX_PRIORITY_LVL (0 
tant le moins prioritaire)
Un thread de priorit n+1 peut ne jamais tre activ si la somme des temps d'excution des 
threads de priorit suprieure ou gale  n dpasse le temps la charge maximum du proces-
seur.
			d5.b : flags optionnels
			pour l'instant un seul est dfini :
GWVA_WIND_THREAD_FLAG_BIT_REAL_TIME : pour tester  chaque timer si on doit 
l'excuter (il se peut dans ce cas que l'on excute plus d'une routine dans l'espace d'un timer 
GEM). Ajoutez alors OPT_GWVA_WIND_THREAD_REAL_TIME dans votre.DEF pour 
que ce flag soit gr.

	Sortie :	d7.l : d7.l >= 0 => numro du handle, d7.l < 0 : erreur

GWVA_WIND_THREAD_DELETE:
	Entre :	d0.w : numro du handle ou -1 pour tous les threads associs  a0.l pointeur 
sur une fentre
			d1.l : pointeur sur une fentre si d0=-1

	Sortie :	d7.w :	0=OK
					<0 => erreur (mauvais handle ou thread dj tu)

GWVA_WIND_THREAD_GET_INFO:
	Entre :	d0.w : numro du handle

	Sortie :	d0.l : dure de la dernire excution
			d1.l : dure minimale d'excution depuis sa naissance
			d2.l : dure maximale d'excution depuis sa naissance
			d3.l : dure moyenne d'excution depuis sa naissance
