BEGIN { print "/* Machine generated. Do not edit. */" print "" lines = 0 } { split($0, array, FS) if (NF > 0 && length(array[1]) > 0) { lines++ # save the first word (or '&' separated list of words) in the names array if (array[2] == "&") { if (array[4] == "&") { names[lines] = array[1] " " array[2] " " array[3] " " array[4] " " array[5] start = 6 } else { names[lines] = array[1] " " array[2] " " array[3] start = 4 } } else { names[lines] = array[1] start = 2 } # create the WCHAR version of the name printf "static const WCHAR name%dW[] = { ", lines i = 1 len = length(names[lines]) + 1 while (i < len) { printf "'%s',", substr(names[lines],i,1) i++ } print "0 };" # create the CHAR version of the description printf "static const CHAR description%dA[] = \"", lines word = start while (word < (NF + 1)) { printf "%s", array[word] if (word < NF ) printf " " word++ } print "\";" # create the WCHAR version of the description printf "static const WCHAR description%dW[] = { ", lines word = start while (word < (NF + 1)) { i = 1 len = length(array[word]) + 1 while (i < len) { if (substr(array[word],i,1) == "'") printf "'\\''," else printf "'%s',", substr(array[word],i,1) i++ } if (word < NF ) printf "' '," word++ } print "0 };" } } END { print "" print "static const error_info info[] = {" i = 1 while ( i <= lines) { split(names[i], words, FS) printf " { %s, \"%s\", name%dW, description%dA, description%dW },\n", words[1], names[i], i, i,i i++ } print "};" }