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