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
}