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