#!/bin/bash

if [ -f /etc/UVP-release  ] && [ `cat /etc/UVP-release | grep -c "UVP"` -ne 0 ]
then
    g10s_logFile="/var/log/UltraPath/ultrapathTool.log"
elif [ -f /etc/uvp_version  ] && [ `cat /etc/uvp_version | grep -c "UVP"` -ne 0 ]
then
    g10s_logFile="/var/log/UltraPath/ultrapathTool.log"
elif [ -f /etc/EulerLinux.conf  ]
then
    g10s_logFile="/var/log/UltraPath/ultrapathTool.log"
else
    g10s_logFile="/opt/UltraPath/log/ultrapathTool.log"
fi


function print_event()
{
    local fileFlag=""

    if [ `echo "$1"|grep -E -c "[0-9]+"` -eq 0 ] || [ "$2" = "" ]
    then
        echo -e -n "\033[31m[ERROR:2][g10s][`date +%Y-%m-%d_%H:%M:%S`][$0,${FUNCNAME[1]},${BASH_LINENO[0]}]\033[0m ";echo "param error[$1,$2]"
        [ -f "${g10s_logFile}" ] && [ -w "${g10s_logFile}" ] && echo "[ERROR:2][g10s][`date +%Y-%m-%d_%H:%M:%S`][$0,${FUNCNAME[1]},${BASH_LINENO[0]}] param error[$1,$2]" >> "${g10s_logFile}"
        t100s_exit 1
    fi
    if [ "$3" != "" ]
    then
        fileFlag=$3
    else
        fileFlag=${0##*/}
        fileFlag=${fileFlag%%_*}
    fi
    [ -f "${g10s_logFile}" ] && [ -w "${g10s_logFile}" ] && echo "[EVENT:$1][${fileFlag}][`date +%Y-%m-%d_%H:%M:%S`][`id -u`][$0,${FUNCNAME[1]},${BASH_LINENO[0]}] $2">>"${g10s_logFile}"
    return 0
}

function print_error()
{
    local fileFlag=""
    local tmpDebugon=""

    if [ "$2" = "" ] || [ `echo "$1"|grep -E -c "[0-9]+"` -eq 0 ]
    then
        echo -e -n "\033[31m[ERROR:2][g10s][`date +%Y-%m-%d_%H:%M:%S`][$0,${FUNCNAME[1]},${BASH_LINENO[0]}]\033[0m ";echo "param error[$1,$2]"
        [ -f "${g10s_logFile}" ] && [ -w "${g10s_logFile}" ] && echo "[ERROR:2][g10s][`date +%Y-%m-%d_%H:%M:%S`][$0,${FUNCNAME[1]},${BASH_LINENO[0]}] param error[$1,$2]" >> "${g10s_logFile}"
        return 1
    fi
    if [ "$3" != "" ]
    then
        fileFlag=$3
    else
        fileFlag=${0##*/}
        fileFlag=${fileFlag%%_*}
    fi
   
    echo -e -n "\033[31m[ERROR:$1][${fileFlag}][`date +%Y-%m-%d_%H:%M:%S`][$0,${FUNCNAME[1]},${BASH_LINENO[0]}]\033[0m ";echo "$2"
   
    [ -f "${g10s_logFile}" ] && [ -w "${g10s_logFile}" ] && echo  "[ERROR:$1][${fileFlag}][`date +%Y-%m-%d_%H:%M:%S`][`id -u`][$0,${FUNCNAME[1]},${BASH_LINENO[0]}] $2">>"${g10s_logFile}"
    return 0
}

function upddhelp()
{
  echo "Usage: updd [OPERAND]..."
  echo "or:  updd OPTION"
  echo "Copy a file, converting and formatting according to the operands."

  echo "bs=BYTES        force ibs=BYTES and obs=BYTES"
  echo "cbs=BYTES       convert BYTES bytes at a time"
  echo "conv=CONVS      convert the file as per the comma separated symbol list"
  echo "count=BLOCKS    copy only BLOCKS input blocks"
  echo "ibs=BYTES       read BYTES bytes at a time"
  echo "if=FILE         read from FILE instead of stdin"
  echo "iflag=FLAGS     read as per the comma separated symbol list"
  echo " "
  echo "BLOCKS and BYTES may be followed by the following multiplicative suffixes:"
  echo "xM M, c 1, w 2, b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,"
  echo "GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y."
  echo " "
  echo "Each CONV symbol may be:"

  echo "ascii     from EBCDIC to ASCII"
  echo "ebcdic    from ASCII to EBCDIC"
  echo "ibm       from ASCII to alternate EBCDIC"
  echo "block     pad newline-terminated records with spaces to cbs-size"
  echo "unblock   replace trailing spaces in cbs-size records with newline"
  echo "lcase     change upper case to lower case"
  echo "nocreat   do not create the output file"
  echo "excl      fail if the output file already exists"
  echo "iucase     change lower case to upper case"
  echo "swab      swap every pair of input bytes"
  echo "noerror   continue after read errors"
  echo "sync      pad every input block with NULs to ibs-size; when used"
  echo "          with block or unblock, pad with spaces rather than NULs"
  echo "fdatasync  physically write output file data before finishing"
  echo "fsync     likewise, but also write metadata"
  echo ""
  echo "Each FLAG symbol may be:"

  echo "append    append mode (makes sense only for output; conv=notrunc suggested)"
  echo "direct    use direct I/O for data"
  echo "directory fail unless a directory"
  echo "dsync     use synchronized I/O for data"
  echo "sync      likewise, but also for metadata"
  echo "nonblock  use non-blocking I/O"
  echo "noatime   do not update access time"
  echo "noctty    do not assign controlling terminal from file"
  echo "nofollow  do not follow symlinks"  
  echo ""
  echo "example:"
  echo "updd if=/dev/sdx"
  echo ""
  echo "Options are:"
 
  echo "   --help     display this help and exit"
}
if [ $# -gt 0 ]
then 
    if [ $1 = "--help" ]
    then
        upddhelp
    exit 1 
    fi
fi 
ddstr="dd "
testddstr=""
for arg in "$@"
do 
   tmpstr=`echo $arg|cut -c1-3` 
   ddstr=${ddstr}" "
   if [ "$tmpstr" = "of=" ]
   then  
        diskname=`echo $arg|cut -c4-`   
        print_error "1006" "updd: can't open '${diskname}': Function not implemented!"
        exit 1
    elif [ "$tmpstr" = "if=" ]
    then
        ddstr=${ddstr}${arg}
        ddstr=${ddstr}" of=/dev/null"
   else
        ddstr=${ddstr}${arg}
   fi
done
testddstr=$ddstr" count=1 > /dev/null 2>&1"
eval $testddstr 
if [ 0 -eq $? ]
then
    print_event "1006" "execute updd successfully."
    eval $ddstr
    
else
    print_error "1006" "updd: parameter error: Function not implemented!."
fi
exit 0
