^Librairies et interfaces annexes
^^Interface Audio
^
play
(play fichier en-arriere-plan type)
	Permet d'envoyer la lecture du fichier son donn en argument.
	Si en-arriere-plan est  t, l'excution de la commande de lecture
	du fichier son sera effectue en arrire plan par le systme.
	Si le type n'est pas fixe play essaye de le dtecter suivant
	l'extension du nom du ficher. Les types de fichiers sont connus
	pour l'instant sont :
		"au" = fichier audio standard
		"aiff" = format aiff
		"aifc" = format aiff compresse	
	Attention, la dfinition de cette routine est dpendante de la
	machine sur laquelle xbvl est installe, cette routine est
	dfinie en Lisp dans le fichier systme : bvlisp.sys. 
^^Interface avec X Windows
^
iswidget
(iswidget widget {classe}) subr 2
	  teste si un atome est un widget ou teste la classe
	  d'appartenance d'un widget. 
	  ramne t si l'argument est un widget, nil si non. Si <classe>
	  est passe en argument le widget doit appartenir  cette classe.
^
isresource
(isresource ressource)   subr 1
	    teste si l'atome passe en paramtre  une ressource, ramne t
	    si oui, nil si non.
^
xBeep
(xBeep [n]) subr1
Fait beep dont l'intensit peut tre rgule par un paramtre
	optionnel. Les valeurs valides de n vont de -100  100. -100
	correspondant au volume du son le plus bas.
^
xMoveWidget
(xMoveWidget widget  y x ) EXPR
	 Dplace le widget passe en paramtre au point de coordonnes y, x
	 (coin suprieur gauche). 
	 Cette fonction tient compte du contexte du widget et modifie les
	 ressources en consquence.

	 Cette fonction est dfinie dans bvlisp.sys comme suit :
    
^%L
	(de xMoveWidget ( -widget- yy xx )
		(cond (((not (iswidget -widget- )) nil)
			((iswidget -widget- "ApplicationShell") (xSetValues -widget-  "x" xx "y" yy ))
			((iswidget (xWidgetParent -widget- ) "awForm" )
				(xUnmanage -widget-)
				(xSetValues -widget- "horizDistance" xx "vertDistance" yy)
				(xManage -widget- ))
			(t 
				(xUnmanage -widget-)
				(xSetValues -widget-  "x" xx "y" yy ))
				(xManage -widget- ))
			))

	 Voir xResizeWidget
^
xResizeWidget
(xResizeWidget widget height width) EXPR
	 Change la taille de la fentre  passe en argument aux dimensions
	 <height> x <width> en pixels. 

	 Si le widget est l'enfant d'un Composite le widget est enlev de
	 l'autorit parentale pour que la modification de taille soit prise en
	 compte. On peut videment faire mieux en s'assurant que les ressources
	 des widgets suprieures soient positionnes pour que les modifications 
	 de taille soient prises en compte sans enlever le widget de l'autorit
	 parentale, en ce cas on vite de rafficher tout le widget.
    
	 Cette fonction est dfinie dans bvlisp.sys comme suit:

^%L
	;
	; la seule prcaution qu'on prend est enlever de l'autorit parentale
	; le widget s'il est  l'intrieur d'un Widget composite.
	;
	(de xResizeWidget ( -widget- height width )
		(cond (((not (iswidget -widget- )) nil)
			((iswidget (xWidgetParent -widget- ) "awComposite" )
				(xUnmanage -widget-)
				(xSetValues -widget-  "width" width "height" height ))
				(xManage -widget- ))
			(t 
				(xSetValues -widget-  "width" width "height" height ))
			))	

        Voir xchgRessource, xSetValuesw, xresizew
^
xGetHierarchie
(xGetHierarchie -widget- ) fsubr
	 Ramne la hirarchie complte du widgets passe en argument.
	 Cette fonction est dfinie dans bvlisp.sys comme suit:

^%L
	(de xGetHierarchie ( -widget- )
		(if (iswidget -widget- )
		(xGetSousArbre (xGetSupWidget -widget- "Shell") () )
		nil))

	 Voir xGetSousArbre et xGetSupWidget
^
xGetSousArbre  
(xGetSousArbre  -widget- ) fsubr

	Recursivement construit une liste de tous les descendants du widget
	passe en paramtre. Le widget lui-mme est le premier lment de la
	liste. 

	Cette fonction est dfinie dans bvlisp.sys comme suit:

