#!?SHELL_EXECUTION?

#########################################################################
# COPYRIGHT (C) 2003         EDF R&D              WWW.CODE-ASTER.ORG    #
#                                                                       #
# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR         #
# MODIFY IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS        #
# PUBLISHED BY THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE    #
# LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.                       #
# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,       #
# BUT WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF        #
# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      #
# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              #
#                                                                       #
# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     #
# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO : EDF R&D CODE_ASTER,       #
#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        #
#########################################################################

# $Id: as_exec_special 2603 2006-12-14 13:21:03Z courtois $
# as_exec_special :
#     - modifie le profil en argument et le soumet  as_exec,
#     - la champ 'special' du profil donne l'action  lancer,
#     - sparateur : %NEXT% (pas d'espace autour !)

#########################################################################
# rpertoire temporaire (criture pour tous)
TMP=`egrep 'rep_tmp[ ]+:' $SCON/config | awk '{print $3}'`

#########################################################################
# arguments
err=-1
if [ $# -eq 1 ]; then
   fich=$1
   err=0
fi

if [ $err -lt 0 ]; then
   echo "usage : as_serv as_exec_special user@mach:/nom_profil"
   exit 1
fi

#########################################################################
# temporaire des services (ne pas l'effacer)
jn=$$
if [ -n "$USER" ]; then
   who=$USER
else
   if [ -n "$LOGNAME" ]; then
      who=$LOGNAME
   else
      who=`whoami`
   fi
fi
TMP=$TMP/astk_$who
if [ ! -d $TMP ]; then
   mkdir -p $TMP
fi

# fichier temporaire
ftmp=$TMP/meshtool.$$.prof
if [ -f $ftmp ]; then
   \rm -f $ftmp
fi

#########################################################################
# profil
pr_astk=$TMP/profil_astk.$jn
if [ `echo $fich | grep -c '@'` -ne 0 ]; then
   $RCP_CMD $fich $pr_astk > /dev/null 2>&1
else
   \cp $fich $pr_astk > /dev/null 2>&1
fi
if [ ! -f $pr_astk ]; then
   echo "Profile copy failed"
   exit 2
fi

#########################################################################
# si on cre un fichier dans $TMP et qu'on lance sur un noeud distant,
# on aura besoin de mettre $prefix dans le nouveau fichier '.export'.
prefix=""
inode=`egrep -c '^P[ ]+noeud[ ]+' $pr_astk`
if [ $inode -ne 0 ]; then
   node=`egrep '^P[ ]+noeud[ ]+' $pr_astk   | awk '{print $3}'`
   if [ `uname -n | sed 's#\..*$##'` != `echo $node | sed 's#\..*$##'` ]; then
      prefix="$who@"`uname -n | sed 's#\..*$##'`":"
   fi
fi

#########################################################################
# Quel service lancer ?
listspec=`egrep '^P special ' $pr_astk | sed -e 's#^P special ##'`
service=`echo $listspec | awk -F'%NEXT%' '{print $1}'`
echo "(special) SERVICE $service"

#########################################################################
# modif du profil de l'tude : partie commune  tous les services
# on conserve les arguments...
egrep '^A[ ]+' $pr_astk                   >  $ftmp
# les paramtres sauf mode (interactif),
#                     nomjob (_mesh),
#                     actions (make_etude),
#                     ncpus (1),
#                     xterm (non),
#                     *btc (consbtc:oui, soumbtc:oui)
egrep '^P[ ]+' $pr_astk \
   | egrep -v '^P[ ]+special[ ]+' \
   | egrep -v '^P[ ]+mode[ ]+' \
   | egrep -v '^P[ ]+nomjob[ ]+' \
   | egrep -v '^P[ ]+actions[ ]+' \
   | egrep -v '^P[ ]+[a-z]*btc[ ]+' \
   | egrep -v '^P[ ]+ncpus[ ]+' \
                                          >> $ftmp
echo "P mode interactif"                  >> $ftmp
echo "P actions make_etude"               >> $ftmp
echo "P ncpus 1"                          >> $ftmp
echo "P consbtc oui"                      >> $ftmp
echo "P soumbtc oui"                      >> $ftmp

# surcharge
egrep '^[FR]+[ ]+exec[ ]+' $pr_astk       >> $ftmp
egrep '^[FR]+[ ]+cmde[ ]+' $pr_astk       >> $ftmp
egrep '^[FR]+[ ]+ele[ ]+'  $pr_astk       >> $ftmp
egrep '^[FR]+[ ]+py[ ]+'   $pr_astk       >> $ftmp
egrep '^[FR]+[ ]+conf[ ]+' $pr_astk       >> $ftmp

echo "# $listspec " >> $ftmp

#########################################################################
# le champ 1 est toujours le nom du service
case $service in
   ##### pour MESHTOOL #####
   meshtool)
      # suffixe
      suffixe='mesh'
      # fichier de commandes
      echo "F comm $SLIB/meshtool.comm D 1"                      >> $ftmp
      
      # Dans le parametre special :
      # champ 2 : maillage IN
      # champ 3 : maillage OUT
      echo $listspec | awk -F'%NEXT%' '{printf("%s 71\n", $2);}' >> $ftmp
      echo $listspec | awk -F'%NEXT%' '{printf("%s 72\n", $3);}' >> $ftmp
      
      # fichier de paramtres
      # champs 4 et +
      fpara=$TMP/meshtool.$$.para
      if [ -f $fpara ]; then
         \rm -f $fpara
      fi
      echo $listspec | awk -F'%NEXT%' '{for(i=4;i<=NF;i++) {print $i;}}' \
                                                                 >> $fpara
      fpara=$prefix$fpara
      echo "F libr $fpara D 70"                                  >> $ftmp
      ;;

   ##### pour STANLEY #####
   stanley)
      # suffixe
      suffixe='post'
      # fichier de commandes
      echo "F comm $SLIB/stanley_post.comm D 1"                  >> $ftmp
      
      # Dans le parametre special :
      #  "R base repertoire flag 0"
      echo $listspec | awk -F'%NEXT%' '{print $2}'               >> $ftmp
      ;;

   ##### pour CONVBASE #####
   convbase)
      # suffixe
      suffixe='convbase'
      # fichier de commandes
      echo "F comm $SLIB/convbase.comm D 1"                      >> $ftmp
      
      # Dans le parametre special :
      # champ 2 : base IN
      # champ 3 : base OUT
      echo $listspec | awk -F'%NEXT%' '{for(i=2;i<=NF;i++) {print $i;}}' \
                                                                 >> $ftmp
      ;;

esac

# nomjob
egrep '^P[ ]+nomjob[ ]+' $pr_astk \
      | awk "{printf(\"P nomjob %s_$suffixe\n\",\$3);}"          >> $ftmp

#########################################################################
# appel  as_exec
$SBIN/as_exec $ftmp
iret=$?

#########################################################################
# suppression de la copie locale du profil et du profil temporaire
\rm -f $pr_astk
# \rm -f $ftmp

exit $iret
