acmecert: Fix cryptography bugs.
[utils.git] / planime
diff --git a/planime b/planime
index a25761e..c53a425 100755 (executable)
--- a/planime
+++ b/planime
@@ -14,12 +14,25 @@ scorefile() {
     fi
 }
 
+findbase() {
+    if [ -r aliases ]; then
+       while read alias rest; do
+           if [ "$alias" = "$1" ]; then
+               echo "$rest"
+               return
+           fi
+       done <aliases
+    fi
+    echo "$1"
+}
+
 findfile() {
     if [ -n "$debug" ]; then echo "finding base='$1', ep='$2', qual='$3'" >&2; fi
-    local file tail eq eqt m matches max score
+    local base file tail eq eqt m matches max score
     matches=()
-    for file in "$1"*; do
-       tail="${file#"$1"}"
+    base="$(findbase "$1")"
+    for file in "$base"*; do
+       tail="${file#"$base"}"
        eq="${tail%.*}"
        m=n
        if [ "${eq%% *}" -eq "$2" ] 2>/dev/null; then
@@ -37,7 +50,7 @@ findfile() {
            fi
        fi
        if [ "$m" = y ]; then
-           if [ "$eqt" = "$3" -o "$eqt" = "($3)" ]; then
+           if [ "$eqt" = "$3" -o "$eqt" = "($3)" -o "${eqt:0:2}" = "- " ]; then
                matches=("${matches[@]}" "$file")
            fi
        fi
@@ -58,55 +71,69 @@ findfile() {
 }
 
 origargs=("$0" "$@")
-cmdline=(mplayer -fs -ass)
+cmdline=(mpv -fs)
 debug=
+log=y
 unset pretend printfile
 
-while [ "${1:0:1}" = - ]; do
-    a="$1"
-    shift
-    case "$a" in
-       -h)
-           echo "usage: planime [-fdhtC] [-A PLAYER-ARGS... ;] [-s PAR VAL] [--] [NAME-QUAL] [EP|.] [TYPE-QUAL]" >&2
+usage() {
+    echo "usage: planime [-fdhtCL] [-A PLAYER-ARGS... ;] [-s PAR=VAL] [--] [NAME-QUAL] [EP|.] [TYPE-QUAL]"
+}
+
+while getopts hdtCLA:s:fv opt; do
+    case "$opt" in
+       h)
+           usage
            exit 0
            ;;
-       -d)
+       d)
            debug=y
            ;;
-       -t)
-           cmdline=("${cmdline[@]}" -ao oss:/dev/dsp1)
+       t)
+           cmdline=("${cmdline[@]}" -profile tv)
+           DISPLAY=:1
+           chwp=y
            ;;
-       -C)
+       C)
            pretend=y
            ;;
-       -A)
-           while :; do
-               a="$1"
-               shift
-               if [ "$a" = \; ]; then
-                   break;
+       L)
+           log=
+           ;;
+       A)
+           while [ "$OPTARG" != \; ]; do
+               cmdline+=("$OPTARG")
+               if [ "$OPTIND" -gt $# ]; then
+                   echo "planime: unterminated argument list" >&2
+                   exit 1
                fi
-               cmdline=("${cmdline[@]}" "$a")
+               OPTARG="${!OPTIND}"
+               let OPTIND++
            done
            ;;
-       -s)
-           savepar="$1"
-           shift
-           saveval="$1"
-           shift
+       s)
+           p="$(expr index "$OPTARG" =)"
+           if [ "$p" -le 0 ]; then
+               usage >&2
+               exit 1
+           fi
+           savepar="${OPTARG:0:p}"
+           let p++
+           saveval="${OPTARG:p}"
            ;;
-       -f)
+       f)
            printfile=y
            ;;
-       --)
-           break
+       v)
+           cmdline+=(-v)
            ;;
        *)
-           echo "planime: unknown option \`$a'"
+           usage >&2
            exit 1
            ;;
     esac
 done
+shift $((OPTIND - 1))
 
 dirbase="$(basename "$(pwd)")"
 base=.
@@ -152,7 +179,7 @@ if [ -z "$file" ]; then
            curser=
        fi
     else
-       curser="$base"
+       curser="$(findbase "$base")"
     fi
     if [ -n "$curser" ]; then
        file="$(findfile "$dirbase $curser - " "$ep" "$tqual")" || \
@@ -222,22 +249,25 @@ fi
 if [ -n "$alang" ]; then
     cmdline=("${cmdline[@]}" -alang "$alang")
 elif [ -n "$aid" ]; then
-    cmdline=("${cmdline[@]}" -aid "$aid")
+    cmdline=("${cmdline[@]}" -aid "$((aid + 1))")
 fi
 if [ -n "$slang" ]; then
     cmdline=("${cmdline[@]}" -slang "$slang")
 elif [ -n "$sid" ]; then
-    cmdline=("${cmdline[@]}" -sid "$sid")
+    cmdline=("${cmdline[@]}" -sid "$((sid + 1))")
 fi
 
-if [ "`hostname`" = pc6 -o "`hostname`" = pc7 -a "$DISPLAY" = :1 ]; then chwp=y; fi
-
 if [ -n "$pretend" ]; then
     echo "${cmdline[@]}" "$file"
 elif [ -n "$printfile" ]; then
     echo "$file"
 else
     if [ "$chwp" = y ]; then (sleep 2; randomwp) & fi
+    if [ "$log" = y ]; then
+       if [ -d $HOME/.anime ]; then
+           echo "$(date) $(basename "$file")" >>$HOME/.anime/plog
+       fi
+    fi
     "${cmdline[@]}" "$file"
     
     if [ "$nextep" = y ]; then