#!/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

function make_xinf_line {
    PCI_ID=`echo "$1" | sed "s|.*0x\(.*\)|\1|"| tr a-z A-Z`
    DESC=`echo "$1" | sed "s|\s*\(.*\)\s*0x.*|\1|"`
    VND_ID="000010DE"
    ((0x$PCI_ID<0xA1)) && VND_ID="000012D2"
    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
		STEP=ids
		echo "STEP=ids"
		make_xinf_line "$LINE" >>$OUT
	    fi
	    ;;
	ids)
	    if echo "$LINE" | grep -qe "[[:space:]]0x"
	    then
		make_xinf_line "$LINE" >>$OUT
	    else
		if echo "$LINE" | grep -qe "legacy"
		then
		    STEP=appendix_end
		    echo "STEP=appendix_end"
		fi
	    fi
	    ;;
	appendix_end)
	    break
	    ;;
	default)
	    ;;
    esac
done < $IN

chmod 0644 $OUT
