|
Packit Service |
f629e6 |
@load "filefuncs"
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
BEGIN {
|
|
Packit Service |
f629e6 |
Level = 0
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
os = ""
|
|
Packit Service |
f629e6 |
if (ENVIRON["AWKLIBPATH"] == "sys$disk:[-]") {
|
|
Packit Service |
f629e6 |
os = "VMS"
|
|
Packit Service |
f629e6 |
system("create/dir/prot=o:rwed [.d1]")
|
|
Packit Service |
f629e6 |
system("create/dir/prot=o:rwed [.d2]")
|
|
Packit Service |
f629e6 |
system("copy fts.awk [.d1]f1")
|
|
Packit Service |
f629e6 |
system("copy fts.awk [.d1]f2")
|
|
Packit Service |
f629e6 |
system("copy fts.awk [.d2]f1")
|
|
Packit Service |
f629e6 |
system("copy fts.awk [.d2]f2")
|
|
Packit Service |
f629e6 |
} else {
|
|
Packit Service |
f629e6 |
system("rm -fr d1 d2")
|
|
Packit Service |
f629e6 |
system("mkdir d1 d2 ; touch d1/f1 d1/f2 d2/f1 d2/f2")
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
pathlist[1] = "d1"
|
|
Packit Service |
f629e6 |
pathlist[2] = "d2"
|
|
Packit Service |
f629e6 |
flags = FTS_PHYSICAL
|
|
Packit Service |
f629e6 |
fts(pathlist, flags, data)
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
output = "fts.ok"
|
|
Packit Service |
f629e6 |
traverse(data)
|
|
Packit Service |
f629e6 |
close(output)
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
ftswalk(pathlist, data2)
|
|
Packit Service |
f629e6 |
output = "_fts"
|
|
Packit Service |
f629e6 |
traverse(data2)
|
|
Packit Service |
f629e6 |
close(output)
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
if (os == "VMS") {
|
|
Packit Service |
f629e6 |
system("delete [.d1]*.*;*")
|
|
Packit Service |
f629e6 |
system("delete [.d2]*.*;*")
|
|
Packit Service |
f629e6 |
system("delete d1.dir;*")
|
|
Packit Service |
f629e6 |
system("delete d2.dir;*")
|
|
Packit Service |
f629e6 |
} else {
|
|
Packit Service |
f629e6 |
system("rm -fr d1 d2")
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function indent( i)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
for (i = 1; i <= Level; i++)
|
|
Packit Service |
f629e6 |
printf("\t") > output
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function sort_traverse(data, sorted, i)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
asorti(data, sorted)
|
|
Packit Service |
f629e6 |
for (i = 1; i in sorted; i++) {
|
|
Packit Service |
f629e6 |
# 5/2015: skip for atime, since there can
|
|
Packit Service |
f629e6 |
# occasionally be small differences.
|
|
Packit Service |
f629e6 |
if (sorted[i] == "atime")
|
|
Packit Service |
f629e6 |
continue
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
indent()
|
|
Packit Service |
f629e6 |
printf("%s --> %s\n", sorted[i], data[sorted[i]]) > output
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function traverse(data, i)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
for (i in data) {
|
|
Packit Service |
f629e6 |
if (isarray(data[i])) {
|
|
Packit Service |
f629e6 |
indent()
|
|
Packit Service |
f629e6 |
printf("%s:\n", i) > output
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
Level++
|
|
Packit Service |
f629e6 |
if (("mtime" in data[i]) && ! isarray(data[i]["mtime"])) {
|
|
Packit Service |
f629e6 |
sort_traverse(data[i])
|
|
Packit Service |
f629e6 |
} else {
|
|
Packit Service |
f629e6 |
traverse(data[i])
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
Level--
|
|
Packit Service |
f629e6 |
# } else {
|
|
Packit Service |
f629e6 |
# JUNK = 1
|
|
Packit Service |
f629e6 |
# if (i != "atime") {
|
|
Packit Service |
f629e6 |
# # 4/2015: skip for atime, since there can
|
|
Packit Service |
f629e6 |
# # occasionally be small differences.
|
|
Packit Service |
f629e6 |
# indent()
|
|
Packit Service |
f629e6 |
# printf("%s --> %s\n", i, data[i]) > output
|
|
Packit Service |
f629e6 |
# }
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function ftswalk(pathlist, data, i, toppath)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
delete data
|
|
Packit Service |
f629e6 |
for (i = 1; i in pathlist; i++) {
|
|
Packit Service |
f629e6 |
toppath = pathlist[i]
|
|
Packit Service |
f629e6 |
data[toppath]["junk"]++ # create array
|
|
Packit Service |
f629e6 |
delete data[toppath]["junk"]
|
|
Packit Service |
f629e6 |
process(pathlist[i], data)
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
# enter process with pathname, array for that path already created but
|
|
Packit Service |
f629e6 |
# empty
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function process(pathname, data_array,
|
|
Packit Service |
f629e6 |
stat_data, i, direntry, command, shortname) # locals
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
stat(pathname, stat_data)
|
|
Packit Service |
f629e6 |
if (stat_data["type"] == "file") {
|
|
Packit Service |
f629e6 |
shortname = strrstr(pathname, "/")
|
|
Packit Service |
f629e6 |
data_array["path"] = pathname
|
|
Packit Service |
f629e6 |
for (i in stat_data) {
|
|
Packit Service |
f629e6 |
if (i == "name")
|
|
Packit Service |
f629e6 |
data_array["stat"][i] = shortname
|
|
Packit Service |
f629e6 |
else
|
|
Packit Service |
f629e6 |
data_array["stat"][i] = stat_data[i]
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
return
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
# stuff for a directory
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
data_array[pathname]["."]["path"] = pathname
|
|
Packit Service |
f629e6 |
for (i in stat_data)
|
|
Packit Service |
f629e6 |
data_array[pathname]["."]["stat"][i] = stat_data[i]
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
os = ""
|
|
Packit Service |
f629e6 |
if (ENVIRON["AWKLIBPATH"] == "sys$disk:[-]") {
|
|
Packit Service |
f629e6 |
os = "VMS"
|
|
Packit Service |
f629e6 |
# Command in next section not valid on VMS.
|
|
Packit Service |
f629e6 |
return
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
command = ("ls -f " pathname)
|
|
Packit Service |
f629e6 |
while ((command | getline direntry) > 0) {
|
|
Packit Service |
f629e6 |
if (direntry == "." || direntry == "..")
|
|
Packit Service |
f629e6 |
continue
|
|
Packit Service |
f629e6 |
data_array[pathname][direntry]["junk"]++
|
|
Packit Service |
f629e6 |
delete data_array[pathname][direntry]["junk"]
|
|
Packit Service |
f629e6 |
process(pathname "/" direntry,
|
|
Packit Service |
f629e6 |
data_array[pathname][direntry])
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
close(command)
|
|
Packit Service |
f629e6 |
}
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
function strrstr(string, delim, ind)
|
|
Packit Service |
f629e6 |
{
|
|
Packit Service |
f629e6 |
if ((ind = index(string, delim)) == 0)
|
|
Packit Service |
f629e6 |
return string
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
do {
|
|
Packit Service |
f629e6 |
string = substr(string, ind + 1)
|
|
Packit Service |
f629e6 |
} while ((ind = index(string, delim)) > 0)
|
|
Packit Service |
f629e6 |
|
|
Packit Service |
f629e6 |
return string
|
|
Packit Service |
f629e6 |
}
|