
# shell functions

prompt_command() {
	[ "$TERM" = Eterm ] && /usr/bin/Etbg -scale $HOSTNAME.jpg
}

cddbck() {
	local PAT=$(echo $* | sed 's/ /.*/g')
	grep '^DTITLE=' ~/.cddb/* | grep -i "$PAT" | sed 's/:DTITLE=/ :: /'
}

myrecord() {
	local default=OUT.$(uniq_id).wav
	local fname=${1-$default}
	echo Recording to file $fname...
	rec -c 2 -d /dev/dsp -r 44100 -s w $fname
}

loopmt() { 
	if [ $# != 2 ]; then
		echo "usage: loopmt mount-point iso-file" 1>&2
		return
	fi
	sudo mkdir /mnt/loop/$1 2>/dev/null
	sudo mount -o ro,loop $2 /mnt/loop/$1
}

uloopmt() { 
	if [ $# != 1 ]; then
		echo "usage: uloopmt mount-point" 1>&2
		return
	fi
	sudo umount /mnt/loop/$1
	sudo rmdir /mnt/loop/$1
}

isoloopmt() { 
        for i do
                case "${i,,}" in
                *.iso) base="${i%.*}" ;;
                *.exe) base="${i%.*}" ;;
                *) base=$(apg -n 1 -m 8 -M L) ;;
                esac
                base=${base##*/}
                echo mounting at "$base": "$i"
                sudo mkdir "/mnt/loop/$base" 2>/dev/null
                sudo mount -o ro,loop "$i" "/mnt/loop/$base"
        done
}


