#!/bin/bash

# convert ra, dec  from sumerian (hms) to degrees or vice-versa
# coco -d|-s [-b] [-f DFS] [-h] ra dec ... (or pipe)

# LAST REVISION: 25-January-2020
#------------------------------------------------------------------------
HELP=; SUMERIAN=0; DEGREE=0; DFS=""; BLANK=;
#------------------------------------------------------------------------

while getopts sdhbf: optval
do 
   case $optval in
	h) HELP=1;;
	d) DEGREE=1;;
	s) SUMERIAN=1;;
        f) DFS="$OPTARG";;
	b) BLANK=1;;
	*) echo "coco -h for help"; exit -1;;
   esac
done
shift $((OPTIND-1));

if [ $HELP ]; then
	echo "coco (-d | -s) [-f DFS] [-h] ) ra dec"
	echo "convert ra and dec: degrees <-> Sumerian(hms/dms)"
	echo "-d ...  ra & dec (Sumerian) -> degrees"
        echo "-b ...  Sumerian inputs are blank separated"
	echo "-s ...  ra & dec (degrees)  -> Sumerian (hms,dms)"
        echo '-f DFS  custom separator for Sumerian, e.g ":" or even " "'
	echo "-h ...  help (display)"
        exit -1
fi

#-----------------------------------------------------------------------
#input from pipe? if so, convert to positional parameters
#-----------------------------------------------------------------------

if [ -p /dev/stdin ]; then
    PIPE=$(cat -)
    set -- $PIPE
fi

while [ $# -ge 2 ]
do

  if [ $SUMERIAN -eq $DEGREE ]; then
	echo "choose either Sumerian or degree"; exit; fi

  if   [ $DEGREE -eq 1 ]; then
       if [ $BLANK ]; then
	  raS=$1":"$2":"$3; decS=$4":"$5":"$6; shift 6
       else
	  raS=$1; decS=$2; shift 2
       fi
       awk '{split($1,ra,"[a-z:]"); rad=(ra[1]+(ra[2]+ra[3]/60)/60)*15;
       sign=1; if ($2~/-/) sign=-1; sub(/[+-]/," ",$2); 
       split($2,dec,"[a-z:]"); decd=sign*(dec[1]+(dec[2]+dec[3]/60)/60)
       printf "%0.7f  %0.7f\n", rad,decd }' <(echo $raS $decS)
  elif [ $SUMERIAN -eq 1 ]; then
       awk  '{sra=$1*240;sign=($2>0?1:-1);sdec=sign*$2*3600;  
       rah=int(sra/3600);  sra=sra%3600;  ram=int(sra/60);  ras=sra%60
       decd=int(sdec/3600);sdec=sdec%3600;decm=int(sdec/60);decs=sdec%60
       RA=rah"h"ram"m"ras"s"
       DEC=decd"d"decm"m"decs"s";
       if (DFS!="") {
         gsub(/[hmd]/,DFS,RA);  sub(/s/,"",RA)
         gsub(/[hmd]/,DFS,DEC); sub(/s/,"",DEC)
       }
       sign=(sign>0?"+":"-");
       printf  "%s  %c%s\n",RA,sign,DEC}' DFS="$DFS"  <(echo $1 $2)
       shift 2
  fi

done
