diff options
Diffstat (limited to 'usr/src/lib/libshell/common/scripts/numtree1.sh')
-rw-r--r-- | usr/src/lib/libshell/common/scripts/numtree1.sh | 237 |
1 files changed, 0 insertions, 237 deletions
diff --git a/usr/src/lib/libshell/common/scripts/numtree1.sh b/usr/src/lib/libshell/common/scripts/numtree1.sh deleted file mode 100644 index ba7783e91e..0000000000 --- a/usr/src/lib/libshell/common/scripts/numtree1.sh +++ /dev/null @@ -1,237 +0,0 @@ -#!/usr/bin/ksh93 - -# -# CDDL HEADER START -# -# The contents of this file are subject to the terms of the -# Common Development and Distribution License (the "License"). -# You may not use this file except in compliance with the License. -# -# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE -# or http://www.opensolaris.org/os/licensing. -# See the License for the specific language governing permissions -# and limitations under the License. -# -# When distributing Covered Code, include this CDDL HEADER in each -# file and include the License file at usr/src/OPENSOLARIS.LICENSE. -# If applicable, add the following below this CDDL HEADER, with the -# fields enclosed by brackets "[]" replaced with your own identifying -# information: Portions Copyright [yyyy] [name of copyright owner] -# -# CDDL HEADER END -# - -# -# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. -# - -# -# numtree1 - basic compound variable tree demo+benchmark -# - -# Solaris needs /usr/xpg6/bin:/usr/xpg4/bin because the tools in /usr/bin are not POSIX-conformant -export PATH=/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin - -# Make sure all math stuff runs in the "C" locale to avoid problems -# with alternative # radix point representations (e.g. ',' instead of -# '.' in de_DE.*-locales). This needs to be set _before_ any -# floating-point constants are defined in this script). -if [[ "${LC_ALL}" != "" ]] ; then - export \ - LC_MONETARY="${LC_ALL}" \ - LC_MESSAGES="${LC_ALL}" \ - LC_COLLATE="${LC_ALL}" \ - LC_CTYPE="${LC_ALL}" - unset LC_ALL -fi -export LC_NUMERIC=C - -function fatal_error -{ - print -u2 "${progname}: $*" - exit 1 -} - -function add_number_to_tree -{ - typeset treename=$1 - integer num=$2 - integer i - typeset nodepath # full name of compound variable - integer -a pe # path elements - integer len - typeset revnums="$(rev <<<"${num}")" - - # first built an array containing the names of each path element - # (e.g. "135" results in an array containing "( 1 3 5 )") - # 10#<number> is used to prevent leading zeros being interpreted - # as octals - for (( len=${#revnums} , i=$( printf "10#%s\n" "${revnums}" ) ; len > 0 ; len--, i=i/10 )) ; do - pe+=( $((i % 10)) ) - done - - # walk path described via the "pe" array and build nodes if - # there aren't any nodes yet - nodepath="${treename}" - for (( i=0 ; i < ${#pe[@]} ; i++ )) ; do - nameref x="${nodepath}" - - # [[ -v ]] does not work for arrays because [[ -v ar ]] - # is equal to [[ -v ar[0] ]]. In this case we can - # use the output of typeset +p x.nodes - [[ "${ typeset +p x.nodes ;}" == "" ]] && compound -a x.nodes - - nodepath+=".nodes[${pe[i]}]" - done - - # insert element (leaf) - nameref node="${nodepath}" - [[ "${ typeset +p node.elements ;}" == "" ]] && integer -a node.elements - node.elements+=( ${num} ) - - # DEBUG only - [[ "${!node.elements[*]}" != "" ]] || fatal_error "assertion $LINENO FAILED" - [[ "${ typeset +p node.elements ;}" == *-a* ]] || fatal_error "assertion $LINENO FAILED" - [[ "${ typeset +p node.elements ;}" == *-i* ]] || fatal_error "assertion $LINENO FAILED" - [[ -v node ]] || fatal_error "assertion $LINENO FAILED" - [[ -R node ]] || fatal_error "assertion $LINENO FAILED" - [[ "${ typeset +p ${!node} ;}" == *-C* ]] || fatal_error "assertion $LINENO FAILED" - [[ "${!x.nodes[*]}" != "" ]] || fatal_error "assertion $LINENO FAILED" - [[ "${ typeset +p x.nodes ;}" == *-a* ]] || fatal_error "assertion $LINENO FAILED" - [[ "${ typeset +p x.nodes ;}" == *-C* ]] || fatal_error "assertion $LINENO FAILED" - - return 0 -} - - -# floating-point version of "seq" -function floatseq -{ - float i - float arg1=$1 - float arg2=$2 - float arg3=$3 - - case $# in - 1) - for (( i=1. ; i <= arg1 ; i=i+1. )) ; do - printf "%a\n" i - done - ;; - 2) - for (( i=arg1 ; i <= arg2 ; i=i+1. )) ; do - printf "%a\n" i - done - ;; - 3) - for (( i=arg1 ; i <= arg3 ; i+=arg2 )) ; do - printf "%a\n" i - done - ;; - *) - print -u2 -f "%s: Illegal number of arguments %d\n" "$0" $# - return 1 - ;; - esac - - return 0 -} - - -function usage -{ - OPTIND=0 - getopts -a "${progname}" "${numtree1_usage}" OPT '-?' - exit 2 -} - -# main -builtin basename -builtin rev - -set -o noglob -set -o errexit -set -o nounset - -compound base - -compound bench=( - float start - float stop -) - -integer i - -typeset progname="${ basename "${0}" ; }" - -typeset -r numtree1_usage=$'+ -[-?\n@(#)\$Id: numtree1 (Roland Mainz) 2010-03-27 \$\n] -[-author?Roland Mainz <roland.mainz@nrubsig.org>] -[+NAME?numtree1 - generate sorted variable tree containing numbers] -[+DESCRIPTION?\bnumtree1\b is a simple variable tree generator - sorts a given set of numbers into a ksh compound variable tree). - the application supports two different modes: \'seq\' takes - 1-3 arguments to specify the set of numbers via seq(1) and - \'stdin\' reads the numbers from stdin (one per line)] - -method [ arguments ] - -[+SEE ALSO?\bksh93\b(1), \bseq\b(1)] -' - -while getopts -a "${progname}" "${numtree1_usage}" OPT ; do -# printmsg "## OPT=|${OPT}|, OPTARG=|${OPTARG}|" - case ${OPT} in - *) usage ;; - esac -done -shift $((OPTIND-1)) - -# prechecks -(( $# > 0 )) || usage - -cmd=$1 -shift - -# Read numbers from stdin outside benchmark loop -if [[ ${cmd} == 'stdin' ]] ; then - stdin_numbers="$( cat /dev/stdin )" || fatal_error "stdin read error" -fi - -(( bench.start=SECONDS )) - -case ${cmd} in - "seq") - for i in ${ floatseq "$@" ; } ; do - add_number_to_tree base "${i}" - done - ;; - "stdin") - for i in ${stdin_numbers} ; do - add_number_to_tree base "${i}" - done - ;; - "demo1") - for i in 1 32 33 34 34 38 90 ; do - add_number_to_tree base "${i}" - done - ;; - "demo2") - for (( i=1000000000 ; i < 1000000000+10 ; i++ )) ; do - add_number_to_tree base "$i" - done - ;; - *) - fatal_error "Invalid command ${cmd}." - ;; -esac - -(( bench.stop=SECONDS )) - -print -u2 -f "# time used: %f\n" $((bench.stop - bench.start)) - -# print tree -print -v base - -exit 0 -# EOF. |