Martin Stransky efe9b5
#!/bin/bash
Martin Stransky efe9b5
perex f47b88
SCRIPT_VERSION=0.4.56
perex a657df
CHANGELOG="http://www.alsa-project.org/alsa-info.sh.changelog"
Martin Stransky efe9b5
Martin Stransky efe9b5
#################################################################################
Martin Stransky efe9b5
#Copyright (C) 2007 Free Software Foundation.
Martin Stransky efe9b5
Martin Stransky efe9b5
#This program is free software; you can redistribute it and/or modify
Martin Stransky efe9b5
#it under the terms of the GNU General Public License as published by
Martin Stransky efe9b5
#the Free Software Foundation; either version 2 of the License, or
Martin Stransky efe9b5
#(at your option) any later version.
Martin Stransky efe9b5
Martin Stransky efe9b5
#This program is distributed in the hope that it will be useful,
Martin Stransky efe9b5
#but WITHOUT ANY WARRANTY; without even the implied warranty of
Martin Stransky efe9b5
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Martin Stransky efe9b5
#GNU General Public License for more details.
Martin Stransky efe9b5
Martin Stransky efe9b5
#You should have received a copy of the GNU General Public License
Martin Stransky efe9b5
#along with this program; if not, write to the Free Software
Martin Stransky efe9b5
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
Martin Stransky efe9b5
Martin Stransky efe9b5
##################################################################################
Martin Stransky efe9b5
Martin Stransky efe9b5
#The script was written for 2 main reasons:
Martin Stransky efe9b5
# 1. Remove the need for the devs/helpers to ask several questions before we can easily help the user.
Martin Stransky efe9b5
# 2. Allow newer/inexperienced ALSA users to give us all the info we need to help them.
Martin Stransky efe9b5
perex 568e63
#Set the locale (this may or may not be a good idea.. let me know)
perex 568e63
export LC_ALL=C
perex 568e63
Martin Stransky efe9b5
#Change the PATH variable, so we can run lspci (needed for some distros)
Martin Stransky efe9b5
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
Martin Stransky efe9b5
BGTITLE="ALSA-Info v $SCRIPT_VERSION"
Martin Stransky efe9b5
PASTEBINKEY="C9cRIO8m/9y8Cs0nVs0FraRx7U0pHsuc"
Martin Stransky efe9b5
#Define some simple functions
Martin Stransky efe9b5
perex a657df
pbcheck(){
perex 1e0bef
	if [[ -z $PASTEBIN ]]; then
perex 1e0bef
		[[ $(ping -c1 www.alsa-project.org) ]] || KEEP_FILES="yes" NOUPLOAD="yes" PBERROR="yes"
perex 1e0bef
	else
perex 1e0bef
		[[ $(ping -c1 www.pastebin.ca) ]] || KEEP_FILES="yes" NOUPLOAD="yes" PBERROR="yes"
perex 1e0bef
	fi
perex a657df
}
perex a657df
Martin Stransky efe9b5
update() {
perex 568e63
	SHFILE=`mktemp -p /tmp alsa-info.XXXXXXXXXX`
perex 568e63
	wget -O $SHFILE "http://www.alsa-project.org/alsa-info.sh" >/dev/null 2>&1
perex 568e63
	REMOTE_VERSION=`grep SCRIPT_VERSION $SHFILE |head -n1 |sed 's/.*=//'`
Martin Stransky efe9b5
	if [ "$REMOTE_VERSION" != "$SCRIPT_VERSION" ]; then
Martin Stransky efe9b5
		if [[ -n $DIALOG ]]
Martin Stransky efe9b5
		then
perex 568e63
			OVERWRITE=
perex 681702
			if [ -w $0 ]; then
perex 568e63
				dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to install it?\nNOTICE: The original file $0 will be overwritten!" 0 0
perex 568e63
				DIALOG_EXIT_CODE=$?
perex 568e63
				if [[ $DIALOG_EXIT_CODE = 0 ]]; then
perex 568e63
				  OVERWRITE=yes
perex 568e63
				fi
perex 568e63
			fi
perex 568e63
			if [ -z "$OVERWRITE" ]; then
perex 681702
				dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to download it?" 0 0
perex 568e63
				DIALOG_EXIT_CODE=$?
perex 681702
			fi
Martin Stransky efe9b5
			if [[ $DIALOG_EXIT_CODE = 0 ]]
Martin Stransky efe9b5
			then
perex 681702
				echo "Newer version detected: $REMOTE_VERSION"
Martin Stransky efe9b5
				echo "To view the ChangeLog, please visit $CHANGELOG"
perex 568e63
				if [ "$OVERWRITE" = "yes" ]; then
perex 568e63
					cp $SHFILE $0
perex 681702
					echo "ALSA-Info script has been updated to v $REMOTE_VERSION"
perex 681702
					echo "Please re-run the script"
perex 568e63
					rm $SHFILE 2>/dev/null
perex 681702
				else
perex 568e63
					mv $SHFILE /tmp/alsa-info.sh || exit 1
perex 681702
					echo "ALSA-Info script has been downloaded as /tmp/alsa-info.sh."
perex 681702
					echo "Please re-run the script from new location."
perex 681702
				fi
Martin Stransky efe9b5
				exit
perex 681702
			else
perex 568e63
				rm $SHFILE 2>/dev/null
Martin Stransky efe9b5
			fi
Martin Stransky efe9b5
		else
Martin Stransky efe9b5
			echo "Newer version detected: $REMOTE_VERSION"
Martin Stransky efe9b5
			echo "To view the ChangeLog, please visit $CHANGELOG"
perex 681702
			if [ -w $0 ]; then
perex 568e63
				echo "The original file $0 will be overwritten!"
perex 568e63
				echo -n "If you do not like to proceed, press Ctrl-C now.." ; read inp
perex 568e63
				cp $SHFILE $0
perex 681702
				echo "ALSA-Info script has been updated. Please re-run it."
perex 568e63
				rm $SHFILE 2>/dev/null
perex 681702
			else
perex 568e63
				mv $SHFILE /tmp/alsa-info.sh || exit 1
perex 681702
				echo "ALSA-Info script has been downloaded as /tmp/alsa-info.sh."
perex 681702
				echo "Please, re-run it from new location."
perex 681702
			fi
Martin Stransky efe9b5
			exit
Martin Stransky efe9b5
		fi
perex 681702
	else
perex 568e63
		rm $SHFILE 2>/dev/null
Martin Stransky efe9b5
	fi
Martin Stransky efe9b5
}
Martin Stransky efe9b5
Martin Stransky efe9b5
cleanup() {
perex f47b88
	if [ -n "$TEMPDIR" -a "$KEEP_FILES" != "yes" ]; then
perex f47b88
		rm -r "$TEMPDIR" 2>/dev/null
perex f47b88
	fi
Martin Stransky efe9b5
}
Martin Stransky efe9b5
Martin Stransky efe9b5
Martin Stransky efe9b5
withaplay() {
Martin Stransky efe9b5
        echo "!!Aplay/Arecord output" >> $FILE
Martin Stransky efe9b5
        echo "!!------------" >> $FILE
Martin Stransky efe9b5
        echo "" >> $FILE
Martin Stransky efe9b5
       	echo "APLAY" >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE 
perex a657df
	aplay -l >> $FILE 2>&1
Martin Stransky efe9b5
        echo "" >> $FILE
Martin Stransky efe9b5
       	echo "ARECORD" >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE
perex a657df
	arecord -l >> $FILE 2>&1
Martin Stransky efe9b5
	echo "" >> $FILE
Martin Stransky efe9b5
}
Martin Stransky efe9b5
Martin Stransky efe9b5
withlsmod() {
Martin Stransky efe9b5
	echo "!!All Loaded Modules" >> $FILE
Martin Stransky efe9b5
	echo "!!------------------" >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE
Martin Stransky efe9b5
	lsmod |awk {'print $1'} >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE
Martin Stransky efe9b5
}
Martin Stransky efe9b5
Martin Stransky efe9b5
withamixer() {
Martin Stransky efe9b5
        echo "!!Amixer output" >> $FILE
Martin Stransky efe9b5
        echo "!!-------------" >> $FILE
Martin Stransky efe9b5
        echo "" >> $FILE
Martin Stransky efe9b5
	for i in `grep "]: " /proc/asound/cards | awk -F ' ' '{ print $1} '` ; do
perex 568e63
	CARD_NAME=`grep "^ *$i " $TEMPDIR/alsacards.tmp|awk {'print $2'}`
Martin Stransky efe9b5
	echo "!!-------Mixer controls for card $i $CARD_NAME]" >> $FILE
Martin Stransky efe9b5
	echo "" >>$FILE
perex 1e0bef
	amixer -c$i info>> $FILE 2>&1
perex a657df
	amixer -c$i>> $FILE 2>&1
Martin Stransky efe9b5
        echo "" >> $FILE
Martin Stransky efe9b5
	done
Martin Stransky efe9b5
	echo "" >> $FILE
Martin Stransky efe9b5
}
Martin Stransky efe9b5
Martin Stransky efe9b5
withalsactl() {
Martin Stransky efe9b5
	echo "!!Alsactl output" >> $FILE
Martin Stransky efe9b5
        echo "!!-------------" >> $FILE
Martin Stransky efe9b5
        echo "" >> $FILE
Martin Stransky efe9b5
        exe=""
Martin Stransky efe9b5
        if [ -x /usr/sbin/alsactl ]; then
Martin Stransky efe9b5
        	exe="/usr/sbin/alsactl"
Martin Stransky efe9b5
        fi
Martin Stransky efe9b5
        if [ -x /usr/local/sbin/alsactl ]; then
Martin Stransky efe9b5
        	exe="/usr/local/sbin/alsactl"
Martin Stransky efe9b5
        fi
Martin Stransky efe9b5
        if [ -z "$exe" ]; then
Martin Stransky efe9b5
        	exe=`whereis alsactl | cut -d ' ' -f 2`
Martin Stransky efe9b5
        fi
perex 568e63
	$exe -f $TEMPDIR/alsactl.tmp store
Martin Stransky efe9b5
	echo "--startcollapse--" >> $FILE
perex 568e63
	cat $TEMPDIR/alsactl.tmp >> $FILE
Martin Stransky efe9b5
	echo "--endcollapse--" >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE
Martin Stransky efe9b5
}
Martin Stransky efe9b5
Martin Stransky efe9b5
withdevices() {
Martin Stransky efe9b5
        echo "!!ALSA Device nodes" >> $FILE
Martin Stransky efe9b5
        echo "!!-----------------" >> $FILE
Martin Stransky efe9b5
        echo "" >> $FILE
Martin Stransky efe9b5
        ls -la /dev/snd/* >> $FILE
Martin Stransky efe9b5
        echo "" >> $FILE
Martin Stransky efe9b5
        echo "" >> $FILE
Martin Stransky efe9b5
}
Martin Stransky efe9b5
Martin Stransky efe9b5
withconfigs() {
Martin Stransky efe9b5
if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]] || [[ -e $HOME/.asoundrc.asoundconf ]]
Martin Stransky efe9b5
then
Martin Stransky efe9b5
        echo "!!ALSA configuration files" >> $FILE
Martin Stransky efe9b5
        echo "!!------------------------" >> $FILE
Martin Stransky efe9b5
        echo "" >> $FILE
Martin Stransky efe9b5
Martin Stransky efe9b5
        #Check for ~/.asoundrc
Martin Stransky efe9b5
        if [[ -e $HOME/.asoundrc ]]
Martin Stransky efe9b5
        then
Martin Stransky efe9b5
                echo "!!User specific config file (~/.asoundrc)" >> $FILE
Martin Stransky efe9b5
                echo "" >> $FILE
Martin Stransky efe9b5
                cat $HOME/.asoundrc >> $FILE
Martin Stransky efe9b5
                echo "" >> $FILE
Martin Stransky efe9b5
                echo "" >> $FILE
Martin Stransky efe9b5
        fi
Martin Stransky efe9b5
	#Check for .asoundrc.asoundconf (seems to be Ubuntu specific)
Martin Stransky efe9b5
	if [[ -e $HOME/.asoundrc.asoundconf ]]
Martin Stransky efe9b5
	then
Martin Stransky efe9b5
		echo "!!asoundconf-generated config file" >> $FILE
Martin Stransky efe9b5
		echo "" >> $FILE
Martin Stransky efe9b5
		cat $HOME/.asoundrc.asoundconf >> $FILE
Martin Stransky efe9b5
		echo "" >> $FILE
Martin Stransky efe9b5
		echo "" >> $FILE
Martin Stransky efe9b5
	fi
Martin Stransky efe9b5
        #Check for /etc/asound.conf
Martin Stransky efe9b5
        if [[ -e /etc/asound.conf ]]
Martin Stransky efe9b5
        then
Martin Stransky efe9b5
                echo "!!System wide config file (/etc/asound.conf)" >> $FILE
Martin Stransky efe9b5
                echo "" >> $FILE
Martin Stransky efe9b5
                cat /etc/asound.conf >> $FILE
Martin Stransky efe9b5
                echo "" >> $FILE
Martin Stransky efe9b5
                echo "" >> $FILE
Martin Stransky efe9b5
        fi
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
}
Martin Stransky efe9b5
perex f47b88
withsysfs() {
perex f47b88
    local i f
perex f47b88
    local printed=""
perex f47b88
    for i in /sys/class/sound/*; do
perex f47b88
	case "$i" in
perex f47b88
	    */hwC?D?)
