#!/bin/rc

awk '
BEGIN{
	oargc = 0;
	for(argc = 1; argc < ARGC; argc++){
		if(ARGV[argc] !~ /^-.+/ || ARGV[argc] ~ /--/)
			break;
		if(ARGV[argc] != "-D")
			oargv[ARGV[argc]] = oargc++;
		else
			DEBUG = 1;
		ARGV[argc] = "";
	}
}

/^enum([ \t]*{|$)/{
	inenum = 1;
	if(DEBUG)
		printf "inenum = 1\n";
	next;
}

inenum && /^};$/{
	if(DEBUG)
		printf "inenum = 0\n";
	inenum = 0;
}

inenum && $0 ~ /^[ \t]+[_A-Za-z][_0-9A-Za-z]+[ \t]+=[ \t]+[0-9A-Z_a-z()<> ]+,/{
	tab = "\t";
	if(length($1) < 8)
		sep = tab tab;
	else
		sep = tab;
	split($3, a, ",");
	printf "#define %s%s%s", $1, sep, a[1];
	if(match($0, /\/\*.*\*\/$/)){
		len = length(a[1]);
		sep = "";
		while(len < 24){
			sep = sep tab;
			len += 8;
		}
		printf "%s%s", sep, substr($0, RSTART);
	}
	printf "\n"
}

!inenum && /^#(define|include) /{
	printf "%s\n", $0;
}

/^$/{
	printf "\n";
}

END{
}' $*
