#!/bin/csh

#######################################################################################################################################
#                                                                                                                                     #
#         G E N E R A T I O N   D E   L A   D E F I N I T I O N                                                                       #
#         D ' U N   A U T O M A T E   C E L L U L A I R E   B I D I M E N S I O N N E L  :                                            #
#                                                                                                                                     #
#                                                                                                                                     #
#         Utilisation :                                                                                                               #
#                                                                                                                                     #
#                   $xci/AutoC_2DQ.01$Z <nom_definition> "<regle1> ... <regleN>" [<EditerRegles>]                                     #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xci/AutoC_2DQ.01$Z' :                                                                                           #
#                                                                                                                                     #
#                     Jean-Francois Colonna (LACTAMME, 20030125123448).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

set       Definition=$1
set       Regles=($2)
set       EditerRegles=$3

setArgum  EditerRegles                  $NEXIST

$xci/init$X         niveau=$NOIR R=$Definition                                                                                          \
                                                                                                    $formatI
                                        # Initialisation a '$NOIR' de la definition...                                                #

source    $xci/AutoC_NDB$vv$Y
                                        # Definitions utiles a la definition d'un automate cellulaire binaire (et autre...).          #

path_f    $PaletteEscalier

set       Alias1="alphax"
set       Alias2="Alph"

#20111222171516____:set       noglob                                                                                                  #
Snoglob

set       VaLiDe=`$CA $xigP/$nomF$Z | $GRE "^ *alias  *$Alias2 "`

#20111222171516____:unset     noglob                                                                                                  #
Rnoglob

if        ("$VaLiDe" == "$K_VIDE") then
          EROR      "L'alias '$Alias2' n'existe pas dans '"'$xigP/'"$nomF"'$Z'"'."
else
endif

unset     VaLiDe

#20030128091116____:set       ValideRegles=`$GRE "^ *set .*$Alias1 " $xigP/$nomF$Z | $SE -e "s/^.*$Alias1  *//" -e 's/^\(.\).*$/\1/'` #
set       ValideRegles=`$CA $xigP/$nomF$Z | $R "$K_QA" "$K_NL" | $EGRE -e "^ *$Alias1 |^ *$Alias2 " | $SE -e "s/^ *[^ ][^ ]*  *//"`

set       ValideRegles=`echo "$ValideRegles" | $SE -e "s/  */|/g"`
                                        # Pour valider les regles lors de leur analyse...                                             #

if        ($#Regles > $dimY) then
          EROR      "Le nombre de regles maximal est $dimY alors qu'il y en a $#Regles."
else
endif

set       Ycourant=$Ymin
                                        # La coordonnee 'Y' represente le numero des regles.                                          #

if        ($EditerRegles == $EXIST) then
          echo      "Regles utilisees : {$Regles}."
else
endif

foreach   Regle     ($Regles)
          set       Xcourant=$Xmin
                                        # La coordonnee 'X' represente l'index des points de chaque regle.                            #

          set       Points=`echo "$Regle" | $SE -e "s/$SeparateuR/ /g"`

          if        ($#Points == 2) then
                    set       Spirale=$Points[1]
                    set       Niveau=$Points[2]

                    set       Spirale=`echo "$Spirale" | $SE -e "s/\(.\)/\1 /g" -e 's/  *$//'`
                    set       Niveau=`echo "$Niveau" | $SE -e "s/\(.\)/\1 /g" -e 's/  *$//'`

                    if        ($#Spirale == 0) then
                              EROR      "La regle '$Regle' est mal formee (1)."
                    else
                    endif

                    if        ($#Niveau != 1) then
                              EROR      "La regle '$Regle' est mal formee (2)."
                    else
                    endif

                    set       RegleC=($Niveau $Spirale)

                    foreach   Point     ($RegleC)
#20030126191703____:                              set  VaLiDe=`echo "$Point" | $EGRE -e "$ValideRegles"`                              #
#20030128091116____:                              set  VaLiDe=`echo "$Point" | $EGRE -e "$ValideRegles|[$Alphabet_A_Z$Alphabet_a_z]"` #
                              set       VaLiDe=`echo "$Point" | $EGRE -e "$ValideRegles"`

                              if        ("$VaLiDe" == "$K_VIDE") then
                                        EROR      "La regle '$Regle' est mal formee (3)."
                                        # On notera l'utilisation suivante des codes "signifiant" aussi "W" ("Blanc") dans les        #
                                        # regles associees a chacune des palettes suivantes :                                         #
                                        #                                                                                             #
                                        #                                       MembreGauche :      MembreDroite :                    #
                                        #                                                                                             #
                                        #                   $xiP/escalier2.01 : {7}                 {B}                 (A="Noir")    #
                                        #                   $xiP/escalier2.02 : {6,7}               {D,E}               (C="Noir")    #
                                        #                   $xiP/escalier2.03 : {5,6,7}             {G,H,I}             (F="Noir")    #
                                        #                   $xiP/escalier2.04 : {4,5,6,7}           {K,L,M,N}           (J="Noir")    #
                                        #                   $xiP/escalier2.05 : {3,4,5,6,7}         {P,Q,R,S,T}         (O="Noir")    #
                                        #                   $xiP/escalier2.06 : {2,3,4,5,6,7}       {V,W,X,Y,Z,a}       (U="Noir")    #
                                        #                   $xiP/escalier2.07 : {1,2,3,4,5,6,7}     {c,d,e,f,g,h,i}     (b="Noir")    #
                                        #                                                                                             #
                                        # ('v $xigP/BW.01234567$Z').                                                                  #
                              else
                              endif
                    end

                    set       RegleC=`echo "$RegleC" | $SE -e "s/  *//g"`

                    $xci/S_points$X     A=$Definition                                                                                   \
                                        X=$Xcourant Y=$Ycourant                                                                         \
                                        iX=1        iY=0                                                                                \
                                        niveaux=$RegleC                                                                                 \
                                        R=$Definition                                                                                   \
                                                                                                              $formatI
          else
                    EROR      "La regle '$Regle' est mal formee (4)."
          endif

          @         Ycourant = $Ycourant + 1
end

$xci/substitue$X    A=$Definition                                                                                                       \
                    substitution=L_SUBSTITUTION_ROUGE                                                                                   \
                    p=$PaletteEscalier                                                                                                  \
                                                                                          $formatI                                |     \
$xci/acces$X                                                                                                                            \
                    convertir=VRAI                                                                                                      \
                    R=$Definition                                                                                                       \
                                                                                          $formatI
                                        # ATTENTION : '$xci/substitue$X' ne peut evidemment avoir lieu qu'une seule fois sur          #
                                        # l'image '$Definition', et ce tout a la fin.                                                 #



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.