perex f47b88
		if [ -f $i/init_pin_configs ]; then
perex f47b88
		    if [ -z "$printed" ]; then
perex f47b88
			echo "!!Sysfs Files" >> $FILE
perex f47b88
			echo "!!-----------" >> $FILE
perex f47b88
			echo "" >> $FILE
perex f47b88
		    fi
perex f47b88
		    for f in init_pin_configs driver_pin_configs user_pin_configs init_verbs; do
perex f47b88
			echo "$i/$f:" >> $FILE
perex f47b88
			cat $i/$f >> $FILE
perex f47b88
			echo >> $FILE
perex f47b88
		    done
perex f47b88
		    printed=yes
perex f47b88
		fi
perex f47b88
		;;
perex f47b88
	    esac
perex f47b88
    done
perex f47b88
    if [ -n "$printed" ]; then
perex f47b88
	echo "" >> $FILE
perex f47b88
    fi
perex f47b88
}
perex f47b88
perex f47b88
get_alsa_library_version() {
perex f47b88
	ALSA_LIB_VERSION=`grep VERSION_STR /usr/include/alsa/version.h 2>/dev/null|awk {'print $3'}|sed 's/"//g'`
perex f47b88
perex f47b88
	if [ -z "$ALSA_LIB_VERSION" ]; then
perex f47b88
		if [ -f /etc/lsb-release ]; then
perex f47b88
			. /etc/lsb-release
perex f47b88
			case "$DISTRIB_ID" in
perex f47b88
				Ubuntu)
