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


1 Pr‚sentation
**************

	Pour tous les appels VDI il y a diff‚rents tableaux … remplir, en
r‚ponse, outre les sorties graphiques, cetains paramŠtres seront renvoy‚s
dans les tableaux de sortie.

	Tableaux d'entr‚e:

control
-------
	d‚pose sur la pile l'adresse du champ control:
		control	: code de la fonction
		control+2	: nombre de couples de coordonn‚es dans ptsin
		control+4	: nombre de couples de coordonn‚es 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
-----
	d‚pose sur la pile l'adresse du champ intin ou seront pass‚s les
paramŠtres d'entr‚e.

ptsin
-----
	d‚pose sur la pile l'adresse du champ intin ou seront pass‚es les
coordonn‚es d'entr‚e.

	Tableaux de sortie:

intout
------
	d‚pose sur la pile l'adresse du champ intout dans lequel est renvoy‚ le
r‚sultat de l'op‚ration.

ptsout
------
	d‚pose sur la pile l'adresse du champ ptsout dans lequel sont
renvoy‚es des coordonn‚es de sortie.

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

	Coordonn‚es des points:

	L'affichage se fait dans une fenˆtre dont l'utilisateur ne peut pas
pr‚voir la position. Aussi, au lieu d'obliger l'utilisateur … effectuer les calculs
lui mˆme, il existe un mode relatif dans lequel toutes les coordonn‚es
pass‚es au VDI seront d‚cal‚es pour n'ˆtre affich‚es que dans la fenˆtre
FORTH actuelle.

relative
--------
	le coin sup‚rieur gauche de la fenˆtre ou page actuelle devient le
point 0,0. Toutes les sorties graphiques sont donc d‚cal‚es. C'est le mode par
d‚faut.

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

	Mˆme si le FORTH s'occupe de tout, il peut ˆtre utile de lancer une
fonction "… la main" (si par exemple elle n'est pas implant‚e):

	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 mˆme
en mode relatf!

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

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

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



2 Les fonctions g‚n‚rales:
**************************

v_opnvwk
--------
	ouvre une station virtuelle de travail. Le FORTH n'est pr‚vu pour
travailler qu'avec une seule station ouverte. Pour utiliser correctement cette
fonction, il faut donc sauvegarder la valeur de handle car elle sera modifi‚e,
puis il faudra la restaurer aprŠs l'appel de v_clsvwk. Si on d‚sire ‚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 caractŠres
	ct	couleur de texte
	sr	stle de remplissage
	mr	motif de remplissage
	cr	couleur de remplissage
	c	systŠme de coordonn‚es : 2 pour l'‚cran, 0 pour les externes
(de 0 … 32767).
	en retour, handle contient le num‚ro 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 retourn‚e par graf_handle.

work_out
--------
	d‚pose sur la pile l'adresse du tableau intout contenant les
informations renvoy‚es 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 mˆmes informations que celles contenues dans
work_out, si m=1 ce sont des informations suppl‚mentaires.

vqt_devinfo
-----------
	id  vqt_devinfo  :  renvoit 0 si le driver correspondant n'est pas
disponible et 1 dans le cas contraire. id est le num‚ro qui pr‚cŠde 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 pr‚c‚dente.

v_opnwk
-------
	Mˆmes paramŠtres que v_opnvwk. La station ouverte est ici la station
physique, pour l'‚cran cet appel est d‚j… r‚alis‚ 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 paramŠtres diff‚rents). 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 d‚pendant de la mˆme station physique. Si elle est de type
imprimante, elle r‚alise une ‚jection de page.
	A l'ouverture, une station est automatiquement effac‚e.

vq_gdos
-------
	renvoit une valeur indiquant la pr‚sence 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
paramŠtre 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 d‚pend du
nombre de couleurs support‚.

vq_color
--------
	i  f  vq_color  : demande la composition de la couleur d'index i. Le
paramŠtre f influe sur le comportement de la fonction:
		f=0	renvoit les valeurs demand‚es par vs_color.
		f=1	les valeurs sont celles effectivement prises en compte.
	ParamŠtres renvoy‚s 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 coordonn‚es x,y.
	intout		: hardware index ou 0
	intout+2	: VDI index ou RRRRRGGGGGGBBBBB.

vq_key_s
--------
	Permet de connaŒtre l'‚tat des touches sp‚ciales du clavier. La valeur
renvoy‚e est un masque de bits:
		intout		: bit 0		shift droit
				: bit 1		shift gauche
				: bit 2		Control
				: bit 3		Alternate

vs_clip
-------
	Active ou d‚sactive le clipping:
	x1  y1  x2  y2  1  vs_clip	active le clipping, les coordonn‚es pass‚es
				sont celles des deux coins oppos‚s du rectangle.
	0  vs_clip	d‚sactive le clipping, tout l'‚cran est … nouveau
			accessible.

vex_timv
--------
	a  vex_timv	installe une routine … l'adresse "a" qui sera ex‚cut‚e 50
fois par seconde. L'adresse de l'ancienne routine est retourn‚e 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 point‚e par handle).

