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