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