#!/bin/sh

# Output:

# CardStatus [CardName]
#   where CardStatus is: G(ood), B(ad), S(low), or U(nknown)
# 3DStatus [MissingPackages]
#   where 3DStatus is 0 or 1
# XglStatus [RecommendedOptions]
#   where XglStatus is 0 or 1 and RecommendedOptions is set if
#   XglStatus is 0 OR it doesn't match /etc/sysconfig/displaymanager

packages=""
xgl_opts=""
card_status=""

card_name=`/sbin/lspci | sed -ne 's/^.*VGA compatible controller: //p' | cut -d " " -f 1,2`
if [ -n "$card_name" ]; then
    vendor="xxx"
    IFS=" 	=" # That's "SPACE TAB ="
    while read tag data; do
	case $tag in
	\#*|"")
	    ;;
	VENDOR)
	    vendor="`echo $data | cut -d " " -f 1,2`"
	    ;;
	PACKAGES)
	    packages="$data"
	    ;;
	XGL_OPTS)
	    xgl_opts="$data"
	    ;;
	*)
	    if expr "$card_name" : "$vendor" > /dev/null; then
		card_status="$tag"
		break
	    fi
	    ;;
	esac
    done < /etc/X11/xgl-hardware-list
fi



if [ -z "$card_status" ]; then
    card_status=U
    packages=""
    xgl_opts=""
fi

# TODO find a package that provide 3D system informations.
x_stat=`ps ax | grep -c Xgl`
if [ "$x_stat" = "3" ] ; then
    accel_status=1
else
    accel_status=0
fi

kernel_release=`uname -r | cut -d "-" -f 2`
missing_packages=""
for pkg in $packages; do
    case $pkg in
    kmod-*)
	pkgname="$pkg"
	pkg="$pkgname-*"
	;;
    esac
    if [ "`rpm -q $pkg | grep $kernel_release | cut -c 1-4 `" = "kmod" ]; then
	missing_packages="$pkgname is installed for the kernel release $kernel_release"
    else
    	missing_packages="$pkgname is not installed for the kernel release $kernel_release"
    fi
done

if [ "`cat /etc/sysconfig/xgl/status`" == "enable"  ] ; then
    x_status=1
else
    x_status=0
fi

echo $card_status $card_name
echo $accel_status $missing_packages
echo $x_status $xgl_opts
