#! /bin/sh
# This file is part of GNU epsilon, a functional language implementation

# Copyright (C) 2002, 2003 Luca Saiu

# GNU epsilon is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published
# by the Free Software Foundation; either version 2, or (at your
# option) any later version.

# GNU epsilon is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with epsilon; see the file COPYING.  If not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.


# Remove eamcs backups from c_instructions/*, which would clobber this
# script if present:
./make_all_c_instructions

# Create the first, static part:
echo "/* This file is automatically generated. Don't edit */" > eamld_fix_references.c
cat eamld_fix_references_c.head >> eamld_fix_references.c

# Output the cases (note that label and string references are fixed elsewhere):
cd c_instructions
for CATEGORY in *; do
  if test $CATEGORY != "CVS"; then
      cd $CATEGORY
      echo "    /* Instructions of category $CATEGORY: */" >> ../../eamld_fix_references.c
      for I in *; do
	  if test $I != "CVS"; then
	      echo "    case $I:" >> ../../eamld_fix_references.c
	  fi
      done
      if test $CATEGORY = global; then
	  echo "    { FIX_PARAMETER(1, global); break; }" >> ../../eamld_fix_references.c
      elif test $CATEGORY = exception; then
	  echo "    { FIX_PARAMETER(1, exception); break; }" >> ../../eamld_fix_references.c
      elif test $CATEGORY = exception_label; then
	  echo "    { FIX_PARAMETER(1, exception); break; }" >> ../../eamld_fix_references.c
      elif test $CATEGORY = string; then
	  echo "    { FIX_PARAMETER(1, string); break; }" >> ../../eamld_fix_references.c
      elif test $CATEGORY = string_string; then
	  echo "    { FIX_PARAMETER(1, string); FIX_PARAMETER(2, string); break; }" >> ../../eamld_fix_references.c
      else
	  echo "    { /* Nothing to fix */ break; }" >> ../../eamld_fix_references.c
      fi
      echo >> ../../eamld_fix_references.c
      cd ..
  fi
done
cd ..

# Append the last, static part:
cat eamld_fix_references_c.tail >> eamld_fix_references.c
