#!/bin/sh

IN=$1
[ -n "$IN" ] || IN="$PWD/README.txt"
[ -f "$IN" ] || IN="$PWD/README"
if ! [ -f "$IN" ]
then
    echo "source file not found"
    exit 1
fi

OUT=nvidia.xinf

#BLACKLIST="0242:0245"
BLACKLIST=""
#ADDLIST="087D"
ADDLIST=""

function is_blacklisted {
    PCI_ID=`echo "$1" | sed "s|.*[[:space:]]0x\([[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]]\).*|\1|"| tr a-z A-Z`
    for BLACK_ID in `echo "$BLACKLIST"| sed "s|:| |"`
    do
	[ "$PCI_ID" == "$BLACK_ID" ] && return 0
    done
    return 1
}

function make_xinf_line {
    PCI_ID=`echo "$1" | sed -e "s|.*[[:space:]]0x\([[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]]\).*|\1|"| tr a-z A-Z`
    DESC=`echo "$1" | sed -e 's|0x[[:alnum:]].*||' -e 's|[[:space:]][[:space:]]*$||'`
    VND_ID="000010DE"
    echo "alias pcivideo:v${VND_ID}d0000${PCI_ID}sv*sd*bc*sc*i* nvidia # ${DESC}"
}

>$OUT
STEP="start"
while read LINE
do
    case "$STEP" in
	start)
	    if echo "$LINE" | grep  -iqE "^Appendix[[:space:]]A\.[[:space:]]Supported[[:space:]]NVIDIA[[:space:]]GPU[[:space:]]Products$"
	    then
		STEP=appendix_a_0
		echo "STEP=appendix_a_0"
	    fi
	    ;;
	appendix_a_0)
	    if echo "$LINE" | grep  -iqE "^Appendix[[:space:]]A\.[[:space:]]Supported[[:space:]]NVIDIA[[:space:]]GPU[[:space:]]Products$"
	    then
		STEP=appendix_a
		echo "STEP=appendix_a"
	    fi
	    ;;
	appendix_a)
	    if echo "$LINE" | grep -qe "[[:space:]]0x"
	    then
		if ! is_blacklisted "$LINE"; then
		    make_xinf_line "$LINE" >>$OUT
		fi
	    else
		if echo "$LINE" | grep -q "legacy"
		then
		    STEP=appendix_end
		    echo "STEP=appendix_end"
		fi
	    fi
	    ;;
	appendix_end)
	    break
	    ;;
	default)
	    ;;
    esac
done < $IN
for ADD_ID in `echo "$ADDLIST"| sed "s|:| |"`
do
    make_xinf_line " NVIDIA misc 0x$ADD_ID" >>$OUT
done

chmod 0644 $OUT
