source: trunk/essentials/sys-apps/gawk/pc/awklib/igawk.awk

Last change on this file was 3076, checked in by bird, 18 years ago

gawk 3.1.5

File size: 1.3 KB
Line 
1# igawk.awk
2# process @include directives
3
4function pathto(file, i, t, junk)
5{
6 if (index(file, "/") != 0)
7 return file
8
9 for (i = 1; i <= ndirs; i++) {
10 t = (pathlist[i] "/" file)
11 if ((getline junk < t) > 0) {
12 # found it
13 close(t)
14 return t
15 }
16 }
17 return ""
18}
19BEGIN {
20 path = ENVIRON["AWKPATH"]
21 ndirs = split(path, pathlist, ";")
22 for (i = 1; i <= ndirs; i++) {
23 if (pathlist[i] == "")
24 pathlist[i] = "."
25 }
26 stackptr = 0
27 input[stackptr] = ARGV[1] # ARGV[1] is first file
28
29 for (; stackptr >= 0; stackptr--) {
30 while ((getline < input[stackptr]) > 0) {
31 if (tolower($1) != "@include") {
32 print
33 continue
34 }
35 fpath = pathto($2)
36 if (fpath == "") {
37 printf("igawk:%s:%d: cannot find %s\n",
38 input[stackptr], FNR, $2) > "/dev/stderr"
39 continue
40 }
41 if (! (fpath in processed)) {
42 processed[fpath] = input[stackptr]
43 input[++stackptr] = fpath # push onto stack
44 } else
45 print $2, "included in", input[stackptr],
46 "already included in",
47 processed[fpath] > "/dev/stderr"
48 }
49 close(input[stackptr])
50 }
51}
Note: See TracBrowser for help on using the repository browser.