Introduction
Introduction Statistics Contact Development Disclaimer Help
tree - plstree - ps and ls displayed as a tree
git clone git://bitreich.org/plstree git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws…
Log
Files
Refs
Tags
README
---
tree (1764B)
---
1 #!/usr/bin/awk -f
2
3 # convert a list of paths into a tree
4
5 BEGIN {
6 LINE = "| ";
7 NODE = "|- ";
8 TAIL = "`- ";
9 VOID = " ";
10
11 num = list(entries);
12 tree(entries, num);
13 display(entries, num);
14 }
15
16 # Get a recursive list of all entries into entries[] with entries[i:j]
17 # holding the component j of the path i, and 0 has all the -l details,
18 # then return the number of entries in entries[].
19 #
20 # [ 1:[ 1:"etc" ],
21 # 2:[ 1:"etc", 2:"sv" ],
22 # 3:[ 1:"etc", 2:"tor" ] ]
23 #
24 # Only the leaves are present, the intermediates components are LINE or
25 # NODE if just before a leave
26 #
27 # [ 1:[ 1:LINE, 2:LINE, 3:LINE, 4:LINE, 5:NODE, 6:"filename" ],
28 # 2:[ 1:LINE, 2:LINE, 3:LINE, 4:NODE, 5:"filename" ] ]
29
30 function list(entries)
31 {
32 for (num = 0; getline; num++) {
33 sub("^/", "", $0);
34 sub("/$", "", $0);
35 count = split($0, nodelist, "/");
36 for (i = 1; i < count; i++)
37 entries[num":"i] = LINE;
38 entries[num":"count] = NODE;
39 entries[num"name"] = nodelist[count];
40 }
41
42 return num - 1;
43 }
44
45 # Transform entries into a tree by replacing some LINE by VOID when need…
46 # The tree is walked from the bottom to the top, and column by column
47 # toward the right until an empty column is met which stops the algorith…
48
49 function tree(entries, num)
50 {
51 for (i = 1; !stop; i++) {
52 stop = tail = 1;
53 for (l = num; l > 0; l--) {
54 if (entries[l":"i] == LINE && tail) {
55 entries[l":"i] = VOID;
56 stop = 0;
57 } else if (entries[l":"i] == NODE && tail) {
58 entries[l":"i] = TAIL;
59 tail = stop = 0;
60 } else if (!entries[l":"i]) {
61 tail = 1;
62 }
63 }
64 }
65 }
66
67 # Print all entries line by line.
68
69 function display(entries, num)
70 {
71 for (l = 1; l <= num; l++) {
72 for (i = 1; entries[l":"i] != ""; i++)
73 printf("%s", entries[l":"i]);
74 printf("%s\n", entries[l"name"]);
75 }
76 }
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.