#!/usr/local/bin/perl5 -w
#use strict;
###############################################################################
#
#  機能 :
#         enum宣言をdefineに変換
#  書式 :
#         EnumToDefine.pl <enum宣言ファイル名>
#
#  $Id: EnumToDefine.pl,v 1.7 2000-09-18 15:28:37+09 otsuki Exp $
#
###############################################################################
{
    my @line;
    my $sw = 0;
    my $value_base = 0;
    my $value_offset = 0;
    print '/* -*- mode: fundamental; -*- */', "\n";
    while(<>) {
	chomp;
	if ($_ =~ /\#/) {
	    print "/* " . $_ . " */\n";
	}
	else {
	    s/[ \t]//g;
	    if ($_ =~ /enum/) { 
		# enum 開始の場合
		$sw = 1;
		$value_base = 0;
		$value_offset = 0;
		print "/* enum begin */\n";
	    }
	    else {
		if (($sw == 1) && ($_ =~ /[a-zA-Z0-9_]/)) {
		    # enum 宣言の define への変換
		    s/\t//g;
		    @line = split(',', $_);
		    foreach my $i (0.. $#line) {
			if ($line[$i] =~ /=/) {
			    my @line2 = split('=', $line[$i]);
			    $value_base = "(" . $line2[1] . ")";
			    $value_offset = 0;
			    print "#define $line2[0] $value_base\n";
			} else {
			    print "#define $line[$i] ";
			    if ($value_base eq 0) {
				print "$value_offset\n";
			    } else {
				print "\($value_base+$value_offset\)\n";
			    }
			}
			$value_offset++;
		    }
		}
		else {
#		    if (!($_ =~ /\};/)) {
#			print "\n";
#		    }
		}
	    }

	    if ($_ =~ /\};/) {
		# enum 終了の場合
		$sw = 0;
		print "/* enum end */\n";
	    }
		
	}
    }
}
