source: Daodan/MinGW/msys/1.0/bin/igawk@ 1098

Last change on this file since 1098 was 1046, checked in by alloc, 8 years ago

Daodan: Added Windows MinGW and build batch file

File size: 3.0 KB
Line 
1#! /bin/sh
2# igawk --- like gawk but do @include processing
3#
4# Arnold Robbins, arnold@skeeve.com, Public Domain
5# July 1993
6
7if [ "$1" = debug ]
8then
9 set -x
10 shift
11fi
12
13# A literal newline, so that program text is formatted correctly
14n='
15'
16
17# Initialize variables to empty
18program=
19opts=
20
21while [ $# -ne 0 ] # loop over arguments
22do
23 case $1 in
24 --) shift; break;;
25
26 -W) shift
27 # The ${x?'message here'} construct prints a
28 # diagnostic if $x is the null string
29 set -- -W"${@?'missing operand'}"
30 continue;;
31
32 -[vF]) opts="$opts $1 '${2?'missing operand'}'"
33 shift;;
34
35 -[vF]*) opts="$opts '$1'" ;;
36
37 -f) program="$program$n@include ${2?'missing operand'}"
38 shift;;
39
40 -f*) f=`expr "$1" : '-f\(.*\)'`
41 program="$program$n@include $f";;
42
43 -[W-]file=*)
44 f=`expr "$1" : '-.file=\(.*\)'`
45 program="$program$n@include $f";;
46
47 -[W-]file)
48 program="$program$n@include ${2?'missing operand'}"
49 shift;;
50
51 -[W-]source=*)
52 t=`expr "$1" : '-.source=\(.*\)'`
53 program="$program$n$t";;
54
55 -[W-]source)
56 program="$program$n${2?'missing operand'}"
57 shift;;
58
59 -[W-]version)
60 echo igawk: version 2.0 1>&2
61 gawk --version
62 exit 0 ;;
63
64 -[W-]*) opts="$opts '$1'" ;;
65
66 *) break;;
67 esac
68 shift
69done
70
71if [ -z "$program" ]
72then
73 program=${1?'missing program'}
74 shift
75fi
76
77# At this point, `program' has the program.
78expand_prog='
79
80function pathto(file, i, t, junk)
81{
82 if (index(file, "/") != 0)
83 return file
84
85 for (i = 1; i <= ndirs; i++) {
86 t = (pathlist[i] "/" file)
87 if ((getline junk < t) > 0) {
88 # found it
89 close(t)
90 return t
91 }
92 }
93 return ""
94}
95BEGIN {
96 path = ENVIRON["AWKPATH"]
97 ndirs = split(path, pathlist, ":")
98 for (i = 1; i <= ndirs; i++) {
99 if (pathlist[i] == "")
100 pathlist[i] = "."
101 }
102 stackptr = 0
103 input[stackptr] = ARGV[1] # ARGV[1] is first file
104
105 for (; stackptr >= 0; stackptr--) {
106 while ((getline < input[stackptr]) > 0) {
107 if (tolower($1) != "@include") {
108 print
109 continue
110 }
111 fpath = pathto($2)
112 if (fpath == "") {
113 printf("igawk:%s:%d: cannot find %s\n",
114 input[stackptr], FNR, $2) > "/dev/stderr"
115 continue
116 }
117 if (! (fpath in processed)) {
118 processed[fpath] = input[stackptr]
119 input[++stackptr] = fpath # push onto stack
120 } else
121 print $2, "included in", input[stackptr],
122 "already included in",
123 processed[fpath] > "/dev/stderr"
124 }
125 close(input[stackptr])
126 }
127}' # close quote ends `expand_prog' variable
128
129processed_program=`gawk -- "$expand_prog" /dev/stdin <<EOF
130$program
131EOF
132`
133eval gawk $opts -- '"$processed_program"' '"$@"'
Note: See TracBrowser for help on using the repository browser.