#!/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 "${@}"