A) Mise en oeuvre sous linux
============================

1. A faire une seule fois par compte informatique
   ----------------------------------------------

* A la racine du compte, taper
  cp .cshrc .tcshrc   puis   nedit .tcshrc

* Ajouter la ligne (dans la partie Linux) :
  alias sig_init 'source /user/info_lib/signal/Linux/polychronyEnv'
  et sauvegarder le fichier.


2. A faire une seule fois au de'but de chaque session (ou dans chaque terminal)
   --------------------------------------------------

* Taper   /bin/tcsh
  (sig_init est de'sormais disponible)

  sig_init
      - permet d'utiliser dans la me^me fene^tre terminal les commandes :
        sig_comp, sig_make, sig_exec, sig_save, sig_wash, sig_redo, sig_data, sig_resu
      - se passe bien si donne uniquement des messages commencant par
        %%  WARNING  %%   ou par   >>>> use


3. De'roulement pour chaque exercice (prog) sous Linux
   ---------------------------------------------------

* cre'ation d'un sous-re'pertoire particulier pour chaque nouvel exercice
  Tous les fichiers (prog.SIG, prog.par, R*.dat) doivent e^tre dans ce
  sous-re'pertoire, et toutes les commandes sig_* doivent e^tre exe'cute'es
  a` partir de ce sous-re'pertoire.

* cre'ation du fichier source :  nedit prog.SIG
  (et e'ventuellement du fichier prog.par --> voir chapitre B)
  Attention !  Les noms du fichier et du process
  doivent e^tre identiques a` la majuscule pre`s.

* compilation signal -> C :
  sig_comp prog
      - lance:  la destruction des fichiers d'erreurs (voir ci-dessous)
                sig -c prog.SIG prog.par
                (s'il n'y a pas de .par, lance juste sig -c prog.SIG)
      - ge'ne`re: des fichiers .c et .h
      - se passe bien si aucun warning ni aucun nouveau fichier .SIG ge'ne're'
      - peut afficher certaines erreurs de syntaxe
        que l'on peut retrouver dans le fichier POLYCHRONY_STDERR.log

* en cas d'erreur, la compilation ge'ne`re les fichiers:
      PROG_LIS.SIG et/ou PROG_CYC.SIG et/ou PROG_TRA.SIG et/ou PROG_bDC_TRA.SIG
  sig_list prog
      - permet de les visualiser;
        . regarder les messages d'erreur dans ces fichiers.
        . quand il n'y a plus d'erreur, passer a` l'e'tape suivante.

* compilation C -> exe'cutable :
  sig_make prog
      - ne'cessite un re'pertoire contenant les fichiers .c et .h ge'ne're's par sig_comp
      - lance:  cc -o ./prog.x ./prog/*.c -I $sigdir/Signal/lib/C/export -lm
      - ge'ne`re: des fichiers .o et l'exe'cutable prog.x
      - la compilation C ne devrait pas produire d'erreur

* cre'ation des fichiers de donne'es en entre'e :
      par exemple:  nedit REntree.dat (pour le signal Entree)
      (plus e'ventuellement des fichiers RC_*.dat --> voir chapitre C)

* exe'cution :
  sig_exec prog
      - lance ./prog.x
      - ne'cessite les fichiers R*.dat
        (RTOP.dat, RCOMMANDE.dat, RTERMINEE.dat pour le veilleur)
        et e'ventuellement les fichiers RC_*.dat
        (RC_TOP.dat, RC_COMMANDE.dat, RC_TERMINEE.dat pour le veilleur)
      - ge'ne`re: les fichiers de sortie W*.dat
        (WALARME.dat pour le veilleur)

* visualisation des fichiers de donne'es en sortie :
  - par exemple: more WSortie.dat (pour le signal Sortie)
        (plus e'ventuellement un fichier montrant l'horloge du
        signal Sortie, par exemple C_Sortie --> WC_Sortie.dat)

  sig_data prog
      - permet de visualiser tous les R*.dat
  sig_resu prog
      - permet de visualiser tous les W*.dat
        ATTENTION : uniquement apre`s un sig_save ou sig_redo

  - pour le veilleur :
    . Regarder le fichier WALARME.dat
    . Question: La valeur pre'sente dans ce fichier est certainement bonne (!!!),
                mais comment connaitre son horloge ?
    . Re'ponse: Il faut ajouter un signal de sortie concu pour cela :
                boolean C_ALARME
                qui devra e^tre faux aux instants ou` ALARME est absent
      >>> Exercice: e'crire la de'finition de ce signal et ve'rifier WC_ALARME.dat

* nettoyage du compte
  - sig_wash prog
        ne conserve que le .SIG (+ .par) et les R*.dat
  - sig_save prog
        ATTENTION : a` faire avant sig_wash prog !
        permet de conserver en plus l'exe'cutable et les W*.dat

* re'percuter une petite modification
  - sig_redo prog
        . enchai^ne toutes les ope'rations apre`s une modification de prog.SIG ou prog.par
          sig_comp, sig_make, sig_exec, sig_save, sig_wash
        . s'il y a des erreurs, refaire sig_comp pour pouvoir visualiser les PROG_*.SIG


B) Les parame`tres
==================

 * Ne pas confondre parame`tre (une seule valeur) et
   signal d'entre'e (suite de valeurs).

 * L'ordre des parame`tres n'est pas indiffe'rent.

 * Cre'er un fichier du me^me nom que le fichier source (.SIG)
   mais d'extension .par .

 * Ne cre'er de fichier .par que si le processus a au moins un
   parame`tre (le fait que des sous-processus aient des parame`tres
   n'implique pas que le processus en ait !)

 * La cre'ation du fichier .par doit intervenir avant la compilation.

 * Modifier le fichier .par oblige a` re-compiler.

 * Les valeurs des parame`tres doivent e^tre se'pare's par des virgules.


C) Fichiers de donne'es / Exe'cution / Fichiers de re'sultats
=============================================================

1. Entre'es monochrones (premiers exercices)
   --------------------

  * Il suffit de cre'er un fichier R*.dat par signal d'entre'e.
    Les valeurs peuvent e^tre se'pare'es par des espaces et/ou
    des retours a` la ligne.

2. Entre'es polychrones (exemple du veilleur)
   --------------------

  * En plus des fichiers R*.dat :

    - RTOP.dat :
        1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

    - RCOMMANDE.dat :
        7 8 9

    - RTERMINEE.dat :
        1 1 1

    Ces fichiers ne testent pas TOUS les cas inte'ressants.
    >>> Exercice: e'crire des tests exhaustifs.

  * Les signaux d'entre'e n'ayant pas la me^me horloge, il faut
    pre'ciser leurs horloges respectives dans des fichiers
    RC_TOP.dat, RC_COMMANDE.dat, et RC_TERMINEE.dat :
         1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1
         0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0
         0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0

    Explication : a` chaque 1 dans RC_*.dat, on va chercher la
    valeur suivante dans le fichier R*.dat correspondant ;
    a` chaque 0 dans RC_*.dat, correspond une absence de valeur.


FIN DU MODE D'EMPLOI