1178784Skmacy#!/usr/bin/awk -f 2178784Skmacy# 3178784Skmacy# $FreeBSD$ 4178784Skmacy# 5178784Skmacy# Merge two boot loader help files for FreeBSD 3.0 6178784Skmacy# Joe Abley <jabley@patho.gen.nz> 7178784Skmacy 8256829SnpBEGIN \ 9256829Snp{ 10256829Snp state = 0; 11256829Snp first = -1; 12178784Skmacy ind = 0; 13178784Skmacy} 14178784Skmacy 15178784Skmacy# beginning of first command 16178784Skmacy/^###/ && (state == 0) \ 17178784Skmacy{ 18178784Skmacy state = 1; 19178784Skmacy next; 20178784Skmacy} 21178784Skmacy 22178784Skmacy# entry header 23178784Skmacy/^# T[[:graph:]]+ (S[[:graph:]]+ )*D[[:graph:]][[:print:]]*$/ && (state == 1) \ 24178784Skmacy{ 25178784Skmacy match($0, " T[[:graph:]]+"); 26178784Skmacy T = substr($0, RSTART + 2, RLENGTH - 2); 27178784Skmacy match($0, " S[[:graph:]]+"); 28178784Skmacy SSTART = RSTART 29178784Skmacy S = (RLENGTH == -1) ? "" : substr($0, RSTART + 2, RLENGTH - 2); 30178784Skmacy match($0, " D[[:graph:]][[:print:]]*$"); 31178784Skmacy D = substr($0, RSTART + 2); 32178784Skmacy if (SSTART > RSTART) 33178784Skmacy S = ""; 34178784Skmacy 35178784Skmacy # find a suitable place to store this one... 36178784Skmacy ind++; 37178784Skmacy if (ind == 1) 38178784Skmacy { 39178784Skmacy first = ind; 40178784Skmacy help[ind, "T"] = T; 41178784Skmacy help[ind, "S"] = S; 42178784Skmacy help[ind, "link"] = -1; 43178784Skmacy } else { 44178784Skmacy i = first; j = -1; 45178784Skmacy while (help[i, "T"] help[i, "S"] < T S) 46178784Skmacy { 47178784Skmacy j = i; 48178784Skmacy i = help[i, "link"]; 49178784Skmacy if (i == -1) break; 50178784Skmacy } 51178784Skmacy 52178784Skmacy if (i == -1) 53256829Snp { 54178784Skmacy help[j, "link"] = ind; 55178784Skmacy help[ind, "link"] = -1; 56178784Skmacy } else { 57178784Skmacy help[ind, "link"] = i; 58178784Skmacy if (j == -1) 59178784Skmacy first = ind; 60256829Snp else 61178784Skmacy help[j, "link"] = ind; 62178784Skmacy } 63178784Skmacy } 64256829Snp help[ind, "T"] = T; 65178784Skmacy help[ind, "S"] = S; 66178784Skmacy help[ind, "D"] = D; 67178784Skmacy 68178784Skmacy # set our state 69178784Skmacy state = 2; 70178784Skmacy help[ind, "text"] = 0; 71256829Snp next; 72178784Skmacy} 73178784Skmacy 74178784Skmacy# end of last command, beginning of next one 75178784Skmacy/^###/ && (state == 2) \ 76256829Snp{ 77178784Skmacy state = 1; 78178784Skmacy} 79 80(state == 2) \ 81{ 82 sub("[[:blank:]]+$", ""); 83 if (help[ind, "text"] == 0 && $0 ~ /^[[:blank:]]*$/) next; 84 help[ind, "text", help[ind, "text"]] = $0; 85 help[ind, "text"]++; 86 next; 87} 88 89# show them what we have (it's already sorted in help[]) 90END \ 91{ 92 node = first; 93 while (node != -1) 94 { 95 printf "################################################################################\n"; 96 printf "# T%s ", help[node, "T"]; 97 if (help[node, "S"] != "") printf "S%s ", help[node, "S"]; 98 printf "D%s\n\n", help[node, "D"]; 99 for (i = 0; i < help[node, "text"]; i++) 100 printf "%s\n", help[node, "text", i]; 101 node = help[node, "link"]; 102 } 103 printf "################################################################################\n"; 104} 105