summaryrefslogtreecommitdiff
path: root/rc/def
blob: 09a3f0c8bb9cb259756eac7eb00fd909ea6f8853 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/rc -e

# def -- find function definition

flagfmt=a
args='name [dir]'
if(! ifs=() eval `{aux/getflags $*} || ! ~ $#* 1 2 3){
	echo usage: $0 name [dir] >[1=2]
	exit usage
}

name=$1
if(~ $#* 2) wdir=$2
if not wdir=`{pwd}

files=$wdir^/*.[ch]
if(~ $files $wdir^/'*.[ch]'){
	echo error: no c/h files found >[1=2]
	exit 'not found'
}

# ansi definition
if(~ $flaga 1){
	r=`{
		echo 'X ,x/[\n 	]\**'^$name^'\(.*\)([ 	]*\/\*.*\*\/)?\n{/-+=' |
		sam -d $files >[2=1] |
		awk -F'[ ;]' '
			/^ -\. / { file = $3; next }
			/^ -  / { file = $4; next }
			{ print file ":" $1; exit }
	'}
}

# style(1) definition
if not{
	r=`{grep -n '^'^$name^'\(' $files | awk -F: '{print $1 ":" $2; exit}'}
}

# success
if(! ~ $r '')
	echo $r

# try to find macro instead
if not
	grep -n '^#define[ 	]'^$name^'\(' $files | awk -F: '{print $1 ":" $2; exit}'