v_output_window
---------------
	x  y  x'  y'  v_output_window  :  mˆme effet que v_updwk, sauf que
seule une portion est concern‚e.

v_form_adv
----------
	mˆme effet que v_updwk mais r‚alise en plus un ‚jection de page. La
page actuelle n'est pas effac‚e.

v_pgcount
---------
	n  v_pgcount  :  r‚alise n+1 copies de la mˆme 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 list‚es dans ASSIGN.SYS si GDOS est pr‚sent.
		intout:		nombre de fontes charg‚es.
	La fonte 1 ‚tant toujours diponible, la premiŠre fonte charg‚e a pour
index 2, la derniŠre n+1. Il faut charger les fontes pour chaque station
ouverte.

vst_unload_fonts
----------------
	libŠre la place occup‚e par les fontes charg‚es … l'aide de
vst_unload_fonts.

vst_charmap
-----------
	m  vst_charmap  :  s‚lectionne l'utilisation de chaines standard ATARI
(m=1) en 8 bits ou de chaines Bitstream (m=0) en 16 bits par caractŠre. Cet
appel doit pr‚c‚der 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 caractŠres ASCII 32 … 255.

v_gtext
-------
	x  y  " chaine"  v_gtext  : sort la chaine … la position x,y pr‚cis‚e.

v_ftext
-------
	x  y  " chaine"  v_ftext  :  sort la chaine … la position x,y pr‚cis‚e en
utilisant une fonte vectorielle (SpeedoGDOS).

v_ftext_offset
--------------
	adr_off  x  y  " chaine"  v_ftext_offset  :  mˆme principe que v_ftext,
sauf que l'adresse adr_off pointe sur un tableau d'offsets pour chaque
caractŠre … sortir. Un couple d'offsets est une paire de coordonn‚es relatives
sur 2 octets chacune.

v_ftext16
---------
	x  y  adr  v_ftext16  :  mˆme principe que v_ftext sauf que l'adresse
adr pointe sur une chaine dont chaque caractŠre utilise 16 bits au lieu de 8
(Voir vst_charmap).

v_ftext_offset16
----------------
	adr_off  x  y  adr  v_ftext_offset16  :  mˆme principe que
