#!/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   B I N A I R E  :                            #
#                                                                                                                                     #
#                                                                                                                                     #
#         Utilisation :                                                                                                               #
#                                                                                                                                     #
#                   $xci/AutoC_2DB.01$Z <nom_definition> "<regle1> ... <regleN>" [<EditerRegles>]                                     #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xci/AutoC_2DB.01$Z' :                                                                                           #
#                                                                                                                                     #
#                     Jean-Francois Colonna (LACTAMME, 20030116171028).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

set       Definition=$1
set       Regles=($2)
set       EditerRegles=$3
                                        # L'argument '$EditerRegles' a ete introduit le 20030123001229, apres que les conventions     #
                                        # {N,B} aient ete remplacees par les conventions {B,W}...                                     #

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.                        #

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)
                              if        ($Point == $PointNoir_) then
                              else
                                        if        ($Point == $PointBlanc) then
                                        else
                                                  EROR      "La regle '$Regle' est mal formee (3)."
                                        endif
                              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=$PaletteNoirBlanc                                                                                                 \
                                                                                          $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. La conversion en une image non standard         #
                                        # a ete introduite le 20030123165835 afin de prevoir des extensions futures...                #



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