1178784Skmacy#!/usr/bin/awk -f
2178784Skmacy#
3178784Skmacy# $FreeBSD$
4178784Skmacy#
5178784Skmacy# Merge two boot loader help files for FreeBSD 3.0
6178784Skmacy# Joe Abley <jabley@patho.gen.nz>
7178784Skmacy
8256829SnpBEGIN \
9256829Snp{
10256829Snp  state = 0;
11256829Snp  first = -1;
12178784Skmacy  ind = 0;
13178784Skmacy}
14178784Skmacy
15178784Skmacy# beginning of first command
16178784Skmacy/^###/ && (state == 0) \
17178784Skmacy{
18178784Skmacy  state = 1;
19178784Skmacy  next;
20178784Skmacy}
21178784Skmacy
22178784Skmacy# entry header
23178784Skmacy/^# T[[:graph:]]+ (S[[:graph:]]+ )*D[[:graph:]][[:print:]]*$/ && (state == 1) \
24178784Skmacy{
25178784Skmacy  match($0, " T[[:graph:]]+");
26178784Skmacy  T = substr($0, RSTART + 2, RLENGTH - 2);
27178784Skmacy  match($0, " S[[:graph:]]+");
28178784Skmacy  SSTART = RSTART
29178784Skmacy  S = (RLENGTH == -1) ? "" : substr($0, RSTART + 2, RLENGTH - 2);
30178784Skmacy  match($0, " D[[:graph:]][[:print:]]*$");
31178784Skmacy  D = substr($0, RSTART + 2);
32178784Skmacy  if (SSTART > RSTART)
33178784Skmacy    S = "";
34178784Skmacy
35178784Skmacy  # find a suitable place to store this one...
36178784Skmacy  ind++;
37178784Skmacy  if (ind == 1)
38178784Skmacy  {
39178784Skmacy    first = ind;
40178784Skmacy    help[ind, "T"] = T;
41178784Skmacy    help[ind, "S"] = S;
42178784Skmacy    help[ind, "link"] = -1;
43178784Skmacy  } else {
44178784Skmacy    i = first; j = -1;
45178784Skmacy    while (help[i, "T"] help[i, "S"] < T S)
46178784Skmacy    {
47178784Skmacy      j = i;
48178784Skmacy      i = help[i, "link"];
49178784Skmacy      if (i == -1) break;
50178784Skmacy    }
51178784Skmacy
52178784Skmacy    if (i == -1)
53256829Snp    {
54178784Skmacy      help[j, "link"] = ind;
55178784Skmacy      help[ind, "link"] = -1;
56178784Skmacy    } else {
57178784Skmacy      help[ind, "link"] = i;
58178784Skmacy      if (j == -1)
59178784Skmacy        first = ind;
60256829Snp      else
61178784Skmacy        help[j, "link"] = ind;
62178784Skmacy    }
63178784Skmacy  }
64256829Snp  help[ind, "T"] = T;
65178784Skmacy  help[ind, "S"] = S;
66178784Skmacy  help[ind, "D"] = D;
67178784Skmacy
68178784Skmacy  # set our state
69178784Skmacy  state = 2;
70178784Skmacy  help[ind, "text"] = 0;
71256829Snp  next;
72178784Skmacy}
73178784Skmacy
74178784Skmacy# end of last command, beginning of next one
75178784Skmacy/^###/ && (state == 2) \
76256829Snp{
77178784Skmacy  state = 1;
78178784Skmacy}
79
80(state == 2) \
81{
82  sub("[[:blank:]]+$", "");
83  if (help[ind, "text"] == 0 && $0 ~ /^[[:blank:]]*$/) next;
84  help[ind, "text", help[ind, "text"]] = $0;
85  help[ind, "text"]++;
86  next;
87}
88
89# show them what we have (it's already sorted in help[])
90END \
91{
92  node = first;
93  while (node != -1)
94  {
95    printf "################################################################################\n";
96    printf "# T%s ", help[node, "T"];
97    if (help[node, "S"] != "") printf "S%s ", help[node, "S"];
98    printf "D%s\n\n", help[node, "D"];
99    for (i = 0; i < help[node, "text"]; i++)
100      printf "%s\n", help[node, "text", i];
101    node = help[node, "link"];
102  }
103  printf "################################################################################\n";
104}
105