^%L
	(de xGetSousArbre ( -widget- )
		(let ( -children- (xGetValues -widget- "children"))
			(if (null -children-) -widget-
				(cons -widget-  (mapcar -children- 'xGetSousArbre)))))
	    
	Les widgets qui ne sont pas cres explicitement par bVLISP mais qui
	sont parties des widgets complexes sont ramens dans des atomes dont
	le nom est compose du nom du widget pre comme prfix du nom du widget
	lui-mme. Le systme garanti l'unicit des atomes. 
	On peut toujours manipuler ces atomes individuellement mais le faire
	avec beaucoup de prcautions puisque le widget est entirement manipule
	par les mthodes de la classe du widget crateur.
^
xGetRootWidget
(xGetRootWidget -widget-)  expr
	 Ramne l'atome contenant la racine de la hirarchie du widget pass en
	 argument. 

	 Cette fonction est dfinie dans bvlisp.sys comme suit:

^%L
	 (de xGetRootWidget(-widget-)
	     (if (iswidget -widget-)
		(let (-parent- (xGetValues -widget- "parent" ))
		     (while -parent-
			(setq -widget- -parent-)
			(setq -parent- (xGetValues -widget- "parent" )))
		-widget-)
	     nil))

	 L'algorithme est trs simple: on remonte la hirarchie rcuprant la
	 ressource "parent". Quand la remonte s'arrte, on est arrive  la
	 racine et on ramne le widget. 
^
xGetSupWidget
(xGetSupWidget widget classe) expr

	Comme xGetRootWidget ramne l'atome contenant le widget suprieur
	du widget passe en argument et qui appartient  la classe <classe>
	Pour trouver le widget racine de la hirarchie principale il suffit
	de faire l'appel:
	(xGetSupWidget (xwinp) "ApplicationShell")

	Cette fonction est dfinie dans bvlisp.sys comme suit:

^%L
	(de xGetSupWidget(-widget-)
		(if (iswidget -widget- "ShellClass" ) -widget-
			(if (iswidget -widget-) (xGetSupWidget (xGetValues -widget- "parent" ))
				nil)))
^
xCreateXbvlisp
(xCreateXbvlisp w-name nlignes colonnes y x pages) fsubr
	Cre une hirarchie de widgets minimale pour une session interactive
	avec bVLISP. Cette hirarchie a les fonctionnalits d'un terminal
	virtuel indpendant avec des fonctions d'dition diverses. Elle est
	compose simplement d'une racine et d'un widget appartenant  la
	classe "Xbvlisp".

	Cette fonction est dfinie dans bvlisp.sys comme suit:

^%L
	(de xCreateXbvlisp (w-name nlignes colonnes y x pages)
		(if (iswidget w-name "Xbvlisp") 
			w-name
			(if (not(and (numbp nlignes)(numbp colonnes)(numbp y)(numbp x)(numbp pages)))
					(progn (print "Mauvais arguments") nil)
				(let (new-xBVL (xInitXbvlisp w-name nlignes colonnes y x pages))
					(xRealize (car new-xBVL))
					(cadr new-xBVL)))))
	  
	xInitXbvlisp fait le travail de cration proprement dit en
	positionnant les ressources correctement et en crant les fentres X
	correspondants aux widgets.
	 
^%L
	(de xInitXbvlisp (w-name nlignes colonnes y x pages)
		(let (root-w (xCreateWidget (strcat w-name "-root") "ApplicationShell" ))
			(let (bvlisp-win (xCreateWidget w-name "Xbvlisp" root-w
						"lignes" "Int" nlignes
						"colonnes" "Int" colonnes
						"pages" "Int" pages ))
				(xSetValues root-w  "geometry" "String" (print (strcat "+" x "+" y )))
				[ root-w bvlisp-win ])))

^
x-interface
	Une nouvelle  interface  utilisateur pour bVLISP  et une  extension du
	langage bVLISP pour  la  cration et manipulation  d'objets graphiques
	construite sur le modle de  toolkits de X-Window Systme. (dveloppe
	par Ernesto Sendoya)
	La nouvelle interface utilisateur est construite entirement sur cette
	extension du langage. Cette couche   du langage permet de  reprsenter
	des objets X-SYSTEME comme  des atomes lisp. Cette  nouvelle proprit
	des atomes, plus une  couche minimale  des fonctions pour  l'utiliser,
	offre  une  grande possibilit  de programmation d'objets d'interface.
	Elle ne rentre pas en conflit avec les proprits normales des atomes.
	Un  objet d'interface bVLISP est  une  hirarchie de Widgets.   Chaque
	Widget est  un objet  qui appartient   une   classe d'objet avec  des
	caractristiques bien dfinies. D'un  cot la prsentation de  l'objet
	et  de l'autre  la smantique de  l'objet  (comment il se comporte par
	rapport aux actions de l'utilisateur).  Toutes les classes des widgets
	peuvent communiquer avec l'interprte mais il y a deux classes ddies
	 cette communication.
	Les  widgets appartenant  la classe   "Xbvlisp" sont ceux qui peuvent
	tre utilises  pour une session interactive et  qui accdent   toutes
	les fonctionnalits du systme bVLISP. Ils sont des terminaux virtuels
	qui supportent des commandes  d'dition emacs.   On peut les  utiliser
	comme  un terminal pour avoir une  session interactive  avec lisp mais
	ils peuvent, comme tout les widgets, tre utilises en tant que briques
	de base pour une interface plus complexe.
	D'autres widgets  spcifiques   bVLISP   sont  ceux appartenant   la
	classe "Drawxbvl". Ce sont des widgets pour  dessiner et faire voluer
	des  tortues. Il faut remarquer que   tous les widgets peuvent tablir
	une  communication interactive  avec l'interprte. Cette communication
	est  programmable et se  fait  des niveaux  diffrents .  bVLISP a un
	contrle total sur chaque  widget : on  peut les crer,  les dtruire,
	changer  leur position,  changer leur  taille,  et leur  comportement,
	enfin, utiliser une ou plusieurs  hirarchies des widgets pendant  une
	session interactive.
	On   cre   un    widget  avec    :(xCreateWidget  nom  classe    pre
	{ressources}...)
	Cette fonction dtermine la position du widget  dans la hirarchie, le
	savoir-faire  (dpendant  de   la  classe),  et   la  prsentation  et
	comportement dtermins par le positionnement  des ressources.  bVLISP
	offre  un mcanisme homogne  pour retrouver les valeurs des variables
	associes aux widgets  et pour positionner ces  diffrentes variables:
	le  Mcanisme de Ressources.  Tout se   passe  l'image des mcanismes
	Xt, mais avec la souplesse et l'expressivit accrue du systme bVLISP.
	Voir x-ressource et x-widgets.
^
XBVLINTERFACE
XBVLINTERFACE (variable d'environnement)

	Cette variable d'environnement permet de spcifier l'interface utilise
	par Xbvl. Par dfaut cette interface est l'interface crite en Lisp
	(dfinie  la fin du fichier bvlisp.sys).
	Voici les diffrentes valeurs que peut prendre la variable d'environnement
	XBVLINTERFACE :
^%T2
		Valeur	Signification
		aucune	utilise l'interface crite en Lisp de bvlisp.sys.
		"c"	utilise l'interface originale C.
		fichier	utilise l'interface dfinie dans le fichier.

^
x-widgets
	Un  Widget  (acronyme  de  Window  Gadget)  est   un objet   graphique
	appartenant    une classe de    widgets,  classe dont il hrite   des
	proprits. Il   y  a  deux types   de  proprits des    widgets: des
	proprits  qui  dterminent   sa  prsentation  (dimension, couleurs,
	police de  caractre, motifs);  et  des proprits qui  dterminent un
	comportement (la smantique   ou   le savoir-faire de  l'objet).   Par
	exemple,  un  widget appartenant     la classe awLabel  sait afficher
	correctement une chane de  caractres en grant correctement tous les
	vnements affectant  cet affichage.  Chaque  proprit ou "ressource"
	correspond  une variable interne du widget.
	
	Un  widget est cre et manipule  par un  ensemble rduit de primitives
	bVLISP. Cet  ensemble  des primitives  donne accs  en  lecture et  en
	criture  toutes     les ressources des widgets  donc     toutes ses
	proprits.  Un widget   est contenu  dan  le champ  'obj'  des atomes
	bVLISP et est accessible  travers cet atome.
	
	bVLISP supporte les classes des widgets suivantes :
	
	classes de base Xt : "Core", "Composite", "Constraint", "ShellClass".
	
	Shells,  des widgets principaux pour  tablir la communication avec le
	window manages:
	
	"ApplicationShell", "TransientShell", "OverrideShell", "TopLevelShell".

	Composites, ces classes peuvent contenir d'autres widgets:

%T3
		"awForm"	"awBox"		"awViewport"
		"awPaned"	"awDialog"	"awScroll"
		"awPanner" *	"awPorthole" *	"awTree" *

	Simples, ces classes sont feuilles d'une hirarchie de widgets:
	"Simple" -> la mtaclasse
%T3
		"Xbvlisp"	"Drawxbvl"	"TortueObjet"
		"awAsciiDisc"	"awAsciiText"	"awLabel"
		"awCommand"	"awRepeater" *

	* fournis seulement avec la version 5 de X11.

	Elargir le support par bVLISP  d'autres classes  des widgets est trs
	simple.  Pour  en ajouter une nouvelle   classe il  suffit de compiler
	bVLISP avec le code  C implmentant le  widget et de dfinir la chane
	de  caractre qui sera la reprsentation  de la classe  de widget pour
	bVLISP. Cette chane devient la rfrence  pour crer des instances de
	cette nouvelle  classe.   Immdiatement   tous  les  mcanismes     Xt
	implmants en bVLISP,  (ressources, callbacks, fonctions gnrales de
	manipulation)  sont applicables  aux  reprsentants de  cette  classe.
	Voir x-ressources, x-callbacks, x-tortue, x-selections.

^
xCreateWidget
(xCreateWidget nom Classe {Pre} {ressources...})  nsubr
	Cre un widget instance de la classe <Classe> accroche au widget
	<Pre>. Le widget <Pre> doit tre un widget spcialis dans la gestion
	spatial des enfants, c'est  dire appartenir  une classe de widgets
	composite. L'argument <Pre> est superflu si le widget  crer
	appartient  la classe "ApplicationShell" qui est la racine d'une
	hirarchie.
	Le positionnement des ressources efface les valeurs par dfaut.
	
	 	? (xcreateWidget 'root "ApplicationShell") ;1-.
	 	= root.
	 	? (xcreateWidget 'xbvl-term "Xbvlisp" "lignes" 10 "colonnes" 60 "pages" 2)
	 	= xbvl-term.
	 	? (xRealize root)			   ; 3-.
	 	= t.

	1) Cre la racine de la hirarchie.
	2) Cre un widget d'interaction avec bVLISP de 10 lignes
		pour 60 colonnes et 2 pages de mmoire tampon.
	3) Les fentres X associes  la hirarchie sont rellement
		cres et affiches.

	L'atome associe au widget est retourne, 'nil' si la cration est
	impossible (par exemple si <Pre> n'est pas un widget Shell).

	Voir : x-ressources, xCreateResource.
^
x-ressources
	Une ressource   dans le sens  Xt  est une  variable interne au widget,
	variable d'tat qui dtermine  une proprit de l'objet. Le  Mcanisme
	de, Ressources Xt est implantes et tendu dans bVLISP. Le mcanisme de
	ressources permet  l'utilisateur d'accder d'une manire homogne, en
	lecture  et  en   criture, aux  ressources.  Ce  mcanisme  permet le
	contrle complet  de  la prsentation et   le  comportement de  chaque
	widget ainsi   que l'interface  entre des  objets   LISP et des objets
	Xt. On  peut configurer  dynamiquement  les proprits   standards des
	widgets, comme la couleur des  diffrents  lments des widgets,  leur
	taille etc., ainsi que  d'autres proprits plus spcifiques comme que
	les fonctions d'dition du   widget d'interaction avec  bVLISP.  Cette
	configuration de de proprits de widgets est faite trs simplement et
	d'une faon homogne en modifiant les valeurs  de ressources qui leurs
	sont associes.
	On accde aux ressources en lecture  avec la fonction xGetValues et en
	criture  avec la  fonction  xSetValues qui  prend chacune  en premier
	argument    le  widget   modifie  ou     consulter  et  ensuite  des
	spcifications de ressources.   Une ressource est compltement dcrite
	par le nom de la ressource:
	  
	<nom de la ressource> <reprsentation du type> <valeur>

	Chaque ressource a un nom l'identifiant  et un type de reprsentation.
	Le type de reprsentation est une chane de  caractres qui indique au
	systme la conversion   faire entre  la reprsentation  externe de la
	ressource (un  type  LISP: chane,  nombre,   atome et  liste)  et une
	reprsentation  interne  manipule  par  l'objet et  le  systme.   Par
	exemple un type de  reprsentation "StringList" indique au  systme la
	conversion   faire du type  de  donne en entre   vers un tableau de
	caractres. bVLISP  calcule le type  de reprsentations des ressources
	tant en entre qu'en  sortie dans les  oprations normales  de lecture
	est  criture de ressources,  mais  il y a   des oprations ou il faut
	connatre le type de reprsentation des ressources, c'est le cas de la
	cration explicite d'une ressource (voir xCreateResource).
	Pour   optimiser la  manipulation  des ressources,  bVLISP supporte la
	reprsentation d'une ressource dans le champ 'obj' d'un atome.  Chaque
	fois   qu'on positionne une   Ressource le   systme  le  crer. Cette
	cration peut coter chre en  ressources systme donc c'est important
	d'avoir   un mcanisme qui   permet   le partage des ressources  entre
	diffrents widgets.
^
x-ressources2
	En bVLISP une ressource, comme un widget, est associe  un atome LISP.
	On peut   rutiliser ainsi une ressource   pour configurer des widgets
	diffrents.
	Cette reprsentation interne des ressources  permet de les positionner
	d'une manire  encore plus simple,   puisque l'atome qui  l'interne  
	toutes les  informations qui dcrivent   compltement la ressource (le
	triplet: nom,   reprsentation,   valeur).  Cette    possibilit donne
	beaucoup de souplesse  la syntaxe  de la fonction xSetValues. On peut
	au  lieu du  triplet passer  comme  argument  l'atome qui contient  la
	ressource, ou bien <un nom de ressource> suivi de l'atome internant la
	ressource. En ce cas la ressource nomme est positionne par la valeur
	interne dans l'atome. Le type de reprsentation doit tre le mme que
	celui de  la  ressource interne.   Des   structures des donnes  trs
	complexes qui contiennent des informations sur des objets distincts et
	complexes,  par exemple des  polices de  caractres,  des images,  des
	couleurs, des pixmaps... sont caches par ces trois identificateurs.
	On  positionne une ressource  d'un widget au  moment de sa cration (a
	l'appel de xCreateWidget) ou bien  tout instant de son existence avec
	l'appel de xSetValues.
	La syntaxe pour indiquer une ressource et sa valeur est trs simple et
	souple. En gnral l'appel
	 
	 (xSetValues Widget <nom ressource 1> valeur1 <nom ressource 2> valeur2 ...)
	 
	 Positionne   les ressources   des    diffrents  noms   et  types   de
	 reprsentation  aux  valeurs   passes  en arguments.   Cet appel  est
	 similaire  un envoi de  messages ou le widget  est l'objet, le nom de
	 la ressource est le slecteur et la valeur l'argument du message.
	 <nom ressource> est une chane avec le nom de la ressource. Si dans la
	 spcification du widget le nom est XtNwidth, le nom rellement utilise
	 est "width".
	 <valeur> est la  valeur de la  ressource. bVLISP fait  les conversions
	 ncessaires pour que la ressource soit du type approprie  l'objet.
	 	  
	  Ainsi on peut positionner des  ressources trs souplement en utilisant
	  le  type   de donne    LISP  correspondant   appropri au   type   de
	  reprsentation  de  la ressource. On  utilise  tous les  types de base
	  VLISP (atomes, listes, nombres et chanes) pour positionner l'ensemble
	  des ressources possibles des widgets.  En autre des ressources ont t
	  dfinis qui permettent l'interface  entre des objets graphiques et des
	  objets LISP.
^
x-ressources3
	Si app-shell est une racine de hirarchie l'appel:
	(xSetValues app-shel "x" 10 "y" 30 "width" 340 "height" 400 )
	 Change la position et la taille de cette hirarchie.
	 Pour retrouver la valeur des ressources:  
	  (xGetValues Widget <nom ressource 1> <type en sortie 1> <nom ressource 2> <type en sortie 2> ...)
	  <type en sortie> est le type LISP qu'on veut en sortie. 
		  
  	Les types valides pour bVLISP sont:		 
		* "AtomList" pour une liste,
		* "Atom" pour un atome, 
		* "String" pour une chane de caractres,
		* "Int" pour un entier,
		* "Float" pour un flottant en sortie.

	Si w-label est l'atome retourne   la cration d'un widget appartenant
	 la classe awLabel (widget qui sait afficher une chane de caractres
	ou  un bitmap) on   aura des  rsultats  diffrents selon  le  type de
	reprsentation en sortie de la manire suivante :
	(xGetValues w-label "string" "String") ramne  la  copie de la  chane
	affiche par le widget dans la forme d'une chane lisp.
	(xGetValues w-label "string" "Int") ramne la valeur du pointeur de la
	chane affiche par le widget.
	Dans un cas on  aura une copie  interne,  dans l'autre on  peut avoir
	accs  l'objet affich  lui-mme. En gnral  un type "Int" en sortie
	nous donne accs  la  valeur de l'objet  lui-mme et le type "String"
	nous donne accs  des copies internes de chanes de caractres.  Des
	nouvelles ressources  ont  t dfinies   pour toutes les   classes de
	widgets pour permettre l'interface entre  des objets graphiques et des
	objets LISP:
^%T3
		nom		repType		dfaut
		"children"	"AtomList"	nil
		"parent"	"Atom"		nil
			
	Pour les ressources standards il faut consulter les manuels des
	widgets utiliss. The athena widget set.
	Voir  xSetValues, xGetValues, xCreateResource
^
xCreateResource
(xCreateResource	<nom ressource> <repType>  <valeur> ) subr3
	Ramne l'atome internant la ressource ou  nil si la spcification
	de la ressource n'est pas reconnue.
^
xSetValues
(xSetValues widget ressource... )	 nsubr
	Positionne les ressources spcifies. La spcification des
	ressources est assez souple. Une ressource est spcifie
	compltement par trois identificateurs: le nom de la ressource, sa
	reprsentation, son type et sa valeur. Dans bVLISP elle peut tre
	spcifie de trois manires diffrentes : 

	1) <nom-ressource>  <valeur> , spcification complte
	2) <ressource interne>, l'atome qui interne la ressource
	3) <nom> <ressource interne>, le nom de la ressource interne est change.

	La valeur d'une ressource peut tre un widget. Pour aider la lisibilit de la 
	liste de spcifications, qui peut tre assez longue, on peut mettre chaque 
	spcification de ressources dans une liste. Cette fonction ramne le nombre
	de ressources rellement reconnues comme telles. Si l'objet passe en premier
	paramtre n'est pas un widget valide, xSetValues ramne nil.

	Voir xGetValues, x-ressources.
^
xGetValues
(xGetValues widget <nom ressource>	{<type en sortie>} ) nsubr
	Ramne une liste des valeurs correspondantes aux ressources
	spcifies. <type en sortie> est le type LISP qu'on veut en sortie. Les types
	valides pour bVLISP sont:		 

		* "AtomList" pour une liste,
		* "Atom" pour un atome, 
		* "String" pour une chane de caractres,
		* "Int" pour un entier,
		* "Float" pour un flottant en sortie.

	Le type en sortie "String" nous donne accs  des copies internes
	de chanes de caractres. Un type "Int" en sortie nous donne accs
	a la valeur de l'objet lui mme. Si c'est un pointeur vers une
	structure complexe, on le rcupre comme un entier. On pourra
	rcuprer ainsi des ressources des widgets dj cres pour les
	partager avec d'autres widgets. Par dfaut le type en sortie est le
	type entier. On peut donc rcuprer une ressource dans les diffrents
	types de base du systme bVLISP: chanes de caractre, listes et
	nombres.
^
xGetWindow
(xGetWindow widget)
	
	Retourne le window_id du widget donne en argument.
^
x-callbacks
	les callbacks composent un mcanisme privilgi de communication 
	de l'utilisateur avec l'interprte  travers les objets graphiques. 
	dans un callback on dpose une expression ou une suite
	d'expressions lisp qui sont valus  la suite de certains
	vnements actives par des actions de l'utilisateur.
	Par exemple, au positionnement du pointeur de la souris sur un
	widget appartenant  la classe "awCommand", le cadre du widget se
	met en surbrillance. Si on click dessus on active automatiquement
	la fonction LISP dpose dans ce callback du widget.
	A l'intrieur de cette expression le programmeur peut introduire
	des macros qui seront remplaces avec des informations sur l'objet
	pointe au moment de l'appel. 
	Voir xaddCallback, xAugment, xOverride.
^
x-evenements
	La gestion des vnements issus du systme X peut tre gre par deux
	sortes de routines. Soit par les callbacks et les translations
	(voir x-callbacks) qui permettent l'excution de code suivant
	un vnement survenu dans une widget donne, soit par la vrification
	des vnements survenus dans une widget (voir xCheckEvent).
^
xCheckEvent
(xCheckEvent widget "eventName") subr 2

	Vrifie un vnement du type de celui donne en argument est survenu dans 
	la widget retourne t si c'est vrai. Les types vnements sont :

	KeyPress, KeyRelease, ButtonPress, ButtonRelease,
	MotionNotify, EnterNotify, LeaveNotify, FocusIn, 
	FocusOut, KeymapNotify, Expose, GraphicsExpose, 
	NoExpose, VisibilityNotify, CreateNotify, DestroyNotify, 
	UnmapNotify, MapNotify, MapRequest, ReparentNotify, 
	ConfigureNotify, ConfigureRequest, GravityNotify, ResizeRequest, 
	CirculateNotify, CirculateRequest, PropertyNotify, SelectionClear, 
	SelectionRequest, SelectionNotify, ColormapNotify, ClientMessage, 
	MappingNotify.
^
xAddCallback
(xAddCallback widget "callbackName" <expression LISP>) subr 3

	Enregistre dans le widget passe en paramtre, dans le callback
	de nom 'callbackName', l'expression ou les expressions LISP qui
	vont tre values au moment de l'activation du callback.
	En gnral chaque callback a son propre protocole de communication
	avec l'interprte. Ce protocole peut tre modifie dynamiquement,
	toujours utilisant le mcanisme de ressources.
	Si on dpose une deuxime suite d'expression dans un callback, la
	l'expression prcdante est remplace.
	Pour enlever un callback il suffit de l'enregistrer avec une chane
	compose de blancs.

	Si Bouton est un atome avec un widget "awCommand" associe :
	
	(xAddCallback 'Bouton "callback" " (oblist) ").

	A l'activation du bouton l'oblist sera affiche.

	(xAddCallback 'Bouton "callback" " ").

	Enlve toute expression du callback.

	Les Callbacks disposent d'un ensemble de macros qui sont
	remplaces par des informations sur l'objet qui active le
	Callback:

	1) $O est remplace par le nom de l'objet qui active le
		Callback,
	2) $W est remplace par le nom du widget associe  l'objet
		qui active le Callback,
	3) $# est remplace par l'indice de l'objet qui active le
		Callback, cet objet doit tre ordonne dans un
		ensemble d'objets,		
	4) $X est remplace par la position en 'x' du widget
		propritaire du Callback,
	5) $Y est remplace par la position en 'y' du widget
		propritaire du Callback,
	6) $L est remplace par la largeur de l'objet,
	6) $H est remplace par la hauteur de l'objet.
