Merge branch 'vendor/MDOCML'
[dragonfly.git] / usr.bin / lt / lt.sh
1 #!/bin/sh
2
3 # The awk script used in this file was written by vgersh99
4
5 if [ "$#" = "0" ]; then
6         DIR="."
7 else
8         DIR=$*
9 fi
10
11 for _dir in $DIR; do
12 if [ ! -d $_dir ]; then
13         echo "$_dir: No such directory"
14         continue
15 fi
16
17 echo $_dir | sed -E 's/\/+$//'
18 find ${_dir}/ | sort | awk '
19 BEGIN {
20         FS = "/";
21         i = 0;
22 }
23
24 function fineprint(branches)
25 {
26         gsub(" ","    ", branches);
27         gsub("[|]","&   ", branches);
28         gsub("`","&-- ", branches);
29         gsub("[+]","|-- ", branches);
30         return branches;
31 }
32
33 function 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
65 END {
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 '^|-- $'
96 done
97