function sort(V, N, tmp, i, j) { V[-1] = ""; # Used as a sentinel before V[0]. for (i = 1; i < N; i++) for (j = i; V[j - 1] > V[j]; j--) { tmp = V[j]; V[j] = V[j - 1]; V[j - 1] = tmp; } return; } BEGIN { nname = 0; } /^[0123456789abcdef]+ [ABCDGINRSTUVW] / { if ($3 != "symbols" && $3 != "symbols_nelts") { name[nname] = $3; nname++; } } END { sort(name, nname); print "#include \"loader/symbols-def.h\"\n"; # Must deal with compiler builtins etc. for (x = 0; x < nname; x++) { if (name[x] == "printf") print "extern int printf(const char *, ...);"; else print "extern int " name[x]"();"; } print "\n"; # nname++: An { 0, 0 } entry is added at the end of the vector. print "const int symbols_nelts = " nname+1 ";"; print "const struct symbols symbols[" nname+1 "] = {"; for (x = 0; x < nname; x++) print "{ \"" name[x] "\", (void *)&"name[x]" },"; print "{ (const char *)0, (void *)0} };"; }