^
xAugment
(xAugment widget "translation" <expression LISP>) subr 3
	Enregistre dans le widget passe en paramtre, pour l'action X
	donne dans la syntaxe des Tables de Translation, l'expression
	ou les expressions LISP qui vont tre values au moment ou 
	vnement dcrit aura lieu dans la widget.
	xAugment ajoute simplement vnement  la widget. Si une
	action existe dj pour celui-ci, il ne serra pas remplace
	par celle donne en argument.

	Exemple :
	
	(xAugment 'bouton "<Btn2Down>" " (oblist) ")
	
	action active dans la widget bouton lors de l'appui sur
	le bouton 2 de la sourie dans cette widget.
	Voir xOverride
^
xOverride
(xOverride widget "translation" <expression LISP>) subr 3
	Enregistre dans le widget passe en paramtre, pour l'action X
	donne dans la syntaxe des Tables de Translation, l'expression
	ou les expressions LISP qui vont tre values au moment ou 
	vnement dcrit aura lieu dans la widget.
	Si une action existe dj pour la translation donne elle sera
	remplace par celle donne en argument.

	Exemple :
	
	(xOverride 'bouton "<Btn2Down>" " (oblist) ")
	
	action active dans la widget bouton lors de l'appui sur
	le bouton 2 de la sourie dans cette widget.
		Voir xOverride
^
Xbvlisp
	Classe des widgets d'interaction avec l'interprte bVLISP.
	 Les widgets appartenant  la classe "Xbvlisp" sont des widgets qui
	 peuvent tre utilises pour avoir une session interactive et accder 
	 toutes les fonctionnalits du systme bVLISP. Ils sont des terminaux
	 virtuels qui supportent des commandes d'dition emacs offrant des
	 facilits d'interaction trs varies.
	 Un widget appartenant  la classe "Xbvlisp" supporte la configuration
	 des ressources d'un widget AsciiTexte du package Athena, plus quelques
	 ressources spcifiques :  

	- "lignes" est le nom de la ressource qui dtermine le nombre des
	lignes de texte du widget d'interaction.
	- "colonnes" est le nom de la ressource qui dtermine le nombre
	des  colonnes du texte du widget d'interaction.
	- "pages" est le nom de la ressource qui dtermine le  nombre des
	page du tampon d'dition.

	Ces trois ressources on le mme type de reprsentation, "Int".

	Un peut utiliser chaque widget d'interaction de la mme manire
	qu'un terminal pour avoir une session interactive avec un lisp
	normal mais il peut, comme tous les widgets, tre utilise comme un
	brique de base d'une interface  plus  complexe.
	 Voir xCreateWidget, Drawxbvl.
^
Drawxbvl
C'est une classe de widgets que comme la classe Xbvlisp est spcialise
	 dans l'interaction avec bVLISP. Des widgets appartenant  cette classe
	 sont utilises comme feuilles graphiques par le systme. On peut
	 dessiner sur ces widgets avec des primitives graphiques trs varies
	 ainsi qu'on peut afficher de texte avec diffrentes polices de
	 caractres.
	 Une caractristique importante de ces widgets est la possibilit de
	 leurs associer des entits dynamiques. Ces entits son des espces de
	 tortues LOGO qui  l'intrieur d'un widget peuvent se dplacer, se
	 positionne, s'absenter, et, enfin, sont un instrument pour faire des
	 dessins de manire trs agrable, utilisant la trace du dplacement.
	 On peut  chacune de ces entits attacher des fonctions vlisp qui
	 sont excute automatiquement sur certaines conditions. Le changement
	 de position par exemple. Cela permettra de crer des environnements a
	 l'intrieur desquels ces entits vont voluer  la manire des
	 automates selon des lois dfinies pour chaque entit.
	 Ces widgets sont des espaces privilgis pour explorer des proprits des
	 programmes. On pourra explorer la gnration de graphismes pendant
	 l'excution des programmes. Ici une de qualits de bVLISP, de pouvoir
	 associer des commentaires  tout point d'un programme, peut tre
	 utilise pour associer  l'excution d'un programme l'excution de
	 primitives graphiques ou l'activation des entits LOGO.
^
Tortue1
	Classe des entits de dessin dynamique.
	 Les objets appartenant  la classe Tortue sont des widgets des
	 widgets. Ils sont cres avec xCreatWidget, et acceptent le
	 positionnement des ressources. Un objet appartenant  cette classe
	 a un Callback ou on peut dposer une fonction ou une liste de
	 fonctions vlisp qui seront excutes  la modification d'une
	 de la position du widget. Un objet appartenant  cette classe est
	 associe  un widget Composite quelconque.
	 Une entit de dessin est un objet pour dessiner sur la fentre d'un
	 autre widget. Seulement un widget de la classe Drawxbvl sauvegarde
	 l'image dessine.
	 
	 Les ressources d'une entit tortue LOGO sont les suivants :

^%T3
<nom>		<type>		<valeur par dfaut>
	 -----		-----		---------------------
	 "name"		"String"	argument  la cration
	 "x"		"Position"	0
	 "y"		"Position"	0
	 "width"	"Dimension"	10
	 "height"	"Dimension"	15
	 "orientation"	"Int"		0
	 "widget"	"Widget"	NULL
	 "freres"	"AtomList"	nil  (en lecture)
	 "callabck"	"String"	nil
	 "traceWidth"	"Int"		1
	 "background"	"Pixel"		defaultBackground
	 "foreground"	"Pixel" 	defaultForeground
	 "foncLoginque"	"Int"		nil 	  

	La ressource "freres" permet de retrouver tous les autres objets
	tortues dpendantes du widget Xbvldraw qui contient l'objet. Tous les
	Tortue lie  un widget sont retrouves en rcuprant ressource
	"children" du widget Xbvldraw. Ces deux ressources avec l'introduction
	des callbacks sur les Tortues permettent de crer des environnements ou
	les objets voluent dynamiquement par rapport aux autres objets.

^
Tortue2
	(suite de l'aide Tortue1)
	La fonction logique utilise pour calculer le rsultat d'une opration
	graphique peut aussi tre modifie. Les valeurs qui seront prises en
	compte par la ressource "foncLoginque" doivent tre comprise entre 0
	et 15.
	Cette fonction boolenne travaille sur les bits composant les pixels,
	et prend deux paramtres: la valeur actuelle du bit, et la valeur
	actuelle du bit correspondant dans la valeur du pixel de dessin. Elle
	calcule la nouvelle valeur du pixel. 
	Il existe 16 oprations logiques

^%T2
	valeurs			fonction
	------			 -------
	0 			 clear
	1 			 and
	2 			 andReverse
	3 			 copy
	4 			 andInverted
	5 			 no-operation
	6 			 xor	  
	7 			 or
	8 			 nor
	9 			 (non pixel) ou-exclusif ancien
	10 			 invert
	11 			 orReverse
	12 			 copyInverted
	13 			 orInverted
	14 			 nand
	15 			 set

^
AVANCE
(AVANCE tortue distance angle) subr3

	Permet le repositionnement d'une tortue (avec dessin si le pencil
	est pos). Les arguments spcifient la tortue  dplacer, la distance
	 parcourir et l'angle (par rapport  l'orientation actuelle de la 
	tortue) du nouveau dplacement. Attention, l'orientation est modifie.
^
xwinp
(xwinp) 	subr0
	ramne l'atome image de l'interface d'interaction courante.
^
x-popups
	 L'utilisation de deux classes de widgets Shell, des widgets
	 principaux qui s'occupent de la communication avec le window manager,
	 permettent au systme de spcifier un mode diffrent du mode normal
	 d'interaction. Ces Shells peuvent exclure toute autre interaction avec
	 les autres fentres.
	 Ces classes de widgets sont:
		"OverrideShell"
		"TransientShell"
	Un Poupup est cre comme un widget normal. Le widget retourne par
	xCreateWidget est pourtant un widget principal dont l'affichage
	est contrle par xPopup et xPopdown.
^
xPopup
(xPopup -popup- [mode])  subr2
	Fait l'affichage du popup passe en argument. Le mode d'interaction
	peut tre modifie par un deuxime argument optionnel. 
	Par dfaut le popup fait un gel vnements de type non-exclusif,
	c'est  dire que les vnements sont envoys  tous les widgets
	composants une cascade de popups. 

	Les modes d'interaction son:
	1) Pas de confiscation d'vnements par le popup qui est
		affiche. Les vnements sont normalement envoys aux
		widgets destinataire.
	2) Les vnements sont achemines uniquement aux widgets de la
		cascade modale (cascade de popups).
	3) Acheminement exclusif vnements destines au widget qui
		est au sommet de la cascade de popups.

	Le Callback "popupCallback" est invoque lorsque xPopup est appel.
	ramne si opration est impossible, t sinon.
	Voir xPopdown x-popus.