perex f47b88
					if which dpkg > /dev/null ; then
perex f47b88
						ALSA_LIB_VERSION=`dpkg -l libasound2 | tail -1 | awk '{print $3}' | cut -f 1 -d -`
perex f47b88
					fi
perex f47b88
perex f47b88
					if [ "$ALSA_LIB_VERSION" = "<none>" ]; then
perex f47b88
						ALSA_LIB_VERSION=""
perex f47b88
					fi
perex f47b88
					return
perex f47b88
					;;
perex f47b88
				*)
perex f47b88
					return
perex f47b88
					;;
perex f47b88
			esac
perex f47b88
		elif [ -f /etc/debian_version ]; then
perex f47b88
			if which dpkg > /dev/null ; then
perex f47b88
				ALSA_LIB_VERSION=`dpkg -l libasound2 | tail -1 | awk '{print $3}' | cut -f 1 -d -`
perex f47b88
			fi
perex f47b88
perex f47b88
			if [ "$ALSA_LIB_VERSION" = "<none>" ]; then
perex f47b88
				ALSA_LIB_VERSION=""
perex f47b88
			fi
perex f47b88
			return
perex f47b88
		fi
perex f47b88
	fi
perex f47b88
}
perex f47b88
Martin Stransky efe9b5
Martin Stransky efe9b5
#Run checks to make sure the programs we need are installed.
Martin Stransky efe9b5
LSPCI=$(which lspci 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null);
Martin Stransky efe9b5
TPUT=$(which tput 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null);
Martin Stransky efe9b5
DIALOG=$(which dialog 2>/dev/null | sed 's|^[^/]*||' 2>/dev/null);
Martin Stransky efe9b5
Martin Stransky efe9b5
#Check to see if sysfs is enabled in the kernel. We'll need this later on
Martin Stransky efe9b5
SYSFS=$(mount |grep sysfs|awk {'print $3'});
Martin Stransky efe9b5
Martin Stransky efe9b5
#Check modprobe config files for sound related options
Martin Stransky efe9b5
SNDOPTIONS=$(modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p')
Martin Stransky efe9b5
perex 1e0bef
PASTEBIN=""
perex 1e0bef
WWWSERVICE="www.alsa-project.org"
Martin Stransky efe9b5
QUESTION="yes"
Martin Stransky efe9b5
PROCEED="yes"
Martin Stransky efe9b5
REPEAT=""
Martin Stransky efe9b5
while [ -z "$REPEAT" ]; do
Martin Stransky efe9b5
REPEAT="no"
Martin Stransky efe9b5
case "$1" in
Martin Stransky efe9b5
	--update|--help|--about)
Martin Stransky efe9b5
		QUESTION="no"
Martin Stransky efe9b5
		PROCEED="no"
Martin Stransky efe9b5
		;;
Martin Stransky efe9b5
	--no-upload)
Martin Stransky efe9b5
		NOUPLOAD="yes"
Martin Stransky efe9b5
		;;
perex 1e0bef
	--pastebin)
perex 1e0bef
		PASTEBIN="yes"
perex 1e0bef
		WWWSERVICE="pastebin"
perex 1e0bef
		;;
Martin Stransky efe9b5
	--no-dialog)
Martin Stransky efe9b5
		DIALOG=""
Martin Stransky efe9b5
		REPEAT=""
Martin Stransky efe9b5
		shift
Martin Stransky efe9b5
		;;
perex f47b88
	--stdout)
perex f47b88
		DIALOG=""
perex f47b88
		NOUPLOAD="yes"
perex f47b88
		QUESTION="no"
perex f47b88
		TOSTDOUT="yes"
perex f47b88
		;;
Martin Stransky efe9b5
esac
Martin Stransky efe9b5
done
Martin Stransky efe9b5
		
