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