^
xPopdown
(xPopdown -popup-) sbr1
	 Fait disparatre le popup passe en argument. Le popup n'est pas
	 dtruit, il peut tre affiche avec xPopup.
	 Un appel  xPopdown provoque l'appel du Callback dsigne par
	 "popdownCallback" .
	 Voir xPopup et x-popups.
^
xWidgetParent
(xWidgetParent at-w)
	ramne le l'atome image du pre du widget passe en paramtre,
	si at-w ne pointe pas vers un widget.

	On peut trouver facilement le chemin d'un widget vers la racine
	utilisant cette fonction.
	 
^%L
(de xhierarchie (at-w)
	  (if (iswidget at-w) (cons at-w (x-chemin at-w () )) nil))

^%L
	(de x-chemin (at-w res)		
	  (let (pre (xWidgetParent at-w))
	     (if (not (iswidget pre)) nil (cons pre (x-chemin pre res)))))

	ramne la liste de widgets conduisant  la racine de la hirarchie du
	widget passe en paramtre.
	Cette fonction est un raccourci pour retrouver la ressource de nom
	"parent" de type de reprsentation "Widget" de toutes les widgets.
	 
^
x-bibliotheques
	Plusieurs bibliothques des fonctions et de tests sont
	disponibles:

	xGetValuess.vlisp contient des fonctions pour retrouver aisment la
	valeur de ressources dans un widget:
 	* allowShellResize? xGetWidgetDims xGetWidgetWidth
	xGetWidgetHeight xGetWidgetBorder xGetWidgetDims
	xGetWidgetPos xGetWidget-x xGetWidget-y 
	
	xSetValuess.vlisp contient des fonctions pour positionner aisment
	des ressources dans un widgets:
 	* allowShellResize xSetWidgetWidth xSetWidgetHeight
	xSetWidgetDims xSetWidgetDim 
	
	xcrWdgts.vlisp contient des fonctions pour faciliter la cration
	des diffrentes classes des widgets:
	* xcAppWidget xcFormWidget xcLabelWidget xcCommandWidget

	x-msLib.vlisp miscelaneus facilities.

	xDemo.vlisp un aperu de ce qu'on peut faire avec les widgets.

	Charger ces fichiers et regardez les dfinitions avec
	pretty, c'est trs simple et amusant.
