xref: /dragonfly/usr.bin/lt/lt.sh (revision a1626531)
1#!/bin/sh
2
3# The awk script used in this file was written by vgersh99
4
5if [ "$#" = "0" ]; then
6	DIR="."
7else
8	DIR=$*
9fi
10
11for _dir in $DIR; do
12if [ ! -d $_dir ]; then
13	echo "$_dir: No such directory"
14	continue
15fi
16
17echo $_dir | sed -E 's/\/+$//'
18find -s ${_dir}/ | awk '
19BEGIN {
20        FS = "/";
21        i = 0;
22}
23
24function fineprint(branches)
25{
26        gsub(" ","    ", branches);
27        gsub("[|]","&   ", branches);
28        gsub("`","&-- ", branches);
29        gsub("[+]","|-- ", branches);
30        return branches;
31}
32
33function mktree(number,branches,   tnumber)
34{
35
36        if (number > NR) {
37                return number - 1;
38        }
39
40        tnumber = number;
41
42        while (array["shift", number] < array["shift", tnumber + 1]) {
43                tnumber = mktree(tnumber + 1, branches" ");
44                if (tnumber == NR) break;
45        }
46
47        if (array["shift", number] == array["shift", tnumber + 1]) {
48                array["slip", number] = branches"+";
49        }
50
51        if ((array["shift", number] > array["shift", tnumber + 1]) \
52                || tnumber == NR) {
53                array["slip", number] = branches"`";
54        }
55
56
57        return tnumber;
58}
59
60{
61        array["shift", NR] = NF;
62        array["name", NR] = $(NF);
63}
64
65END {
66        if (EXIT)
67                exit EXIT;
68
69        for (i = 1; i <= NR; i++) {
70                i = mktree(i, "");
71        }
72
73        for (i = 1; i <= NR; i++) {
74
75                if (i > 1) {
76                        lprev = length(array["slip", i - 1]);
77                        lcurr = length(array["slip", i]);
78                        if (lprev > lcurr - 1)
79                                legacy = substr(array["slip", i - 1], 0, \
80                                                lcurr - 1);
81                        else
82                                legacy = array["slip", i-1];
83                        tail = substr(array["slip", i], length(legacy) + 1 , \
84                                        lcurr - length(legacy));
85       			gsub("[+]", "|", legacy);
86                        gsub("`", " ", legacy);
87                        array["slip", i] = (legacy)(tail);
88                }
89
90                printf "%s%s\n", fineprint(array["slip", i]), \
91                                array["name", i];
92
93        }
94}
95' | grep -v '^|-- $'
96done
97
98