Mode descriptif:

	A=P()
	    point
	    Point alatoire.

	A=P(0,1)
	    A point fixe.

	a=s(B,C)
	    segment
	    segment de B  C.

	a=s(B,2)
	    segment de longueur fixe.

	a=l(B,C)
	    droite ("line")
	    droite passant par B et C.

	a=r(B,C)
	    demi-droite ("ray")
	    A demi-droite d'origine B passant par C.

	k=c(A,B)
	    cercle
	    A cercle de centre A passant par B.

	k=c(A,2)
	    A cercle de rayon fixe.

	k=c(A,B,C)
	    A cercle de centre A et de rayon BC.

	A=I(d,d)
	    intersection
	    intersection entre deux droites.

	A,B=I(c,c)
	    intersection entre deux cercles, ou entre un cercle et une droite.

	M=M(A,B)
	    milieu
	    milieu de AB.

	g=par(d,A)
	    parallle
	    parallle  d mene par A.

	g=perp(d,A)
	    perpendiculaire
	    perpendiculaire  d mene par A.

	a=a(A,B,C)
	    angle
	    angle A,B,C (dans l'ordre: B est le sommet)

	a=a(A,B,90)
	    angle de mesure fixe (sommet: B)

	A=poly(P1,P2,P3)
	    polygone plein
	    polygone P1 P2 P3.

	E=expression(s)
	    expression
	    cre l'expression s (expression arithmtique)  un emplacement
            alatoire.

	value(P,0,1)
	    valeur ("value")
	    Fixe les coordonnes du point P

	value(s,2)
	    Fixe la longueur du segment s.

	value(c,2)
	    Fixe le rayon du cercle c.

	value(a,90)
	    Fixe la mesure de l'angle a.

	value(true,o)
	    fixe le mode d'affichage de o.
	    "true" (vrai) peut tre omis.

	value(true)
	    fixe le mode d'affichage par dfaut des valeurs.

	name(o,p)
	    nom
	    donne p comme nom  o.

	name(true,o)
	    affichage ou non du nom de o.
	    "true" peut tre omis.

	name(true)
	    mode d'affichage par dfaut des noms.

	hide(true,o)
	    cach ("hide")
	    cache ou montre o.
	    "true" peut tre omis.

	hide(true)
	    valeur par dfaut de l'affichage des objets.

	invisible(true,o)
	    invisible (dans les macros)
	    cache compltement o ou non.
	    "true" peut tre omis.

	invisible(true)
	    valeur par dfaut de l'attribut prcdent.

	col(green,o)
	    couleur ("color")
	    fixe la couleur de l'objet o (green, blue, cyan, brown).

	col(green)
	    couleur par dfaut (ici: vert).

	th(thin,o)
	    epaisseur ("thickness")
	    fixe l'paisseur de o (thick, normal, thin)
	    (thick=epais; thin=pointill)

	th(thick)
	    paisseur de trait par dfaut

	type(square,P)
	    type
	    type d'affichage du point P: square (carr), circle (cercle),
            diamond (losange), dot (point).

	type(square)
	    type d'affichage par dfaut des points.

	part(true,k)
	    partiel
	    affichage partiel de l'objet k.
	    "true" peut tre omis.

	part(true)
	    affichage par dfaut (partiel ou non).

	fill(true,o)
	    plein ("fill")
	    remplit l'objet o.
	    "true" peut tre omis.

	back(true,o)
	    arrire-plan ("background")
	    fait passer l'objet o  l'arrire-plan.
	    "true" peut tre omis.

	window(0,0,5)
	    fenetre ("window")
	    fixe la taille de la fenetre (largeur 2^5 et centre (0,0)).

	obtuse(true,a)
	    obtus
	    autorise l'angle a  devenir obtus.
	    "true" peut tre omis.

	acute(true,a)
	    aigu
	    force l'angle a  rester aigu.
	    "true" peut tre omis.

	restrict(c,A,B)
            arc de cercle
            ne dessine que l'arc AB du cercle c


        Partout o des points sont attendus, c(k), a(s) et b(s) peuvent tre
        utiliss:
        c(k) est le centre du cercle k, a(s) et b(s) sont les deux points
        dfinissant le segment, la droite ou la demi-droite.

Macros:
        On peut aussi dfinir des macros en mode descriptif.
        Les noms  gauche du symbole = seront assigns aux objets finaux.
        S'il y a plusieurs objets finaux, les noms doivent tre spars
        par des virgules. On peut utiliser un paramtre additionnel
        pour affecter une valeur  un objet; cette valeur sera demande
        par le programme en mode interactif.


Expressions:

        Les expressions obissent aux conventions mathmatiques usuelles,
        y compris les rgles de	prcdence de */ sur +-. On peut aussi utiliser
        l'oprateur d'lvation  la puissance ^ (qu'on peut aussi crire **).
        Les parenthses sont autorises et respectes.

        Les fonctions mathmatiques usuelles, comme sin, cos, tan,
        arcsin, arccos, arctan, sqrt, abs, sign, exp et log sont disponibles.
        Pour arrondir  des valeurs entires, on dispose des fonctions
        round, ceil et floor. x(P) and y(P) fournissent les coordonnes d'un
        point, d(P,Q) la distance de deux points, a(A,B,C) l'angle ABC; angle360
        et angle180 obligent les mesures des angles  rester comprises
        respectivement entre 0 et 360, ou entre -180 et 180.

        La fonction scale(x,a,b) calcule (x-a)/(b-a). Elle n'est valide que si
        x appartient  l'intervalle (a,b). d(x) calcule les variations de x.
        Si x est un point, elle calcule le mouvement de ce point. sum(x,f)
        ajoute x. Ceci peut tre utilis pour intgrer. Si f est ngatif ou
        n'est pas valide, la somme est remise  0.

        La fonction if(e,e1,e2) renvoie e1, si e est valide, sinon e2. La
        constante "invalid" renvoie une expression non valide.

        Les noms des segments, des cercles et des angles sont valus
        respectivement comme leur longueur, leur rayon et leur mesure.


Enregistrement d'une construction dans un fichier:

        On peut crire une construction en mode descriptif sous forme de texte,
        en utilisant n'importe quel diteur de texte simple (par exemple le
        bloc-notes sous Windows; mais pas un traitement de texte qui rajoute des
        instructions de formatage...), sauvegarder ce texte dans un fichier
        (avec l'extension ".run"), et ensuite charger ce fichier de construction
        dans C.a.R. (menu fichier: ouvrir une construction): voir un exemple
        plus bas.
        La syntaxe est base sur la notion de ligne (une commande par ligne)
        et utilise les commandes dcrites plus haut. Les lignes commenant par
        // sont considres comme des commentaires et ne sont pas interprtes.
        Les fichiers de constructions peuvent contenir des macros comme celle-ci:


		macro U
		// Construit le cercle passant par 3 points
		    param A=point // choisir le premier point
		    param B=point // choisir le deuxime Point
		    param C=point // choisir le troisime point
		    g1=MS(A,B)
		    g2=MS(A,C)
		    U=intersection(g1,g2)
		    target k=c(U,A)
		end

        (target ("cible") dsigne les objets finaux de la macro
        param ("paramtre") les objets initiaux
        end ("fin") signale la fin de la macro)

        L'indentation est facultative. Les commentaires dans les lignes
        de dfinition des paramtres sont utiliss comme requtes dans la ligne
        de commande, si la macro est utilise de manire interactive.
        Cette macro fait appel  la macro MS qui demande deux objets initiaux:

		macro MS
			param A=point
			param B=point
			part(true)
			k1=c(A,B)
			k2=c(B,A)
			part(false)
			P1,P2=intersection(k1,k2)
			invisible
			target g=d(P1,P2)
		end

        Si une ligne du programme construit deux objets, l'objet final
        ("target") doit tre dfini sur une autre ligne. La commande "invisible"
        cache compltement toutes les tapes intermdiaires de la construction.
        Cette commande peut aussi tre applique individuellement  des objets.
        La commande "showall" ("montrer tout") est son contraire.

		A,B=intersection(g,k)
		target B

        Si une macro a plus d'un objet final, tous les objets finaux doivent
        tre affects.

		A,B=test(...)

        Le mot-cl "prompt" prcdant le nom d'un objet indique une requte:

		k=c(A,5)
		prompt k

        Voici un exemple de macro utilisant un segment comme objet initial:

		macro MS
		// mdiatrice
			A=point
			B=point
		    param s=segment(A,B)
		    ...
		end

        Si des cercles sont utiliss comme objets initiaux, la syntaxe prend
        la forme suivante:

		M=point
		param c(M)

        Ce type de cercle ne peut tre utilis que comme objet initial.

