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