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