#!/bin/bash
#
# This script scans the whole source code for symbols of the form 
# 'dprintf_xxx(yyy' where yyy is a C identifier and outputs, on the
# standard output a sorted list of the identifiers found in the .c 
# files. Each identifier is reported once. Header files are not
# scanned.
#
# The script can be given an argument that specify the files to be
# searched according to the following scheme:
#    - if the argument does not contain a slash (/), the script
#      will search the tree rooted in the current directory for
#      files that match that description. You can also pass
#      wildcard arguments, but remember to quote them to prevent
#      expansion by the shell
#    - if the argument does contain a slash, only that file is
#      searched
#    - if no argument is given, the argument defaults to "*.c"
#      that is, all C files are searched.
#    - if more than a argument is given, only the listed files are
#      searched. Note that in this case, the script will not
#      attempt to find them in some subdirectories, but rather
#      it will try to open them in the current directory.
# Thus, if you want to disable the automatic searching when the file
# name does not contain a /, either prefix the filename with ./
# or add /dev/null as another argument.
#
# Dimitrie O. Paun <dimi@cs.toronto.edu>
#

case "$#" in
    0 | 1)  files=${1:-'*.c'}
	    if [ ${files#*/} = "$files" ]; then
		files=$(find . -name "$files" -print)
	    fi;;
    *    )  files="$@";;
esac

(
grep -h "TRACE *(" $files /dev/null | \
    sed 's/.*TRACE *( *\([A-Za-z0-9_]*\).*/\1/g'
grep -h "ERR *(" $files /dev/null | \
    sed 's/.*ERR *( *\([A-Za-z0-9_]*\).*/\1/g'
grep -h "FIXME *(" $files /dev/null | \
    sed 's/.*FIXME *( *\([A-Za-z0-9_]*\).*/\1/g'
grep -h "WARN *(" $files /dev/null | \
    sed 's/.*WARN *( *\([A-Za-z0-9_]*\).*/\1/g'
) | sort | uniq
