[net.sources] "Ferret" needed

paul@hp-lsd.UUCP (Paul D. Bame) (10/15/85)

Here is a not-too-slow way to generate a database of all the
C functions you have in all your files in a particular subtree of the FS.
Note that it is in two parts:

	1) findfn - a script which applies a magic grep to *.[cy] looking
		    for function definitions (style sensitive to some extent)

	2) a find command:
		find . -type d -exec findfn {} \; >Index

A sample of output is appended - it's messy but informative and easily
searched with grep.  I run this once a week(in background) on my login
subtree.  I've found it handy to also do a "ls -CR >Directory"
weekly to prevent me from having to do time-consuming find()'s when
I lose a file.

		--Paul Bame
		UUCP: {hplabs,ihnp4!hpfcla}!hp-lsd!paul
		CSNET: hp-lsd!paul@hp-labs.csnet
		ARPA: hp-lsd!paul%hp-labs@csnet-relay.arpa



echo x - findfn
cat >findfn <<'!Funky!Stuff!'

 # findfn - grep the .[cy] files in a directory for functions and
 # emit those lines containing function definitions.  arg #1 is directory
 # to search.  Matching function definitions is done by matching:
 #
 #	^identifier[optional-whitespace](
 # and eliminating those lines of the form:
 #	)[optional-whitespace);
 #

	# Echo is just in case there's only one file in the directory and
	# grep then doesn't prepend the file name to matching lines
	echo "$1==========================="
	grep '^[a-zA-Z_][a-zA-Z_0-9]*[ 	]*(' $1/*.[lcy] |
		grep -v ')[ 	]*;'
!Funky!Stuff!
exit 0

/usr/local/src/cmd===========================
/usr/local/src/cmd/detab.c:main(argc, argv)
/usr/local/src/cmd/detab.c:tabstop( position, tabspaces )
/usr/local/src/cmd/entab.c:entab(tabstop)
/usr/local/src/cmd/entab.c:main(argc, argv)
/usr/local/src/cmd/keys.c:main()
/usr/local/src/cmd/keys.c:parsekey(keynum,buffer,kptr)
/usr/local/src/cmd/keys.c:programkey(kptr)
/usr/local/src/cmd/phist.c:main(argc,argv)
/usr/local/src/cmd/toascii.c:main()
/usr/local/src/cmd/toascii.c:to_ascii(c,c1)
/usr/local/src/cmd/toascii.c:to_binary(c)
/usr/local/src/cmd/tohex.c:to_hex(c)
/usr/local/src/cmd/tohex.c:main(argc,argv)
/usr/local/src/cmd/patch1.3===========================
main(argc,argv)
reinitialize_almost_everything()
get_some_switches()