v_ftext_offset16, sauf que les caractŠres 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
pr‚cis‚e. Les 3 autres paramŠtres influent sur la longueur du texte … l'‚cran:
	l	: longueur totale impos‚e (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 : s‚lectionne la taille des caractŠres en pixels. On obtient
en retour les valeurs effectivement prises en compte:
		ptsout		: largeur d'un caractŠre
		ptsout+2	: hauteur d'un caractŠre
		ptsout+4	: largeur d'une cellule
		ptsout+6	: hauteur d'une cellule.

vst_point
---------
	h vst_point  : s‚lectionne la taille des caractŠres en points (1/72 de
pouce). Si la taille demand‚e n'est pas list‚e dans EXTEND.SYS, c'est celle
imm‚diatement en dessous qui est choisie. Les paramŠtres renvoy‚s sont les
mˆmes que pour vst_height.

vst_arbpt
---------
	h  vst_arbpt  :  s‚lectionne la taille en points d'une foncte vectorielle
(sous SpeedoGDOS). La valeur de h n'est pas limit‚e aux valeurs pr‚sentes
dans ASSIGN.SYS. Renvoit les mˆmes paramŠtres que vst_height.

vst_arbpt32
-----------
	hi  hf  vst_arbpt32  :  mˆme effet que vst_arbpt sauf que la taille est
au format fix31 s‚par‚ en partie entiŠre (hi) et fractionnaire (hf).

vst_setsize
-----------
	l  vst_setsize  :  fixe la largeur en points d'une fonte vectorielle
ind‚pendemment de sa hauteur (vst_arbpt). Renvoit les mˆmes valeurs que
vst_height.

vst_setsize32
-------------
	li  lf  vst_setsize32  :  mˆme effet que vst_setsize sauf que la largeur
est au format fix31 s‚par‚ en partie entiŠre (li) et partie fractionnaire (lf).

vst_rotation
------------
	a  vst_rotation : s‚lectionne l'angle d'‚criture en 1/10ø de degr‚. On
trouve dans intout la valeur s‚lectionn‚e:
		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 : s‚lectionne une fonte. La num‚ro 1 est toujours
disponible (fonte systŠme). L'identificateur est un num‚ro personnel de la
fonte qui est renvoy‚ par vqt_name.
		intout :	identificateur de la fonte s‚lectionn‚e.

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 d‚pos‚
sur la pile.

vst_color
---------
	i  vst_color  : fixe la couleur pour les sorties de texte.
		intout		index de couleur s‚lectionn‚.

vst_effects
-----------
	m  vst_effects  : s‚lectionne diff‚rents effets de texte selon le masque
de bits m:
		m	bit 0:	gras
			bit 1:	l‚ger
			bit 2:	italique
			bit 3:	soulign‚
			bit 4:	contour
			bit 5:	ombre
		intout		: masque effectivement pris en compte.

vst_alignment
-------------
	h  v  vst_alignment  :  sp‚cifie … quel point du texte correspondent les
coordonn‚es x,y des fontions v_gtext ou ses d‚riv‚es. Par d‚faut 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 s‚lectionn‚
		intout+2	: v s‚lectionn‚.

vqt_attributes
--------------
	renvoit l'ensemble des paramŠtres pour les sorties de texte:
	intout		: id de la fonte	ptsout		: largeur de caractŠre
	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 coordonn‚es 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  :  mˆme action que vqt_extent, sauf que la
fonction s'applique … des fontes g‚r‚es par SpeedoGDOS et tient compte de
leurs sp‚cificit‚s.

vqt_f_extent16
--------------
	adr  vqt_f_extent16  :  mˆme action que vqt_f_extent mais l'adresse
pointe sur des caractŠres Speedo 16 bits au lieu de 8 bits. (Voir
vst_charmap).

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

vqt_name
--------
	n  vqt_name  : renvoit dans pad le nom de la fonte de num‚ro n:
	n	: num‚ro de la fonte (selon le nombre renvoy‚ par
		vst_load_fonts)
	intout	: identificateur de la fonte (… conserver pour le passer …
		vst_font).
	pad est d‚pos‚ sur la pile.

vqt_fontinfo
------------
	renvoit des informations (en pixels) sur la fonte actuelle:
	intout		: ASCII de d‚part
	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 caractŠre … chaque appel).

v_savecache
-----------
	" fichier"  v_savecache  :  sauvegarde le cache sur disque, la chaine
contient le nom complet du fichier … cr‚er.

v_loadcache
-----------
	" fichier" mode v_loadcache :  charge dans le cache un fichier
pr‚c‚dement sauv‚. Si mode=0, le fichier est ajout‚ au cache existant, si
mode=1, le cache est pr‚alablement 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
caractŠre 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 n‚cessaires
pour reconstruire le caractŠre c … l'aide de courbes de B‚zier. Les adresses
adr1 et adr2 pointent sur deux buffers qui recevront les coordonn‚es des
points et leurs flags (voir v_bez), n indique le nombre maximum de points
que ces buffers peuvent contenir.
	intout		: nombre de points renvoy‚s.

vqt_advance
-----------
	c  vqt_advance  :  renvoit les vecteurs de d‚placement pour le
