#! /bin/sh
# $Id$
# adapt lex template for C++ use

# Copyright (C) 1995 Technische Universitaet Braunschweig, Germany.
# Written by Andreas Zeller <zeller@gnu.org>.
# 
# This file is part of DDD.
# 
# DDD 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 3 of the License, or (at your option) any later version.
# 
# DDD 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 DDD -- see the file COPYING.
# If not, see <http://www.gnu.org/licenses/>.
# 
# DDD is the data display debugger.
# For details, see the DDD World-Wide-Web page, 
# `http://www.gnu.org/software/ddd/',
# or send a mail to the DDD developers <ddd@gnu.org>.

this=`basename $0`	
path=`dirname $0`

# prefer system V sed (does not strip initial space)
sed=sed
if [ -f /usr/5bin/sed ]; then
  sed=/usr/5bin/sed
fi

static=cat
if [ "$1" = -static ]; then
  static="/bin/sh $path/make-static"
  shift
fi

prefix=cat
if [ "$1" = -prefix ]; then
  prefix="$sed s!yy!$2!g"
  shift 2
fi

if [ $# != 0 ]; then
  echo "$this: usage: $this [-static] [-prefix PREFIX]" >&2
  exit 1
fi
  
if [ ! -f lex.yy.c ]; then
  echo $this: lex.yy.c not found >&2
  exit 1
fi

head lex.yy.c | grep $this > /dev/null
if [ $? = 0 ]; then
  echo $this: lex.yy.c is already in C++ format >&2
  exit 1
fi

grep '@(#)ncform.*SMI' lex.yy.c > /dev/null
if [ $? = 0 ]; then
  lexpar=sun
fi

grep 'generated by flex' lex.yy.c > /dev/null
if [ $? = 0 ]; then
  lexpar=flex
fi

if [ "$lexpar" = "" ]; then
  echo "$this: cannot determine lex type -- reverting to flex" >&2
  lexpar=flex
fi
  
script=$path/$this.$lexpar

$sed -f $script lex.yy.c | $static | $prefix > lex.yy.cc

diff -D__cplusplus lex.yy.c lex.yy.cc > lex.tmp
$sed -e 's!#else *__cplusplus$!#else!
s!#endif *__cplusplus$!#endif /* __cplusplus */!' lex.tmp > lex.yy.c

rm -f lex.tmp
exit 0
