summaryrefslogtreecommitdiff
path: root/regex/mkh
blob: 252b246c7bd2538dda8890409c73e7a90e487064 (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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#! /bin/sh
# mkh - pull headers out of C source
PATH=/bin:/usr/bin ; export PATH

# egrep pattern to pick out marked lines
egrep='^ =([ 	]|$)'

# Sed program to process marked lines into lines for the header file.
# The markers have already been removed.  Two things are done here:  removal
# of backslashed newlines, and some fudging of comments.  The first is done
# because -o needs to have prototypes on one line to strip them down.
# Getting comments into the output is tricky; we turn C++-style // comments
# into /* */ comments, after altering any existing */'s to avoid trouble.
peel='	/\\$/N
	/\\\n[ 	]*/s///g
	/\/\//s;\*/;* /;g
	/\/\//s;//\(.*\);/*\1 */;'

for a
do
	case "$a" in
	-o)	# old (pre-function-prototype) compiler
		# add code to comment out argument lists
		peel="$peel
			"'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1(/*\2*/);'
		shift
		;;
	-b)	# funny Berkeley __P macro
		peel="$peel
			"'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1 __P((\2));'
		shift
		;;
	-s)	# compiler doesn't like `static foo();'
		# add code to get rid of the `static'
		peel="$peel
			"'/^static[ 	][^\/]*[a-zA-Z0-9_)](.*)/s;static.;;'
		shift
		;;
	-p)	# private declarations
		egrep='^ ==([ 	]|$)'
		shift
		;;
	-i)	# wrap in #ifndef, argument is name
		ifndef="$2"
		shift ; shift
		;;
	*)	break
		;;
	esac
done

if test " $ifndef" != " "
then
	echo "#ifndef $ifndef"
	echo "#define	$ifndef	/* never again */"
fi
echo "/* ========= begin header generated by $0 ========= */"
echo '#ifdef __cplusplus'
echo 'extern "C" {'
echo '#endif'
for f
do
	echo
	echo "/* === $f === */"
	egrep "$egrep" $f | sed 's/^ ==*[ 	]//;s/^ ==*$//' | sed "$peel"
	echo
done
echo '#ifdef __cplusplus'
echo '}'
echo '#endif'
echo "/* ========= end header generated by $0 ========= */"
if test " $ifndef" != " "
then
	echo "#endif"
fi
exit 0