Martin Stransky efe9b5
Martin Stransky efe9b5
#Script header output.
Martin Stransky efe9b5
if [ "$QUESTION" = "yes" ]; then
Martin Stransky efe9b5
if [[ -n "$DIALOG" ]]
Martin Stransky efe9b5
then
perex a657df
if [ -z "$NOUPLOAD" ]; then
perex 1e0bef
	dialog --backtitle "$BGTITLE" --title "ALSA-Info script v $SCRIPT_VERSION" --yesno "\nThis script will collect information about your ALSA installation and sound related hardware, to help diagnose your problem\n\nBy default, this script will AUTOMATICALLY UPLOAD your information to a $WWWSERVICE site.\n\nSee $0 --help for options\n\nDo you want to run this script?" 0 0
Martin Stransky efe9b5
else
Martin Stransky efe9b5
	dialog --backtitle "$BGTITLE" --title "ALSA-Info script v $SCRIPT_VERSION" --yesno "\nThis script will collect information about your ALSA installation and sound related hardware, to help diagnose your problem\n\nSee $0 --help for options\n\nDo you want to run this script?" 0 0
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
DIALOG_EXIT_CODE=$?
Martin Stransky efe9b5
if [ $DIALOG_EXIT_CODE != 0 ]; then
Martin Stransky efe9b5
echo "Thank you for using the ALSA-Info Script"
Martin Stransky efe9b5
exit 0;
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
else
Martin Stransky efe9b5
Martin Stransky efe9b5
echo "ALSA Information Script v $SCRIPT_VERSION"
Martin Stransky efe9b5
echo "--------------------------------"
Martin Stransky efe9b5
echo ""
Martin Stransky efe9b5
echo "This script will collect information about your ALSA installation and sound related hardware, to help diagnose your problem."
Martin Stransky efe9b5
echo ""
Martin Stransky efe9b5
if [ -z "$NOUPLOAD" ]; then
Martin Stransky efe9b5
if [[ -n "$TPUT" ]]; then
Martin Stransky efe9b5
tput bold
perex 1e0bef
echo "By default, the collected information will be AUTOMATICALLY uploaded to a $WWWSERVICE site."
Martin Stransky efe9b5
echo "If you do not wish for this to occur, run the script with the --no-upload argument"
Martin Stransky efe9b5
tput sgr0
Martin Stransky efe9b5
else
perex 1e0bef
echo "By default, the collected information will be AUTOMATICALLY uploaded to a $WWWSERVICE site."
Martin Stransky efe9b5
echo "If you do not wish for this to occur, run the script with the --no-upload argument"
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
echo ""
Martin Stransky efe9b5
fi # NOUPLOAD
Martin Stransky efe9b5
echo -n "Do you want to run this script? [y/n] : "
Martin Stransky efe9b5
read -e CONFIRM
Martin Stransky efe9b5
if [ "$CONFIRM" != "y" ]; then
Martin Stransky efe9b5
echo ""
Martin Stransky efe9b5
echo "Thank you for using the ALSA-Info Script"
Martin Stransky efe9b5
exit 0;
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
fi # question
Martin Stransky efe9b5
Martin Stransky efe9b5
#Set the output file
perex 568e63
TEMPDIR=`mktemp -p /tmp -d alsa-info.XXXXXXXXXX`
perex 568e63
FILE="$TEMPDIR/alsa-info.txt"
perex 568e63
NFILE="/tmp/alsa-info.txt"
Martin Stransky efe9b5
perex f47b88
trap cleanup 0
perex f47b88
Martin Stransky efe9b5
if [ "$PROCEED" = "yes" ]; then
Martin Stransky efe9b5
Martin Stransky efe9b5
if [[ -z "$LSPCI" ]] 
perex f47b88
then
Martin Stransky efe9b5
	echo "This script requires lspci. Please install it, and re-run this script."
