Index: modipsl/trunk/util/model
===================================================================
--- modipsl/trunk/util/model	(revision 2)
+++ modipsl/trunk/util/model	(revision 12)
@@ -1,20 +1,19 @@
 #!/bin/ksh
-#- $Id: model,v 2.8 2005/06/17 11:43:38 adm Exp $
+#- $Id$
 #---------------------------------------------------------------------
-# @(#)Actions relatives aux modeles IPSL
+# @(#)Actions concerning IPSL models
 #---------------------------------------------------------------------
-#-
 #set -xv
 MAIL_ADDRESS=patricia.cadule@ipsl.jussieu.fr
 MAIL_COM=mail
 #MAIL_COM=Mail
-#------------------------------------------------------------
-#- Decomposition du nom d'appel de la procedure (d_n/b_n) ---
-#------------------------------------------------------------
-d_n=$(dirname $0); b_n=$(basename $0);
-#--------------------------------------
-#- Saisie et validation des options ---
-#--------------------------------------
-m_n=""; m_a=""; m_v='silencious'; no_tag='false'; 
+#---
+#- Dirname and Basename
+#---
+d_n=${0%/*}; b_n=${0##*/};
+#---
+#- Retrieve and validate the options
+#---
+m_n=""; m_a=""; m_v='silencious'; no_tag='false';
 while getopts :heudrvH V
   do
@@ -34,103 +33,178 @@
   done
 shift $(($OPTIND-1));
