#!/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 | /usr/bin/sed -ne 's/^.*VGA compatible controller: //p'`
if [ -n "$card_name" ]; then
    vendor="xxx"
    IFS=" 	=" # That's "SPACE TAB ="
    while read tag data; do
	case $tag in
	\#*|"")
	    ;;
	VENDOR)
	    vendor="$data"
	    ;;
	PACKAGES)
	    packages="$data"
	    ;;
	XGL_OPTS)
	    xgl_opts="$data"
	    ;;
	*)
	    if expr "$card_name" : "$vendor.*$data" > /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

if /usr/bin/3Ddiag-result; then
    accel_status=1
else
    accel_status=0
fi

missing_packages=""
for pkg in $packages; do
    case $pkg in
    *-kmp)
	pkg="$pkg-`rpm -qf /boot/vmlinuz --qf '%{NAME}' | sed -ne 's/^kernel-//p'`"
	;;
    esac
    rpm -q $pkg >/dev/null || missing_packages="$missing_packages$pkg "
done

. /etc/sysconfig/displaymanager
case "$DISPLAYMANAGER_XSERVER" in
Xgl)
    x_status=1
    if [ "$DISPLAYMANAGER_XGL_OPTS" == "$xgl_opts" ]; then
	xgl_opts=""
    fi
    ;;
*)
    x_status=0
    ;;
esac

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