| Previous | Table of Contents | Next |
The arch.sh.fctn script emulates SunOS 4.x system architecture.
#
# %M%: Version: %I% Date: %G%
#
[ $_Arch_loaded ] || {
# Function:
# @(#)Arch (Wayne.Thompson@Sun.COM)05/14/92
#
# Description:
# This function emulates 4.x arch(1).
#
# Variables:
#
# Usage:
# Arch
# Arch -k
# Arch archname
#
# Return:
# Ø success
# 1 non-success
#
# Dependencies:
# This function works under SunOs 3.x - 5.x.
#
# Bugs:
#
Arch () {
case $1 in
")
/bin/arch $* 2>&- || /bin/expr `/bin/uname -m`: '\
(sun[Ø-9]*\)' ;;
-k)
/bin/arch $* 2>&- || /bin/uname -m
;;
*)
if [ -x /bin/arch ]
then
/bin/arch $*
else
[ $* = `/bin/expr \`/bin/uname -m\` :'\(sun[Ø-9]*\)'` ]
fi
;;
esac
}
_Arch_loaded=1
}
The following function extends the functionality of the Bourneshell to include associative arrays:
## >> BEGIN package: arrays>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ##
# Package:
# @(#)arrays,v1.Ø (Wayne.Thompson@Sun.COM) 05/02/93
#
# Description:
# This package contains functions that emulate
associativearrays.
# Keys are limited to letters, digits, underscores, hyphens
and periods.
#
# Variables:
# __array_size_<array>
# __array_keys_<array>
# __array__<array>_<key>
# __array_filename
# __array_name
# __array_key
# __array_keys
# __array_cell
#
# Usage:
# setarray array key [value ...]
# getarray array key
# unsetarray array [key ...]
# keys array
# sizearray array
# defined array [key]
# dumparray pathname [array ...]
#
# Dependencies:
# Array names and keys are combined to form strings which are
# evaluated as parameters.
#
# Bugs:
#
### >> BEGIN function: setarray>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ###
# Function:
# @(#)setarray,v1.Ø (Wayne.Thompson@Sun.COM) 05/16/93
#
# Description:
# This function assigns values to array elements. If more thanone
# value is provided and the key is an integer, values will be
# assigned to successive elements beginning with the initialkey.
#
# Variables:
# __array_size_<array>
# __array_keys_<array>
# __array__<array>_<key>
# __array_name
# __array_key
# __array_cell
#
# Usage:
# setarray array key [value ...]
# setarray pathname
#
# Return:
#
# Dependencies:
#
# Bugs:
#
setarray () {
case $# in
Ø)
echo >&2 setarray: error: "$@"
echo >&2 usage: setarray array key '[value ...]'
exit 1
;;
1)
if [ -f $1 ]
then
while read __array_name __array_key __array_value
do
setarray $__array_name $__array_key$__array_value
done < $1
return
else
echo >&2 setarray: error: $1: no such file
exit 1
fi
;;
2|3)
;;
*)
case $2 in
[Ø-9]*)
;;
*)
echo >&2 setarray: error: "$@"
echo >&2 setarray: error: 2nd argumentmust be an
integer
exit 1
;;
esac
;;
esac
__array_name=$1
__array_key=$2
case $2 in
*[-.]*)
__array_cell=`echo $2 | /bin/tr '[-.]' __`
shift 2
set $__array_name $__array_cell "$@"
;;
esac
eval "
if [ \${__array_size_$1+1} ]
then
[ \${__array__$1_$2+1} ] || {
__array_size_$1=\`/bin/expr\$__array_size_$1 + 1\`
__array_keys_$1=\"\$__array_keys_$1\$__array_key \"
}
else
__array_size_$1=1
__array_keys_$1=\$__array_key
fi
__array__$1_$2=\$3
"
case $# in
2)
shift 2
;;
*)
shift 3
;;
esac
while [ $# -gt Ø ]
do
__array_key=`/bin/expr $__array_key + 1`
eval "
[ \${__array__${__array_name}_$__array_key+1}] || {
__array_size_$__array_name=\`/bin/expr\
$__array_size_$__array_name + 1\`
__array_keys_$__array_name=\"\$__array_keys_$__array_name
\$__array_key\"
}
__array__${__array_name}_$__array_key=\$1
"
shift
done
}
### << END function: setarray <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ###
### >> BEGIN function: getarray>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ###
# Function:
# @(#)getarray,v1.Ø (Wayne.Thompson@Sun.COM) 05/02/93
#
# Description:
# This function prints array values.
#
# Variables:
# __array__<array>_<key>
# __array_name
#
# Usage:
# getarray array [key ...]
#
# Return:
#
# Dependencies:
#
# Bugs:
#
getarray () {
case $# in
Ø)
echo >&2 getarray: error: "$@"
echo >&2 usage: getarray array '[key ...]'
exit 1
;;
1) # entire array
set $1 `keys $1`
;;
esac
__array_name=$1
shift
while [ $# -gt Ø ]
do
case $1 in
*[-.]*)
eval echo \$__array__${__array_name}_`echo $1|
/bin/tr '[-.]' __`
;;
*)
eval echo \$__array__${__array_name}_$1
;;
esac
shift
done
}
### << END function: getarray<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ###
### >> BEGIN function: unsetarray >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ###
# Function:
# @(#)unsetarray,v1.Ø Wayne.Thompson@Sun.COM) 05/02/93
#
# Description:
# This function unsets (undefines) one or more array elements
# or an entire array.
#
# Variables:
# __array_size_<array>
# __array_keys_<array>
# __array__<array>_<key>
# __array_name
# __array_key
# __array_keys
#
# Usage:
# unsetarray array [key ...]
#
# Return:
#
# Dependencies:
#
# Bugs:
#
unsetarray () {
case $# in
Ø)
echo >&2 unsetarray: error: "$@"
echo >&2 usage: unsetarray array '[key ...]'
exit 1
;;
1) # entire array
set $1 `keys $1`
;;
esac
__array_name=$1
shift
while [ $# -gt Ø ]
do
eval "
__array_keys=
[ \${__array__${__array_name}_$1+1} ]&&
for __array_key in \$__array_keys_$__array_name
do
case \$__array_key in
\$1)
case \$1 in
*[-.]*)
unset__array__${__array_name}_\`echo
\$1 | /bin/tr '[-.]' __\`
;;
*)
unset __array__${__array_name}_$1
;;
esac
__array_size_$__array_name=\`/bin/expr
\$__array_size_$__array_name - 1\`
;;
*)
case \$__array_keys in
'')
__array_keys=\$__array_key
;;
*)
__array_keys=\"\$__array_keys\$__array_key
\" ;;
esac
;;
esac
done
__array_keys_$__array_name=\$__array_keys
"
shift
done
eval "
case \$__array_size_$__array_name in
Ø)
unset __array_size_$__array_name__array_keys_$__
array_name ;;
esac
"
}
### << END function: unsetarray<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ###
### >> BEGIN function: keys>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ###
# Function:
# @(#)keys,v1.Ø (Wayne.Thompson@Sun.COM) 05/02/93
#
# Description:
# This function prints the keys of an array.
#
# Variables:
# __array_keys_<array>
#
# Usage:
# keys array
#
# Return:
#
# Dependencies:
#
# Bugs:
#
keys () {
case $# in
1)
eval echo \$__array_keys_$1
;;
*)
echo >&2 keys: error: "$@"
echo >&2 usage: keys array
exit 1
;;
esac
}
### << END function: keys<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ###
### >> BEGIN function: sizearray>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>###
# Function:
# @(#)sizearray,v1.Ø (Wayne.Thompson@Sun.COM) 05/02/93
#
# Description:
# This function prints the number of defined array elements.
#
# Variables:
# __array_size_<array>
#
# Usage:
# sizearray array
#
# Return:
#
# Dependencies:
#
# Bugs:
#
sizearray () {
case $# in
1)
eval echo \${__array_size_$1:-Ø}
;;
*)
echo >&2 sizearray: error: "$@"
echo >&2 usage: sizearray array
exit 1
;;
esac
}
### << END function: sizearray<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ###
### >> BEGIN function: defined>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ###
# Function:
# @(#)defined,v1.Ø (Wayne.Thompson@Sun.COM) 05/02/93
#
# Description:
# This function returns whether an array element or array is
defined.
#
# Variables:
# __array_size_<array>
# __array__<array>_<key>
#
# Usage:
# defined array [key]
#
# Return:
# Ø defined
# 1 undefined
#
# Dependencies:
#
# Bugs:
#
defined () {
case $# in
1)
eval set \${__array_size_$1+Ø} 1
;;
2)
case $2 in
*[-.]*) set $1 `echo $2 | /bin/tr '[-.]' __`;;
esac
eval set \${__array__$1_$2+Ø} 1
;;
*)
echo >&2 defined: error: "$@"
echo >&2 usage: defined array '[key]'
exit 1
;;
esac
return $1
}
### << END function: defined<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ###
### >> BEGIN function: dumparray>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ###
# Function:
# @(#)dumparray,v1.Ø (Wayne.Thompson@Sun.COM) 05/02/93
#
# Description:
# This function dumps arrays in file in a format readable by
# shell dot (.) command.
#
# Variables:
# __array_filename
#
# Usage:
# dumparray pathname [array ...]
#
# Return:
# Ø success
# 1 failure
#
# Dependencies:
#
# Bugs:
# Since this depends on the output of set, and set does not
preserve
# quoting, the resultant file may be unusable. Use of
# storearray/setarray is safer, albeit slower.
#
dumparray () {
case $# in
Ø)
echo >&2 dumparray: error: "$@"
echo >&2 usage: dumparray pathname '[array ...]'
exit 1
;;
esac
__array_filename=$1
shift
set |
/bin/awk '
/\(\){$/ { exit } # functions follow parameters
/^__array_(filename|name|key|keys|cell)=/ { next }
#temp storage
/^__array_(size|keys)*_('`echo ${*:-.\*} | /bin/tr"
" \|`')(_|=)/ {
if (NF > 1) {
n = index($Ø, "=");
print substr($Ø , 1,n)"'\''"substr($Ø,n+1)"'\''";
}
else {
print;
}
}
' > $__array_filename
}
### << END function: dumparray<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ###
## << END package: arrays<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ##
| Previous | Table of Contents | Next |