Blame pc/awklib/igawk.awk
|
Packit Service |
f629e6 |
# igawk.awk
|
|
Packit Service |
f629e6 |
# process @include directives
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function pathto(file, i, t, junk)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
if (index(file, "/") != 0)
|
|
Packit Service |
f629e6 |
return file
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
for (i = 1; i <= ndirs; i++) {
|
|
Packit Service |
f629e6 |
t = (pathlist[i] "/" file)
|
|
Packit Service |
f629e6 |
if ((getline junk < t) > 0) {
|
|
Packit Service |
f629e6 |
# found it
|
|
Packit Service |
f629e6 |
close(t)
|
|
Packit Service |
f629e6 |
return t
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
return ""
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
BEGIN {
|
|
Packit Service |
f629e6 |
path = ENVIRON["AWKPATH"]
|
|
Packit Service |
f629e6 |
ndirs = split(path, pathlist, ";")
|
|
Packit Service |
f629e6 |
for (i = 1; i <= ndirs; i++) {
|
|
Packit Service |
f629e6 |
if (pathlist[i] == "")
|
|
Packit Service |
f629e6 |
pathlist[i] = "."
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
stackptr = 0
|
|
Packit Service |
f629e6 |
input[stackptr] = ARGV[1] # ARGV[1] is first file
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
for (; stackptr >= 0; stackptr--) {
|
|
Packit Service |
f629e6 |
while ((getline < input[stackptr]) > 0) {
|
|
Packit Service |
f629e6 |
if (tolower($1) != "@include") {
|
|
Packit Service |
f629e6 |
print
|
|
Packit Service |
f629e6 |
continue
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
fpath = pathto($2)
|
|
Packit Service |
f629e6 |
if (fpath == "") {
|
|
Packit Service |
f629e6 |
printf("igawk:%s:%d: cannot find %s\n",
|
|
Packit Service |
f629e6 |
input[stackptr], FNR, $2) > "/dev/stderr"
|
|
Packit Service |
f629e6 |
continue
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
if (! (fpath in processed)) {
|
|
Packit Service |
f629e6 |
processed[fpath] = input[stackptr]
|
|
Packit Service |
f629e6 |
input[++stackptr] = fpath # push onto stack
|
|
Packit Service |
f629e6 |
} else
|
|
Packit Service |
f629e6 |
print $2, "included in", input[stackptr],
|
|
Packit Service |
f629e6 |
"already included in",
|
|
Packit Service |
f629e6 |
processed[fpath] > "/dev/stderr"
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
close(input[stackptr])
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|