diff options
author | lonkaars <loek@pipeframe.xyz> | 2023-03-26 21:15:31 +0200 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2023-03-26 21:15:31 +0200 |
commit | 1ea23e3b923ea89b97a51edc75e1a8d13264e758 (patch) | |
tree | b32d8b096682b0aae7904bd1a76537eab9a50de9 /os1eindopdracht/uhm | |
parent | 060238054edbe95b3b517fbab493488863d25908 (diff) |
initial version of `uhm` (ultimate hangman)
Diffstat (limited to 'os1eindopdracht/uhm')
-rwxr-xr-x | os1eindopdracht/uhm | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/os1eindopdracht/uhm b/os1eindopdracht/uhm new file mode 100755 index 0000000..324a863 --- /dev/null +++ b/os1eindopdracht/uhm @@ -0,0 +1,58 @@ +#!/bin/dash +WORD="" +DICT="/usr/share/dict/words" +ARGC=0 + +usage() { + cat << EOF +usage: $0 [-h] [-w word] [-d file] + +options: + -w set word to \`word\` + -d read dictionary from \`file\` ($DICT by default) + -h show help +EOF + exit $1 +} + +while getopts d:w:h OPT; do + [ $OPTIND -gt $ARGC ] && ARGC=$OPTIND + case $OPT in + h) usage 0 ;; + w) WORD=$OPTARG ;; + d) DICT=$OPTARG ;; + \?|*) usage 1 ;; + esac +done + +if [ -z "$WORD" ]; then + # check if dictionary file exists + [ ! -e "$DICT" ] && echo "dictionary file doesn't exist!" && exit 1 + # check if dictionary file contains at least one line + [ ! "`wc -l "$DICT" | cut -d' ' -f1`" -gt "0" ] && echo "dictionary file is empty!" && exit 1 + + # filter words containing apostrophe or words longer than 12 characters + WORD="`sed -e "/'/d" -e '/.\{13\}/d' "$DICT" | sort -R | head -n1`" + # check if word is empty + [ -z "$WORD" ] && echo "no usable words found in dictionary" && exit 1 +fi + +# convert word to lowercase +WORD="`echo "$WORD" | tr '[:upper:]' '[:lower:]'`" + +pre_exit() { + trap - EXIT # prevent double exit trigger + echo "" + echo "the word was $WORD" + exit +} + +# run pre_exit function on interrupt (Ctrl-C) +trap pre_exit INT + +# main game loop (written in awk) +tput clear # clear screen +tput cup `stty size | cut -f1 -d' '` # move cursor to bottom left corner +./uhm.awk -vword="$WORD" +pre_exit + |