#!/usr/bin/ksh93 ################################################################ #### Program: factor_k93 #### #### Description: Emulation of the Unix "factor" command #### #### Author: Dana French (dfrench@mtxia.com) #### Copyright 2004 #### #### Date: 07/26/2004 #### ################################################################ function factor_k93 { typeset TRUE="0" typeset FALSE="1" typeset VERBOSE="${FALSE}" typeset VERYVERB="${FALSE}" integer NUM while getopts ":vV" OPTION do case "${OPTION}" in 'v') VERBOSE="${TRUE}";; 'V') VERYVERB="${TRUE}";; '?') print "Syntax: factor_k93 [NUMBER]..." && 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 while read NUM do print -n "${NUM}:" CNT="2" while (( CNT <= NUM )) do CNT="2" while (( ( NUM % CNT ) != 0 )) && (( CNT <= NUM )) do (( CNT++ )) done print -n " ${CNT}" if (( CNT == NUM )) then print break fi (( NUM = NUM / CNT )) done done else while [[ "_${1}" != "_" ]] do NUM="${1}" print -n "${NUM}:" CNT="2" while (( CNT <= NUM )) do CNT="2" while (( ( NUM % CNT ) != 0 )) && (( CNT <= NUM )) do (( CNT++ )) done print -n " ${CNT}" if (( CNT == NUM )) then print break fi (( NUM = NUM / CNT )) done shift done fi return 0 } ################################################################ factor_k93 "${@}"