perex f47b88
	exit 0
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
Martin Stransky efe9b5
#Create the temporary work dir.
Martin Stransky efe9b5
mkdir $TEMPDIR 2>/dev/null
Martin Stransky efe9b5
Martin Stransky efe9b5
#Fetch the info and store in temp files/variables
perex a657df
DISTRO=`grep -ihs "buntu\|SUSE\|Fedora\|PCLinuxOS\|MEPIS\|Mandriva\|Debian\|Damn\|Sabayon\|Slackware\|KNOPPIX\|Gentoo\|Zenwalk\|Mint\|Kubuntu\|FreeBSD\|Puppy\|Freespire\|Vector\|Dreamlinux\|CentOS\|Arch\|Xandros\|Elive\|SLAX\|Red\|BSD\|KANOTIX\|Nexenta\|Foresight\|GeeXboX\|Frugalware\|64\|SystemRescue\|Novell\|Solaris\|BackTrack\|KateOS\|Pardus" /etc/{issue,*release,*version}`
Martin Stransky efe9b5
KERNEL_VERSION=`uname -r`
Martin Stransky efe9b5
KERNEL_PROCESSOR=`uname -p`
Martin Stransky efe9b5
KERNEL_MACHINE=`uname -m`
Martin Stransky efe9b5
KERNEL_OS=`uname -o`
Martin Stransky efe9b5
[[ `uname -v |grep SMP`  ]] && KERNEL_SMP="Yes" || KERNEL_SMP="No" 
Martin Stransky efe9b5
ALSA_DRIVER_VERSION=`cat /proc/asound/version |head -n1|awk {'print $7'} |sed 's/\.$//'`
perex f47b88
get_alsa_library_version
Martin Stransky efe9b5
ALSA_UTILS_VERSION=`amixer -v |awk {'print $3'}`
perex 568e63
VENDOR_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $3}'|awk {'print substr($0, 2);}' >$TEMPDIR/vendor_id.tmp`
perex 568e63
DEVICE_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $4}'|awk {'print $1'} >$TEMPDIR/device_id.tmp`
Martin Stransky efe9b5
LAST_CARD=$((`grep "]: " /proc/asound/cards | wc -l` - 1 ))
perex 568e63
perex 568e63
ESDINST=$(which esd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
perex 568e63
PAINST=$(which pulseaudio 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
perex 568e63
ARTSINST=$(which artsd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
perex f47b88
JACKINST=$(which jackd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
perex 568e63
perex 568e63
cat /proc/asound/modules 2>/dev/null|awk {'print $2'}>$TEMPDIR/alsamodules.tmp
perex 568e63
cat /proc/asound/cards >$TEMPDIR/alsacards.tmp
perex 568e63
lspci |grep -i "multi\|audio">$TEMPDIR/lspci.tmp
Martin Stransky efe9b5
Martin Stransky efe9b5
#Check for HDA-Intel cards codec#*
perex 568e63
cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null
Martin Stransky efe9b5
Martin Stransky efe9b5
#Check for AC97 cards codec
perex 568e63
cat /proc/asound/card*/codec97\#0/ac97\#0-0 > $TEMPDIR/alsa-ac97.tmp 2> /dev/null
perex 568e63
cat /proc/asound/card*/codec97\#0/ac97\#0-0+regs > $TEMPDIR/alsa-ac97-regs.tmp 2> /dev/null
Martin Stransky efe9b5
Martin Stransky efe9b5
#Fetch the info, and put it in $FILE in a nice readable format.
perex 1e0bef
if [[ -z $PASTEBIN ]]; then
perex 1e0bef
echo "upload=true&script=true&cardinfo=" > $FILE
perex 1e0bef
else
Martin Stransky efe9b5
echo "name=$USER&type=33&description=/tmp/alsa-info.txt&expiry=&s=Submit+Post&content=" > $FILE
perex 1e0bef
fi
Martin Stransky efe9b5
echo "!!################################" >> $FILE
Martin Stransky efe9b5
echo "!!ALSA Information Script v $SCRIPT_VERSION" >> $FILE
Martin Stransky efe9b5
echo "!!################################" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
perex 568e63
echo "!!Script ran on: `LANG=C TZ=UTC date`" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "!!Linux Distribution" >> $FILE
Martin Stransky efe9b5
echo "!!------------------" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo $DISTRO >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "!!Kernel Information" >> $FILE
Martin Stransky efe9b5
echo "!!------------------" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "Kernel release:    $KERNEL_VERSION" >> $FILE
Martin Stransky efe9b5
echo "Operating System:  $KERNEL_OS" >> $FILE
Martin Stransky efe9b5
echo "Architecture:      $KERNEL_MACHINE" >> $FILE
Martin Stransky efe9b5
echo "Processor:         $KERNEL_PROCESSOR" >> $FILE
Martin Stransky efe9b5
echo "SMP Enabled:       $KERNEL_SMP" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "!!ALSA Version" >> $FILE
Martin Stransky efe9b5
echo "!!------------" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "Driver version:     $ALSA_DRIVER_VERSION" >> $FILE
Martin Stransky efe9b5
echo "Library version:    $ALSA_LIB_VERSION" >> $FILE
Martin Stransky efe9b5
echo "Utilities version:  $ALSA_UTILS_VERSION" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "!!Loaded ALSA modules" >> $FILE
Martin Stransky efe9b5
echo "!!-------------------" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
perex 568e63
cat $TEMPDIR/alsamodules.tmp >> $FILE
perex 568e63
echo "" >> $FILE
perex 568e63
echo "" >> $FILE
perex 568e63
echo "!!Sound Servers on this system" >> $FILE
perex 568e63
echo "!!----------------------------" >> $FILE
perex 568e63
echo "" >> $FILE
perex 568e63
if [[ -n $PAINST ]];then
perex f47b88
[[ `pgrep '^(.*/)?pulseaudio$'` ]] && PARUNNING="Yes" || PARUNNING="No"
perex 568e63
echo "Pulseaudio:" >> $FILE
perex 568e63
echo "      Installed - Yes ($PAINST)" >> $FILE
perex 568e63
echo "      Running - $PARUNNING" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
perex 568e63
fi
perex 568e63
if [[ -n $ESDINST ]];then
perex f47b88
[[ `pgrep '^(.*/)?esd$'` ]] && ESDRUNNING="Yes" || ESDRUNNING="No"
perex 568e63
echo "ESound Daemon:" >> $FILE
perex 568e63
echo "      Installed - Yes ($ESDINST)" >> $FILE
perex 568e63
echo "      Running - $ESDRUNNING" >> $FILE
perex 568e63
echo "" >> $FILE
perex 568e63
fi
perex 568e63
if [[ -n $ARTSINST ]];then
perex f47b88
[[ `pgrep '^(.*/)?artsd$'` ]] && ARTSRUNNING="Yes" || ARTSRUNNING="No"
perex 568e63
echo "aRts:" >> $FILE
perex 568e63
echo "      Installed - Yes ($ARTSINST)" >> $FILE
perex 568e63
echo "      Running - $ARTSRUNNING" >> $FILE
perex 568e63
echo "" >> $FILE
perex 568e63
fi
perex f47b88
if [[ -n $JACKINST ]];then
perex f47b88
[[ `pgrep '^(.*/)?jackd$'` ]] && JACKRUNNING="Yes" || JACKRUNNING="No"
perex f47b88
echo "Jack:" >> $FILE
perex f47b88
echo "      Installed - Yes ($JACKINST)" >> $FILE
perex f47b88
echo "      Running - $JACKRUNNING" >> $FILE
perex f47b88
echo "" >> $FILE
perex f47b88
fi
perex f47b88
if [[ -z "$PAINST" && -z "$ESDINST" && -z "$ARTSINST" && -z "$JACKINST" ]];then
perex 568e63
echo "No sound servers found." >> $FILE
perex 568e63
echo "" >> $FILE
perex 568e63
fi
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "!!Soundcards recognised by ALSA" >> $FILE
Martin Stransky efe9b5
echo "!!-----------------------------" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
perex 568e63
cat $TEMPDIR/alsacards.tmp >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "!!PCI Soundcards installed in the system" >> $FILE
Martin Stransky efe9b5
echo "!!--------------------------------------" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
perex 568e63
cat $TEMPDIR/lspci.tmp >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "!!Advanced information - PCI Vendor/Device/Susbsystem ID's" >> $FILE
Martin Stransky efe9b5
echo "!!--------------------------------------------------------" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
lspci -vvn |grep -A1 040[1-3] >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
Martin Stransky efe9b5
if [ "$SNDOPTIONS" ]
Martin Stransky efe9b5
then
Martin Stransky efe9b5
echo "!!Modprobe options (Sound related)" >> $FILE
Martin Stransky efe9b5
echo "!!--------------------------------" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p' >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
perex 681702
if [ -d "$SYSFS" ]
Martin Stransky efe9b5
then
Martin Stransky efe9b5
echo "!!Loaded sound module options" >> $FILE
Martin Stransky efe9b5
echo "!!--------------------------" >> $FILE
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
for mod in `cat /proc/asound/modules|awk {'print $2'}`;do
Martin Stransky efe9b5
echo "!!Module: $mod" >> $FILE
Martin Stransky efe9b5
for params in `ls $SYSFS/module/$mod/parameters/*`; do /bin/echo -ne "\t";/bin/echo "$params : `cat $params`"|sed 's:.*/::' >> $FILE;done
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
done
Martin Stransky efe9b5
echo "" >> $FILE
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
perex 568e63
if [ -s "$TEMPDIR/alsa-hda-intel.tmp" ] 
Martin Stransky efe9b5
then
Martin Stransky efe9b5
	echo "!!HDA-Intel Codec information" >> $FILE
Martin Stransky efe9b5
	echo "!!---------------------------" >> $FILE
Martin Stransky efe9b5
	echo "--startcollapse--" >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE
perex 568e63
	cat $TEMPDIR/alsa-hda-intel.tmp >> $FILE
Martin Stransky efe9b5
	echo "--endcollapse--" >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
perex 568e63
if [ -s "$TEMPDIR/alsa-ac97.tmp" ]
Martin Stransky efe9b5
then
Martin Stransky efe9b5
        echo "!!AC97 Codec information" >> $FILE
Martin Stransky efe9b5
        echo "!!---------------------------" >> $FILE
Martin Stransky efe9b5
        echo "--startcollapse--" >> $FILE
Martin Stransky efe9b5
        echo "" >> $FILE
perex 568e63
        cat $TEMPDIR/alsa-ac97.tmp >> $FILE
Martin Stransky efe9b5
        echo "" >> $FILE
perex 568e63
        cat $TEMPDIR/alsa-ac97-regs.tmp >> $FILE
Martin Stransky efe9b5
        echo "--endcollapse--" >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE
Martin Stransky efe9b5
	echo "" >> $FILE
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
Martin Stransky efe9b5
Martin Stransky efe9b5
#If no command line options are specified, then run as though --with-all was specified
Martin Stransky efe9b5
if [[ -z "$1" ]]
Martin Stransky efe9b5
then
Martin Stransky efe9b5
	update
Martin Stransky efe9b5
	withdevices
Martin Stransky efe9b5
	withconfigs
Martin Stransky efe9b5
	withaplay
Martin Stransky efe9b5
	withamixer
Martin Stransky efe9b5
	withalsactl
Martin Stransky efe9b5
	withlsmod
perex a657df
	pbcheck	
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
Martin Stransky efe9b5
fi # proceed
Martin Stransky efe9b5
Martin Stransky efe9b5
#loop through command line arguments, until none are left.
Martin Stransky efe9b5
if [[ -n "$1" ]]
Martin Stransky efe9b5
then
Martin Stransky efe9b5
	until [ -z "$1" ]
Martin Stransky efe9b5
	do
Martin Stransky efe9b5
	case "$1" in
perex 1e0bef
		--pastebin)
perex 1e0bef
		        update
perex 1e0bef
        		withdevices
perex 1e0bef
        		withconfigs
perex 1e0bef
        		withaplay
perex 1e0bef
        		withamixer
perex 1e0bef
        		withalsactl
perex 1e0bef
        		withlsmod
perex f47b88
			withsysfs
perex 1e0bef
        		pbcheck
perex 1e0bef
			;;
Martin Stransky efe9b5
		--update)
Martin Stransky efe9b5
			update
Martin Stransky efe9b5
			exit
Martin Stransky efe9b5
			;;
Martin Stransky efe9b5
		--no-upload)
Martin Stransky efe9b5
			NOUPLOAD="yes"
Martin Stransky efe9b5
			withdevices
Martin Stransky efe9b5
			withconfigs
Martin Stransky efe9b5
			withaplay
Martin Stransky efe9b5
			withamixer
Martin Stransky efe9b5
			withalsactl
Martin Stransky efe9b5
			withlsmod
perex f47b88
			withsysfs
Martin Stransky efe9b5
			;;
Martin Stransky efe9b5
		--debug)
