80 lines
1.4 KiB
Bash
80 lines
1.4 KiB
Bash
#!/bin/ksh
|
|
|
|
# Abbreviations, automatic
|
|
|
|
# # Variables:
|
|
#
|
|
dow_file='../dow'
|
|
|
|
typeset -T Dow_T=(
|
|
typeset -a -h "Week day name array" dow
|
|
typeset -si -h "minimum length abbreviation" minabv
|
|
|
|
function init_dow {
|
|
_.minabv=$1
|
|
_.dow=( $2 )
|
|
}
|
|
|
|
function print_wk {
|
|
typeset i ; typeset -si i
|
|
|
|
printf "(%d) " ${_.minabv}
|
|
for((i=0; i<${#_.dow[*]}; i++)); do
|
|
printf "%${_.minabv}s " ${_.dow[i]:0:${_.minabv}}
|
|
done
|
|
printf "\n"
|
|
}
|
|
)
|
|
|
|
# # Functions:
|
|
#
|
|
# # Function _file2arr(fn, arr) - read file fn into arr
|
|
#
|
|
function _file2arr {
|
|
typeset _fn ; _fn="$1"
|
|
typeset _arr ; nameref _arr="$2"
|
|
typeset _i ; typeset -si _i=0
|
|
|
|
while read; do
|
|
_arr[_i++]="$REPLY"
|
|
done < ${_fn}
|
|
|
|
}
|
|
|
|
# # Function _minabbr(buff) - return the min length abbr for items in buff
|
|
#
|
|
function _minabbr {
|
|
typeset _buf ; _buf="$1"
|
|
typeset _i _flg ; typeset -si _i=0 _cnt
|
|
typeset _item _list _abr
|
|
|
|
until (( _cnt == 7 )); do
|
|
unset _list
|
|
_cnt=0
|
|
(( _i++ ))
|
|
for _item in ${_buf}; do
|
|
_abr=${_item:0:${_i}}
|
|
[[ ${_abr} == @(${_list}) ]] && break
|
|
_list+="${_abr}|"
|
|
(( _cnt++ ))
|
|
done
|
|
done
|
|
|
|
echo ${_i}
|
|
}
|
|
|
|
######
|
|
# main #
|
|
######
|
|
|
|
typeset -a dow langs
|
|
_file2arr "${dow_file}" dow
|
|
|
|
for ((i=0; i<${#dow[*]}; i++)); do
|
|
(( ! ${#dow[i]} )) && { print "Blank Input, line $((i+1))" ; continue ;}
|
|
alen=$(_minabbr "${dow[i]}")
|
|
Dow_T langs[i]
|
|
langs[i].init_dow ${alen} "${dow[i]}"
|
|
|
|
(( $((RANDOM%100+1))<=5 )) && { printf "%d. " $((i+1)) ; langs[i].print_wk ;}
|
|
done
|