-case ${m_a} in
-  ( checkout | update | diff | remove ) ;;
-  ("") m_a='checkout';;
-esac
-#-----------------------------
-#- Saisie du nom du modele ---
-#-----------------------------
-if   [ ${#} -gt 1 ]; then
-  echo 'Only one model can be specified' 1>&2;
-  exit 3;
-elif [ ${#} -eq 1 ]; then
-  m_n="${1}";
-elif [ ${m_a} != 'help' ]; then
+#---
+#- Validate the action
+#---
+[[ -z "${m_a}" ]] && { m_a='checkout'; }
+[[ ${m_a} = help || ${m_a} = checkout || ${m_a} = update || \
+   ${m_a} = diff || ${m_a} = remove ]] || \
+  { echo 'Action '"${m_a}"' not supported' 1>&2; exit 4; }
+#---
+#- Retrieve the model name
+#---
+[[ ${#} -gt 1 ]] && \
+  { echo 'Only one model can be specified' 1>&2; exit 3; }
+[[ ${#} -eq 1 ]] && { m_n="${1}"; }
+[[ ${m_a} != 'help' && -z ${m_n} ]] && \
+ {
   echo 'Model not specified' 1>&2;
   echo 'Try "'${b_n}' -h [model-name]"' 1>&2;
   exit 3;
-fi
-#-----------------------------------------------
-#- Test d'existence du fichier de definition ---
-#-----------------------------------------------
+ }
+#---
+#- Test of presence of the definition file
+#---
 F_DEF=${d_n}'/mod.def'
-[ ! -f "${F_DEF}" ] && { echo "${F_DEF} unreachable ..."; exit 3; }
-#-----------------------------------------------
-#- Extraction des noms des modeles supportes ---
-#-----------------------------------------------
-QQQ=$(sed -n -e "s/^#-C-  *\([^ ]*\).*$/\1/p" ${F_DEF});
-qi=0; for i in ${QQQ}; do ((qi=qi+1)); m_x[qi]=${i}; done
-#-------------------------------------------------------------
-#- Validation du nom du modele et saisie des informations  ---
-#-------------------------------------------------------------
-[ '\?'"${m_n}" != '\?' ] && \
+[[ ! -f "${F_DEF}" ]] && { echo "${F_DEF} unreachable ..."; exit 3; }
+#---
+#- Extract the names of the supported models
+#---
+qi=0;
+while read v0 v1 v2
+  do
+    [[ -n "${v0}" && "${v0}" = '#-C-' ]] && \
+     { ((qi=qi+1)); m_x[${qi}]=${v1}; }
+  done <${F_DEF}
+unset v0 v1 v2;
+#---
+#- Model name validation and data retrieving
+#---
+[[ -n "${m_n}" ]] && \
   {
+    #- Validate the model name
     i_m=-1;
     qi=0; while (( ${qi} < ${#m_x[@]} ))
       do
         ((qi=qi+1));
-        [ ${m_n} = ${m_x[qi]} ] && { i_m=${qi}; break; };
+        [[ ${m_n} = ${m_x[${qi}]} ]] && { i_m=${qi}; break; };
       done
     (( ${i_m} < 0 )) && \
      { echo 'Model '"${m_n}"' unknown' 1>&2;
-       echo 'Try "'${b_n}' -h"' 1>&2;
-       exit 3; }
-    #- Recherche de l'adresse email a qui envoyer les infos
-    QQQ=$(sed -n -e "s/^#-M-  *${m_n}  *//p" ${F_DEF});
-    [ '\?'"${QQQ}" = '\?' ] && \
-      { echo 'Address mail not found for '${m_n}; exit 3; }
-    m_m=${QQQ}
-    #- Recherche des composants
-    QQQ=$(sed -n -e "s/^#-C-  *${m_n}  *//p" ${F_DEF});
-    [ '\?'"${QQQ}" = '\?' ] && \
-      { echo 'Components not found for '${m_n}; exit 3; }
-    qi=0; for i in ${QQQ}; do ((qi=qi+1)); m_c[qi]=${i}; done
-    #- Recherche des tags
-    QQQ=$(sed -n -e "s/^#-T-  *${m_n}  *//p" ${F_DEF});
-    [ '\?'"${QQQ}" = '\?' ] && \
-      { echo 'Tags not found for '${m_n}; exit 3; }
-    qi=0; for i in ${QQQ}
-      do 
-        ((qi=qi+1)); 
-         if [ ${no_tag} = 'false' ]; then
-           m_t[qi]=${i}; 
-         else
-           m_t[qi]='?'
-         fi
-      done
-    #- Recherche des serveurs CVS
-    QQQ=$(sed -n -e "s/^#-I-  *${m_n}  *//p" ${F_DEF});
-    [ '\?'"${QQQ}" = '\?' ] && \
-      { echo 'Indexes not found for '${m_n}; exit 3; }
-    qi=0; for i in ${QQQ}
+       echo 'Try "'${b_n}' -h"' 1>&2; exit 3; }
+    #- Extract the repository informations
+    #- ( index, repository system, servers address )
+    while read v0 v1 v2 v3
       do
-        ((qi=qi+1));
-        QQS=$(sed -n -e "s/^#-S-  *${i}  *//p" ${F_DEF});
-        [ '\?'"${QQS}" = '\?' ] && \
-          { echo 'Server number '${i}' not found'; exit 3; }
-        m_s[qi]=${QQS};
-      done
-    #- Recherche des directories
-    QQQ=$(sed -n -e "s/^#-D-  *${m_n}  *//p" ${F_DEF});
-    [ '\?'"${QQQ}" = '\?' ] && \
+        [[ -n "${v0}" && "${v0}" = '#-S-' ]] && \
+         { r_p[${v1}]=${v2}; r_s[${v1}]=${v3}; }
+      done <${F_DEF}
+    unset v0 v1 v2 v3;
+    #- Extract the model informations
+    while read v0 v1 v2
+      do
+        [[ -n "${v1}" && "${v1}" = "${m_n}" ]] && \
+         {
+          #- model manager email address
+          [[ "${v0}" = '#-M-' ]] && { m_m=${v2}; continue; }
+          #- model components
+          [[ "${v0}" = '#-C-' ]] && \
+           {
+            qi=0;
+            for i in ${v2}; do ((qi=qi+1)); m_c[${qi}]=${i}; done;
+            continue;
+           }
+          #- model tags
+          [[ "${v0}" = '#-T-' ]] && \
+           {
+            qi=0;
+            for i in ${v2}
+             do
+              ((qi=qi+1));
+              [[ ${no_tag} = 'false' ]] && \
+               { m_t[${qi}]=${i}; }     || \
+               { m_t[${qi}]='?'; }
+             done
+            continue;
+           }
+          #- model repository information indexes
+          [[ "${v0}" = '#-I-' ]] && \
+           {
+            qi=0;
+            for i in ${v2}
+             do
+               ((qi=qi+1));
+               m_p[${qi}]=${r_p[${i}]};
+               [[ ${m_p[${qi}]} = svn || ${m_p[${qi}]} = cvs ]] || \
+                {
+                 echo 'System '"${m_p[${qi}]}"' not supported' 1>&2;
+                 exit 3;
+                }
+               m_s[${qi}]=${r_s[${i}]};
+               [[ -z "${m_s[${qi}]}" ]] && \
+                {
+                 echo 'Server '${i}'  not found for '${m_n};
+                 exit 3;
+                }
+             done
+            continue;
+           }
+          #- model installation directories
+          [[ "${v0}" = '#-D-' ]] && \
+           {
+            qi=0;
+            for i in ${v2};
+             do
+              ((qi=qi+1));
+              m_d[${qi}]=${i};
+              [[ -z "${m_l[${qi}]}" ]] && { m_l[${qi}]="modeles"; }
+             done
+            continue;
+           }
+          #- model working local directories
+          [[ "${v0}" = '#-L-' ]] && \
+           {
+            qi=0;
+            for i in ${v2};
+             do
+              ((qi=qi+1));
+              m_l[${qi}]=${i};
+             done
+            continue;
+           }
+         }
+      done <${F_DEF}
+    unset v0 v1 v2
+    #- Validate the model informations
+    #- model manager email address
+    [[ -z "${m_m}" ]] && \
+     { echo 'Manager email address not found for '${m_n}; exit 3; }
+    #- model components
+    [[ ${#m_c[@]} = 0 ]] && \
+     { echo 'Components not found for '${m_n}; exit 3; }
+    #- model tags
+    [[ ${#m_t[@]} = 0 ]] && \
+     { echo 'Tags not found for '${m_n}; exit 3; }
+    #- model repository information indexes
+    [[ ${#m_p[@]} = 0 || ${#m_s[@]} = 0 ]] && \
+     { echo 'Indexes not found for '${m_n}; exit 3; }
+    #- model installation directories
+    [[ ${#m_d[@]} = 0 ]] && \
       { echo 'Target Directories not found for '${m_n}; exit 3; }
-    qi=0; for i in ${QQQ}; do ((qi=qi+1)); m_d[qi]=${i}; m_l[qi]="modeles"; done     
-    #- Recherche des local directories
-    QQQ=$(sed -n -e "s/^#-L-  *${m_n}  *//p" ${F_DEF});
-    [ '\?'"${QQQ}" = '\?' ] || \
-    qi=0; for i in ${QQQ}; do ((qi=qi+1)); m_l[qi]=${i}; done     
+    #- model working local directories
+    # N/A
   }
-#----------------------------------------------------------------
-# envoi d'un mail si c'est la premiere fois qu on utilise modipsl
-#      ie directory ~/.modipsl do not exist
-#----------------------------------------------------------------
+#---
+#- send an email at the first use of modipsl
+#- ie directory ~/.modipsl does not exist
+#---
 D_LOG=${HOME}/.modipsl
-[ -d "${D_LOG}" ] || { mkdir "${D_LOG}" ; echo `date +"%D %T"` `whoami` `uname -m` first usage of model | ${MAIL_COM} -s "first usage of modipsl" ${MAIL_ADDRESS} >/dev/null 2>&1 ; echo `date +"%D %T"` creation >"${D_LOG}"/first ; }
-#--------------------------
-#- Traitement du "help" ---
-#--------------------------
-if [ ${m_a} = 'help' ]; then
+[[ -d "${D_LOG}" ]] || \
+  {
+    mkdir "${D_LOG}";
+    echo $(date +"%D %T") $(whoami) $(uname -m) \
+     first use of model | \
+    ${MAIL_COM} -s "first use of modipsl" \
+     ${MAIL_ADDRESS} >/dev/null 2>&1;
+    echo $(date +"%D %T") creation >"${D_LOG}"/first;
+  }
+#---
+#- "help" action
+#---
+[[ ${m_a} = 'help' ]] && \
+ {
   echo ' ';
-  if [ '\?'"${m_n}" = '\?' ]; then
+  if [ -z "${m_n}" ]; then
+    echo ${b_n} 'extracts the components of a model';
+    echo ' ';
     echo 'Usage    :';
     echo ${b_n} '[-h]';
@@ -140,5 +214,5 @@
     echo 'h model-name : help on model';
     echo 'e/u/d/r      : extract/update/diff/remove model';
-    echo 'H            : suppreses the tags and takes the HEAD version';
+    echo 'H            : suppress the tags and take the HEAD version';
     echo 'v            : verbose mode';
     echo 'Defaults     : -e';
@@ -146,104 +220,143 @@
     echo 'model_name in :';
     qi=0; while (( ${qi} < ${#m_x[@]} ));
-      do ((qi=qi+1)); echo ${m_x[qi]}; done
+      do ((qi=qi+1)); echo ${m_x[${qi}]}; done
   else
-    echo 'Modele      : '${m_n};
+    echo 'model : '${m_n};
     echo ' ';
-    sed -n -e "s/^#-H-  *${m_n}  *//p" ${F_DEF};
+    while read v0 v1 v2
+     do
+       [[ -n "${v0}" && "${v0}" = '#-H-' && \
+          -n "${v1}" && "${v1}" = "${m_n}" ]] && { echo ${v2}; }
+     done <${F_DEF}
+    unset v0 v1 v2;
+    echo ' ';
+    echo 'model manager email address : '${m_m};
     echo ' ';
     qi=0; while (( ${qi} < ${#m_c[@]} ))
       do
         ((qi=qi+1));
-        echo 'Component '${qi}' : '${m_c[qi]};
-        echo 'Tag       '${qi}' : '${m_t[qi]};
-        echo 'Server    '${qi}' : '${m_s[qi]};
-        echo 'Directory '${qi}' : '${m_d[qi]};
-        echo 'Local Dir '${qi}' : '${m_l[qi]};
+        echo 'Component '${qi}' : '${m_c[${qi}]};
+        echo 'Tag       '${qi}' : '${m_t[${qi}]};
+        echo 'System    '${qi}' : '${m_p[${qi}]};
+        echo 'Server    '${qi}' : '${m_s[${qi}]};
+        echo 'Directory '${qi}' : '${m_d[${qi}]};
+        echo 'Local Dir '${qi}' : '${m_l[${qi}]};
       done
   fi
   echo ' ';
   exit 0;
-fi
-#----------------------------------------------------------
-# enregistrement de la commande dans une log
-#----------------------------------------------------------
+ }
+#---
+#- Record information about the action in the "log" file
+#---
 F_LOG=${d_n}'/log'
 echo "${F_LOG}"
-echo `date +"%D %T"` $0 $* >>"${F_LOG}"
-#-------------
-#- VERBOSE ---
-#-------------
+echo $(date +"%D %T") $0 $* >>"${F_LOG}"
+#---
+#- Verbose mode
+#---
 [ ${m_v} = 'verbose' ] && \
  { echo '--- Model        : '${m_n};
    echo '--- Action       : '${m_a};
    echo '--- Mode         : '${m_v}; }
-#---------------------------------------------
-#- record in F_LOG file model information  ---
-#---------------------------------------------
+#---
+#- Record information about the action in the "log" file
+#---
 { echo '--- Model        : '${m_n};
   echo '--- Action       : '${m_a};
-  echo '--- Mode         : '${m_v}; 
+  echo '--- Mode         : '${m_v};
   echo '--- Mail address : '${m_m}; } >>"${F_LOG}"
-#-----------------------------------------
-#- Repertoire d'accueil des composants ---
-#-----------------------------------------
-###d_m=${d_n}'/../modeles';
-d_m=${d_n}'/../';
-#--------------------------------------------------------------------
-#- Envoi d'un mail la premiere fois  qu on appelle model de ce modele
-#-    ie file ~/.modipsl/log.${m_n}
-#--------------------------------------------------------------------
+#---
+#- Components root directory
+#---
+d_m=${d_n}'/..';
+#---
+#- send an email at the first use of this IPSL model
+#- ie file ~/.modipsl/log.${m_n} does not exist
+#---
 M_LOG=${D_LOG}/log.${m_n}
-[ -f "${M_LOG}" ] || { echo `date +"%D %T"` `whoami` `uname -m` first usage of model ${m_n} | ${MAIL_COM} -s "first usage of model ${m_n}" ${m_m} >/dev/null 2>&1 ; echo `date +"%D %T"` model ${m_n} >"${M_LOG}" ; }
-#-------------------------------
-#- Extraction des composants ---
-#-------------------------------
+[[ -f "${M_LOG}" ]] || \
+  {
+   echo $(date +"%D %T") $(whoami) $(uname -m) \
+    first usage of model ${m_n} | \
+   ${MAIL_COM} -s "first usage of model ${m_n}" \
+    ${m_m} >/dev/null 2>&1;
+   echo $(date +"%D %T") model ${m_n} >"${M_LOG}";
+  }
+#---
+#- Extract the model components
+#---
 qi=0; while (( ${qi} < ${#m_c[@]} ))
   do
-    ((qi=qi+1)); zc=${m_c[qi]}; zt=${m_t[qi]}; zs=${m_s[qi]}; zd=${m_d[qi]}; zl=${m_l[qi]};
-    [ ${m_v} = 'verbose' ] && \
+    ((qi=qi+1));
+    zc=${m_c[${qi}]}; zt=${m_t[${qi}]};
+    zp=${m_p[${qi}]}; zs=${m_s[${qi}]};
+    zd=${m_d[${qi}]}; zl=${m_l[${qi}]};
+    [[ ${m_v} = 'verbose' ]] && \
      { echo '---';
        echo '--- Component  : '${zc};
        echo '--- Tag        : '${zt};
-       echo '--- CVS Server : '${zs}; 
-       echo '--- Directory  : '${zd}; 
+       echo '--- System     : '${zp};
+       echo '--- Server     : '${zs};
+       echo '--- Directory  : '${zd};
        echo '--- Local Dir  : '${zl}; }
-#---------------------------------------------
-#- record in F_LOG file model information  ---
-#---------------------------------------------
+#---
+#-   Record information about the action in the "log" file
+#---
      { echo '---';
        echo '--- Component  : '${zc};
        echo '--- Tag        : '${zt};
-       echo '--- CVS Server : '${zs}; 
-       echo '--- Directory  : '${zd}; 
+       echo '--- System     : '${zp};
+       echo '--- Server     : '${zs};
+       echo '--- Directory  : '${zd};
        echo '--- Local Dir  : '${zl}; } >>"${F_LOG}"
-    case ${m_a} in
-      ( checkout | update | diff )
-        c_c='(cd '${d_m}/${zl}'; cvs -d :pserver:'${zs}' '${m_a};
-        [ ${m_a} = 'checkout' -a ${zt} != '?' ] && \
-         { c_c=${c_c}' -r '${zt}; }
-        [ ${m_a} = 'checkout' -a ${zd} != '.' ] && \
-         { c_c=${c_c}' -d '${zd}; }  
-        c_c=${c_c}' '${zc}')';;
-      ( remove )
-        c_c='(cd '${d_m}/${zl}'; rm -rf '${zc}')';;
-      (*)
-        echo 'Action '"${m_a}"' not supported' 1>&2;
-        exit 4;;
-    esac
-    grep "${zs%%/*}"'.*/'"${zs#*/}" ~/.cvspass > /dev/null;
-    if [ ${?} != 0 ]; then
-      c_z='cvs -d :pserver:'${zs}' login';
-      [ ${m_v} = 'verbose' ] && { echo ${c_z}; }
-      eval ${c_z};
-    fi
-    [ ${m_v} = 'verbose' ] && { echo '--- Command    : '${c_c}; }
+#---
+    [[ ${zp} = 'cvs' ]] && \
+     {
+      case ${m_a} in
+        ( checkout | update | diff )
+          c_c='(cd '${d_m}/${zl}'; '${zp}' -d :pserver:'${zs}' '${m_a};
+          [[ ${m_a} = 'checkout' && ${zt} != '?' ]] && \
+           { c_c=${c_c}' -r '${zt}; }
+          [[ ${m_a} = 'checkout' && ${zd} != '.' ]] && \
+           { c_c=${c_c}' -d '${zd}; }
+          c_c=${c_c}' '${zc}')';;
+        ( remove )
+          c_c='(cd '${d_m}/${zl}'; rm -rf '${zc}')';;
+      esac
+      grep "${zs%%/*}"'.*/'"${zs#*/}" ~/.cvspass > /dev/null;
+      [[ ${?} != 0 ]] && \
+       {
+        c_z='cvs -d :pserver:'${zs}' login';
+        [[ ${m_v} = 'verbose' ]] && { echo ${c_z}; }
+        eval ${c_z};
+       }
+     }
+#---
+    [[ ${zp} = 'svn' ]] && \
+     {
+      case ${m_a} in
+        ( checkout | update | diff )
+          c_c='(cd '${d_m}/${zl}'; '${zp}' '${m_a};
+          [[ ${m_a} = 'checkout' && ${zt} != '?' ]] && \
+           { c_c=${c_c}' -r '${zt}; }
+          c_c=${c_c}' '${zs}'/'${zc};
+          [[ ${m_a} = 'checkout' && ${zd} != '.' ]] && \
+           { c_c=${c_c}' '${zd}; }
+          c_c=${c_c}')';;
+        ( remove )
+          c_c='(cd '${d_m}/${zl}'; rm -rf '${zc##*/}')';;
+      esac
+     }
+#---
+    [[ ${m_v} = 'verbose' ]] && { echo '--- Command    : '${c_c}; }
     eval ${c_c};
   done
-#--------------------------------------------------------
-#- Traitement du repertoire WORK pour les modeles OPA ---
-#--------------------------------------------------------
+#---
+#- Actions related to the WORK directory for the OPA models
+#---
 case ${m_n} in
-  ( EEL* |  ORCA* | OFF_TRC | IPSLCM* | ORCA_TOYATM | NEMO_ORCA2_LIM | GYRE )
+  ( EEL* |  ORCA* | OFF_TRC | IPSLCM* | ORCA_TOYATM | \
+    NEMO_ORCA2_LIM | GYRE )
     d_m1=${d_m}/modeles/OPA  ;
     [ ${m_a} = 'checkout' -o ${m_a} = 'remove' ] &&
@@ -252,7 +365,7 @@
    {
      [ -d ${d_m1}/WORK ] || mkdir ${d_m1}/WORK;
-     cd ${d_m1}/WORK; 
+     cd ${d_m1}/WORK;
 # Getting the configuration files to build the Makefile
-     ln -sf ../../../*/${m_n}/scripts/BB_make AA_make ; 
+     ln -sf ../../../*/${m_n}/scripts/BB_make AA_make;
      ln -sf ../../../*/${m_n}/scripts/BB_make.ldef AA_make.ldef ;
      case ${m_n} in
@@ -266,8 +379,11 @@
          ln -sf ../SRC_ORCA/*.[Ffh] .;;
        ( ORCA*LIM | IPSLCM* | ORCA_TOYATM | ORCA*LMD* )
-         [ "${m_n}" = "IPSLCM4_LOOP" ] && echo " Creation du catalogue OPA/WORK = ORCA + LIM + TRC" || echo " Creation du catalogue OPA/WORK = ORCA + LIM"
+         [ "${m_n}" = "IPSLCM4_LOOP" ] && \
+          echo " Creation du catalogue OPA/WORK = ORCA + LIM + TRC" || \
+          echo " Creation du catalogue OPA/WORK = ORCA + LIM"
          ln -sf ../SRC_ORCA/*.[Ffh] .
          [ "${m_n}" = "IPSLCM4_LOOP" ] && \rm *.passivetrc.h
-         [ "${m_n}" = "IPSLCM4_LOOP" ] && ln -sf ../SRC_TRC/*.[Ffh] ../SRC_TRC/trc_sms/*.[Ffh] .
+         [ "${m_n}" = "IPSLCM4_LOOP" ] && \
+           ln -sf ../SRC_TRC/*.[Ffh] ../SRC_TRC/trc_sms/*.[Ffh] .
          ln -sf ../SRC_UCL/[a-z]* .;;
        ( ORCA*_LIM_TRC )
@@ -288,5 +404,5 @@
      esac
 # Building the standard list of source files
-     cat >.patron <<"EOF" 
+     cat >.patron <<"EOF"
 CVS
 SRC_PARAM
@@ -307,5 +423,6 @@
 thersf.f
 EOF
-     ls -1 | fgrep -v -f .patron  >SRC_FILE_LIST ; cp SRC_FILE_LIST SRC_FILE_LIST.temp ;
+     ls -1 | fgrep -v -f .patron  >SRC_FILE_LIST;
+     cp SRC_FILE_LIST SRC_FILE_LIST.temp;
 #
      KEY=$(grep P_P AA_make.ldef);
@@ -313,6 +430,6 @@
     };;
 esac
-#-------------
-#- [EN]FIN ---
-#-------------
+#---
+#- That's all folks
+#---
 exit 0;