Martin Stransky efe9b5
			echo "Debugging enabled. $FILE and $TEMPDIR will not be deleted"
Martin Stransky efe9b5
			KEEP_FILES="yes"
Martin Stransky efe9b5
			echo ""
Martin Stransky efe9b5
			withdevices
Martin Stransky efe9b5
			withconfigs
Martin Stransky efe9b5
			withaplay
Martin Stransky efe9b5
			withamixer
Martin Stransky efe9b5
			withalsactl
Martin Stransky efe9b5
			withlsmod
perex f47b88
			withsysfs
Martin Stransky efe9b5
			;;
Martin Stransky efe9b5
		--with-all)
Martin Stransky efe9b5
			withdevices
Martin Stransky efe9b5
			withconfigs
Martin Stransky efe9b5
			withaplay
Martin Stransky efe9b5
			withamixer
Martin Stransky efe9b5
			withalsactl
Martin Stransky efe9b5
			withlsmod
perex f47b88
			withsysfs
Martin Stransky efe9b5
			;;
Martin Stransky efe9b5
		--with-aplay)
Martin Stransky efe9b5
			withaplay
Martin Stransky efe9b5
			;;
Martin Stransky efe9b5
		--with-amixer)
Martin Stransky efe9b5
			withamixer
Martin Stransky efe9b5
			;;
Martin Stransky efe9b5
		--with-alsactl)
Martin Stransky efe9b5
			withalsactl
Martin Stransky efe9b5
			;;
Martin Stransky efe9b5
		--with-devices)
Martin Stransky efe9b5
			withdevices
Martin Stransky efe9b5
			;;
Martin Stransky efe9b5
		--with-configs)
Martin Stransky efe9b5
			if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]]
Martin Stransky efe9b5
			then
Martin Stransky efe9b5
				echo "!!ALSA configuration files" >> $FILE
Martin Stransky efe9b5
				echo "!!------------------------" >> $FILE
Martin Stransky efe9b5
				echo "" >> $FILE
Martin Stransky efe9b5
Martin Stransky efe9b5
				#Check for ~/.asoundrc
Martin Stransky efe9b5
				if [[ -e $HOME/.asoundrc ]]
Martin Stransky efe9b5
				then
Martin Stransky efe9b5
					echo "!!User specific config file ($HOME/.asoundrc)" >> $FILE
Martin Stransky efe9b5
					echo "" >> $FILE