caractŠre c. Le d‚placement indique o— dessiner le caractŠre suivant … partir
de la position du caractŠre 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 pr‚cis, il suffit d'additionner ces restes
caractŠres par caractŠres et d'effectuer un d‚calage d'un pixel
suppl‚mentaire dŠs que 16384 est atteint.

vqt_advance32
-------------
	c  vqt_advance32  :  renvoit le vecteur de d‚placement pour le
caractŠre 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 affich‚es … l'‚cran
sous forme de textes, si m=0 les messages sont remplac‚s par un code
d'erreur sur 2 octets rang‚ … l'adresse adr. L'application doit alors consulter
cette valeur aprŠs un appel VDI, un z‚ro indique que tout va bien, les autres
valeurs sont des codes d'erreur, l… encore l'application doit remettre cette
valeur … z‚ro aprŠs 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 r‚duite, 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 coordonn‚es 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 bris‚e 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	d‚fini par vsl_udsty
		t=4	--------    --

vsl_udsty
---------
	m  vsl_udsty  : d‚finit 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 ind‚finiment r‚p‚t‚ pour former les lignes.

vsl_width
---------
	e  vsl_width  :  fixe l'‚paisseur des lignes en pixels. Une valeur paire
est arrondie … l'impair inf‚rieur.
		ptsout		: ‚paisseur s‚lectionn‚e


vsl_color
---------
	i  vsl_color  : fixe l'index de couleur pour les lignes.
		intout		: index s‚lectionn‚.

vsl_ends
--------
	d  f  vsl_ends  :  fixe les styles pour les d‚buts et fin de ligne selon les
valeurs de d et f:
		0	: extr‚mit‚ rectangulaire
		1	: extr‚mit‚ en flŠche
		2	: extr‚mit‚ arrondie.

vql_attributes
--------------
	renvoit les attributs de ligne actuels:
	intout		: type			intout+6	: extr‚mit‚ de d‚part
	intout+2	: index couleur	intout+8	: extr‚mit‚ 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 remplac‚e par 3.
		intout		: marque s‚lectionn‚e.

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 s‚lectionn‚

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'arrˆte:
		si i=-1	: dŠs qu'un point a une autre couleur que celle en x,y
		si i>0	: dŠs qu'un point a la couleur i.

v_recfl
-------
	x1  y1  x2  y2  v_recfl  :  remplit une surface rectangulaire selon les
attributs courants, les coordonn‚es sont celles de deux points oppos‚s du
rectangle.

v_fillarea
----------
	x1  y1  ....  xn  yn  n  v_fillarea  : remplit le polygone d‚limit‚ par les
n points. Le premier et le dernier sont automatiquement reli‚s.

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 pass‚e par vsf_color
		t=2	utiliser des motifs (voir vsf_style)
		t=3	utiliser des hachures (voir vsf_style)
		t=4	utiliser le motif d‚fini par vsf_udpat.
		intout		: type s‚lectionn‚

vsf_style
---------
	i  vsf_style  :  s‚lectionne le type de hachures (1 … 12) ou de motifs (1
… 24) selon le type choisi par vsf_interior.
		intout		: index s‚lectionn‚

vsf_color
---------
	i  vsf_color  :  choisit la couleur de remplissage.
		intout		: couleur s‚lectionn‚e

