#!/usr/bin/perl

use strict;

open C, ">item.c";
open H, ">item.h";

print H <<_T_;
#ifndef ITEM_H
#define ITEM_H
_T_

print C <<_T_;
#include <stdio.h>
#include <string.h>
#include "minami.h"
#include "item.h"

static ItemTab itemtab[] = \{
	{0, "", "", 0, 0},
_T_

my $N = 0;
my %flags;

my @action_list;
my %action_list;
my %prog_list;
my %prog_list2;

while(<>){
  chop;
  if(/^\#/){
    next;
  }

  my @l = split(/:/, $_);
  my $name = shift @l;
  my $price = shift @l;
  my $flag = shift @l;
  my $ename = shift @l;
  my @al = @l;

  my $sym = $ename;
  $sym =~ tr/a-z/A-Z/;
  $sym =~ s/ /_/g;

  $sym =~ s/\n//g;
  $name =~ s/\n//g;
  $ename =~ s/\n//g;
  my $csym = $sym;
  $csym =~ s/[ \-]/_/g;

  if(!$name){
    next;
  }

  while(@al){
    my $__ = shift @al;
    my ($action, $cond, $prog, $msg, $prog2) = split(/\//, $__);
    my @a = split(/\|/, $action);
    if($msg){
      $msg = "$msg";
    }
    if(!$cond){
      $cond = 1;
    }
    map{
      push(@action_list, "$csym/$_/$cond");
      $action_list{"$csym/$_/$cond"} = $msg;
      $prog_list{"$csym/$_/$cond"} = $prog;
      $prog_list2{"$csym/$_/$cond"} = $prog2;
    } @a;
  }

  ++$N;

  my $flag = 0;
  if($csym){
    print H "#define ITEM_$csym $N\n";
    print C <<_T_;
	\{$N, "$name", "$ename", $flag, $price,\},
_T_
  }
}

++$N;

print H "\n\n\n";

print H <<_T_;

#define NUM_ITEMS	$N

#endif
_T_

print C <<_T_;
	{0},
\};

ItemTab *
ItemByNum(int n)
{
    return &itemtab[n];
}

ItemTab *
ItemByName(const char *name)
{
    int i;
    ItemTab *itab;

    for(i=1 ; i<NUM_ITEMS; ++i){
	itab = ItemByNum(i);
	if(!itab->name)
	    return NULL;

	if(EQ(itab->ename, name))
	    return itab;
    }
    return NULL;
}
_T_
