#!/usr/bin/perl

use strict;
my $H = "genscn.h";
my $C = "genscn.c";

my @SCENE;

open H, ">$H" or die($!);
open C, ">$C" or die($!);

print H <<_T_;
#define GAMEOVER (-1)
#define START 0

_T_

my $n = 1;
while(<>){
  chop;
  if(/^\#/){
    next;
  }

  my ($sym,$desc) = split(/\s+/, $_);
  if($sym){
    push(@SCENE, "$sym\t$desc");
    print H qq'#define $sym $n\n';
    print H qq'extern int action_$sym(int, const char *, const char *);\n';
    ++$n;
  }
}
print H qq'#define MAX_SCENE $n\n';

my $def_action = `egrep '^def_action_' action.c`;
my @def_action = split(/\n/, $def_action);
map {s/\(.*//;}@def_action;

my $hook_action = `egrep '^hook_action_' action.c`;
my @hook_action = split(/\n/, $hook_action);
map {s/\(.*//;}@hook_action;

my $i;
foreach $i (@def_action)
{
  print H "extern int $i(int, const char *, const char *);\n";
}

my $i;
foreach $i (@hook_action)
{
  print H "extern int $i(int, const char *, const char *);\n";
}

print C <<_T_;
#include "minami.h"
#include "scene.h"

SceneTab sceneTab[MAX_SCENE + 1] = {
	{0, "dummy", "dummy"},
_T_

my $i;
my $n;
foreach $i (@SCENE)
{
  ++$n;
  my @l = split(/\t/, $i);
  print C qq'\t{$n, "$l[0]", "$l[1]"},\n';
}

print C <<_T_;
};
_T_