vsf_perimeter
-------------
	f  vsf_perimeter  :  active (f=1) ou d‚sactive (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  : d‚finit un motif de remplissage. Le paramŠtre n
d‚finit le nombre de plans (n=1 en monochrome), a est l'adresse ou sont
rang‚s successivement les n plans. Chanque plan est une suite de 16 fois 16
bits correspondant … une grille carr‚e 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 d‚but 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 limit‚e 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 limit‚e 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  :  d‚finit l'apparence de la souris, a cet effet a est
l'adresse d'un bloc de 37 mots ainsi d‚finis:
	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 appel‚e chaque fois qu'un bouton
de souris est appuy‚. Cette routine re‡oit 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 re‡oit dans control+18 l'adresse de l'ancienne routine.

vex_curv
--------
	adr  vex_curv  :  installe une routine appel‚e chaque fois que le
curseur de la souris doit ˆtre dessin‚. La routine re‡oit dans D0 et D1 les
coordonn‚es x,y de la souris. Pour le reste, voir vex_butv.

vex_motv
--------
	adr  vex_motv  :  installe une routine appel‚e chaque fois que la souris
a boug‚. La routine re‡oit dans D0 et D1 les coordonn‚es x,y de la souris,
elle peut les modifier (pour ralentir, acc‚l‚rer ou limiter les d‚placements).
Pour le reste, voir vex_butv.

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

	En mode "relative" toutes ces op‚rations sont d‚tourn‚es (pas de r‚el
appel VDI) et gŠrent le curseur de texte du FORTH dans la page actuelle. En
mode "absolute" c'est l'appel VDI qui est r‚alis‚:

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 r‚affiche la souris.


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

v_curup
-------
	une ligne vers le haut. Si on est d‚j… en haut, rien ne se passe.

v_curdown
---------
	une ligne vers le bas. Si on se trouve d‚j… en bas, rien ne se passe.

v_curright
----------
	une position vers la droite, si on se trouve d‚j… tout … droite, rien ne
se passe.

v_curleft
---------
	une position vers la gauche. Si on se trouve d‚j… tout … gauche, rien
ne se passe.

v_curhome
---------
	ramŠne le curseur en haut … gauche de la fenˆtre sans effacer l'‚cran.

v_eeos
------
	efface depuis la position du curseur jusqu'au bas de la fenˆtre.

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 coordonn‚es comlmencent … 1 et sont ramen‚es … leur maximum en cas
de d‚passement.

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 vid‚o inverse.

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

vq_curaddress
-------------
	renvoit les coordonn‚es du curseur de texte.
		intout		: ligne
		intout+2	: colonne.

vq_tabstatus
------------
	indique la pr‚sence d'une tablette graphique ou d'une souris:
		intout		: 0=absente, 1=pr‚sente.
v_hardcopy
----------
	lance une copie d'‚cran.

v_fontinit
----------
	adr  v_fontinit  :  permet de remplacer la fonte systŠme, … 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 (d‚finition des blocs) a ‚t‚
s‚par‚e. De ce fait, on d‚finit d'abord les deux blocs (source et destination)
puis on appelle la fonction voulue:

mfdbs
-----
	trois syntaxes sont disponibles pour d‚finir le bloc source:
	*   adr  l  h  np  f  mfdbs  :
		adr	l'adresse du bloc en m‚moire
		l  h 	longueur et hauteur totale du bloc
		np	nombre de plans
		f	format (0=normal, 1=format ind‚pendant)
	*   -1  mfdbs :
		c'est l'‚cran, la VDI se charge des diff‚rents paramŠtres.
	*   adr  mfdbs  :
		adr est l'adresse d'un bloc m‚moire contenant les informations
suivantes:
		adr		adresse des donn‚es
		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	r‚serv‚s.

	Mˆme 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
imm‚diatement au dessus de la largeur voulue pour que les op‚rations 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 n‚cessaires, par contre dans les fonctions de copie
suivantes on pourra pr‚ciser l=30.

mfdbd
-----
	c'est exactement la mˆme 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 diff‚rent). Normalement les deux blocs ont les mˆmes
caract‚ristiques, 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 sup‚rieur gauche dans la source
		x',y'	coin sup‚rieur gauche dans la destination
		l,h	taille du bloc … d‚placer (peut ˆtre inf‚rieure … 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 sup‚rieur gauche dans la source
		x',y'	coin sup‚rieur gauche dans la destination
		l,h	taille du bloc … d‚placer
		m	mode (0=efface dest, 3=replace, 6=XOR, 7=OR)
	Pour des donn‚es d'icone (aprŠs 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 b‚zier
************************

	Ces fonctions ne sont utilisables qu'avec la pr‚sence de SpeedoGDOS.

v_bez
-----
	f1  f2  ... fn  x1 y1  x2 y2  .... xn yn  n  v_bez :  sort une courbe de
B‚zier s'appuyant sur n points dont les coordonn‚es sont pass‚es sur la pile.
Pour chaque point on doit pr‚ciser 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  :  mˆme
comportement que la fonction pr‚c‚dente, sauf que l'int‚rieur de la courbe
est remplit avec les atrributs de remplissage courants.

v_bez_on
--------
	permet l'accŠs aux courbes de B‚zier.


v_bez_off
---------
	interdit l'accŠs aux courbes de B‚zier.

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 s‚lectionn‚e.

v_set_app_buff
--------------
	adr  n  v_set_app_buff  :  force la VDI … utiliser un buffer pr‚cis pour
la g‚n‚ration des courbes. Le buffer est d‚fini par son adresse adr et le
nombre de paragraphes n (16 octets chacun). Avant de quitter, une
application doit d‚sallouer ce buffer en appelant : 0  0  v_set_app_buff.
	Par d‚faut, le buffer allou‚ de maniŠre interne est de 8Ko.

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

	Pour ouvrir un m‚tafile on utilise le handle 31 avec v_opnwk. Un fichier est
automatiquement cr‚‚ et ouvert avec le nom GEMFILE.GEM dans le r‚pertoire
courant.

vm_filename
-----------
	" fichier"  vm_filename  :  permet d'affecter un nom diff‚rent de
GEMFILE.GEM au m‚tafile. Il faudra n‚anmoins effacer (fdelete) le fichier
par d‚faut GEMFILE.GEM qui aura ‚t‚ cr‚‚ par v_opnwk.

vm_pagesize
-----------
	l  h  vm_pagesize  :  indique les dimensions de la page du metafile en
dixiŠmes de millimŠtres.

vm_coords
---------
	xmin  ymin  xmax  ymax  vm_coords  :  fixe les coordonn‚es limites …
utiliser sur la page du m‚tafile. xmin,ymin sont les coordonn‚es en haut …
gauche et xmax,ymax sont celles en bas … droite. Par d‚faut, on a:
	0  32767  32767  0  vm_coords

v_meta_extents
--------------
	xmin  ymin  xmax  ymax  v_meta_extents  :  fixe, dans le systŠme de
coordonn‚es choisi avec vm_coords, le rectangle de clipping dans le metafile.

v_write_meta
------------
	‚l‚ments_intin  ‚l‚ments_ptsin  n_int  n_pts  v_write_meta  :  ‚crit
dans un m‚tafile une fonction ayant un sous code cr‚‚ par l'utilisateur. Le
premier des ‚l‚ments intin doit ˆtre ce sous code (ceux de 0 … 100 sont
r‚serv‚s).





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 m‚tafile, il aura donc
fallu l'ouvrir explicitement (v_opnwk) afin que la variable handle soit
correctement aliment‚e.

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 coordonn‚es 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 entiŠre (1) sur chaque axe
	h v	: avec l'‚chelle entiŠre, l'image sera cadr‚e 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 imprim‚e
	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 pr‚ciser les coordonn‚es
maximales de la station:
	id l  cl  m  cm  f  ct  sr  mr  cr c  xmax ymax  xv_opnwk
	Valeurs renvoy‚es:
	handle		: handle de la station
	intout		: xmax pris en compte (.w)
	intout+2	: ymax pris en compte (.w)
	control	: adresse de la station M‚moire (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 derniŠres instructions conjugu‚es permettent par exemple
d'ouvrir une station imprimante avec les dimensions d'une image charg‚e en
m‚moire, puis d'appeler xv_updwk avec l'adresse de cette image, elle sera
automatiquement imprim‚e.



	Les instructions suivantes sont implant‚es dans le nouveaux drivers
d'imprimantes couleurs sous SPEEDO GDOS. AprŠs ˆ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 support‚s:
			0: quadri
			1: n‚gatif
			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 r‚serv‚es.

vq_image_type
-------------
	" fichier"  adr  vq_image_type:	renvoit des infos sur le fichier
			image sp‚cifi‚:
	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 repŠres pour la d‚coupe lors d'impression sur plusieurs
pages:
	X Y X' Y': 	rectangle d'encadrement
	L: 		longueur des traits de d‚coupe
	P:		position des traits par rapport aux coordonn‚es

	(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 cr‚ateur du document
	n=3	Remarques.

	intout: 	0, appel inexistant


