			Les fonctions VDI
			*****************


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

	Pour tous les appels VDI il y a diffrents tableaux  remplir, en
rponse, outre les sorties graphiques, cetains paramtres seront renvoys
dans les tableaux de sortie.

	Tableaux d'entre:

control
-------
	dpose sur la pile l'adresse du champ control:
		control	: code de la fonction
		control+2	: nombre de couples de coordonnes dans ptsin
		control+4	: nombre de couples de coordonnes dans ptsout
		control+6	: nombre de valeurs dans intin
		control+8	: nombre de valeurs dans intout
		control+10	: code de sous-fonction
		control+12	: handle de la station de travail
		control+14  +24 : selon la fonction
intin
-----
	dpose sur la pile l'adresse du champ intin ou seront passs les
paramtres d'entre.

ptsin
-----
	dpose sur la pile l'adresse du champ intin ou seront passes les
coordonnes d'entre.

	Tableaux de sortie:

intout
------
	dpose sur la pile l'adresse du champ intout dans lequel est renvoy le
rsultat de l'opration.

ptsout
------
	dpose sur la pile l'adresse du champ ptsout dans lequel sont
renvoyes des coordonnes de sortie.

	Dans le FORTH en utilisation normale, control, intin et ptsin sont
remplis pour vous. Il ne reste plus qu' lire les donnes ventuelles dans
intout et ptsout. Explications sur la handle: c'est le numro attribu  la
station graphique (l'cran) dj ouvert par le FORTH. L encore en
utilisation normale il ne sera d'aucune utilit.

	Coordonnes des points:

	L'affichage se fait dans une fentre dont l'utilisateur ne peut pas
prvoir la position. Aussi, au lieu d'obliger l'utilisateur  effectuer les calculs
lui mme, il existe un mode relatif dans lequel toutes les coordonnes
passes au VDI seront dcales pour n'tre affiches que dans la fentre
FORTH actuelle.

relative
--------
	le coin suprieur gauche de la fentre ou page actuelle devient le
point 0,0. Toutes les sorties graphiques sont donc dcales. C'est le mode par
dfaut.

absolute
--------
	c'est le coin suprieur gauche de l'cran qui est le point 0,0. Les
sorties graphiques pourraient s'effectuer hors de la page actuelle.

	Mme si le FORTH s'occupe de tout, il peut tre utile de lancer une
fonction " la main" (si par exemple elle n'est pas implante):

	Fonctions manuelles:

handle
------
	variable sur 2 octets contenant le handle.

vctrl
-----
	f  p  i  sf  vctrl  : remplit le champ control avec f: code, p:couples de
ptsin, i:valeurs de intint, sf:code de sous fonction. Handle est mis
automatiquement en control+12.

vintin!
-------
	remplit le champ intin en tenant compte de la valeur en control+6.
Les valeurs sont prises sur la pile.

ptsin!
------
	remplit le champ ptsin en tenant compte de la valeur en control+2.
Les valeurs sont prises sur la pile mais ne subissent aucun ajustement mme
en mode relatf!

16b$
----
	" chaine" adr  16b$  :  copie la chaine  partir de adr en passant les
caractres de 8  16 bits, renvoit la longueur de la chaine.

vdi
---
	lance la fonction en supposant que control, intin et ptsin sont
correctement aliments.

vdi!
----
	remplit d'abord le champ ptsin (avec les dcalages), puis le champ
intin et enfin lance l'excution de la fonction. Control doit tre rempli
d'abord.



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

v_opnvwk
--------
	ouvre une station virtuelle de travail. Le FORTH n'est prvu pour
travailler qu'avec une seule station ouverte. Pour utiliser correctement cette
fonction, il faut donc sauvegarder la valeur de handle car elle sera modifie,
puis il faudra la restaurer aprs l'appel de v_clsvwk. Si on dsire crire dans
deux stations  la fois, il faudra jongler avec les deux handles en alimentant
correctement la variable handle avant chaque appel VDI.
	id l  cl  m  cm  f  ct  sr  mr  cr c  v_opnvwk
	id	identificateur (celui de ASSIGN.SYS si station externe:
imprimante=21, metafile=31...)
                      ou getrez+2 pour l'cran.
	l	type de ligne
	cl	couleur de ligne
	m	type de marques
	cm	couleur des marques
	f	fonte de caractres
	ct	couleur de texte
	sr	stle de remplissage
	mr	motif de remplissage
	cr	couleur de remplissage
	c	systme de coordonnes : 2 pour l'cran, 0 pour les externes
(de 0  32767).
	en retour, handle contient le numro de la station ou 0 si l'ouverture
n'a pas t possible.
	En fait, pour une station cran, le plus simple est de mettre id=0,
dans ce cas le FORTH le remplace par getrez+2 et alimente correctement
handle avant l'appel avec la valeur retourne par graf_handle.

work_out
--------
	dpose sur la pile l'adresse du tableau intout contenant les
informations renvoyes par v_opnvwk lors de l'ouverture par le FORTH.

vq_extnd
--------
	m  vq_extnd  :  renvoit des informations concernant la station de
travail, si m=0 ce sont les mmes informations que celles contenues dans
work_out, si m=1 ce sont des informations supplmentaires.

vqt_devinfo
-----------
	id  vqt_devinfo  :  renvoit 0 si le driver correspondant n'est pas
disponible et 1 dans le cas contraire. id est le numro qui prcde le nom du
driver dans le fichier ASSIGN.SYS.
	ptsout		: 0 ou 1
	intout		: chaine correspondant au nom du driver

v_clsvwk
--------
	ferme une station virtuelle de travail. Il faut redonner  handle la
valeur prcdente.

v_opnwk
-------
	Mmes paramtres que v_opnvwk. La station ouverte est ici la station
physique, pour l'cran cet appel est dj ralis par le bureau, donc on
n'ouvre plus que des stations virtuelles. Par contre pour l'imprimante
(id=21) ou un metafile (id=31) il faut ouvrir une station physique dans
laquelle on pourra travailler soit directement, soit en y ouvrant plusieurs
stations virtuelles (avec des paramtres diffrents). Pour v_opnwk, placer 0
dans id n'est pas reconnu par le FORTH contrairement  v_opnvwk.
	En retour, la variable handle contient 0 si erreur ou le handle de la
station ouverte si tout s'est bien pass.

v_clswk
-------
	ferme une station physique. Il faut alors restaurer la variable handle.

v_clrwk
-------
	efface une station de travail. Si elle est virtuelle, elle efface aussi
toutes les autres dpendant de la mme station physique. Si elle est de type
imprimante, elle ralise une jection de page.
	A l'ouverture, une station est automatiquement efface.

vq_gdos
-------
	renvoit une valeur indiquant la prsence de GDOS ou non:
	-2	: non install
	autre	: install et	%h5f464e54	: FONTGDOS
				%h5f46534d	: FSMGDOS ou SpeedoGDOS
				autre		: GDOS 1, 1.1 ou 1.2

vswr_mode
---------
	m  vswr_mode : fixe le mode d'criture pour les sorties graphiques. Le
paramtre m peut prendre les valeurs suivantes:
		m=1	remplacement
		m=2	transparent
		m=3	XOR
		m=4	transparent inverse

vs_color
--------
	i  r  v  b  vs_color : indique les taux de rouge, vert et bleu pour la
couleur d'index i. Les taux sont des valeurs de 0  1000, l'index dpend du
nombre de couleurs support.

vq_color
--------
	i  f  vq_color  : demande la composition de la couleur d'index i. Le
paramtre f influe sur le comportement de la fonction:
		f=0	renvoit les valeurs demandes par vs_color.
		f=1	les valeurs sont celles effectivement prises en compte.
	Paramtres renvoys dans intout:
		intout		: index i (ou -1 si la couleur n'existe pas)
		intout+2	: taux de rouge (0  1000)
		intout+4	: taux de vert
		intout+6	: taux de bleu
v_get_pixel
-----------
	x  y  v_get_pixel  : renvoit la couleur (en mode 16bits ou plus) ou
l'index de couleur du point aux coordonnes x,y.
	intout		: hardware index ou 0
	intout+2	: VDI index ou RRRRRGGGGGGBBBBB.

vq_key_s
--------
	Permet de connatre l'tat des touches spciales du clavier. La valeur
renvoye est un masque de bits:
		intout		: bit 0		shift droit
				: bit 1		shift gauche
				: bit 2		Control
				: bit 3		Alternate

vs_clip
-------
	Active ou dsactive le clipping:
	x1  y1  x2  y2  1  vs_clip	active le clipping, les coordonnes passes
				sont celles des deux coins opposs du rectangle.
	0  vs_clip	dsactive le clipping, tout l'cran est  nouveau
			accessible.

vex_timv
--------
	a  vex_timv	installe une routine  l'adresse "a" qui sera excute 50
fois par seconde. L'adresse de l'ancienne routine est retourne dans
control+10. La routine que l'on installe devrait se terminer en sautant vers
l'ancienne, sans modifier les registres et en n'utilisant que des appels BIOS et
XBIOS.

v_updwk
-------
	sort la page courante sur la station actuelle (celle pointe par handle).

v_output_window
---------------
	x  y  x'  y'  v_output_window  :  mme effet que v_updwk, sauf que
seule une portion est concerne.

v_form_adv
----------
	mme effet que v_updwk mais ralise en plus un jection de page. La
page actuelle n'est pas efface.

v_pgcount
---------
	n  v_pgcount  :  ralise n+1 copies de la mme page sur une station
Laser.

v_clear_disp_list
-----------------
	efface la page actuelle sans la sortir sur la station ouverte.




3 Les sorties de texte
**********************

vst_load_fonts
--------------
	charge les fontes listes dans ASSIGN.SYS si GDOS est prsent.
		intout:		nombre de fontes charges.
	La fonte 1 tant toujours diponible, la premire fonte charge a pour
index 2, la dernire n+1. Il faut charger les fontes pour chaque station
ouverte.

vst_unload_fonts
----------------
	libre la place occupe par les fontes charges  l'aide de
vst_unload_fonts.

vst_charmap
-----------
	m  vst_charmap  :  slectionne l'utilisation de chaines standard ATARI
(m=1) en 8 bits ou de chaines Bitstream (m=0) en 16 bits par caractre. Cet
appel doit prcder l'utilisation  de v_ftext16, v_ftext_offset16 et
vqt_f_extent16.

vqt_get_table
-------------
	renvoit l'adresse d'un tableau de 7 adresses pointant sur des tables de
correspondances entre la fonte ATARI et les fontes Bitstream:
	intout	: adresse (mot long).
	Chaque table contient 224 mots indiquant les indexes 16 bits
Bitstream des caractres ASCII 32  255.

v_gtext
-------
	x  y  " chaine"  v_gtext  : sort la chaine  la position x,y prcise.

v_ftext
-------
	x  y  " chaine"  v_ftext  :  sort la chaine  la position x,y prcise en
utilisant une fonte vectorielle (SpeedoGDOS).

v_ftext_offset
--------------
	adr_off  x  y  " chaine"  v_ftext_offset  :  mme principe que v_ftext,
sauf que l'adresse adr_off pointe sur un tableau d'offsets pour chaque
caractre  sortir. Un couple d'offsets est une paire de coordonnes relatives
sur 2 octets chacune.

v_ftext16
---------
	x  y  adr  v_ftext16  :  mme principe que v_ftext sauf que l'adresse
adr pointe sur une chaine dont chaque caractre utilise 16 bits au lieu de 8
(Voir vst_charmap).

v_ftext_offset16
----------------
	adr_off  x  y  adr  v_ftext_offset16  :  mme principe que
v_ftext_offset16, sauf que les caractres sont sur 16 bits chacun (Voir
vst_charmap).

v_justified
-----------
	x  y  " chaine"  l  m  c  v_justified    : sort la chaine  la position x,y
prcise. Les 3 autres paramtres influent sur la longueur du texte  l'cran:
	l	: longueur totale impose (en points cran)
	m	: jouer sur l'espace entre les mots (1:oui, 0:non)
	c	: jouer sur l'espace entre les lettres (1:oui, 0:non)

vst_height
----------
	h  vst_height : slectionne la taille des caractres en pixels. On obtient
en retour les valeurs effectivement prises en compte:
		ptsout		: largeur d'un caractre
		ptsout+2	: hauteur d'un caractre
		ptsout+4	: largeur d'une cellule
		ptsout+6	: hauteur d'une cellule.

vst_point
---------
	h vst_point  : slectionne la taille des caractres en points (1/72 de
pouce). Si la taille demande n'est pas liste dans EXTEND.SYS, c'est celle
immdiatement en dessous qui est choisie. Les paramtres renvoys sont les
mmes que pour vst_height.

vst_arbpt
---------
	h  vst_arbpt  :  slectionne la taille en points d'une foncte vectorielle
(sous SpeedoGDOS). La valeur de h n'est pas limite aux valeurs prsentes
dans ASSIGN.SYS. Renvoit les mmes paramtres que vst_height.

vst_arbpt32
-----------
	hi  hf  vst_arbpt32  :  mme effet que vst_arbpt sauf que la taille est
au format fix31 spar en partie entire (hi) et fractionnaire (hf).

vst_setsize
-----------
	l  vst_setsize  :  fixe la largeur en points d'une fonte vectorielle
indpendemment de sa hauteur (vst_arbpt). Renvoit les mmes valeurs que
vst_height.

vst_setsize32
-------------
	li  lf  vst_setsize32  :  mme effet que vst_setsize sauf que la largeur
est au format fix31 spar en partie entire (li) et partie fractionnaire (lf).

vst_rotation
------------
	a  vst_rotation : slectionne l'angle d'criture en 1/10 de degr. On
trouve dans intout la valeur slectionne:
		intout	: 	angle effectivement pris en compte.

vst_skew
--------
	a  vst_skew  :  fixe l'angle d'inclinaison en 1/10 de degr pour une
fonte vectorielle. On peut obtenir ainsi de l'italique vers la gauche (valeurs
-900  0) ou de l'italique vers la droite (0  +900).
		intout  :	inclinaison prise en compte.
		|
vst_font
--------
	id  vst_font : slectionne une fonte. La numro 1 est toujours
disponible (fonte systme). L'identificateur est un numro personnel de la
fonte qui est renvoy par vqt_name.
		intout :	identificateur de la fonte slectionne.

vqt_fontheader
--------------
	adr  vqt_fontheader  :  renvoit  l'adresse adr une copie du header de
la fonte actuelle sous Speedo (minimun 421 octets), renvoit en plus dans
pad le nom complet du fichier correspondant  cette fonte. Pad est dpos
sur la pile.

vst_color
---------
	i  vst_color  : fixe la couleur pour les sorties de texte.
		intout		index de couleur slectionn.

vst_effects
-----------
	m  vst_effects  : slectionne diffrents effets de texte selon le masque
de bits m:
		m	bit 0:	gras
			bit 1:	lger
			bit 2:	italique
			bit 3:	soulign
			bit 4:	contour
			bit 5:	ombre
		intout		: masque effectivement pris en compte.

vst_alignment
-------------
	h  v  vst_alignment  :  spcifie  quel point du texte correspondent les
coordonnes x,y des fontions v_gtext ou ses drives. Par dfaut x pointe sur
la gauche du texte et y sur le bas.
	h=0	: x  gauche	v=0	: y pointe sur la ligne d'criture
	h=1	: x au centre	v=1	: y pointe sur le sommet des minuscules
	h=2	: x  droite	v=2	: y pointe sur le sommet des majuscules
				v=3	: y pointe sur le bas de la cellule
				v=4	: y pointe sur le bas des lettres
				v=5	: y pointe sur le haut de la cellule
		intout		: h slectionn
		intout+2	: v slectionn.

vqt_attributes
--------------
	renvoit l'ensemble des paramtres pour les sorties de texte:
	intout		: id de la fonte	ptsout		: largeur de caractre
	intout+2	: index de couleur	ptsout+2	: hauteur
	intout+4	: angle			ptsout+4	: largeur d'une cellule
	intout+6	: pos. horizontale	ptsout+6	: hauteur
	intout+8	: pos. verticale
	intout+10	: mode d'criture

vqt_extent
----------
	" chaine" vqt_extent : renvoit les coordonnes du cadre contenant la
chaine en prenant en compte tous les effets de texte:
		ptsout		: x haut gauche	ptsout+8	: x bas droite
		ptsout+2	: y haut gauche	ptsout+10	: y bas droite
		ptsout+4	: x haut droite	ptsout+12	: x bas gauche
		ptsout+6	: y haut droite	ptsout+14	: y bas gauche

vqt_f_extent
------------
	" chaine"  vqt_f_extent  :  mme action que vqt_extent, sauf que la
fonction s'applique  des fontes gres par SpeedoGDOS et tient compte de
leurs spcificits.

vqt_f_extent16
--------------
	adr  vqt_f_extent16  :  mme action que vqt_f_extent mais l'adresse
pointe sur des caractres Speedo 16 bits au lieu de 8 bits. (Voir
vst_charmap).

vqt_width
---------
	c  vqt_width  : renvoit des informations sur le caractre c:
		ptsout		: largeur de la cellule
		ptsout+4	: espace disponible  gauche
		ptsout+8	: espace disponible  droite
		intout		: -1 si le caractre n'est pas dans la fonte.

vqt_name
--------
	n  vqt_name  : renvoit dans pad le nom de la fonte de numro n:
	n	: numro de la fonte (selon le nombre renvoy par
		vst_load_fonts)
	intout	: identificateur de la fonte ( conserver pour le passer 
		vst_font).
	pad est dpos sur la pile.

vqt_fontinfo
------------
	renvoit des informations (en pixels) sur la fonte actuelle:
	intout		: ASCII de dpart
	intout+2	: ASCII de fin

	ptsout		: largeur cellule
	ptsout+2	: cart base/bottom line
	ptsout+4	: elargissement lors d'effets
	ptsout+6	: cart descent/base line
	ptsout+8	: offset gauche pour l'italique
	ptsout+10	: cart half/base line
	ptsout+12	: offset droit pour l'italique
	ptsout+14	: cart ascent/base line
	ptsout+18	: cart top/base line

v_flushcache
------------
	vide le cache (cette zone sert  stocker les images Bitmap des fontes
proportionnelles lorsqu'une taille a t choisie, ceci vite de recalculer
l'image cran d'un caractre  chaque appel).

v_savecache
-----------
	" fichier"  v_savecache  :  sauvegarde le cache sur disque, la chaine
contient le nom complet du fichier  crer.

v_loadcache
-----------
	" fichier" mode v_loadcache :  charge dans le cache un fichier
prcdement sauv. Si mode=0, le fichier est ajout au cache existant, si
mode=1, le cache est pralablement vid.

vqt_cachesize
-------------
	n  vqt_cachesize  :  retourne dans intin la taille d'un des deux caches.
Si n=0, c'est la cache Bitmap, si n=1 c'est l'autre.
	intint	: sur 4 octets, taille du cache.

v_getbitmap_info
----------------
	c  v_getbitmap_info  :  renvoit des informations sur l'image bitmap du
caractre c en tenant compte des attributs actuels de texte:
	intout		: largeur		intout+12	: xoff
	intout+2	: hauteur		intout+16	: yoff
	intout+4	: advx			intout+20	: adresse du bitmap
	intout+8	: advy
	advx,advy  ainsi que xoff,yoff sont au format fix31.

v_getoutline
------------
	c  n  adr1  adr2  v_getoutline  :  renvoit les informations ncessaires
pour reconstruire le caractre c  l'aide de courbes de Bzier. Les adresses
adr1 et adr2 pointent sur deux buffers qui recevront les coordonnes des
points et leurs flags (voir v_bez), n indique le nombre maximum de points
que ces buffers peuvent contenir.
	intout		: nombre de points renvoys.

vqt_advance
-----------
	c  vqt_advance  :  renvoit les vecteurs de dplacement pour le
caractre c. Le dplacement indique o dessiner le caractre suivant  partir
de la position du caractre c (attributs de texte compris).
	ptsout et ptsout+2		: dx et dy en pixels.
	ptsout+4 et ptsout+6	: rx et ry. Ce vecteur est le reste (modulo
16384). Pour un rendu plus prcis, il suffit d'additionner ces restes
caractres par caractres et d'effectuer un dcalage d'un pixel
supplmentaire ds que 16384 est atteint.

vqt_advance32
-------------
	c  vqt_advance32  :  renvoit le vecteur de dplacement pour le
caractre c. Par rapport  vqt_advance, le vecteur est au format fix31 (donc
pas de reste) sur deux mots longs:
	ptsout+8	: dx en fix31
	ptsout+12	: dy en fix31.

vst_error
---------
	adr  m  vst_error  :  si m=1 les erreurs GDOS seront affiches  l'cran
sous forme de textes, si m=0 les messages sont remplacs par un code
d'erreur sur 2 octets rang  l'adresse adr. L'application doit alors consulter
cette valeur aprs un appel VDI, un zro indique que tout va bien, les autres
valeurs sont des codes d'erreur, l encore l'application doit remettre cette
valeur  zro aprs l'avoir lue.

vst_scratch
-----------
	m  vst_scratch  :  fixe le mode d'allocation de buffers pour
SpeedoGDOS selon les valeurs de m:
	m=0	: taille suffisante pour effets sur fontes vectorielles et bitmap
	m=1	: taille suffisante pour effets sur fontes bitmap uniquement
	m=2	: taille rduite, pas d'effets sur les fontes.

vst_kern
--------
	tmode  pmode  vst_kern

vqt_pairkern
------------
	c1  c2  vqt_pairkern

vqt_trackkern
-------------
	renvoit au format fix31 les coordonnes x et y:
	ptsout		: x
	ptsout+4	: y

4 Les fonctions de lignes
*************************

v_pline
-------
	x1  y1  ....  xn  yn  n  v_pline  : trace une ligne brise liant les n points.

vsl_type
--------
	t  vsl_type  : fixe le type de ligne selon les valeurs de t:
		t=1	----------------		t=5	--------
		t=2	------------		t=6	----   --   --
		t=3	--      --      		t=7	dfini par vsl_udsty
		t=4	--------    --

vsl_udsty
---------
	m  vsl_udsty  : dfinit le motif de ligne lorsque le type 7 est choisi
avec vsl_type. A cet effet m est un masque de 16 bits (1=le point est mis,
0=le point n'est pas mis) qui sera indfiniment rpt pour former les lignes.

vsl_width
---------
	e  vsl_width  :  fixe l'paisseur des lignes en pixels. Une valeur paire
est arrondie  l'impair infrieur.
		ptsout		: paisseur slectionne


vsl_color
---------
	i  vsl_color  : fixe l'index de couleur pour les lignes.
		intout		: index slectionn.

vsl_ends
--------
	d  f  vsl_ends  :  fixe les styles pour les dbuts et fin de ligne selon les
valeurs de d et f:
		0	: extrmit rectangulaire
		1	: extrmit en flche
		2	: extrmit arrondie.

vql_attributes
--------------
	renvoit les attributs de ligne actuels:
	intout		: type			intout+6	: extrmit de dpart
	intout+2	: index couleur	intout+8	: extrmit de fin
	intout+4	: mode d'criture	ptsout		: paisseur


5 Les fonctions de marques
**************************

v_pmarker
---------
	x1  y1  ....  xn  yn  n  v_pmarker  :  trace une marque en chacun des n
points.

vsm_type
--------
	t  vsm_type  :  fixe le type de marque  utiliser
		t=1	point			t=4	carr
		t=2	croix (plus)		t=5	croix (multipli)
		t=3	toile			t=6	losange
	Toute autre valeur sera remplace par 3.
		intout		: marque slectionne.

vsm_height
----------
	h  vsm_height  :  fixe la taille des marques (aucun effet sur le point).
Toutes les hauteurs ne sont pas toujours possibles, aussi on obtient en
retour:
		ptsout		: largeur effectivement prise en compte
		ptsout+2	: idem pour la hauteur.

vsm_color
---------
	i  vsm_color  :  fixe l'index de couleur pour les marques.
		intout		: index slectionn

vqm_attributes
--------------
	renvoit les attributs de marque actuels:
	intout		: type			ptsout		: largeur
	intout+2	: couleur		ptsout+2	: hauteur
	intout+4	: mode d'criture


6 Les fonctions de remplissage
******************************

v_contourfill
-------------
	i  x  y  v_contourfill  :  commence le replissage en x,y avec la couleur
de remplissage courante et s'arrte:
		si i=-1	: ds qu'un point a une autre couleur que celle en x,y
		si i>0	: ds qu'un point a la couleur i.

v_recfl
-------
	x1  y1  x2  y2  v_recfl  :  remplit une surface rectangulaire selon les
attributs courants, les coordonnes sont celles de deux points opposs du
rectangle.

v_fillarea
----------
	x1  y1  ....  xn  yn  n  v_fillarea  : remplit le polygone dlimit par les
n points. Le premier et le dernier sont automatiquement relis.

vsf_interior
------------
	t  vsf_interior  :  fixe le type de remplissage  utiliser selon t :
		t=0	utiliser la couleur de fond
		t=1	utiliser la couleur passe par vsf_color
		t=2	utiliser des motifs (voir vsf_style)
		t=3	utiliser des hachures (voir vsf_style)
		t=4	utiliser le motif dfini par vsf_udpat.
		intout		: type slectionn

vsf_style
---------
	i  vsf_style  :  slectionne le type de hachures (1  12) ou de motifs (1
 24) selon le type choisi par vsf_interior.
		intout		: index slectionn

vsf_color
---------
	i  vsf_color  :  choisit la couleur de remplissage.
		intout		: couleur slectionne

vsf_perimeter
-------------
	f  vsf_perimeter  :  active (f=1) ou dsactive (f=0) le trac du contour
des surfaces remplies. Seule v_recfl n'en tient pas compte, il faut donc
utiliser v_bar  la place.

vsf_udpat
---------
	a  p  vsf_udpat  : dfinit un motif de remplissage. Le paramtre n
dfinit le nombre de plans (n=1 en monochrome), a est l'adresse ou sont
rangs successivement les n plans. Chanque plan est une suite de 16 fois 16
bits correspondant  une grille carre de 16 sur 16 (32 octets par plan). Le
premier plan contient les bits de poids fort, le dernier les bits de poids faible.



vqf_attributes
--------------
	renvoit les attributs de remplissage actuels:
	intout		: type (vsf_interior)	intout+6	: mode d'criture
	intout+2	: couleur		intout+8	: flag  vsf_perimeter
	intout+4	: index du motif (vsf_style)

7 Les objets de base
********************

v_bar
-----
	x1  y1  x2  y2  v_bar  :  remplit un rectangle.

v_pieslice
----------
	x  y  r  a0  a1  v_pieslice  :  remplit une portion de cercle de centre x,y
de rayon r et d'angles de dbut et de fin a0,a1 en 1/10 de degr.

v_circle
--------
	x  y  r  v_circle  : remplit un cercle de centre x,y et de rayon r.

v_arc
-----
	x  y  r  a0  a1  v_arc  : trace le contour d'un arc de cercle de centre x,y
de rayon r et limit par les angles a0,a1 en 1/10 de degr.

v_ellpie
--------
	x  y  rx  ry  a0  a1  v_ellpie  :  remplit une portion d'ellipse de centre
x,y de rayons rx,ry et limite aux angles a0,a1 en 1/10 de degr.

v_ellipse
---------
	x  y  rx  ry  v_ellipse  :  remplit une ellipse de centre x,y et de rayons
rx,ry.

v_ellarc
--------
	x  y  rx  ry  a0  a1  v_ellarc  :  trace le contour d'une ellipse de centre
x,y de rayons rx,ry et limite par les angles a0,a1.

v_rfbox
-------
	x1  y1  x2  y2  v_rfbox  :  remplit un rectangle aux coins arrondis.

v_rbox
------
	x1  y1  x2  y2  v_rbox  :  trace le contour d'un rectangle aux coins
arrondis.


8  La souris
************

vsc_form
--------
	a  vsc_form  :  dfinit l'apparence de la souris, a cet effet a est
l'adresse d'un bloc de 37 mots ainsi dfinis:
	a	: hot spot x de la souris	a+8	: couleur de masque
	a+2	: hot spot y de la souris	a+10	: 16 mots pour le masque
	a+4	: nombre de plans (1)	a+42	: 16 mots pour le devant
	a+6	: couleur

v_show_c
--------
	f  v_show_c  : affiche le curseur de la souris selon les valeurs de f
		f=0	afficher
		f=1	tenir compte du nombre d'appels de v_hide_c

v_hide_c
--------
	cache le curseur de la souris.

vq_mouse
--------
	renvoit l'tat de la souris:
	intout		: mouse button (bit0=gauche, bit1=droite)
	intout+2	: mouse x
	intout+4	: mouse y

vex_butv
--------
	adr  vex_butv  :  installe une routine appele chaque fois qu'un bouton
de souris est appuy. Cette routine reoit dans D0 l'tat des boutons, elle doit
restaurer tous les registres qu'elle utilise et ne faire appel qu'au BIOS ou
XBIOS. On reoit dans control+18 l'adresse de l'ancienne routine.

vex_curv
--------
	adr  vex_curv  :  installe une routine appele chaque fois que le
curseur de la souris doit tre dessin. La routine reoit dans D0 et D1 les
coordonnes x,y de la souris. Pour le reste, voir vex_butv.

vex_motv
--------
	adr  vex_motv  :  installe une routine appele chaque fois que la souris
a boug. La routine reoit dans D0 et D1 les coordonnes x,y de la souris,
elle peut les modifier (pour ralentir, acclrer ou limiter les dplacements).
Pour le reste, voir vex_butv.

9 Le curseur en mode texte
**************************

	En mode "relative" toutes ces oprations sont dtournes (pas de rel
appel VDI) et grent le curseur de texte du FORTH dans la page actuelle. En
mode "absolute" c'est l'appel VDI qui est ralis:

vq_chcells
----------
	indique le nombre de lignes et de colonnes disponibles en mode texte
		intout		: lignes
		intout+2	: colonnes

v_exit_cur
----------
	sort du mode texte et raffiche la souris.


v_enter_cur
-----------
	efface la souris et revient en mode texte.

v_curup
-------
	une ligne vers le haut. Si on est dj en haut, rien ne se passe.

v_curdown
---------
	une ligne vers le bas. Si on se trouve dj en bas, rien ne se passe.

v_curright
----------
	une position vers la droite, si on se trouve dj tout  droite, rien ne
se passe.

v_curleft
---------
	une position vers la gauche. Si on se trouve dj tout  gauche, rien
ne se passe.

v_curhome
---------
	ramne le curseur en haut  gauche de la fentre sans effacer l'cran.

v_eeos
------
	efface depuis la position du curseur jusqu'au bas de la fentre.

v_eeol
------
	efface depuis la position du curseur jusqu' la fin de la ligne.

vs_curaddress
-------------
	l  c  vs_curaddress  :  fixe la ligne et la colonne du curseur de texte.
Les coordonnes comlmencent  1 et sont ramenes  leur maximum en cas
de dpassement.

v_curtext
---------
	" chaine"  v_curtext  :  affiche une chaine  la position courante du
curseur, affiche ventuellement sur la ligne suivante et scrolle si besoin.

v_rvon
------
	passe en vido inverse.

v_rvoff
-------
	revient en video normale.

vq_curaddress
-------------
	renvoit les coordonnes du curseur de texte.
		intout		: ligne
		intout+2	: colonne.

vq_tabstatus
------------
	indique la prsence d'une tablette graphique ou d'une souris:
		intout		: 0=absente, 1=prsente.
v_hardcopy
----------
	lance une copie d'cran.

v_fontinit
----------
	adr  v_fontinit  :  permet de remplacer la fonte systme,  cet effet adr
est l'adresse du header de la nouvelle fonte (au format LineA).

10 Les fonctions de bloc
************************

	Pour ces fonctions, la gestion des MFDB (dfinition des blocs) a t
spare. De ce fait, on dfinit d'abord les deux blocs (source et destination)
puis on appelle la fonction voulue:

mfdbs
-----
	trois syntaxes sont disponibles pour dfinir le bloc source:
	*   adr  l  h  np  f  mfdbs  :
		adr	l'adresse du bloc en mmoire
		l  h 	longueur et hauteur totale du bloc
		np	nombre de plans
		f	format (0=normal, 1=format indpendant)
	*   -1  mfdbs :
		c'est l'cran, la VDI se charge des diffrents paramtres.
	*   adr  mfdbs  :
		adr est l'adresse d'un bloc mmoire contenant les informations
suivantes:
		adr		adresse des donnes
		adr+4		l
		adr+6		h
		adr+8		l en mots (l'instruction le calcule pour vous)
		adr+10	f
		adr+12	np
		adr+14,+16,+18	rservs.

	Mme si la largeur des zones  traiter n'est pas multiple de 16, il faut
que l soit un multiple de 16. Il faut donc prendre le multiple de 16
immdiatement au dessus de la largeur voulue pour que les oprations se
passent bien. Par exemple un sprite de 30x30 se verra allouer une zone de
32x30. En 16 couleurs, chaque point demande un demi-octet, donc
32x30/2=480 octets ncessaires, par contre dans les fonctions de copie
suivantes on pourra prciser l=30.

mfdbd
-----
	c'est exactement la mme syntaxe que pour le bloc source, il s'agit ici
du bloc destination.

vr_trnfm
--------
	transforme le bloc source (avec son format) en un bloc destination
(avec un format diffrent). Normalement les deux blocs ont les mmes
caractristiques, le format mis  part.

vrt_cpyfm
---------
	copie un bloc monochrome vers un bloc monochrome ou couleur:
	x  y  x'  y'  l  h  m  c  c'  vrt_cpyfm
		x,y	coin suprieur gauche dans la source
		x',y'	coin suprieur gauche dans la destination
		l,h	taille du bloc  dplacer (peut tre infrieure  la taille
			totale de chaque bloc)
		m	mode (1=replace, 2=trans, 3=XOR, 4=inverse trans)
		c,c'	indexs de couleur pour le premier plan et le fond.
	Pour un masque d'icone ou de souris m=2, c=0 et c'=1.

vro_cpyfm
---------
	copie un bloc couleur sur un bloc couleur:
	x  y  x'  y'  l  h  m  vro_cpyfm
		x,y	coin suprieur gauche dans la source
		x',y'	coin suprieur gauche dans la destination
		l,h	taille du bloc  dplacer
		m	mode (0=efface dest, 3=replace, 6=XOR, 7=OR)
	Pour des donnes d'icone (aprs avoir dessin le masque) m=7.

	Par exemple, pour copier une zone de l'cran vers l'cran:
	-1  mfdbs
	-1 mfdbd
	0  0  100 100  16  16  3 vro_cpyfm   \ copie un carr 16x16 de la
					position 0,0 vers la position 100,100.

11 Les courbes de bzier
************************

	Ces fonctions ne sont utilisables qu'avec la prsence de SpeedoGDOS.

v_bez
-----
	f1  f2  ... fn  x1 y1  x2 y2  .... xn yn  n  v_bez :  sort une courbe de
Bzier s'appuyant sur n points dont les coordonnes sont passes sur la pile.
Pour chaque point on doit prciser un flag (f1  fn):
	fi	: bit0=0	: polyline (pas de courbures)
		: bit0=1	: courbe
		: bit1=0	: point trait normalement
		: bit1=1	: saut  ce point sans tracer. (Coupure dans la
				courbe)

v_bez_fill
----------
	f1  f2  ... fn  x1 y1  x2 y2  ... xn yn  n   v_bez_fill  :  mme
comportement que la fonction prcdente, sauf que l'intrieur de la courbe
est remplit avec les atrributs de remplissage courants.

v_bez_on
--------
	permet l'accs aux courbes de Bzier.


v_bez_off
---------
	interdit l'accs aux courbes de Bzier.

v_bez_qual
----------
	x  v_bez_qual  :  fixe la qualit des courbes, x va de 0 (qualit faible,
rapide)  100 (qualit maxi, lent). Intout contient la valeur slectionne.

v_set_app_buff
--------------
	adr  n  v_set_app_buff  :  force la VDI  utiliser un buffer prcis pour
la gnration des courbes. Le buffer est dfini par son adresse adr et le
nombre de paragraphes n (16 octets chacun). Avant de quitter, une
application doit dsallouer ce buffer en appelant : 0  0  v_set_app_buff.
	Par dfaut, le buffer allou de manire interne est de 8Ko.

12 Les Metafiles
****************

	Pour ouvrir un mtafile on utilise le handle 31 avec v_opnwk. Un fichier est
automatiquement cr et ouvert avec le nom GEMFILE.GEM dans le rpertoire
courant.

vm_filename
-----------
	" fichier"  vm_filename  :  permet d'affecter un nom diffrent de
GEMFILE.GEM au mtafile. Il faudra nanmoins effacer (fdelete) le fichier
par dfaut GEMFILE.GEM qui aura t cr par v_opnwk.

vm_pagesize
-----------
	l  h  vm_pagesize  :  indique les dimensions de la page du metafile en
diximes de millimtres.

vm_coords
---------
	xmin  ymin  xmax  ymax  vm_coords  :  fixe les coordonnes limites 
utiliser sur la page du mtafile. xmin,ymin sont les coordonnes en haut 
gauche et xmax,ymax sont celles en bas  droite. Par dfaut, on a:
	0  32767  32767  0  vm_coords

v_meta_extents
--------------
	xmin  ymin  xmax  ymax  v_meta_extents  :  fixe, dans le systme de
coordonnes choisi avec vm_coords, le rectangle de clipping dans le metafile.

v_write_meta
------------
	lments_intin  lments_ptsin  n_int  n_pts  v_write_meta  :  crit
dans un mtafile une fonction ayant un sous code cr par l'utilisateur. Le
premier des lments intin doit tre ce sous code (ceux de 0  100 sont
rservs).





13 Autres instructions
**********************

v_alpha_text
------------
	" chaine"  v_alpha_text  :  envoit la chaine  la station actuellement
ouverte. Cette station doit tre l'imprimante ou un mtafile, il aura donc
fallu l'ouvrir explicitement (v_opnwk) afin que la variable handle soit
correctement alimente.

v_bit_image
-----------
	r  x  y  h  v  "fichier" X Y X' Y'  v_bit_image  :  charge un fichier image
*.IMG du disque et l'affiche dans la station actuelle.
	X Y X' Y' sont les coordonnes du rectangle entourant l'image.
	" fichier" est le nom du fichier (avec chemin).
	r	: ingnorer (0) ou tenir compte (1) des proportions de l'image
	x y	: chelle fractionnaire (0) ou entire (1) sur chaque axe
	h v	: avec l'chelle entire, l'image sera cadre du mieux possible
avec les alignements suivants (h:horizontal, v:vertical):
		h	: droite(0), centre (1), gauche (2)
		v	: haut (0), centre (1), bas (2).

vq_scan
-------
	renvoit des informations sur la station imprimante ouverte (handle
doit tre correct):
	intout		: grh. (grh/div=nombre de lignes graphiques par passe)
	intout+2	: nombre de passes par page imprime
	intout+4	: alh. (alh/div=nbr de lignes par ligne de texte)
	intout+6	: nombre de lignes de texte par page
	intout+8	: div.

xv_opnwk
--------
	variante de v_opnwk dans laquelle on peut prciser les coordonnes
maximales de la station:
	id l  cl  m  cm  f  ct  sr  mr  cr c  xmax ymax  xv_opnwk
	Valeurs renvoyes:
	handle		: handle de la station
	intout		: xmax pris en compte (.w)
	intout+2	: ymax pris en compte (.w)
	control	: adresse de la station Mmoire (si id=61)

xv_updwk
--------
	variante de v_updwk dans laquelle on impose l'adresse du buffer de la
station:
	adr  xv_updwk.
	Ces deux dernires instructions conjugues permettent par exemple
d'ouvrir une station imprimante avec les dimensions d'une image charge en
mmoire, puis d'appeler xv_updwk avec l'adresse de cette image, elle sera
automatiquement imprime.



	Les instructions suivantes sont implantes dans le nouveaux drivers
d'imprimantes couleurs sous SPEEDO GDOS. Aprs tre pass par v_opnwk
(21), voici les fonctions dont on dispose:

vq_driver_info
--------------
	renvoit pad sur la pile avec le nom du driver et dans intout:
	intout: 	0, nouvelles fonctions non disponibles
	intout+2:	n de version de la librairie
	intout+4:	n de version du driver
	intout+6:	1=mono, 3=CYM, 4=CYMK
	intout+8:	masque des attributs supports:
			0: quadri
			1: ngatif
			2: mirroir
			3: copies multiples HARD
			4: copies multiples SOFT
			5: paysage

vq_bit_image
------------
	renvoit les infos suivantes:
	intout:		0, appel inexistant
	intout+2:	n de version de v_bit_image
	intout+4:	nombre maximum d'images sur une page
	intout+6:	masque de formats disponibles:
			bits0 et 1: 00=IMG monochrome
			bits2 et 3: 00=TGA non support
				      01=TGA 2 non compress
			Autres valeurs rserves.

vq_image_type
-------------
	" fichier"  adr  vq_image_type:	renvoit des infos sur le fichier
			image spcifi:
	intout:		0, appel inexistant
	intout+2:	0 fichier inconnu, 1=IMG, 2=TGA
	adr:		nombre de plans de couleurs de l'image
	adr+2:	largeur
	adr+4:	hauteur

vq_margin
---------
	renvoit les informations suivantes:
	intout: 	0, appel inexistant
	intout+2:	marge haute		intout+4:	marge basse
	intout+6:	marge gauche	intout+8:	marge droite
	intout+10:	DPI horizontal	intout+12:	DPI vertical

vs_crop
-------
	X  Y  X'  Y'  L  P  vs_crop
	positionne des repres pour la dcoupe lors d'impression sur plusieurs
pages:
	X Y X' Y': 	rectangle d'encadrement
	L: 		longueur des traits de dcoupe
	P:		position des traits par rapport aux coordonnes

	(mettre tout  0 pour supprimer ces marques)
	intout:		0, appel inexistant

vs_page_info
------------
	n  " chaine"  vs_page_info: transmet des informations sur le document
selon la valeur de n:
	n=0	Nom de l'application
	n=1	Titre du document
	n=2	Nom du crateur du document
	n=3	Remarques.

	intout: 	0, appel inexistant