^
x-dessins

	On peut  dessiner et crire  sur les widgets  utilisant les primitives
	graphiques implmentes:  xDrawPoints,      xDrawLines,     xDrawRays,
	xDrawArcs, xFillArcs, xDrawreCtangles,   xFillRectangles, xDrawString,
	xDisplayBitmap.  La syntaxe de   ces fonctions  est  trs simple:   en
	premier argument  toujours le  widget  sur lequel   on va dessiner,  et
	ensuite les paramtres  des dessins.  Toutes ces primitives, exception
	de la dernire, permettent de raliser plusieurs dessins avec un seule
	appel,  cela optimise  le temps d'excution  et  diminue la  charge du
	rseaux.    Les  widget appartenant    la  classe "Drawxbvl" sont des
	objets spcialiss pour dessiner.  Ils sauvegardent automatiquement les
	dessins  et  on  peut contrler  facilement  tous les   attributs avec
	lesquels les dessins sont raliss.  Les objets appartenant  la classe
	"Tortue" sont    aussi  des  outils   d'une  trs  simple  et   souple
	utilisation.  Voir x-tortues 
	
^
xDrawArcs
(xDrawArcs widget x y width height angle1 angle2 ...) nsubr
	Dessine les contours des arcs d'ellipses sur le widget passe en
	paramtre .
	x, y sont les coordonnes du coin haut  gauche du rectangle qui
	encadre l'ellipse; width, height sont la largeur et la hauteur du
	rectangle. angle1, angle2 sont les angles de dpart et de fin de
	l'arc. Le second angle est relatif au premier.	Les dimensions
	sont mesures en pixels et les angles en 1/64 degrs. 
	On peut dessiner plusieurs arcs sur le widget avec le mme appel
	de fonction. 

	Exemple: 
