Checked in rsc.
[utils.git] / planime
... / ...
CommitLineData
1#!/bin/sh
2
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
37origargs=("$0" "$@")
38cmdline=(mplayer -fs)
39
40while [ "${1:0:1}" = - ]; do
41 a="$1"
42 shift
43 case "$a" in
44 -h)
45 echo "usage: planime [-ht] [-s PAR VAL] [NAME-QUAL] [EP|.] [TYPE-QUAL]" >&2
46 exit 0
47 ;;
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
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
77elif [ $# -eq 2 ]; then
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"
87 ep="$2"
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
97fi
98if [ -z "$file" ]; then
99 file="$(findfile "$base - " "$ep" "$qual")"
100fi
101
102if [ -z "$file" -o ! -r "$file" ]; then
103 echo "planime: no matching file found" >&2
104 exit 1
105fi
106
107case "${file##*.}" in
108 ogm)
109 defopts=(-aid 1 -sid 0)
110 ;;
111 mkv)
112 defopts=(-slang eng -alang jpn)
113 ;;
114esac
115
116ifile=".${ep}.info"
117
118if [ -n "$savepar" ]; then
119 if [ -r "$ifile" ]; then
120 egrep -v "^${savepar}:" "$ifile" >"$ifile.new"
121 mv -f "$ifile.new" "$ifile"
122 fi
123 echo "$savepar: $saveval" >>"$ifile"
124 exit 0
125fi
126
127unset delay
128
129if [ -r "$ifile" ]; then
130 delay="$(sed -n 's/delay *: *\([^ ]*\)$/\1/p' <"$ifile")"
131 cmdline=("${cmdline[@]}" -delay "$delay")
132else
133 cmdline=("${cmdline[@]}" "${defopts[@]}")
134fi
135
136if [ "`hostname`" = pc6 ]; then chwp=y; fi
137
138if [ "$chwp" = y ]; then (sleep 2; randomwp) & fi
139"${cmdline[@]}" "$file"
140
141if [ "$nextep" = y ]; then
142 echo "0. Save and continue (or Space)"
143 echo "1. Continue without saving"
144 echo "2. Save and exit (or Enter)"
145 echo "3. Exit without saving (or any key)"
146 IFS= read -sn1 c
147 save=n
148 cont=n
149 case "$c" in
150 0|" ")
151 save=y
152 cont=y
153 ;;
154 1)
155 cont=y
156 ;;
157 2|"")
158 save=y
159 ;;
160 esac
161 if [ "$save" = y ]; then
162 let ep++
163 echo "$ep" >nextep
164 fi
165 if [ "$cont" = y ]; then
166 exec "${origargs[@]}"
167 else
168 echo "nextep is $ep"
169 fi
170fi