This repository has been archived by the owner on Mar 8, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 119
/
Copy pathincluder-man
executable file
·131 lines (119 loc) · 1.91 KB
/
includer-man
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/sh
PROGNAME="$0"
usage() {
cat <<EOF
NAME
`basename $PROGNAME` - CPP replacement
SYNOPSIS
`basename $PROGNAME` [options] file
DESCRIPTION
CPP replacement.
Handles:
#include "file"
#ifdef symbol
#ifndef symbol
#endif
OPTIONS
-v DEFn=symbol Symbol is defined, n = 1, ... 9.
i.e. -v DEF1=groff is equivalent to:
#define groff 1
-D lvl Debug level
EOF
exit 1
}
#
# Report an error and exit
#
error() {
echo "`basename $PROGNAME`: $1" >&2
exit 1
}
debug() {
if [ $DEBUG -ge $1 ]; then
echo "`basename $PROGNAME`: $2" >&2
fi
}
#
# Process the options
#
DEBUG=0
VARS=""
while getopts "v:D:h?" opt
do
case $opt in
v) VARS="$VARS -v $OPTARG";;
D) DEBUG="$OPTARG";;
h|\?) usage;;
esac
done
shift `expr $OPTIND - 1`
#
# Main Program
#
if [ -x /opt/sfw/bin/gawk ]; then
AWK=/opt/sfw/bin/gawk
else
AWK=awk
fi
$AWK $VARS '
function do1(file, i) {
if (nfiles++ == 0)
{
print comment " t"
print comment
print comment " DO NOT EDIT! This file is generated from " file
print comment
}
while ((getline < file) > 0)
{
split($0, a)
if (a[1] == "#include")
{
gsub(/"/, "", a[2])
print comment
do1(a[2])
}
else if (a[1] == "#define")
{
def[a[2]] = 1
print comment
}
else if (a[1] == "#ifdef")
{
if (!def[a[2]])
skip = 1
print comment
}
else if (a[1] == "#ifndef")
{
if (def[a[2]])
skip = 1
print comment
}
else if (a[1] == "#endif")
{
skip = 0
print comment
}
else if (skip)
print comment
else
print $0
}
}
BEGIN {
comment = "'"'"'\\\""
if (DEF1) def[DEF1] = 1;
if (DEF2) def[DEF2] = 1;
if (DEF3) def[DEF3] = 1;
if (DEF4) def[DEF4] = 1;
if (DEF5) def[DEF5] = 1;
if (DEF6) def[DEF6] = 1;
if (DEF7) def[DEF7] = 1;
if (DEF8) def[DEF8] = 1;
if (DEF9) def[DEF9] = 1;
#for (i in def)
#print i, def[i]
do1(ARGV[1])
exit
}' $*