^%L
	(xDrawArcs -draw- 0 0
	  (xGetValues -draw- "width" "Dimension")
	  (xGetValues -draw- "height" "Dimension")
	  0 (* 360 64))
	
	 dessiner une ellipse encadre par la fentre X associe au widget
	 passe en paramtre.
	 Ramne le nombre d'arcs dessines ou nil si opration est impossible.

^
xFillArcs
(xFillArc widget x y width height angle1 angle2 ...) nsubr
	Dessine des arcs en plein sur le widget passe en paramtre.
	Voir xDrawArcs.	
^
xDrawLines
(xDrawLines widget x1 y1 x2 y2 ... [mode]) nsubr

	Dessine des lignes sur le widget passe en paramtre.
	<x1>, <y1> est la position du point de dpart,	  
	<x2>, <y2> est la position du point d'arrive.
	Si le paramtre <mode> et prsent et vaut 1 les points sont
	interprts par rapport au dernier point si non, si mode est gale
	a 0 ou est absent, les points sont interprts par rapport 
	l'origine. 

	Essayer par exemple:
	
	(xDrawLines widget 10 10 50 50 50 0) et (xDrawLines widget 10 10 50 50 50 0 1)

	Ramne le nombre de lignes dessines ou bien nil si opration
	est impossible.
	
^
xDrawRays
(xDrawRays widget x y length angle ...) nsubr

	Dessine des lignes de centre x y de longueur length avec un angle donne

^
xDrawPoints
(xDrawPoints widget x y ... [mode] ) nsubr
	Dessine des points sur le widget passe en paramtre au coordonnes
	x,y par rapport  l'origine ou au dernier point selon la valeur du
	mode.
	Si <mode> est prsent est vaut 1 les coordonnes des points sont
	interprte par rapport au dernier point. Si <mode> vaut 0 ou est
	absent les coordonnes sont interprtes par rapport  l'origine.
	Ramne le nombre de points dessines ou nil si opration est
	impossible. 
^
xDrawRectangles
(xDrawRectangles widget x y width height ... ) nsubr
	Dessine le contour des rectangles dans la widget passe en
	paramtre. 
	<x>, <y> sont les coordonnes du coin haut  gauche du rectangle.
	<width>, <height> sont la largeur et la hauteur du rectangle.
	Retourne le nombre de rectangles rellement dessines ou nil si
	opration est impossible par une raison quelconque.
	Voir xFillRectangles
^
xFillRectangles
(xFillRectangles widget x y width height ... ) nsubr
	Dessine des rectangles pleins.
	Retourne le nombre de rectangles rellement dessines ou nil si
	opration est impossible.
	Voir xDraWrectangles	
^
xDrawString
(xDrawString widget x y string ) nsubr
	Affiche une chane de caractres sur le widget passe en
	paramtre.
	Cette chane n'est pas accessible  l'interprte pour une
	valuation.
	<x>, <y> sont les coordonnes du premier caractre de la chane a
	dessiner. 
	Ramne t si opration a eu lieu correctement, nil si non.
^
xGetStringDimension
(xGetStringDimension widget string) subr2
	retourne dans une paire pointe la taille en x y de la chane
	donne en argument pour la widget spcifie
^
xClearArea
(xClearArea widget x y width heigth ) nsubr
	Efface une zone rectangulaire dans un widget passe en paramtre.

	<x>,  <y>  sont les coordonnes d'origine du rectangle	a effacer.
	<width>, <height> sont la largeur et la hauteur du rectangle a
	effacer.
	note: les dessins sont sauvegardes seulement sur les widgets
	appartenant  la classe "Drawxbvl". Ces sont des fentres
	spcialises pour dessiner. Sur les widgets "Xbvlisp" n'est
	sauvegarde que les caractres taps par l'utilisateur et les
	affichages faits par l'interprte.
	Ramne t ou nil selon que l'opration ait bien russi ou pas.
^
xDisplayBitmap
(xDisplayBitmap widget bitmap mode x y)

	Affiche la bitmap contenue dans le fichier donne dans l'argument
	bitmap  la position donne dans la widget donne.
	Le mode permet de spcifier le mode d'affichage du bitmap
	pour plus de dtail voir x-GC et xGetBitmapSize.
^
x-GC
	Fonctionnalits donnant accs au contexte graphique d'une widget.

	Fonction accs depuis XbVLISP: 

	(xModifyGC widget attribut valeur)
	(xGetGCValue widget attribut)

	Les attributs du contexte graphique modifiables sont :

	Attribut:	 mode
	Description: contrle du mode d'affichage (quivalant  Logical Function)

^%T3
	Val 	Signification		Nom X
	 1  	src AND dst		and
	 2  	src AND (not dst)	andReverse
	 3  	src			copy
	 4  	(NOT src) AND dst	andInverted
	 5  	dst			noop
	 6  	src XOR dst		xor
	 7  	src OR dst		or
	 8  	(NOT src) AND (NOT dst)	nor
	 9  	(NOT src) XOR dst	equiv
	10  	(NOT dst)		invert
	11  	src OR (NOT dst)	orReverse
	12  	(NOT src)		copyInverted
	13  	(NOT src) OR dst	orInverted
	14  	(NOT src) OR (NOT dst)	nand
	15  	1			set

	Attribut:	 line_width.
	Description: paisseur de la ligne.
	Valeurs:	  >= 0.

^
x-GC2
	(suite de x-GC)

	Attribut:	 line_style.
	Description: style de trace de lignes.

^%T3
	Val	Signification		Nom X
	 0	ligne continue		LineSolid
	 1	pointille		LineOnOffDash
	 2	pointille		LineDoubleDash

	Attribut:	 fill_style.
	Description: style de remplissage.
	
^%T2
	 Val 	 Signification
	  0  	 remplissage de la couleur foreground
	  1  	 remplissage avec le pixmap tile
	  2  	 remplissage avec le pixmap tile dans la couleur foreground
	  3  	 remplissage avec le pixmap tile dans les couleurs de la widget
^
xModifyGC
(xModifyGC widget attribut valeur)

	Modification du GC de la widget spcifie
	Voir x-GC
^
xGetGCValue
(xGetGCValue widget attribut)
	
	Rcupration de la valeur de l'attribut pour le
	GC de la widget spcifie
	
	Void x-GC
^
xGetPosPointer
(xGetPosPointer widget) 	subr1
	ramne la position du pointeur de la souris dans une liste de la
	forme (x_root, y_root, x_win, y_win): 
	x_root, y_root sont les coordonnes par rapport au coin haut a
	gauche de l'cran.
	x_win, y_win sont les coordonnes par rapport au coin haut  gauche
	du widget donn en argument ou, par dfaut, du coin haut 
	gauche de la widget d'interaction principale de Xbvl.
^
xIsRealized
(xIsRealize widget) subr1
	Retourne t si le widget donn en argument est ralis (xRealize)
^
xRealize
(xRealize root-widget)  nsubr
	Cre et affiche les fentres de la hirarchie dont root-widget est
	la racine. root-widget doit tre un widget appartenant  une classe 
	spcialise dans la communication avec le window manager.
	root-widget doit avoir au moins un fils dont les dimensions ne
	sont pas nulles, autrement X gnre une erreur fatale.
	Ramne t si opration est effectue correctement, nil si non.
	Voir xUnrealize, xManage, xUnmanage.