Martin Stransky efe9b5
					cat $HOME/.asoundrc >> $FILE
Martin Stransky efe9b5
					echo "" >> $FILE
Martin Stransky efe9b5
					echo "" >> $FILE
Martin Stransky efe9b5
				fi
Martin Stransky efe9b5
Martin Stransky efe9b5
				#Check for /etc/asound.conf
Martin Stransky efe9b5
				if [[ -e /etc/asound.conf ]]
Martin Stransky efe9b5
				then
Martin Stransky efe9b5
					echo "!!System wide config file (/etc/asound.conf)" >> $FILE
Martin Stransky efe9b5
					echo "" >> $FILE
Martin Stransky efe9b5
					cat /etc/asound.conf >> $FILE
Martin Stransky efe9b5
					echo "" >> $FILE
Martin Stransky efe9b5
					echo "" >> $FILE
Martin Stransky efe9b5
				fi
Martin Stransky efe9b5
			fi
Martin Stransky efe9b5
			;;
perex f47b88
		--stdout)
perex f47b88
			NOUPLOAD="yes"
perex f47b88
			withdevices
perex f47b88
			withconfigs
perex f47b88
			withaplay
perex f47b88
			withamixer
perex f47b88
			withalsactl
perex f47b88
			withlsmod
perex f47b88
			cat $FILE
perex f47b88
			rm $FILE
perex f47b88
			;;
Martin Stransky efe9b5
		--about)
Martin Stransky efe9b5
			echo "Written/Tested by the following users of #alsa on irc.freenode.net:"
Martin Stransky efe9b5
			echo ""
Martin Stransky efe9b5
			echo "	wishie - Script author and developer / Testing"
Martin Stransky efe9b5
			echo "	crimsun - Various script ideas / Testing"
Martin Stransky efe9b5
			echo "	gnubien - Various script ideas / Testing"
Martin Stransky efe9b5
			echo "	GrueMaster - HDA Intel specific items / Testing"
Martin Stransky efe9b5
			echo "	olegfink - Script update function"
perex f47b88
			echo "  TheMuso - display to stdout functionality"
Martin Stransky efe9b5
			exit 0
Martin Stransky efe9b5
			;;
Martin Stransky efe9b5
		*)
perex 1e0bef
			echo "alsa-info.sh version $SCRIPT_VERSION"
Martin Stransky efe9b5
			echo ""
Martin Stransky efe9b5
			echo "Available options:"
Martin Stransky efe9b5
			echo "	--with-aplay (includes the output of aplay -l)"
Martin Stransky efe9b5
			echo "	--with-amixer (includes the output of amixer)"
Martin Stransky efe9b5
			echo "	--with-alsactl (includes the output of alsactl)"
perex 1e0bef
			echo "	--with-configs (includes the output of ~/.asoundrc and"
perex 1e0bef
			echo "	    /etc/asound.conf if they exist)" 
Martin Stransky efe9b5
			echo "	--with-devices (shows the device nodes in /dev/snd/)"
Martin Stransky efe9b5
			echo ""
Martin Stransky efe9b5
			echo "	--update (check server for script updates)"
Martin Stransky efe9b5
			echo "	--no-upload (do not upload contents to remote server)"
perex 1e0bef
			echo "	--pastebin (use http://pastebin.ca) as remote server"
perex 1e0bef
			echo "	    instead www.alsa-project.org"
perex f47b88
			echo "  --stdout (print alsa information to standard output"
perex f47b88
			echo "      instead of a file)"
Martin Stransky efe9b5
			echo "	--about (show some information about the script)"
perex 1e0bef
			echo "	--debug (will run the script as normal, but will not"
perex 1e0bef
			echo "	     delete $FILE)"
Martin Stransky efe9b5
			exit 0
Martin Stransky efe9b5
			;;
Martin Stransky efe9b5
	esac
Martin Stransky efe9b5
	shift 1
Martin Stransky efe9b5
	done
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
perex f47b88
if [ "$PROCEED" = "no" ]; then
perex f47b88
	exit 1
perex f47b88
fi
perex f47b88
perex f47b88
if [ -n "$NOUPLOAD" ]; then
perex f47b88
perex f47b88
	if [ -z "$TOSTDOUT" ]; then
perex f47b88
		mv $FILE $NFILE || exit 1
perex f47b88
	fi
perex f47b88
perex f47b88
	if [[ -n $DIALOG ]]
perex f47b88
	then
perex f47b88
		if [[ -n $PBERROR ]]; then
perex f47b88
			dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "An error occurred while contacting the $WWWSERVICE. Your information was NOT automatically uploaded.\n\nYour ALSA information can be seen by looking in $NFILE" 10 100
perex f47b88
		else
perex f47b88
			dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "You requested that your information was NOT automatically uploaded to the $WWWSERVICE\n\nYour ALSA information can be seen by looking in $NFILE" 10 100
perex f47b88
		fi
perex f47b88
	else
perex f47b88
		echo
perex f47b88
perex f47b88
		if [[ -n $PBERROR ]]; then
perex f47b88
			echo "An error occurred while contacting the $WWWSERVICE. Your information was NOT automatically uploaded."
perex f47b88
			echo ""
perex f47b88
			echo "Your ALSA information can be seen by looking in $NFILE"
perex f47b88
			echo ""
perex f47b88
		else
perex f47b88
			if [ -z "$TOSTDOUT" ]; then
perex f47b88
				echo "You requested that your information was NOT automatically uploaded to the $WWWSERVICE"
perex f47b88
				echo ""
perex f47b88
				echo "Your ALSA information can be seen by looking in $NFILE"
perex f47b88
				echo ""
perex f47b88
			fi
perex f47b88
		fi
perex f47b88
	fi
perex f47b88
perex f47b88
	exit
perex f47b88
perex f47b88
fi # noupload
Martin Stransky efe9b5
Martin Stransky efe9b5
#Test that wget is installed, and supports --post-file. Upload $FILE if it does, and prompt user to upload file if it doesnt. 
Martin Stransky efe9b5
if
Martin Stransky efe9b5
WGET=$(which wget 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null); [[ -n "${WGET}" ]] && [[ -x "${WGET}" ]] && [[ `wget --help |grep post-file` ]]
Martin Stransky efe9b5
then
perex f47b88
perex f47b88
if [[ -n $DIALOG ]]
Martin Stransky efe9b5
then
perex f47b88
perex f47b88
if [[ -z $PASTEBIN ]]; then
perex 568e63
	wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://www.alsa-project.org/cardinfo-db/" &>$TEMPDIR/wget.tmp || echo "Upload failed; exit"
