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