This particular program stores itself in memory as two shell functions, so that the system does not have to read it in line by line as it executes.
#!/bin/ksh
#
#
TTYSTATE=`stty -g`
typeset -i CNT
typeset -i i
typeset -i k
typeset -i l
typeset -i n
EXEDIR=/plugh/progdir
RPTDIR=${EXEDIR}/rpt
VIEW=${EXEDIR}/exe/viewer
USAGE="Usage: ${0} , where is the extension of the set \
of filenames we are to look at."
EXTENS=${1:?${USAGE}}
if [ ! -x ${VIEW} ]; then
echo "Can't use ${VIEW}"
exit -1
fi
loadmenu() {
i=0
k=0
l=1
ls ${RPTDIR}/*.${EXTENS} 1>/dev/null 2>&1 || {
echo "No such files in ${RPTDIR}!"
exit -1
}
for FILE in `cd ${RPTDIR} 1>/dev/null; \
ls -tr *.${EXTENS} |tail -50; cd - 1>/dev/null 2>&1`
do
j=`head -1 ${RPTDIR}/${FILE} | cut -c11-25`
i=$i+1
if [ "$i" -lt 10 ]
then
z='\0040'${i}
else
z=${i}
fi
SELLIST[${i}]=${FILE};
n=`echo "$z $j\c"|wc -c`
if [ "$n" -lt 8 ]; then j="$j\t"; fi
if [ $k -eq 0 ]; then
MENU[${l}]="$z $j\t"
k=$k+1
else
MENU[${l}]="${MENU[$l]}\t$z $j\t"
k=$k+1
fi
if [ $k -eq 3 ]; then
k=0
l=$l+1
fi
done
CNT=${#MENU[*]}+1
MENU[0]="\n\t\t-- SELECT FROM LIST --\n\n";
MENU[${CNT}]="\t\t\t'X' to exit ";
}
runmenu() {
while [ 1 -eq 1 ]
do
clear
i=0
while [ "${i}" -lt "${CNT}" ]
do
echo ${MENU[${i}]}
i=${i}+1
done
echo
echo ${MENU[${i}]}
echo
echo "\t\tEnter your selection: \c"
read; case ${REPLY} in
[Xx])
stty ${TTYSTATE}
exit;;
[0-9]*)
i=${REPLY}
SEL=${SELLIST[${i}]}
if [ -f "${RPTDIR}/${SEL}" ]
then
${VIEW} ${RPTDIR}/${SEL}
fi;;
*)
echo "\0007\0007Didn't understand that!"
sleep 3
clear;;
esac
done
}
loadmenu
runmenu