summaryrefslogtreecommitdiff
path: root/os1eindopdracht/uhm
diff options
context:
space:
mode:
authorlonkaars <loek@pipeframe.xyz>2023-03-26 21:15:31 +0200
committerlonkaars <loek@pipeframe.xyz>2023-03-26 21:15:31 +0200
commit1ea23e3b923ea89b97a51edc75e1a8d13264e758 (patch)
treeb32d8b096682b0aae7904bd1a76537eab9a50de9 /os1eindopdracht/uhm
parent060238054edbe95b3b517fbab493488863d25908 (diff)
initial version of `uhm` (ultimate hangman)
Diffstat (limited to 'os1eindopdracht/uhm')
-rwxr-xr-xos1eindopdracht/uhm58
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
+