davmt() { 
	if [ $# != 2 ]; then
		echo "usage: davmt mount-point iso-file" 1>&2
		return
	fi
	sudo mkdir /mnt/dav/$1 2>/dev/null
	sudo /usr/local/sbin/mount.davfs -o mode=755,uid=500,gid=500,username=jabr,password=silurian $2 /mnt/dav/$1
}

udavmt() { 
	if [ $# != 1 ]; then
		echo "usage: udavmt mount-point" 1>&2
		return
	fi
	sudo umount /mnt/dav/$1
	sudo rmdir /mnt/dav/$1
}

rot13() {
	for i do
		echo = $i =
		tr A-Za-z N-ZA-Mn-za-m < $i
	done
}

e-font() {
	printf '\033]50;#%s\007\r' $1
}

load() {
	local i
	local f
	if [ "$1" = -c ]; then
		xmms-shell -e clear
		shift
	fi
	for i do
		case "$i" in
		/*) f="$i" ;;
		*) f=$(pwd)/"$i" ;;
		esac
		xmms-shell -e "load $f"
	done
}

xcmd() {
	xmms-shell -e "$*"
}

svck() {
	local PAT=$(echo "$*"|sed 's/ /.*/g')
	grep -i "$PAT" /u/video/ALL 
}

epck() {
	local SERIES=$1
	shift
	local PAT=$(echo "$*"|sed 's/ /.*/g')
	find /u/tivo/$SERIES /u/tivo2/$SERIES /mnt/hot/tivo/$SERIES -name '*.mpg' -print 2>/dev/null | grep -i "$PAT"
}


llsort() {
	sort -nr +4
}

wlck() {
	local PAT=$(echo "$@" | sed 's/ /.*/g')
	grep -i "$PAT" /u/epguides/whose-line/guide
}

usage() {
	sudo find "$@" -xdev -type f -ls | awk '{ print $7,$11 }' | sort -nr
}

CDR_DRIVE=/dev/sr0
burn() { 
    local BEFORE=$(date +%s);
    sudo cdrecord -v -eject -speed=8 -dev=$CDR_DRIVE -data $1;
    local AFTER=$(date +%s);
    ~/bin/timecvt $[ $AFTER - $BEFORE ]
}

DVD_DRIVE=/dev/scd0
dvdburn() {
    local BEFORE=$(date +%s);
    growisofs -Z $DVD_DRIVE -R -J -A "data backup - $(date '+%Y-%m-%d %T')" "$@"
    local AFTER=$(date +%s);
    ~/bin/timecvt $[ $AFTER - $BEFORE ]
}

dvdburniso() {
    local BEFORE=$(date +%s);
    growisofs -dvd-compat -Z ${DVD_DRIVE}=$1
    local AFTER=$(date +%s);
    ~/bin/timecvt $[ $AFTER - $BEFORE ]
}

iso() {
	local TMP=/tmp/iso_$$
	mkdir $TMP /tmp/iso
	for i do
		echo = $i =
		local BASE=$(basename $i .mpg)
		ln -s $i $TMP/$i
		mkisofs -f -joliet -rock $TMP > /tmp/iso/$BASE.iso
		rm -f $TMP/$i
	done
	rmdir $TMP
}

twatch() {
	watchme tivo*.mpg tivo*.ty
}

mpcvt() {
	for i do
		local START=$(date +%s)
		local BASE=$(basename $i .mpg)
		mpeg2dec -s -o YUV < $i | 
		yuvkineco -F 4 | 
		mpeg2enc -f 3 -o $BASE.m2v -B 260 -b 1300 -a 2 -I 0 -n n -V 250
		local STOP=$(date +%s)
		/opt/bbtools/bin/bbdmux $i 0xC0 $BASE.mp2
		printf '\n----\n\n'
		echo VIDEO took $[ $STOP - $START ] seconds
	done
}

txcode() {
	for i do
		local BASE=${i%.mpg}
		echo = $i =
		# transcode video
		cat $i | mpeg2dec -s -o YUV | yuvkineco -F 4 | 
		mpeg2enc -f 3 -o $BASE.m2v -B 260 -b 1700 -a 2 -I 0 -n n -V 250
		# extract aduio
		/opt/bbtools/bin/bbdmux $i 0xC0 $BASE.mp2
	done
}

d-txcode1100() {
	for i do
		local BASE=${i%.mpg}
		echo = $i =
		# transcode video
		cat $i | mpeg2dec -s -o YUV | yuvkineco -F 4 | 
		mpeg2enc -f 3 -o $BASE.m2v -B 260 -b 1100 -a 2 -I 0 -n n -V 250
		# extract aduio
		/opt/bbtools/bin/bbdmux $i 0xC0 $BASE.mp2
	done
}

d-txcode1200() {
	for i do
		local BASE=${i%.mpg}
		echo = $i =
		# transcode video
		cat $i | mpeg2dec -s -o YUV | yuvkineco -F 4 | 
		mpeg2enc -f 3 -o $BASE.m2v -B 260 -b 1200 -a 2 -I 0 -n n -V 250
		# extract aduio
		/opt/bbtools/bin/bbdmux $i 0xC0 $BASE.mp2
	done
}

d-txcode1300() {
	for i do
		local BASE=${i%.mpg}
		echo = $i =
		# transcode video
		cat $i | mpeg2dec -s -o YUV | yuvkineco -F 4 | 
		mpeg2enc -f 3 -o $BASE.m2v -B 260 -b 1300 -a 2 -I 0 -n n -V 250
		# extract aduio
		/opt/bbtools/bin/bbdmux $i 0xC0 $BASE.mp2
	done
}

d-txcode1400() {
	for i do
		local BASE=${i%.mpg}
		echo = $i =
		# transcode video
		cat $i | mpeg2dec -s -o YUV | yuvkineco -F 4 | 
		mpeg2enc -f 3 -o $BASE.m2v -B 260 -b 1400 -a 2 -I 0 -n n -V 250
		# extract aduio
		/opt/bbtools/bin/bbdmux $i 0xC0 $BASE.mp2
	done
}

hadean() {
	startx /usr/bin/ssh hadean gnome-session -- :1
}

riven() {
	startx /usr/bin/ssh riven /usr/dt/bin/Xsession -- :2
}

aaplay() {
	mplayer -vo aa -framedrop "$@" 
}

watchlast() {
	clear
	while true
	do
		local F=$(ls -1tr | tail -1)
		watch-once $F /u/tivo/*/$F
		sleep 1
	done
}

showsize() {
	local EPS=$(svlook "$@" | grep ' / ' | wc -l)
	printf '%s: %d episodes - %d GB (30m) or %d GB (1h)\n' $1 $EPS \
		$[ $EPS * 608 / 1024 ] $[ $EPS * 1216 / 1024 ]
}

freshen-rpms() {
	sudo rpm -Fhv "$@"
}

urllist() {
	local -i i

	n=$1
	url=$2

	for (( i=1; i <= n; i++ ))
	do
		printf $url $i
		printf '\n'
	done
}

remove_held() { 
	ssh asgard remove_held
}

mpg2png() {
	for i do
		base=${i%.mpg}
		mkdir $base
		pushd $base
		mplayer -ao null -vo png -zoom -vf pp=lb ../$i
		popd
	done
}

real-play() {
	## url == rtsp://whatever
	mplayer -ovc copy -oac copy -o foo.avi $1
}

imdbget() { 
    for i do
        URL=$( curl -s "$i" | \
		tr '<' '\012' | \
		grep background | \
		grep table | \
		sed -e 's/.*background="//' -e 's/".*//' )
        wget -nv "$URL";
    done
}

fname() {
	echo "$@" | perl -pe 's/%([0-9A-Fa-f]{2})/chr(hex($1))/eg' | tr A-Z a-z | tr -d "'"'/&:!?*' | sed -e 's/ - /\./g' -e 's/ /_/g' -e 's/%20/_/g'
} 

sfname() {
	local S=$(fname "$1"|tr -d ',_!?.')
	shift
	local E=$(fname "$@"|tr -d ',_!?.')
	echo ${S}_${E}
} 

jfname() {
	local PRE=$1
	shift
	echo $PRE."$@".jpg | tr A-Z a-z | tr -d '/&:!?*' | sed 's/ /_/g'
} 

asf2wav() {
        for i do
                local base=${i%.asf}
		echo = $i =
                mplayer -vo null -ao pcm $i
                mv audiodump.wav $base.wav
        done                              
}           

ppp-up() {
	ssh hadean ifup ppp0
}

ppp-down() {
	ssh hadean ifdown ppp0
}

jrotate() {
	for i do
		echo = $i =
		jpegtran -rotate 270 -copy all -outfile $i.tmp $i
	done
}

jcrotate() {
	for i do
		echo = $i =
		jpegtran -rotate 90 -copy all -outfile $i.tmp $i
	done
}

snap-files() {
	local DIR=$(pwd)
	local F
	local i
	local FS
	local POST
	for i do
		case "$i" in
		/*) F="$i" ;;
		*) F="$DIR/$i" ;;
		esac
		FS=$(df "$F" | awk '/^\/dev\// { print $6 }')
		if [ -d "$FS/.snapshot" ]; then
			/bin/ls -1 "$FS"/.snapshot/*/"${F#$FS/}"
			printf '\n\n'
		fi
	done
}

htrm() {
	rm -f $(file *.jpg | egrep 'HTML document|empty' | sed 's/:.*//')
}

tmbgget() {
	wget --http-user=tmbg --http-passwd=thespinesurfs "$@"
}

get-next() {
	for i do
		HI=$(ls | sort -nr | head -1)
		if [ "$HI" == "" ]; then
			HI=0
		fi
		NEW=$[ 1 + $HI ]
		echo = $NEW =
		curl -s --referer "$i" "$i" >$NEW
	done
}

xvlast() {
	xv $( /bin/ls "$@" | tail -2 | head -1 )
}

qget() {
	local URL=$1
	shift
	local BASE=$(echo "$@" | tr A-Z a-z | tr -d '/&:!?*' | sed 's/ /_/g')
	touch 0
	local HI=$[ $(/bin/ls | sort -nr | head -1 | sed 's/\..*//') + 1 ]
	rm -f 0
	curl -s "$URL" > $HI.$BASE
}

hdial() {
	ssh hadean dial.pl "$@"
}

m() {
	mplayer -xy 1280 "$@"
}

cget() {
	local HI
	HI=$[ $( echo 0 * | tr ' ' '\012' | sort -nr | head -1 ) + 1 ]
}

llfind() {
	for i do
		echo = "$i" =
		awk '{ $1=$2=$3=$4=$5=$6=$8=$9=$10="" ; print }' "$i" | 
		sed -e 's/  */ /g' -e 's/^ //' |
		awk '{ n=$1 ; $1="" ; printf "%12d :: %s\n", n, $0 }' 
	done
}

range() {
	local -i lo hi
	if [ $# = 2 ]; then
		lo=$1
		hi=$2
	elif [ $# = 1 ]; then
		lo=1
		hi=$1
	else
		lo=1
		hi=1
	fi

	for (( i=$lo; i<$hi; i++ )) ; do
		printf '%d ' $i
	done
	echo $hi
}

xtitle() { printf '\033]0;%s\007\r' "$*" ; }

vpn() { sudo service openvpn "$@" ; }

get-ssh-agent() {
	local P=$(/bin/ps -o pid,ppid,cmd --no-heading  -C ssh-agent | \
	sed -e 's/  */ /g' -e 's/^ //' -e 's/ /:/g')
	local MYPID=${P%%:*}
	P=${P#*:}
	local MYPPID=${P%%:*}
	P=${P#*:}
	local MYCMD=${P%%:*}
	MYCMD=${MYCMD##*/}

	if [ "$MYCMD" = ssh-agent ]; then
		local F=$(/bin/ls /tmp/ssh-*/agent.$MYPPID)
		echo "export SSH_AUTH_SOCK=$F;"
		echo "export SSH_AGENT_PID=$MYPID;"
	else
		ssh-agent | head -2
	fi
}

tivodelete() {
	for i do
		echo -n wget -O /dev/null ''
		echo "$i" | sed -e 's-/showing/-/deletens/-' -e 's-/11$--'
	done
}

upc-lookup() {
	local ITEMS=/home/jabr/lib/cuecat/upcdatabase.com/items.csv
	local MFRS=/home/jabr/lib/cuecat/upcdatabase.com/mfrs.csv
	local UPC=$1

	if [ "$UPC" = "" ]; then
		echo -n 'Enter UPC code: '
		read UPC
	fi

	grep "$UPC" $ITEMS
}

pvrchan() {
	local CLASS=/sys/class/pvrusb2
	local FREQ=$CLASS/sn-8073200/ctl_frequency
	local TMP=/tmp/.pvrchan.$$
	grep "^$1 : " ~/pvr/CHANNELS-JABR | \
	awk -F: '{ print $2 }' | awk '{ print $1 }' > $TMP
	sudo cp $TMP $FREQ/cur_val
	rm -f $TMP
}

naut() { nautilus --no-desktop --browser "$@" ; }

24x80() {
	seq 100 -1 $(( 2 + $(echo "$PS1" | sed 's/\\n/\n/g' | wc -l) ))
	echo -n '....!...10....!...20....!...30....!...40'
	echo    '....!...50....!...60....!...70....!...80'
}

wlq() { webloc -l -q "$@" ; }

