#!/bin/ksh

DESC='Create a main/program file calling a function/subroutine'

if [[ x$1 == x-h || x$1 == x--help ]] ; then
   more <<EOF
$DESC

USAGE: .rdemakemodelbidon [-c] MAIN

   -c : creat a main in C [Default: main in Fortran]

   MAIN : Name of the function/subroutine to call
          Also used as ATM_MODEL_NAME if not defined

Used Env Var:

   ATM_MODEL_NAME=\${ATM_MODEL_NAME:-MAIN}
   ATM_MODEL_VERSION=\${ATM_MODEL_VERSION:-?.?}
   ATM_MODEL_ISOFFICIAL=\${ATM_MODEL_ISOFFICIAL:-false}
   ORDENV_PLAT=\${ORDENV_PLAT:-\$(uname -spvr)}
   BASE_ARCH=\${BASE_ARCH:-\${EC_ARCH%/*}}
   COMP_ARCH=${COMP_ARCH:-\${EC_ARCH#*/}}
   COMP_USER=${COMP_USER:-$USER}
EOF
    exit 0
fi


is_c=0
if [[ x$1 == x-c ]] ;then
   is_c=1
   shift
fi

ISOFFICIAL='.false.'
[[ x$ATM_MODEL_ISOFFICIAL == xtrue ]] && ISOFFICIAL='.true.'
MYARCH="$(uname -s)-$(uname -p|grep -v unknown)$(uname -v|cut -d' ' -f1|sed 's/#//').$(uname -r)"
COMP_ARCH=${COMP_ARCH:-${EC_ARCH#*/}}
BASE_ARCH=${BASE_ARCH:-${EC_ARCH%/*}}

if [[ x$is_c == x0 ]] ; then

cat <<EOF
       program modelbidon
          call $1
          stop
       end program modelbidon

       subroutine atm_model_getversion(name_S,version_S,date_S,arch_S,compil_S,is_official_L)
          implicit none
          character(len=*),intent(out) :: name_S,version_S,date_S,arch_S,compil_S
          logical,intent(out) :: is_official_L
          name_S = "$(echo ${ATM_MODEL_NAME:-$1} | tr 'a-z' 'A-Z')"
          version_S = "${ATM_MODEL_VERSION:-?.?}"
          date_S = "$(date '+%Y-%m-%d %H:%M %Z')"
          arch_S = "${BASE_ARCH}:${ORDENV_PLAT:-$MYARCH}"
          compil_S = "${COMP_ARCH:-${EC_ARCH#*/}} [${PGI_VERSION}${XLF_VERSION}]"
          is_official_L = ${ISOFFICIAL:-.false.}
          return
       end subroutine atm_model_getversion

       subroutine atm_model_getversion2(name_S,version_S,date_S,arch_S,compil_S,user_S,is_official_L)
          implicit none
          character(len=*),intent(out) :: name_S,version_S,date_S,arch_S,compil_S,user_S
          logical,intent(out) :: is_official_L
          name_S = "$(echo ${ATM_MODEL_NAME:-$1} | tr 'a-z' 'A-Z')"
          version_S = "${ATM_MODEL_VERSION:-?.?}"
          date_S = "$(date '+%Y-%m-%d %H:%M %Z')"
          arch_S = "${BASE_ARCH}:${ORDENV_PLAT:-$MYARCH}"
          compil_S = "${COMP_ARCH:-${EC_ARCH#*/}} [${PGI_VERSION}${XLF_VERSION}]"
          user_S   = "${COMP_USER:-$USER}"
          is_official_L = ${ISOFFICIAL:-.false.}
          return
       end subroutine atm_model_getversion2

       subroutine atm_model_getversion3(name_S,version_S,date_S,arch_S,compil_S,user_S,buildname_S,is_official_L)
          implicit none
          character(len=*),intent(out) :: name_S,version_S,date_S,arch_S,compil_S,user_S,buildname_S
          logical,intent(out) :: is_official_L
          name_S = "$(echo ${ATM_MODEL_NAME:-$1} | tr 'a-z' 'A-Z')"
          version_S = "${ATM_MODEL_VERSION:-?.?}"
          date_S = "$(date '+%Y-%m-%d %H:%M %Z')"
          arch_S = "${BASE_ARCH}:${ORDENV_PLAT:-$MYARCH}"
          compil_S = "${COMP_ARCH:-${EC_ARCH#*/}} [${PGI_VERSION}${XLF_VERSION}]"
          user_S   = "${COMP_USER:-$USER}"
          is_official_L = ${ISOFFICIAL:-.false.}
          buildname_S = "${RDE_BUILDNAME}"
          !#TODO: add list of linked libs... can be searched by "strings abs"
          !#TODO: add compiler_rule_file
          !#TODO: add FFLAGS
          !#TODO: add full compiler cmd?
          return
       end subroutine atm_model_getversion3

EOF

else

cat <<EOF
#include <unistd.h> 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void $1(int argc, char **argv);

main(int argc, char **argv){
   $1(argc, argv);
}
/*
void atm_model_getversion_c(char *name_S,char *version_S,char *date_S,char *arch_S,char *compil_S,char *user_S,int *is_official);

void atm_model_getversion_c(char *name_S,char *version_S,char *date_S,char *arch_S,char *compil_S,char *user_S,int *is_official){
          strcp(name_S,"$(echo ${ATM_MODEL_NAME:-$1} | tr 'a-z' 'A-Z')");
          strcp(version_S,"${ATM_MODEL_VERSION:-?.?}");
          strcp(date_S,"$(date '+%Y-%m-%d %H:%M %Z')");
          strcp(arch_S,"${BASE_ARCH:-$MYARCH}");
          strcp(compil_S,"${COMP_ARCH:-${EC_ARCH#*/}} [${PGI_VERSION}${XLF_VERSION}]");
          strcp(user_S,"${COMP_USER:-$USER}");

          is_official = $([[ x${ISOFFICIA} == xtrue ]] && echo 1 || echo 0);
}
*/
EOF

fi
