#!/usr/bin/ksh93
################################################################
#### Program: tac_k93
#### 
#### Description: Emulation of the Unix "tac" command
#### 
#### Author: Dana French (dfrench@mtxia.com)
####         Copyright 2004
#### 
#### Date: 07/28/2004
#### 
################################################################
function tac_k93 {
  typeset TRUE="0"
  typeset FALSE="1"
  typeset VERBOSE="${FALSE}"
  typeset VERYVERB="${FALSE}"
  typeset FNAME
  typeset ARRY

  while getopts ":vV" OPTION
  do
    case "${OPTION}" in
        'v') VERBOSE="${TRUE}";;
        'V') VERYVERB="${TRUE}";;
        '?') print "Syntax: tac_k93 [FILE]..." && exit 1 ;;
    esac
  done
 
  shift $(( ${OPTIND} - 1 ))

  typeset STDIN="${1:+${FALSE}}"
  STDIN="${STDIN:-${TRUE}}"

#### Read in the data either from STDIN or one or more files
  if (( STDIN == TRUE ))
  then
      CNT=0
      while IFS="" read -r -- LINE
      do
        ARRY[CNT]="${LINE}"
        (( CNT++ ))
      done
  else
      for FNAME in "${@}"
      do
        if [[ -e "${FNAME}" ]]
        then
            exec 0<"${FNAME}"
            CNT="0"
            while IFS="" read -r -- LINE
            do
                ARRY[CNT]="${LINE}"
                (( CNT++ ))
            done
            exec 0<&-
        else
            print -u 2 "${0##*/}: ${FNAME}: No such file or directory"
            return 1
        fi
      done
  fi

  for (( POS=(CNT-1); POS>=0; --POS ))
  do
    print -r -- "${ARRY[POS]}"        
  done

  return 0
}
################################################################

tac_k93 "${@}"