^
xUnrealize
(xUnrealize root-widget) nsubr
	Dtruit les fentres associes  <root-widget> ainsi qu' ses
	descendants. 
	Les widgets eux-mmes ne sont pas dtruits comme c'est le cas
	avec (xRemoveWidget widget). Les fentres peuvent tre recre avec
	xRealize. C'est utile pour changer certaines ressources qui
	dterminent la communication avec le window manager. Ou pour
	librer momentanment de la place mmoire.
	Ramne t si opration est effectue correctement, nil si non.
	Voir xRealize, xUnmanage.	
^
xUnmanage
(xUnmanage widget ) nsubr
	Emancipe le widget de l'autorit de son conteneur. La fentre
	associe au widget n'est plus affiche. Pour le changement de
	plusieurs ressources du widget il faut au pralable l'manciper
	pour la subordonner par la suite avec des nouvelles valeurs.
	Cette fonction permet de grer un widget parmi plusieurs
	attaches  une racine de hirarchie. Une racine de hirarchie ne 
	peut contrler correctement qu'un seul descendant mais peut en
	avoir plusieurs en mme temps. Une gestion de ce type sauve de la
	place mmoire puisque vite la cration de nombreuses hirarchies
	indpendants.
	Ramne t si opration est effectue correctement, nil si non.
^
xManage
(xManage widget ) nsubr
Subordonne le widget l'autorit parentale.
	Ramne t si opration est effectue correctement, nil si non.
	Voir xUnmanage et xSetValues.

^
WIDTH
	Variable qui indique la largeur de l'cran en pixels. 
	Il ne faut pas modifier cette variable.
^
HEIGHT
	Variable qui indique la hauteur de l'cran pixels. 
	Il ne faut pas modifier cette variable.
	
^
LINES
	Variable qui indique le nombre de lignes de l'cran, la police de
	caractres choisie est celle par dfaut. HEIGHT/LINES calcule la
	hauteur d'un caractre. 
	Il ne faut pas modifier cette variable.
^
COLS
	Variable qui indique le nombre de colonnes de l'cran, la police
	de caractres choisie est celle par dfaut. WIDTH/COLS calcule la
	largeur d'un caractre. 
	Il ne faut pas modifier cette variable.
^
xcreeDisplay
(xcreeDisplay ref display)
	 Cre une hirarchie avec un widget d'interaction (Xbvlisp) de 15
	 lignes par 80 colonnes  la position du curseur de l'interface <ref> passe
	 en paramtre. La fonction calcule la position de la hirarchie
	 vitant quelle soit situe hors l'cran.
	 L'interface pour la rcupration automatique des erreurs est cre avec
	 l'appel  cette fonction.
^
xUnmap
(xUnmap widget) nsubr
	Fait disparatre la fentre passe en argument. La fentre n'est
	pas dtruite et elle redevient visible  l'appel de (xMap widget).
	Si le widget pass en argument est le widget principale
	(appartenant  la classe "ApplicationShell") tous les widgets qui
	lui sont attaches disparaissent de l'cran.
	Ramne t si opration est effectue correctement, nil si non.
^
xGetResourceType
(xGetResourceType widget nom-ressource) subr2 
	ramne la reprsentation de type de la ressource ou nil si la
	ressource n'est pas une ressource du widget en paramtre.
^
xGetResourceList
(GetRessourceList widget_class/widget) subr1 
	ramne une liste des ressources et reprsentations de type du
	widget ou de la classe de widget passe en argument. Ces
	informations sons ramne dans une liste compose de couples
	<nom-ressource reprsentation>. 
^
xwdim
(xwdim widget) nsubr
	Ramne la liste des dimensions du widget sous la forme :
	(<nombre-de-lignes> <nombre-de-colonnes> <coord-y> <coord-x> ). Les
	deux derniers nombres sont les coordonnes du coin suprieur gauche
	du widget.

	Cette fonction peut tre dfinie en bVLISP de la manire suivante:

^%L
	(de xwdim (widget)
	  (if (not (iswidget widget "Xbvlisp")) nil
	    [ (xGetValues widget "lignes" "Int" "Int")
	      (xGetValues widget "colonnes" "Int" "Int")
	      (xGetValues widget "y" "Position" "Int")
	      (xGetValues widget "x" "Position" "Int") ]))
^
xwsave
(xwsave widget fichier)
	Sauvegarde le contenu de l'interface passe en paramtre dans
	'fichier'. Utilise avec la commande d'dition ^m on peut
	facilement sauve et restaurer des sessions bvlisp. 
	Ramne t si opration est effectue correctement, nil si non.
	Voir line-editor
^
xflush
(xflush)
	Vide la queue vnements du serveur. 	Trs utile pour
	synchroniser les oprations sur les widgets.
	Utilise dans de cas extrmes ou il y a de problmes de
	synchronisation vnements.
^
xChangeWin
(xChangeWin widget [flag])
	Change le widget d'interaction courant au widget passe en
	paramtre. Par dfaut le pointeur de la souris se situe au
	milieu de ce widget. Si on ne veut pas changer le pointeur de
	position il faut positionner l'argument flag  1.
	Cette fonction est utile sur tout pour faire des affichages sur
	plusieurs widgets dans un programme bVLISP et pour changer
	interactivement le widget courant.
	Les bouts de programmes suivants ralisent les oprations
	prcdantes: 
	
^%L
	(let (-win- (xwinp))
	  (xChangeWin -autre-interface- 1) 
	  (faire-affichages);;
	  (xChangeWin -win-)
	  )

^%L
	(let (-win- (xwinp))
	  (xChangeWin -autre-interface- ) 
	  ;le curseur est dans l'autre interface;
	  (realiser-interactions)
	  (xChangeWin -win-) ;retour  l'ancienne interface; 
	  )

	Ramne t si opration est effectue correctement, nil si non.
	Voir xPosPointer.
^
xGrab
(xGrab widget) 	nsubr
	Le pointeur de la souris est circonscrit dans la zone d'affichage
	du widget passe en argument. Un xGrab interdit le pointeur de la
	souris de sortir de cette fentre, et le changement de fentre
	active ne peut tre ralise que sur des fentres qui la
	recouvrent. 
	C'est une fonction  utiliser avec beaucoup d'attention. Si le
	xGrab est fait sur un widget ou un xUngrab ne peut pas tre ralis
	vous risquer de perdre le contrle de toute l'interface du systme
	X. Vous rester avec votre pointeur de la souris prisonnier sans
	possibilit accder aux applications ni de communiquer avec
	l'interprte. 
	Ramne t si opration est effectue correctement, nil si non.
	Voir xUngrab.
^
xUngrab
(xUngrab)	nsubr
	Dgle la fentre active, le curseur rcupre sa 
	libert de mouvement et la fentre active peut tre
	change positionnant le curseur sur la fentre choisie.
	voir xGrab
^
xRemoveWidget
(xRemoveWidget objet-grephique ) nsubr
	Enlve physiquement l'objet du systme, soit une ressource soit un
	widget. Si c'est un widget qui est dtruit il l'est avec tous ses
	descendants. Le systme s'occupe de librer les ressources alloue
	a l'objet.
	Ramne t si opration est effectue correctement, nil si non.
^
xwst
(xwst widget message)	nsubr
	Affiche le message dans la l'interface passe en argument. Le
	message est affiche  la position courante du curseur.
	Ramne t si opration est effectue correctement, nil si non.
^
xPosPointer
(xPosPointer widget position-x position-y)  nsubr
	Fait le repositionnement du pointeur de la souris sur le widget
	d'interaction passe en argument. Cette fonction ne gle pas le
	le pointeur. Elle gnre les vnements qui changent le widget
	active. 
	Ramne t si opration est effectue correctement, nil si non.
^
xscroll
(xscroll [widget] y n )	 nsubr
	Fait le scroll de "n" lignes le texte  partir de la ligne "y" du
	widget d'interaction. Si le widget est omis opration est
	ralis sur la widget d'interaction courante.
	Ramne t si opration est effectue correctement, nil si non.
