#!/bin/csh

#######################################################################################################################################
#                                                                                                                                     #
#         E X E C U T I O N   D ' U N E   C O M M A N D E   E N   F O R M A T   ' Sdu '                                               #
#         ( O B L I G A T O I R E   P O U R   L E S   T R A N S F O R M E E S   D E   F O U R I E R )  :                              #
#                                                                                                                                     #
#                                                                                                                                     #
#         Utilisation :                                                                                                               #
#                                                                                                                                     #
#                   $xci/ExecSdu$vv$Z   <commande> [<arguments>]                                                                      #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xci/ExecSdu$vv$Z' :                                                                                             #
#                                                                                                                                     #
#                     Jean-Francois Colonna (LACTAMME, 20060309101727).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

set       Commande=$1
                                        # Le nom de la commande a ete isole le 20060311112652...                                      #
set       CommandeArguments=($*)

set       SePaRaTeUr="="

#20060312091233____:set       SePaRaTeUr_1_A=":A""$SePaRaTeUr"                                                                        #
#20060312091233____:set       SePaRaTeUr_1_R=":R""$SePaRaTeUr"                                                                        #
#20060312091233____:set       SePaRaTeUr_1_X=":X""$SePaRaTeUr"                                                                        #

set       SePaRaTeUr_1_A=`$CA $xcc/cpp$Z | $GRE "^ *set  *InDiCaTeUr_____A=" | $SE -e "s/^.*=//" -e s'/"//g'`
set       SePaRaTeUr_1_R=`$CA $xcc/cpp$Z | $GRE "^ *set  *InDiCaTeUr_____R=" | $SE -e "s/^.*=//" -e s'/"//g'`
set       SePaRaTeUr_1_X=`$CA $xcc/cpp$Z | $GRE "^ *set  *InDiCaTeUr_____X=" | $SE -e "s/^.*=//" -e s'/"//g'`

if        (("$SePaRaTeUr_1_A" == "$K_VIDE") || ("$SePaRaTeUr_1_X" == "$K_VIDE") || ("$SePaRaTeUr_1_R" == "$K_VIDE")) then
          EROR      "La programmation de '"'$xcc/cpp$Z'"' a du etre modifiee."
else
endif

set       SePaRaTeUr_1_A="$SePaRaTeUr_1_A$SePaRaTeUr"
set       SePaRaTeUr_1_R="$SePaRaTeUr_1_R$SePaRaTeUr"
set       SePaRaTeUr_1_X="$SePaRaTeUr_1_X$SePaRaTeUr"

set       SePaRaTeUr_2_A="<"
set       SePaRaTeUr_2_R=">"
                                        # On notera que pour etre utilisee, la commande '$xci/ExecSdu$vv$Z' demande le remplacement   #
                                        # du separateur habituel "=" par deux symboles differents dans les circonstances suivantes :  #
                                        #                                                                                             #
                                        #                   <       : pour introduire le nom d'une image Argument (ATTENTION :        #
                                        #                             celle-ci doit correspondre a un fichier unique, ce qui          #
                                        #                             exclue, par exemple, l'option "A=" de 'v $xci/luminance.01$K'   #
                                        #                             et demande l'utilisation des trois options {"AR=","AV=","AB="). #
                                        #                                                                                             #
                                        #                   >       : pour introduire le nom d'une image Resultat (ATTENTION :        #
                                        #                             celle-ci doit correspondre a un fichier unique, ce qui          #
                                        #                             exclue, par exemple, l'option "R=" de 'v $xci/vraies_C$K'       #
                                        #                             et demande l'utilisation des trois options {"RR=","RV=","RB="). #
                                        #                                                                                             #
                                        # Cela implique donc que la liste '$CommandeArguments' soit quotee afin que "<" et ">" ne     #
                                        # soient pas interpretes par le '$CSH'...                                                     #
                                        #                                                                                             #
                                        # On notera le qu'il serait utile de se debarasser de "<" et ">" et que '$xci/ExecSdu$vv$Z'   #
                                        # detecte automatiquement ce qui est image Argument et ce qui est image Resultat, mais je     #
                                        # sais pas comment faire a cette date...                                                      #
                                        #                                                                                             #
                                        # Le 20060309185742, furent introduits les separateurs ":A=" et ":R=" directement utilisables #
                                        # dans les '$K' ('v $xci/interpole.03$K :A=') pour resoudre partiellement et "manuellement"   #
                                        # ce probleme...                                                                              #
                                        #                                                                                             #
                                        # On notera que ces valeurs sont definies dans 'v $xcc/cpp$Z InDiCaTeUr_____'...              #

