100% Spam Free Email | Contact Us | Products/Services | Korn Shell | MicroEMACS


Mt Xia:
Technical Consulting Group

 

head_k93


Contact Mt Xia for help with your shell scripting projects at 615.556.0456 or dfrench@mtxia.com

Current:head_k93
Previous:
Home Page



#!/usr/bin/ksh93
################################################################
#### Program: head_k93
#### 
#### Description: Emulation of the Unix "head" command
#### 
#### Author: Dana French (dfrench@mtxia.com)
#### 
#### Date: 07/22/2004
#### 
################################################################
function head_k93 {
  typeset TRUE="0"
  typeset FALSE="1"
  typeset VERYFALSE="2"
  typeset CAT="${FALSE}"
  typeset LINES="${TRUE}"
  typeset BYTES="${FALSE}"
  typeset OLDPREV=""
  typeset FNAME=""
  typeset HEADCNT=""

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

  while getopts ":0123456789c#n#vV" OPTION
  do
    case "${OPTION}" in
        'c') BYTES="${TRUE}"
             HEADCNT="${OPTARG}"
             LINES="${FALSE}";;
        'n') LINES="${TRUE}"
             HEADCNT="${OPTARG}"
             BYTES="${FALSE}";;
        'v') VERBOSE="${TRUE}";;
        'V') VERYVERB="${TRUE}";;
        '?') print "Syntax: head [-Count|-c bytes|-n lines] [FILE]..." && exit 1 ;;
    esac

    let "${OPTION} + 0" > /dev/null 2>&1 &&
        (( CAT == FALSE )) &&
        CAT="${TRUE}"

    ! let "${OPTION} + 0" > /dev/null 2>&1 &&
        (( CAT == TRUE )) &&
        CAT="${VERYFALSE}"

    let "${OPTION} + 0" > /dev/null 2>&1 &&
        (( OPTION == 0 )) &&
        (( CAT == VERYFALSE )) &&
        CAT="${TRUE}"

    (( CAT == TRUE )) && HEADCNT="${HEADCNT}${OPTION}"
  done
 
  shift $(( ${OPTIND} - 1 ))

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

  if (( STDIN == TRUE ))
  then
          getHeadLine_k93 "${HEADCNT}" "${BYTES}" "${LINES}"
  else
    for FNAME in "${@}"
    do
      if [[ -f "${FNAME}" ]]
      then      
        exec 0<"${FNAME}"
          getHeadLine_k93 "${HEADCNT}" "${BYTES}" "${LINES}"
        exec 0<&-
      else
        print -u 2 "ERROR: \"${FNAME}\" does not exist or is not a regular file."
      fi
    done
  fi
  return 0
}
################################################################
function getHeadLine_k93 {
  typeset HEADCNT="${1}"
  typeset BYTES="${2}"
  typeset LINES="${3}"

  [[ "_${HEADCNT}" = "_" ]] && HEADCNT="10"
  for (( CNT=0; CNT<HEADCNT; ++CNT ))
  do
    if (( BYTES == TRUE ))
    then
      if IFS="" read -r -- LINE
      then
        for (( IND=0; IND<${#LINE}; ++IND ))
        do
          (( IND <= HEADCNT )) && print -r -n -- "${LINE:IND:1}"
          (( CNT++ ))
        done           
        print
        (( CNT++ ))
      else
        break
      fi
    fi

    if (( LINES == TRUE ))
    then
      if IFS="" read -r -- LINE
      then
        print -r -- "${LINE}"
      else
        break
      fi
    fi

  done

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

head_k93 "${@}"

 

For information regarding this page, contact Dana French ( dfrench@mtxia.com )
Copyright 2008 by Mt Xia Inc, All Rights Reserved