^
cleos
(cleos widget)	nsubr
	Efface le texte du widget d'interaction passe en argument a
	partir de la position actuelle du curseur.
	Ramne t si opration est effectue correctement, nil si non.
^
cleol
(cleol widget)	nsubr
	Efface la ligne  partir de la position actuelle du curseur du
	widget d'interaction passe en paramtre.
	Ramne t si opration est effectue correctement, nil si non.
^
poscur
(poscur widget ligne cols nomtop nomwin)  nsubr
	positionne le curseur aux coordonnes (ligne, colonne) de du
	widget d'interaction passe en paramtre, le widget courant par
	dfaut.
	Ramne t si opration est effectue correctement, nil si non.
^
right
(right widget n )  nsubr 
	Repositionne le curseur du widget d'interface passe en paramtre
	"n" caractres  droite de la position courante. Ramne le nombre
	de caractres avances rellement par le curseur. La limite du
	dplacement tant la fin de la ligne le dplacement peut tre
	infrieur au dplacement demande dans l'appel. 
	Ramne nil dans le cas d'chec complet de l'opration; si le
	widget passe en paramtre n'est pas un widget d'interaction par
	exemple. 
	Voir left, down, up, home
^
left 
(left widget n )  nsubr
	Repositionne le curseur de la fentre passe en paramtre "n"
	caractres  gauche de la position courante. Ramne le nombre de
	caractres reculs par le curseur. La limite du dplacement est le
	dbut de la ligne.
	Ramne nil dans le cas d'chec complet de l'opration; si le
	widget passe en paramtre n'est pas un widget d'interaction par
	exemple. 
	Voir right, down, up, home
^
down 
(down widget) nsubr
	Repositionne le curseur du widget d'interaction passe en
	paramtre, sur la ligne infrieure  la ligne courante. 
	Voir right, left, up, home
^
up
(up widget)  nsubr
	Repositionne le curseur du widget passe en paramtre, sur la ligne
	suprieur  la ligne courante.
	Voir right, left, down, home
^
home
(home widget) nsubr
	Positionne le curseur du widget d'interaction sur le premier
	caractre de la fentre passe en paramtre. Sans arguments c'est
	la fentre courante qui est considre.
	Voir right, left, down, up

^
shift_left
(shift_left widget n )  nsubr 
	Dcale le texte  droite du curseur du widget d'interface passe
	en paramtre de "n" caractres vers la gauche. Ramne le nombre de
	caractres rellement dcals; la limite de ce dcalage est le
	dbut de la ligne courante.
	Voir shift_right
^
shift_right
(shift_right widget n )  nsubr 
	Dcale le texte  droite du curseur du widget d'interaction passe
	en paramtre de "n" caractres vers la droite. Ramne le nombre de
	caractres rellement dcals; la limite du dcalage est la fin de
	la ligne courante.
	Voir shift_left

^
back
(back widget )	nsubr 
	Efface le caractre  gauche du curseur du widget d'interaction
	passe en paramtre.
^
cursorpos
(cursorpos widget) nsubr
	Ramne une liste dont le car est  le numro de la ligne sur
	laquelle se trouve actuellement le curseur et le cadr est le numro
	de colonne. La position retourne est par rapport  l'origine de
	l'interface courante passe en paramtre en numro de lignes par
	colonnes  la diffrence de `xGetCursorpos` qui ramne la position du
	curseur en pixels.
	Voir xGetCursorpos
^
xGetCursorpos
(xGetCursorpos widget) nsubr
	Ramne une liste dont les deux premiers lments sont les
	coordonnes x, y du curseur par rapport  la widget passe en
	paramtre, la widget courante par dfaut. 
	Les deux derniers lments sont les coordonnes x, y du curseur
	par rapport  l'cran. 
	La liste ramene a donc la forme (x_win, y_win, x_root, y_root)
	Voir cursorpos
^
xwsave
(xwsave widget fic) 	nsubr
	Sauvegarde le contenu du buffer d'dition de l'interface passe en
	paramtre dans le fichier 'fic'.

^
menu
(menu chaine_de_caracteres/atome/rien {widget})	 nsubr 
	Si vous appelez cette fonction sans arguments, menu affiche alors
	le menu cache du menu courant. Le menu courant est celui dfini
	par votre dernier appel de la fonction 'make-menu' (cf. make-menu).
	Si vous appelez 'menu' avec une chane de caractres, cette chane
	de caractres sera alors affiche comme menu. Si vous l'appelez
	avec un argument de type atome, la valeur de l'atome sera alors
	affiche comme menu. Cette dernire possibilit est trs utile
	si vous voulez avoir un menu arborescent. 
	On peut fournir un widget d'affichage au menu. Ce widget peut tre
	un widget awLabel, awText, awList ou une classe drive d'une de
	ces trois classes. Si on affiche un menu dans un widget awList on
	peut attacher des expressions  chaque lment du menu utilisant le
	Callback du widget, si on utilise un menu awCommand ou awRepeater
	on peut attacher une expression  l'ensemble du menu utilisant le
	mme mcanisme.
^
make-menu
(make-menu suite_de_chaines_de_caracteres) Fsubr 
	la fonction make-menu permet de construire des menus que vous pouvez
	ensuite afficher avec la fonction 'menu'. Les arguments doivent
	tre des chanes de caractres,  raison d'une chane pour une ligne
	du menu. Si vous voulez des menus arborescents, il suffit d'afficher
	dans le(s) menu(s) des atomes auxquels vous avez affecte des chanes
	de caractres correspondant au menu affiche par cet atome.
^
stdmenu
(stdmenu {widget}) subr 1
	permet, par programme, d'afficher le menu standard. Si <widget>
	est prsent le menu standard sera affiche sur ce widget s'il
	appartient  une de classes awLabel, awText, awList ou drives.
^
sleep
(sleep n)
	fait endormir bVLISP pour n secondes
^^Prolog
^
Prolog
Prolog dans xbvl

	xbvl possde un moteur prolog intgr.

		"assert" permet de dfinir de nouvelles clauses et
		"prolog" permet de lancer le moteur prolog.

	par exemple :

	(assert ((conc nil $x $x))
	  ((conc ($x1 . $x2) $y ($x1 . $z))
	   (conc $x2 $y $z)))

	dfini la concatnation en prolog et

	? (prolog (conc (a b c) (d e) $t) (print $t))
	(a b c d e)
	= t
^
assert
(assert clauses) nsubr

	assert permet la dfinition de clauses prolog, la syntaxe de 
	dfinition est :

	(assert clause1 clause2 ... clausen)

	ou une clause a la forme :

^%T2
	clause		(tete-de-clause condition1 condition2 ... conditionn)

	tete-de-clause	(nom-de-clause arg1 ... argn)
	condition	(nom-de-clause arg1 ... argn)
	 		ou (lisp? test-lisp)
	 		ou (:= variable valeur-lisp)
	 		ou (print arg1 ... argn) ; imprime la valeur des arguments
	 		ou (cut)
	 		ou (fail)

	dans les clauses prolog, les variables sont dsignes par le
	prfix $ (par exemple $a, $une-variable-prolog, ...)
^
cut
(cut)
	permet l'adjonction d'une coupure dans une clause xbvl-prolog.
^
:=
(:= variable-prolog valeur-lisp)
	
	permet de fixer la valeur d'une variable prolog  partir d'une
	expression value dans lisp  l'intrieur d'une clause prolog.

	par exemple dans :

^%L
	(assert
	  ((fact 0 1) (cut))
	  ((fact $n $r)
	   (fact (& (1- $n)) $r1)
	   (:= $r (* $r1 $n))
	  ))

	(:= $r (* $r1 $n)) vas affecter  la variable $r la valeur de
	la multiplication des valeurs contenues dans $r1 et $n.
^
fail
(fail)

	permet l'adjonction d'un fail (chec) dans une clause prolog.

^
prolog
(prolog clause1 ... clausen)

	lance l'valuation prolog squentielle des clauses donnes en 
	argument. ramne t si l'valuation prolog a t un succs, 
	nil si non.

