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