-#!/usr/bin/awk -f
+#!/usr/bin/sh -e
# Fortune implementation in awk
-BEGIN {
- "date +%N" | getline time
- srand(time)
- "grep '%' " ARGV[1] " | wc -l" | getline n
- line = int(rand() * n)
+usage()
+{
+ echo "Usage: fortune [OPTIONS]
+a simple POSIX sh/awk implementation of fortune
+
+ -h, --help show this help message
+ -l, --list list cookie files installed to /usr/share/fortune/
+ -f \$FILE, --file \$FILE specify full path to cookie file
+ -c \$FILE, --cookie \$FILE specify path to cookie file relative
+ to /usr/share/fortune/
+"
}
-/%/ {
- if (p) {
- exit
- }
- z++
- next
+FILE="$(find /usr/share/fortune/ -type f -not -name '*.dat')"
+while [ "$1" != "" ]; do
+ case $1 in
+ -h | --help)
+ usage
+ exit
+ ;;
+ -f | --file)
+ FILE=$2
+ ;;
+ -c | --cookie)
+ FILE=/usr/share/fortune/$2
+ ;;
+ -l | --list)
+ ls -1 /usr/share/fortune
+ exit
+ ;;
+ *)
+ echo "ERROR: unknown parameter \"$2\""
+ usage
+ exit 1
+ ;;
+ esac
+ shift 2
+done
+
+awk 'BEGIN {
+ f++
}
-z == line {
- print $0
- p = 1
+$1 == "%" {
+ f++
}
+
+{
+ sub("%", "")
+ fortunes[f] = fortunes[f] (length(fortunes[f])?"\n":"") $0
+}
+
+END {
+ "date +%N" | getline time
+ srand(time)
+ print fortunes[int(rand() * f-2) + 2]
+}' $FILE