#! /usr/bin/perl
#
#  TOPPERS/JSP Kernel
#      Toyohashi Open Platform for Embedded Real-Time Systems/
#      Just Standard Profile Kernel
# 
#  Copyright (C) 2003 by Embedded and Real-Time Systems Laboratory
#                              Toyohashi Univ. of Technology, JAPAN
#  Copyright (C) 2005 by Embedded and Real-Time Systems Laboratory
#              Graduate School of Information Science, Nagoya Univ., JAPAN
# 
#  嵭Ԥϡʲ (1)(4) ξ狼Free Software Foundation 
#  ˤäƸɽƤ GNU General Public License  Version 2 ˵
#  ҤƤ˸¤ꡤܥեȥܥեȥ
#  ѤΤޤࡥʲƱˤѡʣѡۡʰʲ
#  ѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
#  (1) ܥեȥ򥽡ɤηѤˤϡ嵭
#      ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
#      ˴ޤޤƤ뤳ȡ
#  (2) ܥեȥ򡤥饤֥ʤɡ¾Υեȥȯ˻
#      ѤǤǺۤˤϡۤȼɥȡ
#      ԥޥ˥奢ʤɡˤˡ嵭ɽѾ浪Ӳ
#      ̵ݾڵǺܤ뤳ȡ
#  (3) ܥեȥ򡤵Ȥ߹ʤɡ¾Υեȥȯ˻
#      ѤǤʤǺۤˤϡΤ줫ξ
#      ȡ
#    (a) ۤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
#        ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
#    (b) ۤη֤̤ˡˤäơTOPPERSץȤ
#        𤹤뤳ȡ
#  (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
#      ⡤嵭ԤTOPPERSץȤդ뤳ȡ
# 
#  ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥ
#  TOPPERSץȤϡܥեȥ˴ؤơŬѲǽ
#  ޤơʤݾڤԤʤޤܥեȥѤˤľ
#  ŪޤϴŪʤ»˴ؤƤ⡤Ǥʤ
# 
#  @(#) $Id: genrename,v 1.4 2005/06/08 05:33:46 hiro Exp $
# 

#
#  ͡
#
sub generate_define
{
	local($sym, $prefix) = @_;

	print FILE "#define ",$prefix,$sym;
	print FILE "\t" if (length($prefix.$sym) < 8);
	print FILE "\t" if (length($prefix.$sym) < 16);
	print FILE "\t",$prefix,"_kernel_",$sym,"\n";
}

#
#  ͡
#
sub generate_undef
{
	local($sym, $prefix) = @_;

	print FILE "#undef ",$prefix,$sym,"\n";
}

#
#  顼å
#
if ($#ARGV != 0) {
	die "Usage: genrename <prefix>\n";
}

#
#  
#
@syms = ();
$name = $ARGV[0];
$NAME = $name; $NAME =~ y/a-z/A-Z/;

$infile = $name."_rename.def";
$defsym_rename = "_".$NAME."_RENAME_H_";
$defsym_unrename = "_".$NAME."_UNRENAME_H_";

#
#  ܥꥹȤɤ߹
#
open(INFILE, $infile) || die "Cannot open $infile";
while ($line = <INFILE>) {
	chomp $line;
	@syms = (@syms, $line);
}
close(INFILE);

#
#  ???_rename.h 
#
$file = $name."_rename.h";
open(FILE, "> ".$file);

print FILE <<END;
/* This file is generated from $infile by genrename. */

#ifndef $defsym_rename
#define $defsym_rename

END

foreach $sym (@syms) {
	if ($sym =~ /^#(.*)$/) {
		print FILE "/*\n";
		print FILE " * ",$1,"\n";
		print FILE " */\n";
	}
	elsif ($sym ne "") {
		do generate_define($sym, "");
	}
	else {
		print FILE "\n";
	}
}

print FILE <<END;

#ifdef LABEL_ASM

END

foreach $sym (@syms) {
	if ($sym =~ /^#(.*)$/) {
		print FILE "/*\n";
		print FILE " * ",$1,"\n";
		print FILE " */\n";
	}
	elsif ($sym ne "") {
		do generate_define($sym, "_");
	}
	else {
		print FILE "\n";
	}
}

print FILE <<END;

#endif /* LABEL_ASM */
#endif /* $defsym_rename */
END

#
#  ???_unrename.h 
#
$file = $name."_unrename.h";
open(FILE, "> ".$file);

print FILE <<END;
/* This file is generated from $infile by genrename. */

#ifdef $defsym_unrename
#undef $defsym_unrename

END

foreach $sym (@syms) {
	if ($sym =~ /^#(.*)$/) {
		print FILE "/*\n";
		print FILE " * ",$1,"\n";
		print FILE " */\n";
	}
	elsif ($sym ne "") {
		do generate_undef($sym, "");
	}
	else {
		print FILE "\n";
	}
}

print FILE <<END;

#ifdef LABEL_ASM

END

foreach $sym (@syms) {
	if ($sym =~ /^#(.*)$/) {
		print FILE "/*\n";
		print FILE " * ",$1,"\n";
		print FILE " */\n";
	}
	elsif ($sym ne "") {
		do generate_undef($sym, "_");
	}
	else {
		print FILE "\n";
	}
}

print FILE <<END;

#endif /* LABEL_ASM */
#endif /* $defsym_unrename */
END

close(FILE);
