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