Function explanation

dear sir,

I am new to unix zone. need some explanation on the function used.


 cat /apps/prd/venue/code/bin/std.funcs
#!/usr/bin/ksh
#-------------------------------------------------------------------
# printmsg: prints the message given in arg 1 with timestamp to
#           stdout or APPENDS to a file
#           if  printing to a file, arg 2 should be the file name
#           and arg 3 is the number of tabs, otherwise if printing to
#           stdout, then arg 2 will be the number of tabs.
#                               if numtabs is omitted, default is 0
#
#                               NOTE: filename must contain at least one character
#                               or printmsg will assume that it is tab argument
#
#                               if numTabs=0 then entire date/time is printed
#                               if numTabs>0 then only time is printed
#
# input:    message=$1  appendfile=$2  numtabs=$3
#                               message=$1  numtabs=$2
#           message=$1  appendfile=$2
#

#-------------------------------------------------------------------
function printmsg
{
        set +x
        set +u  #allow unset variables so input parameters can be omitted

        #declare local variables
        typeset -i numTabs maxLen prefixLen currLen
        typeset -t msg argTWO argTHREE fileName
        typeset -t margin gap dt
        typeset -t inLine chunk nextWord firstLine

        # Constant Variables
        maxLen=78
        gap='    '  #set to four spaces

        # Input variables & initilizations
        msg=$1
        argTWO=$2
        argTHREE=$3
        fileName=''
        margin=''
        margin2=''
        firstLine=TRUE
        chunk=""

        if [[ $(echo $argTWO | tr -d '[-0-9]') = ""  ]] then
                numTabs=${argTWO:=0}
        else
                numTabs=${argTHREE:=0}
                fileName=$argTWO
        fi

        if [[ $numTabs -le 0 ]] then
                dt=$(date)
        else
                dt=$(date +%H:%M:%S)
        fi

        while [[ $numTabs -gt 0 ]];
        do
                margin=${margin}${gap}
                numTabs=$numTabs-1
        done

        ## Build margin for extra line(s) that is as wide as the prefix.
        ## Extra lines will not have date on them, they will be blank.
        prefix="${margin}${dt}${gap}"
        prefixLen=${#prefix}
        while [[ $prefixLen -gt 0 ]];
        do
                margin2=${margin2}' '
                prefixLen=$prefixLen-1
        done

        inLine=${msg}

        ## Loop through each word in $inLine.  Print lines that will fit
        ## within the $maxLen limit.
        for word in $inLine
        do
                currLen=$((${#prefix}+${#chunk}+1+${#word}))

                if [[ -z $chunk ]] then
                        chunk=$word
                elif [[ $currLen -lt $maxLen ]] then
                        chunk=$chunk' '$word
                else
                        if [[ -z $fileName ]] then
                                print "${prefix}${chunk}"
                        else
                                print "${prefix}${chunk}" >> $fileName
                        fi

                        chunk=$word

                        if [[ $firstLine = "TRUE" ]] then
                                firstLine=FALSE
                                prefix=$margin2
                        fi
                fi
        done

        # Print the last line.
        if [[ -z $fileName ]] then
                print "${prefix}${chunk}"
        else
                print "${prefix}${chunk}" >> $fileName
        fi

        return 0
} # end printmsg

#------------------------------------------------------------------------------
# Function:  trim_file
# Description:
#
#   This function shortens a specified file to a maximum number of lines.
#   It will remove lines at the beginning of the file to satisfy the max
#   line constraint.
#
#   If the file already has less than the maximum number of lines, it will
#   be unchanged.
#
# Input:
#   FILE ($1) - The file to shorten.
#   MAX_LENGTH ($2) - The length to shorten FILE.
#
# Output:
#   FILE will be shortened to contain a maximum of MAX_LENGTH number of lines.
#
#   Return Codes:
#      SUCCESS - is returned if the number of lines in the FILE is greater than
#         MAX_LENGTH and the FILE is shortened to contain the last MAX_LENGTH
#         lines.
#      SUCCESS - is also returned if the number of lines in the FILE is less
#         than or equal to MAX_LENGTH.  In this case the FILE will be
#         unchanged.
#      FAIL - signifies an error with function.  Status messages are
#         printed to standard error.
#
#------------------------------------------------------------------------------
function trim_file
{
   typeset FUNCTION=$0
   typeset FILE=$1
   typeset MAX_LENGTH=$2
   typeset SUCCESS=0
   typeset FAIL=1

   # Local Variables
   typeset TEMP_FILE

   # Initalize TEMP_FILE.  TEMP_FILE will be used to hold the filename for
   # a file that will hold a temporary shortened version of FILE.
   TEMP_FILE=$(mktemp -d/tmp -p$FUNCTION)
   RC=$?
   if [[ $RC -ne $SUCCESS ]] then
      print -u2 "mktemp -d/tmp -ptrim_file, failed.  RC=$RC"
      return $FAIL
   fi

   # This command will print the last MAX_LENGTH lines in FILE to TEMP_FILE.
   tail -n $MAX_LENGTH $FILE > $TEMP_FILE
   RC=$?
   if [[ $RC -ne $SUCCESS ]] then
      print -u2 "tail -n $MAX_LENGTH $FILE > $TEMP_FILE, failed.  RC=$RC"
      return $FAIL
   fi

   # Replace FILE with its shortened version TEMP_FILE.
   cp $TEMP_FILE $FILE
   RC=$?
   if [[ $RC -ne $SUCCESS ]] then
      print -u2 "cp $TEMP_FILE $FILE, failed.  RC=$RC"
      return $FAIL
   fi

   rm -f $TEMP_FILE

   return $SUCCESS

}  ## end trim_file


#-----------------------------------------------------------------------------
# function: error_check
# This function is called to determine if the previous process exited with a
# nonzero return value.
# If it did, then send  mail to mailgroup with
# appropriate message $2 and subject $3
#
# Note: LOGFILE and MAILGROUP will be exported from the calling script
#-----------------------------------------------------------------------------

function error_check
{
# Set INDENT variable used with printmsg to write in the $LOGFILE
INDENT=${INDENT:-0}  ## if INDENT unset, then default to 0
let INDENT=INDENT+1
   if [[ $1 -ne 0 ]] then
      printmsg "$2 RC=$1" $LOGFILE $INDENT
      echo "$2 RC=$1" | mailx -s "$3" $MAILGROUP
      exit $1
   fi
   return
}

Seems you already have nice descriptions of your functions, from the comments in your code.

What exactly are you looking for. Please be specific.

Thanks

i am not able to understand the trim_file function.

This function is quite well commented, it basically uses the tail command to print the last MAX_LENGTH ($2) lines of FILE ($1) these are stored in a temporary file (name generated by the mktmp command) the contents of this temporary file is then copied back over the original file and the temporary file removed.
All the operations performed are checked to ensure they have a success exit code before moving onto the next step.

Which particular part of the function you are having trouble understanding?

1 Like