#!/bin/sh # # Simple news menu # prompt() { printf "\n Press to continue..."; read dummy } invalid() { printf " Invalid response\n"; prompt } [ -f ~/.nmenurc ] || { printf "nmenu: Missing ~/.nmenurc\n" >&2; exit 1; } # Trap SIGINT trap ':' 2 # Sane terminal settings For rxvt stty $(cat $HOME/.xttyparms) >/dev/null 2>&1 cd ~/tmp menu="\n Usenet News\n -----------\n\n" n=0 while read line; do case "$line" in \#*|"") continue;; esac menu="${menu}$(printf " %2d" $(($n + 1))) ${line%% *}\n" eval "cmd$n=\${line##* }" n=$(($n + 1)) done <~/.nmenurc menu="${menu} ! Shell Command\n q Quit\n\n Command: " while :; do printf "$menu" read r || continue case "$r" in "") eval "$cmd0" || prompt;; !*) r=${r#!} [ -z "$r" ] && { ${SHELL:-/bin/sh}; continue; } eval "$r"; prompt;; q) exit;; *) case "$r" in [!0-9]*) invalid; continue;; esac [ $r -lt 1 -o $r -gt $n ] && { invalid; continue; } eval "eval \"\$cmd$(($r - 1))\"" || prompt;; esac done .