Add key legend.
[utils.git] / planime
CommitLineData
40777a19 1#!/bin/sh
2
25378dd8 3isnum() {
4 grep -xq '[0-9]\+' <<<"$1"
5}
6
7findfile() {
8 local file tail eq eqt m
9 for file in "$1"*; do
10 tail="${file#$1}"
11 eq="${tail%.*}"
12 m=n
13 if [ "${eq%% *}" -eq "$2" ] 2>/dev/null; then
14 if [[ "$eq" == *\ * ]]; then
15 eqt="${eq#* }"
16 else
17 eqt=
18 fi
19 m=y
20 elif [ "${eq:0:${#2}}" = "$2" ]; then
21 eqt="${eq:${#2}}"
22 if [ "${eqt:0:1}" = " " -o -z "$eqt" ]; then
23 eqt="${eqt# }"
24 m=y
25 fi
26 fi
27 if [ "$m" = y ]; then
28 if [ "$eqt" = "$3" -o "$eqt" = "($3)" ]; then
29 echo "$file"
30 return 0
31 fi
32 fi
33 done
34 return 1
35}
36
251d97ca 37origargs=("$0" "$@")
40777a19 38cmdline=(mplayer -fs)
39
40while [ "${1:0:1}" = - ]; do
41 a="$1"
42 shift
43 case "$a" in
529814da 44 -h)
45 echo "usage: planime [-ht] [-s PAR VAL] [NAME-QUAL] [EP|.] [TYPE-QUAL]" >&2
46 exit 0
47 ;;
40777a19 48 -t)
49 cmdline=("${cmdline[@]}" -ao oss:/dev/dsp1)
50 ;;
51 -s)
52 savepar="$1"
53 shift
54 saveval="$1"
55 shift
56 ;;
57 esac
58done
59
529814da 60base="$(basename "$(pwd)")"
61nextep=n
62file=
63tqual=
64if [ $# -eq 0 ]; then
65 nextep=y
66elif [ $# -eq 1 ]; then
67 if [ -r "$1" ]; then
68 file="$1"
69 else
70 if findfile "$base - " "$1" >/dev/null; then
71 ep="$1"
72 else
73 nextep=y
74 base="$base $1"
75 fi
76 fi
40777a19 77elif [ $# -eq 2 ]; then
529814da 78 if findfile "$base - " "$1" "$2" >/dev/null; then
79 ep="$1"
80 tqual="$2"
81 else
82 base="$base $1"
83 ep="$2"
84 fi
85else
86 base="$base $1"
40777a19 87 ep="$2"
529814da 88 tqual="$3"
89fi
90if [ "$ep" = . ]; then nextep=y; fi
91if [ "$nextep" = y -a -r nextep ]; then
92 ep="$(<nextep)"
93 if ! isnum "$ep"; then
94 echo "planime: nextep is non-numeric" >&2
95 exit 1
96 fi
40777a19 97fi
529814da 98file="$(findfile "$base - " "$ep" "$qual")"
99
4c7a7e70 100if [ -z "$file" -o ! -r "$file" ]; then
529814da 101 echo "planime: no matching file found" >&2
102 exit 1
103fi
104
4c7a7e70 105case "${file##*.}" in
106 ogm)
40777a19 107 defopts=(-aid 1 -sid 0)
4c7a7e70 108 ;;
109 mkv)
40777a19 110 defopts=(-slang eng -alang jpn)
4c7a7e70 111 ;;
112esac
40777a19 113
114ifile=".${ep}.info"
115
116if [ -n "$savepar" ]; then
117 if [ -r "$ifile" ]; then
081b510d 118 egrep -v "^${savepar}:" "$ifile" >"$ifile.new"
119 mv -f "$ifile.new" "$ifile"
40777a19 120 fi
121 echo "$savepar: $saveval" >>"$ifile"
122 exit 0
123fi
124
125unset delay
126
127if [ -r "$ifile" ]; then
251d97ca 128 delay="$(sed -n 's/delay *: *\([^ ]*\)$/\1/p' <"$ifile")"
40777a19 129 cmdline=("${cmdline[@]}" -delay "$delay")
130else
131 cmdline=("${cmdline[@]}" "${defopts[@]}")
132fi
133
134if [ "`hostname`" = pc6 ]; then chwp=y; fi
135
136if [ "$chwp" = y ]; then (sleep 2; randomwp) & fi
4c7a7e70 137"${cmdline[@]}" "$file"
251d97ca 138
139if [ "$nextep" = y ]; then
1f6c2e48 140 echo "0. Save and continue (or Space)"
251d97ca 141 echo "1. Continue without saving"
1f6c2e48 142 echo "2. Save and exit (or Enter)"
143 echo "3. Exit without saving (or any key)"
251d97ca 144 IFS= read -sn1 c
145 save=n
146 cont=n
147 case "$c" in
148 0|" ")
149 save=y
150 cont=y
151 ;;
152 1)
153 cont=y
154 ;;
2d68de16 155 2|"")
251d97ca 156 save=y
157 ;;
158 esac
159 if [ "$save" = y ]; then
160 echo "$(($ep + 1))" >nextep
161 fi
162 if [ "$cont" = y ]; then
163 exec "${origargs[@]}"
164 fi
165fi