#! /bin/sh
# Copyright (C) 2006 Randy Dunlap
# GPL version 2 license.
# prints 'modinfo -p' for all found *.ko files
# prints 'modinfo' (all) for all found *.ko files if -a is specified;
# prints all MODULE_PARM_DESC lines for all *.c files if -s is specified;

allinfo=""
sources=""

while getopts "aosh" Option ; do
	case $Option in
	a)
		allinfo="1"
		;;
	s)
		sources="1"
		;;
	o)
		sources=""
		;;
	h|*)
		echo "usage: module-params [-a] [-s] [-o] [-h]"
		echo "lists module parameter info for all found files:"
		echo "  -s searches source (.c) files"
		echo "  -o searches binary (.ko) files [default]"
		echo "  -a lists all modinfo output from .ko files"
		echo "     (else just -p: module parameters output)"
		echo "  -h prints this help text"
		exit
		;;
	esac
done
##echo shifting args by: $(($OPTIND - 1))
shift $(($OPTIND - 1))

if [ "$allinfo" == "1" ]; then
	modinfo_param=""
else
	modinfo_param="-p"	# module parameters only
fi

if [ "$sources" == "1" ]; then
	filenames=$(find . -name \*\.c)
else
	filenames=$(find . -name \*\.ko)
fi

for file in $filenames ; do

	if [ "$sources" == "1" ]; then
		grep -sq -w MODULE_PARM_DESC $file
		sts=$?

		if [ $sts -eq 0 ]; then
			if [ ${file:0:2} == "./" ]; then
				file=${file:2}
			fi
			echo "$file:"
			grep -w MODULE_PARM_DESC $file | \
				sed -e s/MODULE_PARM_DESC[[:space:]]*\(// | \
				sed -e s/"\"[[:space:]]*)[[:space:]]*;[[:space:]]*$"// |
				sed -e s/","/": "/ |
				sed -e s/'"$'/''/ |
				sed -e s/'\\$'/''/ |
				sed -e s/'\\n$'/''/ |
				sed -e s/'\\t'/' '/g |
				sed -e s/'\\n'/': '/g |
				sed -e s/'\\'/''/g |
				sed -e s/'__MODULE_STRING'/''/g |
				sed -e s/":[[:space:]]*\""/": "/
			echo "-------------------------------------------------"
		fi

	else	# object modules
		info=`modinfo $modinfo_param $file`
		if [ "$info" != "" ]; then
			# don't repeat filename
			if [ "$allinfo" != "1" ]; then
				echo "$file:"
			fi
			modinfo $modinfo_param $file | sed -e s/":"/": "/g
			echo "-------------------------------------------------"
		fi

	fi

done
