mkenum 870 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #!$PLAN9/bin/rc
  2. awk '
  3. BEGIN{
  4. oargc = 0;
  5. for(argc = 1; argc < ARGC; argc++){
  6. if(ARGV[argc] !~ /^-.+/ || ARGV[argc] ~ /--/)
  7. break;
  8. if(ARGV[argc] != "-D")
  9. oargv[ARGV[argc]] = oargc++;
  10. else
  11. DEBUG = 1;
  12. ARGV[argc] = "";
  13. }
  14. }
  15. /^enum([ \t]*{|$)/{
  16. inenum = 1;
  17. if(DEBUG)
  18. printf "inenum = 1\n";
  19. next;
  20. }
  21. inenum && /^};$/{
  22. if(DEBUG)
  23. printf "inenum = 0\n";
  24. inenum = 0;
  25. }
  26. inenum && $0 ~ /^[ \t]+[_A-Za-z][_0-9A-Za-z]+[ \t]+=[ \t]+[0-9A-Z_a-z()<> ]+,/{
  27. tab = "\t";
  28. if(length($1) < 8)
  29. sep = tab tab;
  30. else
  31. sep = tab;
  32. split($3, a, ",");
  33. printf "#define %s%s%s", $1, sep, a[1];
  34. if(match($0, /\/\*.*\*\/$/)){
  35. len = length(a[1]);
  36. sep = "";
  37. while(len < 24){
  38. sep = sep tab;
  39. len += 8;
  40. }
  41. printf "%s%s", sep, substr($0, RSTART);
  42. }
  43. printf "\n"
  44. }
  45. !inenum && /^#(define|include) /{
  46. printf "%s\n", $0;
  47. }
  48. /^$/{
  49. printf "\n";
  50. }
  51. END{
  52. }' $*