perex 1e0bef
	{ for i in 10 20 30 40 50 60 70 80 90; do
perex 1e0bef
		echo $i
perex 1e0bef
		sleep 0.2
perex 1e0bef
	done
perex 1e0bef
	echo; } |dialog --backtitle "$BGTITLE" --guage "Uploading information to www.alsa-project.org ..." 6 70 0
perex f47b88
else
perex 568e63
	wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY&encrypt=t&encryptpw=blahblah" &>$TEMPDIR/wget.tmp || echo "Upload failed; exit"
Martin Stransky efe9b5
	{ for i in 10 20 30 40 50 60 70 80 90; do
Martin Stransky efe9b5
		echo $i
Martin Stransky efe9b5
		sleep 0.2
Martin Stransky efe9b5
	done
Martin Stransky efe9b5
	echo; } |dialog --backtitle "$BGTITLE" --guage "Uploading information to www.pastebin.ca ..." 6 70 0
perex f47b88
fi
perex f47b88
perex f47b88
dialog --backtitle "$BGTITLE" --title "Information uploaded" --yesno "Would you like to see the uploaded information?" 5 100 
perex f47b88
DIALOG_EXIT_CODE=$?
perex f47b88
if [ $DIALOG_EXIT_CODE = 0 ]; then
perex f47b88
	grep -v "alsa-info.txt" $FILE >$TEMPDIR/uploaded.txt
perex f47b88
	dialog --backtitle "$BGTITLE" --textbox $TEMPDIR/uploaded.txt 0 0
perex f47b88
fi
perex f47b88
perex f47b88
clear
perex f47b88
perex f47b88
# no dialog
Martin Stransky efe9b5
else
Martin Stransky efe9b5
perex f47b88
if [[ -z $PASTEBIN ]]; then
perex 1e0bef
	echo -n "Uploading information to www.alsa-project.org ... " 
perex 568e63
	wget -O - --tries=5 --timeout=60 --post-file=$FILE http://www.alsa-project.org/cardinfo-db/ &>$TEMPDIR/wget.tmp &
perex f47b88
else
Martin Stransky efe9b5
	echo -n "Uploading information to www.pastebin.ca ... " 
perex 568e63
	wget -O - --tries=5 --timeout=60 --post-file=$FILE http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY &>$TEMPDIR/wget.tmp &
Martin Stransky efe9b5
fi
perex f47b88
Martin Stransky efe9b5
#Progess spinner for wget transfer.
perex f47b88
i=1
perex f47b88
sp="/-\|"
perex f47b88
echo -n ' '
perex f47b88
while pgrep wget &>/dev/null
perex f47b88
do
Martin Stransky efe9b5
	echo -en "\b${sp:i++%${#sp}:1}"
perex f47b88
done
perex f47b88
perex f47b88
echo -e "\b Done!"
perex f47b88
echo ""
perex f47b88
perex f47b88
fi #dialog
Martin Stransky efe9b5
Martin Stransky efe9b5
#See if tput is available, and use it if it is.	
perex f47b88
if [[ -n "$TPUT" ]]
Martin Stransky efe9b5
then
perex f47b88
	if [[ -z $PASTEBIN ]]; then
perex f47b88
		FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2 ; tput sgr0`
Martin Stransky efe9b5
	else
perex f47b88
		FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p';tput sgr0`
Martin Stransky efe9b5
	fi
perex f47b88
else
perex f47b88
	if [[ -z $PASTEBIN ]]; then
perex f47b88
		FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2`
perex a657df
	else
perex f47b88
		FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p'`
perex a657df
	fi
Martin Stransky efe9b5
fi
perex f47b88
perex f47b88
#Output the URL of the uploaded file.	
Martin Stransky efe9b5
echo "Your ALSA information is located at $FINAL_URL"
Martin Stransky efe9b5
echo "Please inform the person helping you."
Martin Stransky efe9b5
echo ""
Martin Stransky efe9b5
Martin Stransky efe9b5
#We couldnt find a suitable wget, so tell the user to upload manually.
Martin Stransky efe9b5
else
perex 568e63
	mv $FILE $NFILE || exit 1
Martin Stransky efe9b5
	if [[ -z $DIALOG ]]
Martin Stransky efe9b5
	then
perex 1e0bef
		if [[ -z $PASTEBIN ]]; then
perex 1e0bef
		echo ""
perex 1e0bef
		echo "Could not automatically upload output to http://www.alsa-project.org"
perex 1e0bef
		echo "Possible reasons are:"
perex 1e0bef
		echo "    1. Couldnt find 'wget' in your PATH"
perex 1e0bef
		echo "    2. Your version of wget is less than 1.8.2"
perex 1e0bef
		echo ""
perex 568e63
		echo "Please manually upload $NFILE to http://www.alsa-project.org/cardinfo-db/ and submit your post."
perex 1e0bef
		echo ""
perex 1e0bef
		else
Martin Stransky efe9b5
		echo ""
Martin Stransky efe9b5
		echo "Could not automatically upload output to http://www.pastebin.ca"
Martin Stransky efe9b5
		echo "Possible reasons are:"
Martin Stransky efe9b5
		echo "    1. Couldnt find 'wget' in your PATH"
Martin Stransky efe9b5
		echo "    2. Your version of wget is less than 1.8.2"
Martin Stransky efe9b5
		echo ""
perex 568e63
		echo "Please manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post."
Martin Stransky efe9b5
		echo ""
perex 1e0bef
		fi
perex f47b88
	else
perex 1e0bef
		if [[ -z $PASTEBIN ]]; then
perex 568e63
			dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.alsa-project.org.\nPossible reasons are:\n\n    1. Couldn't find 'wget' in your PATH\n    2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.alsa-project,org/cardinfo-db/ and submit your post." 25 100
perex 1e0bef
		else
perex 568e63
			dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.pastebin.ca.\nPossible reasons are:\n\n    1. Couldn't find 'wget' in your PATH\n    2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post." 25 100
perex 1e0bef
		fi
Martin Stransky efe9b5
	fi
Martin Stransky efe9b5
fi
Martin Stransky efe9b5
perex f47b88