merge_help.awk revision 1.2.16.2 1 1.2.16.2 rpaulo #$NetBSD: merge_help.awk,v 1.2.16.2 2006/09/09 02:40:39 rpaulo Exp $
2 1.2.16.2 rpaulo #!/usr/bin/awk -f
3 1.2.16.2 rpaulo #
4 1.2.16.2 rpaulo # $FreeBSD: src/sys/boot/common/merge_help.awk,v 1.5 2001/11/07 17:53:25 fenner Exp $
5 1.2.16.2 rpaulo #
6 1.2.16.2 rpaulo # Merge two boot loader help files for FreeBSD 3.0
7 1.2.16.2 rpaulo # Joe Abley <jabley (at] patho.gen.nz>
8 1.2.16.2 rpaulo
9 1.2.16.2 rpaulo BEGIN \
10 1.2.16.2 rpaulo {
11 1.2.16.2 rpaulo state = 0;
12 1.2.16.2 rpaulo first = -1;
13 1.2.16.2 rpaulo ind = 0;
14 1.2.16.2 rpaulo }
15 1.2.16.2 rpaulo
16 1.2.16.2 rpaulo # beginning of first command
17 1.2.16.2 rpaulo /^###/ && (state == 0) \
18 1.2.16.2 rpaulo {
19 1.2.16.2 rpaulo state = 1;
20 1.2.16.2 rpaulo next;
21 1.2.16.2 rpaulo }
22 1.2.16.2 rpaulo
23 1.2.16.2 rpaulo # entry header
24 1.2.16.2 rpaulo /^# T[[:graph:]]+ (S[[:graph:]]+ )*D[[:graph:]][[:print:]]*$/ && (state == 1) \
25 1.2.16.2 rpaulo {
26 1.2.16.2 rpaulo match($0, " T[[:graph:]]+");
27 1.2.16.2 rpaulo T = substr($0, RSTART + 2, RLENGTH - 2);
28 1.2.16.2 rpaulo match($0, " S[[:graph:]]+");
29 1.2.16.2 rpaulo S = (RLENGTH == -1) ? "" : substr($0, RSTART + 2, RLENGTH - 2);
30 1.2.16.2 rpaulo match($0, " D[[:graph:]][[:print:]]*$");
31 1.2.16.2 rpaulo D = substr($0, RSTART + 2);
32 1.2.16.2 rpaulo
33 1.2.16.2 rpaulo # find a suitable place to store this one...
34 1.2.16.2 rpaulo ind++;
35 1.2.16.2 rpaulo if (ind == 1)
36 1.2.16.2 rpaulo {
37 1.2.16.2 rpaulo first = ind;
38 1.2.16.2 rpaulo help[ind, "T"] = T;
39 1.2.16.2 rpaulo help[ind, "S"] = S;
40 1.2.16.2 rpaulo help[ind, "link"] = -1;
41 1.2.16.2 rpaulo } else {
42 1.2.16.2 rpaulo i = first; j = -1;
43 1.2.16.2 rpaulo while (help[i, "T"] help[i, "S"] < T S)
44 1.2.16.2 rpaulo {
45 1.2.16.2 rpaulo j = i;
46 1.2.16.2 rpaulo i = help[i, "link"];
47 1.2.16.2 rpaulo if (i == -1) break;
48 1.2.16.2 rpaulo }
49 1.2.16.2 rpaulo
50 1.2.16.2 rpaulo if (i == -1)
51 1.2.16.2 rpaulo {
52 1.2.16.2 rpaulo help[j, "link"] = ind;
53 1.2.16.2 rpaulo help[ind, "link"] = -1;
54 1.2.16.2 rpaulo } else {
55 1.2.16.2 rpaulo help[ind, "link"] = i;
56 1.2.16.2 rpaulo if (j == -1)
57 1.2.16.2 rpaulo first = ind;
58 1.2.16.2 rpaulo else
59 1.2.16.2 rpaulo help[j, "link"] = ind;
60 1.2.16.2 rpaulo }
61 1.2.16.2 rpaulo }
62 1.2.16.2 rpaulo help[ind, "T"] = T;
63 1.2.16.2 rpaulo help[ind, "S"] = S;
64 1.2.16.2 rpaulo help[ind, "D"] = D;
65 1.2.16.2 rpaulo
66 1.2.16.2 rpaulo # set our state
67 1.2.16.2 rpaulo state = 2;
68 1.2.16.2 rpaulo help[ind, "text"] = 0;
69 1.2.16.2 rpaulo next;
70 1.2.16.2 rpaulo }
71 1.2.16.2 rpaulo
72 1.2.16.2 rpaulo # end of last command, beginning of next one
73 1.2.16.2 rpaulo /^###/ && (state == 2) \
74 1.2.16.2 rpaulo {
75 1.2.16.2 rpaulo state = 1;
76 1.2.16.2 rpaulo }
77 1.2.16.2 rpaulo
78 1.2.16.2 rpaulo (state == 2) \
79 1.2.16.2 rpaulo {
80 1.2.16.2 rpaulo sub("[[:blank:]]+$", "");
81 1.2.16.2 rpaulo if (help[ind, "text"] == 0 && $0 ~ /^[[:blank:]]*$/) next;
82 1.2.16.2 rpaulo help[ind, "text", help[ind, "text"]] = $0;
83 1.2.16.2 rpaulo help[ind, "text"]++;
84 1.2.16.2 rpaulo next;
85 1.2.16.2 rpaulo }
86 1.2.16.2 rpaulo
87 1.2.16.2 rpaulo # show them what we have (it's already sorted in help[])
88 1.2.16.2 rpaulo END \
89 1.2.16.2 rpaulo {
90 1.2.16.2 rpaulo node = first;
91 1.2.16.2 rpaulo while (node != -1)
92 1.2.16.2 rpaulo {
93 1.2.16.2 rpaulo printf "################################################################################\n";
94 1.2.16.2 rpaulo printf "# T%s ", help[node, "T"];
95 1.2.16.2 rpaulo if (help[node, "S"] != "") printf "S%s ", help[node, "S"];
96 1.2.16.2 rpaulo printf "D%s\n\n", help[node, "D"];
97 1.2.16.2 rpaulo for (i = 0; i < help[node, "text"]; i++)
98 1.2.16.2 rpaulo printf "%s\n", help[node, "text", i];
99 1.2.16.2 rpaulo node = help[node, "link"];
100 1.2.16.2 rpaulo }
101 1.2.16.2 rpaulo printf "################################################################################\n";
102 1.2.16.2 rpaulo }
103