]> git.armaanb.net Git - bin.git/blobdiff - fortune
fortune: Fix indentation
[bin.git] / fortune
diff --git a/fortune b/fortune
index 02276e6ecf76e4b612583e6a397668312494d1c2..5030086a99a0b895d088fe9afa4b923e0fedf232 100755 (executable)
--- a/fortune
+++ b/fortune
@@ -1,22 +1,60 @@
-#!/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