set       CommandeSdu="$K_VIDE"
                                        # Future commande a executer en mode 'Sdu'...                                                 #

set       ListeResultat=($K_VIDE)
                                        # Future liste des images Resultat...                                                         #

foreach   ElEmEnT   ($CommandeArguments)
          set       DeCoMpOsE=`echo "$ElEmEnT" | $SE -e "s/$SePaRaTeUr_1_A/$SePaRaTeUr_2_A/g"`
          set       DeCoMpOsE=`echo "$DeCoMpOsE" | $SE -e "s/$SePaRaTeUr_1_R/$SePaRaTeUr_2_R/g"`
          set       DeCoMpOsE=`echo "$DeCoMpOsE" | $SE -e "s/\([$SePaRaTeUr$SePaRaTeUr_2_A$SePaRaTeUr_2_R]\)/ \1 /g"`
                                        # Isolation du separateur de l'element courant (s'il existe...).                              #

          if        ($#DeCoMpOsE == 1) then
                    set       CommandeSdu="$CommandeSdu"" $ElEmEnT"
                                        # Lorsqu'il n'y a pas de separateur, l'element courant est conserve tel quel...               #
          else
                    if        ($#DeCoMpOsE == 2) then
                              EROR      "L'element courant $K_QS""$ElEmEnT""$K_QS est mal structure."
                    else
                              if        ($#DeCoMpOsE > 3) then
                                        EROR      "L'element courant $K_QS""$ElEmEnT""$K_QS possede plus d'un separateur, \c"
                                        ECHO      "seul le premier est conserve"
                              else
                              endif

                              set       PartieGauche=$DeCoMpOsE[1]
                              set       SeparateurCourant=$DeCoMpOsE[2]
                              set       PartieDRoite=$DeCoMpOsE[3]
                                        # Lorsqu'il n'y a pas de signe "=", l'element courant est conserve tel quel...                #

                              if        ("$SeparateurCourant" == "$SePaRaTeUr") then
                                        # Test introduit le 20060311112652...                                                         #
                                        set       PaRaM=`$Commande Parametres=VRAI |& $GRE " $PartieGauche$SePaRaTeUr "`
                                        set       PaRaM=`echo "$PaRaM" | $SE -e "s/^.* $PartieGauche$SePaRaTeUr  *//"`
                                        set       PaRaM=`echo "$PaRaM" | $AW ' { print $1 } '`
                                        set       PaRaM=`echo "$PaRaM" | $SE -e "s/^.//"`
                                        # Recuperation du type de la '$PartieGauche' courante (par exemple ":A" ou ":R"...).          #

                                        if        (    ("$PaRaM$SePaRaTeUr" == "$SePaRaTeUr_1_A")                                       \
                                                  ||   ("$PaRaM$SePaRaTeUr" == "$SePaRaTeUr_1_R")                                       \
                                                   ) then

                              set       SeparateurCourant=`echo "$PaRaM$SePaRaTeUr" | $SE -e "s/$SePaRaTeUr_1_A/$SePaRaTeUr_2_A/"`
                              set       SeparateurCourant=`echo "$SeparateurCourant" | $SE -e "s/$SePaRaTeUr_1_R/$SePaRaTeUr_2_R/"`
                                        # Si le type de la '$PartieGauche' courante a ete trouve (et s'il est bien ":A" ou ":R"),     #
                                        # alors on fait comme si il figurait a l'origine dans '$CommandeArguments'...                 #
                                        else
                                        # Dans le cas ou ni ":A" ni ":R" n'ont ete retrouve dans '$Commande' en ce qui concerne       #
                                        # le parametre '$PartieGauche', le '$SeparateurCourant' est conserve tel quel...              #
                                                  if        (    ("$PaRaM$SePaRaTeUr" == "$SePaRaTeUr_1_X")                             \
                                                             ) then

                              set       SeparateurCourant=`echo "$SeparateurCourant" | $SE -e "s/$SePaRaTeUr_1_X/$SePaRaTeUr_2_R/"`
                                        # Si le type de la '$PartieGauche' courante a ete trouve (et s'il est bien ":X"),             #
                                        # alors on fait comme si il figurait a l'origine dans '$CommandeArguments' comme un ":R"...   #
                                        # Ceci a ete introduit le 20060312084828...                                                   #
                                                  else
                                        # Dans le cas ou ni ":A" ni ":R" ni ":X" n'ont ete retrouve dans '$Commande' en ce qui        #
                                        # concerne le parametre '$PartieGauche', le '$SeparateurCourant' est conserve tel quel...     #
                                                  endif
                                        endif
                              else
                              endif

                              if        ("$SeparateurCourant" == "$SePaRaTeUr_2_A") then
                                        FileTmpB  TeMpOrAiRe

                                        $xci/format.01$X    A=$PartieDRoite                                                             \
                                                            mode=2                                                                      \
                                                            $formatI                                                                    \
                                                            R=$TeMpOrAiRe                                                               \
                                                                                                              $formatR_Sdu

                                        set       CommandeSdu="$CommandeSdu"" $PartieGauche$SePaRaTeUr$TeMpOrAiRe"
                                        # Lorsque le fichier de nom '$PartieDRoite' correspond a '$SePaRaTeUr_2_A", on fait           #
                                        # l'hypothese qu'il s'agit d'une image que l'on va changer de format...                       #

                                        FileTmpE  TeMpOrAiRe $NEXIST
                                        # Les fichiers '$TeMpOrAiRe*' ne peuvent etre detruits car ils sont encore utiles par la      #
                                        # suite via les commandes lancees avec '$CommandeSdu'...                                      #
                              else
                                        if        ("$SeparateurCourant" == "$SePaRaTeUr_2_R") then
                                                  set       ListeResultat=($ListeResultat $PartieDRoite)
                                        # Constitution de la liste des images qu'il faudra reformater a la fin...                     #
                                        else
                                        endif

                                        set       CommandeSdu="$CommandeSdu"" $PartieGauche$SePaRaTeUr$PartieDRoite"
                                        # Dans les autres cas, on conserve l'element courant tel quel...                              #
                              endif
                    endif
          endif
end

set       CommandeSdu="$CommandeSdu"" $format_Sdu"
                                        # En etant mis en dernier, le format '$format_Sdu' "ecrase" le '$formatI' Argument...         #

SformatI
Sdu
                                        # Sauvegarde de '$formatI' et mise en mode 'Sdu'...                                           #

eval      "$CommandeSdu"
                                        # Execution de la commande Argument en format 'Sdu'...                                        #

foreach   ImAgE     ($ListeResultat)
          $xci/format.01$X    A=$ImAgE                                                                                                  \
                              mode=2                                                                                                    \
                              $formatI                                                                                                  \
                              R=$ImAgE                                                                                                  \
                                                                                XminR=$sXmin XmaxR=$sXmax YminR=$sYmin YmaxR=$sYmax
                                        # Remise au '$formatI' Argument des images Resultat...                                        #
end

RformatI
                                        # Retour au '$formatI' Argument...                                                            #

xT
$DELETE   *                                                                                                             >& $nul
                                        # Nettoyage introduit le 20060311105846 de tous les fichiers de type '$TeMpOrAiRe'...         #
                                        #                                                                                             #
                                        # Le '$nul' a ete introduit le 20060317144236 au cas ou aucun fichier n'aurait ete cree.      #
                                        # C'est, par exemple, le cas si l'on tape la commande :                                       #
                                        #                                                                                             #
                                        #                   $xci/interpole.03$X                                                       #
                                        #                                                                                             #
                                        # sans aucun argument...                                                                      #



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