      Mode d'emploi des fonctions INFORM, CHOOSE et MSGBOX
      ----------------------------------------------------

Traduit du rosbif par Laurent Kubaski
Exemples par Kubaski Laurent
Saisie sur ordinateur par L.Kubaski
Mis sur le WEB par K.Laurent

Pour me feliciter: lkubaski@infini.fr
Pour jeter un coup d'oeil au reste: http://www.infini.fr/~lkubaski
Pour me gueuler dessus: Federation Francaise de Boxe Thailandaise, Brest.



Syntaxe de INFORM
_________________

INFORM - Cree une interface personnalisee permettant de saisir
         des donnees.

       INFORMATIONS A FOURNIR:
       -----------------------

             5: "titre"
             4: { champs }
             3: <format>
             2: { valeurs_de_mise_a_zero }
             1: { valeurs_initiales }

        RESULTAT:
        ---------

             soit    2: { nouvelles_valeurs }
                     1: 1

             soit:   1: 0


        ARGUMENTS:
        ----------

          # "titre"

              Le titre est affiche en petits caracteres dans la partie
              superieure de l'ecran. S'il depasse 30 caracteres, il est
              tronque.

          # { champs }

              Liste du type { champ1 champ2 ... champn } ou chaque
              champ doit respecter une des formes suivantes:
           

                1.    "label"
                2.    { "label" "aide" }
                3.    { "label" "aide" type1 type2 ... typen }
                4.    { }

           "Label" est une chaine de texte de 26 caracteres au maximum.

           L'"aide" est affichee au bas de l'ecran, de maniere a aider
           l'utilisateur lors de la saisie des donnees.

           typen (qui est un entier) indique les types des objets autorises
           dans chaque champ. Cet entier s'obtient en utilisant la commande
           TYPE (lisez votre manuel si vous ne savez pas ce que c'est)

           exemple:
           Entier -> 0
           Complexe -> 1
           Chaine -> 2
           Matrice -> 3  etc...


           les options "aide" et typen sont facultatives: si vous ne
           les utilisez pas, le texte d'aide sera inexistant et tous
           les types de donnees seront autorisees.

           # <format>

              Au choix:

                1.    { }
                2.    colonnes
                3.    { colonnes }
                4.    { colonnes distance }

           si vous souhaitez que les champs soit affiches l'un
           a cote de l'autre (en colonnes) au lieu de l'un sous
           l'autre, precisez le nombre de colonnes souhaitees.

           <distance> indique la distance entre le titre de chaque
           champ et les donnees qui seront saisies (a utiliser pour
           faire plus joli !)

           Les valeurs par defaut sont 1 colonne et une distance de 3


           # { valeurs_de_mise_a_zaro }

              Liste de valeurs (une par champ) qui remplaceront les
              valeurs de chaque champ lors de l'appui sur la touche
              RESET.
              La liste doit contenir le meme nombre d'objets que celui
              de {champs} ou doit etre laissee vide.
              Si vous souhaitez laissez un ou plusieurs champs vides, utilisez
              la commande NOVAL

             

           # { valeurs_initiales }

              Liste de valeurs indiquant les valeurs par defaut des
              champs lors de l'affichage du menu INFORM.
              Si vous souhaitez laisser un champ vide, utilisez
              l'instruction NOVAL; si vous souhaitez laissez tous
              les champs vide (ie:pas de valeur initiale), mettez
              une liste vide !

              exemple: Menu INFORM avec 5 champs
              1er champ: valeur initiale = 5
              2e champ: contenu initial = "COUCOU"
              3e champ: vide
              4e champ: contenu initial = [ 1 2 ]
              5e champ: vide

              alors, vous devez taper { 5 "COUCOU" NOVAL [ 1 2 ] NOVAL }


Note: dans tous les cas, INFORM (et CHOOSE) laisse au niveau 1 de la
pile un reel. (voir chapitre RESULTAT)
Si ce reel est 1 alors tout s'est passe normalement et une liste se
trouve au niveau 2
Si ce reel est 0 alors l'utilisateur a quitte le programme.

En testant ce nombre, on peut agir en consequence.

EXEMPLE D'UTILISATION.
----------------------
 
 Supposons que vous souhaitiez creer un programme calculant les
 racines d'un trinome (A*X^2+B*X+C=0) avec des coefficients
 reels.
 Un menu INFORM va vous permettre de saisir les donnees d'une maniere
 claire et efficace.

 TITRE: "a*X^2+b*X+C=0"
 CHAMPS: { { "a=" "Entrez la valeur de a" 0 } { "b=" etc... } {"c=" etc... }}
              ^^            ^^            ^
    Titre du champ         Aide         Type entier

 FORMAT: { 3 }
           ^
      On va presenter tout ca en colonnes because c'est plus joli

 VALEURS_DE_MISE_A_ZERO: {}
                          ^
           On met rien because on s'en tappe

 VALEURS INITIALES: { 0 0 0 }
                      ^^^^^
              Au demarrage, on aura a=b=c=0

 Et voila, on met tout ca dans un programme et ca donne un truc du genre:


 << "a*X^2+b*X+c=0" {{ "a=" "Entrez la valeur de a" 0 } { "b="
    "Entrez la valeur de b" 0 } { "c=" "Entrez la valeur de c" 0 }}
    { 3 }  {} { 0 0 0 }
    INFORM
 >>

 Si vous choisissez a=1 b=2 c=3 alors en sortant du programme, la pile
 sera ainsi:

 2: { 1 2 3 }
 1: 1

 Vous droppez le niveau 1 et vous utilisez la liste pour calculer les
 racines du trinome !


Syntaxe de CHOOSE
_________________

CHOOSE - Cree un menu deroulant personnalise.

        INFORMATIONS A FOURNIR:
        -----------------------

             3: "titre"
             2: { elements }
             1: <numero_de_l'element_initial>

        RESULTAT:
        ---------

             soit:   2: { objet_choisi }
                     1: 1

             soit:     1: 0

        ARGUMENTS:
        ----------

          # "titre"
              Il sera affiche dans la partie superieure du menu
              de selection

          # { elements }
              Une liste d'elements arbitraires: chaque element va
              occuper une ligne du menu deroulant.
              Si vous choisissez un de ces elements dans le menu
              deroulant, il sera place dans la pile.

              Si l'un des elements est en fait une LISTE de 2 lments,
              alors le 1ER element de la liste sera affich dans le
              menu; et si vous le selectionnez alors le 2E lment de la
              liste sera place dans la pile.

           # <numero_de_l'element_initial>

              Par defaut, CHOOSE commence par selectionner le
              premier element de la liste (inverse-video).
              Si vous le souhaitez, vous pouvez commencer par
              l'element de votre choix en precisant le numero
              de celui-ci.

              Si vous mettez '0' alors le menu sera tout de meme
              affiche, mais vous ne pourrez pas faire de selection.
              (on peut utiliser cette option pour afficher
              des resultats)


EXEMPLE D'UTILISATION
---------------------

Imaginons un programme completement con qui demande
a l'utilisateur combien d'oeufs il souhaite acheter.

TITRE: "Combien d'oeufs ?"
ELEMENTS: { 6 { "Une dizaine" 10} {"Une douzaine" 12}}
NUMERO DE L'ELEMENT INITIAL: 2

Et hop, on met tout ca dans un prog:

<< "Combien d'oeufs ?" { 6 { "Une dizaine" 10} {"Une douzaine" 12}}
2 CHOOSE
>>

Autre exemple 
-------------

Ce programme joue des notes. 

<< "Notes"
{ { "1ere note" << 440 .3 BEEP >> }
{ "2e note" << 660 .3 BEEP >> }
{ "3e note" << 880 .3 BEEP >> }
1 CHOOSE
IF 1 == THEN EVAL END
>>



Un des interets de CHOOSE, c'est de pouvoir placer dans la pile
un element qui n'est pas forcement apparu dans le menu droulant !


Syntaxe de MSGBOX (rien de plus simple):
_________________

MSGBOX - affiche un message dans une boi-boite.

        INFORMATION A FOURNIR:
        ----------------------

             1: "message"

        RESULTAT:
        ---------

             Aucun (!!!)

        ARGUMENTS:
        ----------

          # "message"

              N'importe quelle chaine de caracteres.
              MSGBOX affiche au maximum 5 lignes


EXEMPLE D'UTILISATION (est-ce bien necessaire ?)
---------------------

Vous voulez afficher "salut petit comique":

<< "SALUT PETIT COMIQUE"
MSGBOX
>>


