#! /bin/sh

#    May 07/18 - F.Majaess

#id  xtrct_parmc - Generates PARM/PARC from extracted parmsub/critical.

#    AUTHOR  - F.Majaess

#hd  PURPOSE - "xtrct_parmc" script is mainly used to generates 
#hd            into PARM/PARC local binary files from extracted 
#hd            parmsub/critical sections from specified model 
#hd            job input file.  
#hd            Note: Script creates the files within local subdirectory.
#hd                  Individual parmsub lines are truncated at
#hd                  128 characters in length.

#pr  PARAMETERS:
#pr
#pr    POSITIONAL     
#pr
#pr      job_filename = Job filename to process.
#pr
#ex  EXAMPLE: 
#ex
#ex    xtrct_parmc abc_1850_1860_job
#ex
#ex   The above will result in extracting parmsub/critical section
#ex   from 'abc_1850_1860_job' submission job and generate from
#ex   them PARM/PARC local corresponding PARM/PARC binary files. 

AWK=${AWK:-awk}
arg_list=$@
for arg in $arg_list
do
  case $arg in
      -*) set $arg                 ;;
     *=*) eval $arg                ;;
       *) tmp1=${job_filename:+$arg} ;
          job_filename=${job_filename:=$arg}
  esac
done

#   * Prompt for a positional parameter value(s) if none was
#   * specified...

while [ -z "$job_filename" ] ; do
  echo "please enter job filename to be processed  > \\c"
  read job_filename
done


#   * Ensure "job_filename" is a valid file...

if [ ! -s "$job_filename" ] ; then
  echo "Abort in 'xtrct_parmc': Sorry, $job_filename is not a valid filename!"
  exit 1
fi


#  Extract parmsub section into "parmsub.in" local file.

(\rm -f parmsub.in PARM PARC parm_out parc_out || : )


sed -n -e '1,/^#end_of_job/p' $job_filename | sed -n '
  /^ *###.*parmsub/,/^ *###/{
    /^ *###/!w parmsub.in
  }'


# wc parmsub.in

#  ----------------------------------- From the "PARMSUB" section "parmsub.in" 
#                                      create "txt2binm.in" file which will be
#                                      used later on to generate "PARM" named
#                                      binary record, and (if applicable) 
#                                      create similarly, from the critical 
#                                      section, "txt2binc.in" file for 
#                                      generating "PARC" named binary record.
#                                      Note: "parmsub" section lines used to
#                                            build "PARM/PARC" named binary 
#                                            record are truncated at
#                                            128 characters in length. 

(\rm -f critical0 txt2binc.in txt2binm.in c128_parmsub.in || : )

if [ -s "parmsub.in" ] ; then

 # Truncate any "parmsub" line at 128 characters long.
 
 $AWK '{ print substr($0,1,128)}' parmsub.in > c128_parmsub.in

 # Check for and extract a no-empty critical section into
 # "critical0" local file.
 
 sed -n '
  /^ *## *[Pp][Aa][Rr][Cc]/,${
    /^ *$/d
   s/ *$//
    /^ *## *[Pp][Aa][Rr][Cc]/!w critical0
  }' parmsub.in

 # setup "txt2binm.in" input character file for "PARM" record.

 echo ' +PARM' > txt2binm.in
 cat c128_parmsub.in >> txt2binm.in
 ls -ld txt2binm.in ; wc txt2binm.in


 # If "critical0" valid file is present, prepare "txt2binc.in" 
 # input character file for "PARC" record

 if [ -s "critical0" ] ; then

  # setup "txt2binc.in" input character file for "PARC" record.

  echo ' +PARC' > txt2binc.in
  $AWK '{ print substr($0,1,128)}' critical0 >> txt2binc.in
 ls -ld txt2binc.in ; wc txt2binc.in

  (\rm -f critical0 || : )

 fi



else

 # Force an abort if no parmsub section based "parmsub.in" file 
 # is present ...

 ls -ld parmsub.in 
 touch haltit
 echo "" ; echo " Sorry: parmsub section should not be empty!" 
 (echo "" ; echo " Sorry: parmsub section should not be empty!") >> haltit
 exit 1

fi
(\rm -f c128_parmsub.in parmsub.in || : )
(\rm -f parm_out parc_out || : )
[ -s "txt2binm.in" -a ! -s "PARM" ] && txt2bin txt2binm.in PARM output=parm_out || :
[ -s "txt2binc.in" -a ! -s "PARC" ] && txt2bin txt2binc.in PARC output=parc_out || :
\ls -ld PARM PARC
