#!/bin/sh 

arglist=$*

#------------------------------------------------------------------------------
is_pwd_writable()
{
	if [ ! -w `pwd` ]
	then
		echo "vconfig:  ERROR!  Invocation directory NOT writable.  Exiting."
		exit 1
	fi
}


#------------------------------------------------------------------------------
configure_echo()
{
	ECHOTMPFILE=.echotmp
	echo "hi there\c" > ${ECHOTMPFILE}
	if [ "`grep c ${ECHOTMPFILE}`" != "" ]
	then
		_n='-n'
		_c=''
	else
		_n=''
		_c='\c'
	fi
	rm -f ${ECHOTMPFILE}
}


#------------------------------------------------------------------------------
echo_n()
{
	echo $_n $* "$_c"
}


#------------------------------------------------------------------------------
initialize_variables()
{
  VERSION=3.23
  BATCH=0
  DONE=0
  RECORDING=0
  INTERACTIVE=1
  VERBOSE_MODE=0

  FIRM_REL="9502"

  SHM="n"
  D_LAI="n"
  CDC="n"
  SDFA="n"
  CWAVES="n"
  VERIMIX="n"
  GRAPHICS=""
  ENV="n"

  SCRIPT_FILE="cr_vlog"
  CDSROOT=`cds_root`
  CDSPLAT=`cds_plat`
  TARGET="SA"

  USER_PLI_FILE=".userplitemp"
  LOG_FILE="log_file"
  KEY_FILE="key_file"

  VLOG_O="$CDSROOT/tools/verilog/lib/vlog.o"
  OMNITASKS_O="$CDSROOT/tools/verilog/lib/omnitasks.o"
  SHM_VLOG_O="$CDSROOT/tools/verilog/lib/shm_vlog.o"
  VIRTUOS_ARCH="$CDSROOT/tools/virtuos${FIRM_REL}/lib/virtuos.a"
  VOLITE_ARCH="$CDSROOT/tools/virtuos${FIRM_REL}/lib/voLite.a"
  BP_VLOG_XFACE_O="$CDSROOT/tools/backplane/sim/verilog/simlink_td.o"
  CWAVES_O="$CDSROOT/tools/verilog/lib/cw_vlog.o"
  GR_VLOG_O="$CDSROOT/tools/verilog/lib/gr_vlog.o"
  VM_VLOG_O="$CDSROOT/tools/verilog/lib/vm_vlog.o"
  VERIUSER="$CDSROOT/tools/verilog/src/veriuser.c"
  ENV_VXL_O="$CDSROOT/tools/verilog/lib/env_vxl.o"
  ENV_ITC_O="$CDSROOT/tools/verilog/lib/env_itc.o"

  VLOG_LIB_DIR="$CDSROOT/tools/verilog/lib"
  VLOG_INC_DIR="$CDSROOT/tools/verilog/include"
  VHDL_LIB_DIR="$CDS_VHDL/lib"
  CMAN_LIB_DIR="$CDSROOT/tools/lib"

  EXE_NAME=verilog
  COMPILER=cc

  LAI_LIST="./lai_list"
  LAI_MOD_FILE="lai_mods.v"

  if [ "$LMC_VLOG" != "" -a -d "$LMC_VLOG" ]
  then
      LAI_LIB="$LMC_VLOG/lib"
      LAI_TOOL="$LMC_VLOG/tools"
  else
      LAI_LIB="/usr/lai_vlog/lib"
      LAI_TOOL="/usr/lai_vlog/tools"
  fi

  SAVE_PATH=$PATH
  PATH="/bin:/usr/bin:/usr/ucb:$SAVE_PATH"
}


#------------------------------------------------------------------------------
cleanup()
{
  \rm -rf $USER_PLI_FILE

  if [ $DONE -eq 0 ]; then
    \rm -rf $SCRIPT_FILE
    \rm -rf $LOG_FILE
    \rm -rf $KEY_FILE
    echo "Exiting !"
    PATH="$SAVE_PATH"
    exit 1
  fi
}

#------------------------------------------------------------------------------
process_batch_mode()
{
if [ $BATCH -eq 1 ]; then
  key_echo "Executing Script File !"
  ( $SCRIPT_FILE )
else
  key_echo    
  key_echo "*** SUCCESSFUL COMPLETION OF VCONFIG ***"
  key_echo "*** EXECUTE THE SCRIPT: $SCRIPT_FILE  TO BUILD: $TARGET_NAME"
  echo   
fi
}

#------------------------------------------------------------------------------
error_chk_cdsroot()
{
if [ -z "$CDSROOT" ]; then
  echo   
  key_echo "vconfig was not able to find the root of your Cadence software installation."
  key_echo "For vconfig to successfully find your Cadence software installation root"
  key_echo "the <install_dir>/tools/bin directory must be in your Unix search path."
  key_echo "Please add this directory to your Unix search path, and then re-run vconfig."
  echo   
  cleanup
fi
}

#------------------------------------------------------------------------------
process_argv()
{
while [ -n "$1" ]; do
  case "$1" in
    -i)
       # read responses from key file
       INTERACTIVE=0
       if [ -z "$2" -o -n "`echo $2 | awk '{print substr($0,1,1)}' | grep "-"`" ]; then
         usage 
         cleanup
       fi
       RESPONSE_FILE="$2"
       shift
       ;;

    -k)
       # record responses
       KEY=1
       if [ -z "`echo $2 | awk '{print substr($0,1,1)}' | grep "-"`" -a -n "$2" ]; then
         KEY_FILE="$2"
         shift
       fi
       \rm -rf $KEY_FILE
       OPTIONS="$OPTIONS -k $KEY_FILE"
       ;;

    -l)
       # record questions and responses
       RECORDING=1
       if [ -z "`echo $2 | awk '{print substr($0,1,1)}' | grep "-"`" -a -n "$2" ]; then
         LOG_FILE="$2"
         shift
       fi
       \rm -rf $LOG_FILE
       OPTIONS="$OPTIONS -l $LOG_FILE"
       ;;
    -v)
       VERBOSE_MODE=1
       ;;	
    -x) 
       # Execute Script file after it has been created
       BATCH=1
       OPTIONS="$OPTIONS -x"
       ;;

     *)
       usage
       cleanup
       ;;
  esac
 shift
done
}


#------------------------------------------------------------------------------
get_next_response()
{
  NEXT_RESPONSE=`head -${NUM} ${RESPONSE_FILE} | tail -1`
  NUM=`expr $NUM + 1`
}

#------------------------------------------------------------------------------
key_echo()
{
  echo "$*"
  if [ "$RECORDING" -eq 1 ]; then
    echo "$*" >> $LOG_FILE
  fi
}


#------------------------------------------------------------------------------
key_echo_n()
{
  echo_n $*
  if [ "$RECORDING" -eq 1 ]; then
    echo_n $* >> $LOG_FILE
  fi
}


#------------------------------------------------------------------------------
key_read()
{
  if [ $NUM -le $NUM_OF_RESPONSES -a $INTERACTIVE -eq 0 ]; then
    get_next_response
    VARIABLE="$NEXT_RESPONSE"
    if [ "$VARIABLE" = "" ]
    then
      echo "$DEFAULT"
    else
      echo "$VARIABLE"
    fi
  else
    INTERACTIVE=1
    read VARIABLE
  fi
}

#------------------------------------------------------------------------------
logger()
{
  if [ "$RECORDING" -eq 1 ]; then
    echo "$1"                                                       >> $LOG_FILE
  fi
  if [ "$KEY" -eq 1 ]; then
    echo "$1"                                                       >> $KEY_FILE
  fi
}


#------------------------------------------------------------------------------
usage()
{
  echo "Usage: vconfig [options]"
  echo
  echo "Where \`options' are:"
  echo
  echo " -x            Execute generated script file immediately after vconfig completes" 
  echo " -k [filename] Save all responses in 'filename' default: key_file" 
  echo " -l [filename] Save all questions and responses in 'filename' default: log_file" 
  echo " -i filename   Use responses to questions from 'filename'"
  echo
  PATH="$SAVE_PATH"
  exit 1
}


#------------------------------------------------------------------------------
divider()
{
  echo   
  echo "*******************************************************"
  echo   
}


#------------------------------------------------------------------------------
# this is the header that gets printed on the stdout when vconfig is invoked
# needs to be expanded - see Ron
header()
{
  clear
  divider
  echo "    VCONFIG VERSION $VERSION, THE CONFIGURATION PROGRAM"
  echo "          FOR THE Verilog-XL FAMILY OF PRODUCTS"
  divider
  echo "  o This program will prompt you for the Verilog-XL configuration"
  echo "    options with which to build your new Verilog-XL executable."
  echo   
  echo "  o The default answers to all questions appear inside of '[]'."
  echo   
  echo "  o Once VCONFIG completes, the script produced must be run to"
  echo "    build your new Verilog-XL executable."
}


#------------------------------------------------------------------------------
# this function prompts for a yes/no answer and checks its validity
# "returns" $VARIABLE
prompt_yn()
{
  VARIABLE="maybe"
  if [ -z "$DEFAULT" ]; then
    DEFAULT="n"
  fi
  while [ ! -z "$VARIABLE" -a "$VARIABLE" != "y" -a "$VARIABLE" != "n" ]; do
    key_echo_n "      <Enter y/n/CR> [$DEFAULT] : "
    key_read
  done
  if [ -z "$VARIABLE" ]; then
    VARIABLE="$DEFAULT"
  fi
  logger "$VARIABLE"
}


#------------------------------------------------------------------------------
prompt_w_default()
{
  DEFAULT="$1"
  key_echo_n "   [$DEFAULT] : "
  key_read
  RESPONSE="$VARIABLE"
  if [ -z "$RESPONSE" ]; then
    VARIABLE="$DEFAULT"
  else 
    VARIABLE="$RESPONSE"
  fi	
  logger "$VARIABLE"
}

#------------------------------------------------------------------------------
compute_platform()
{
	case $CDSPLAT in

	sun4)
		MOTIF_LIB_DIR="/usr/openwin/lib"
		MOTIF_LINK_CMD="-lXt -lX11"
		CC_LINK_OPT="-lm"
                LD_LINK_OPT=""
                VHDL_IMPORT_LINK_OPT="-Bdynamic -L\$CDS_VHDL/lib -llfsm -lcfc -lfmi"
		LM_MACHINE_DIRNAME="sun4_4.1"
		;;
	hppa)
		MOTIF_LIB_DIR=" /usr/lib/X11R4"
		MOTIF_LINK_CMD="-lXt -lX11"
		VLOG_LIB_DIR=" $VLOG_LIB_DIR"
		CMAN_LIB_DIR=" $CMAN_LIB_DIR"
		CC_LINK_OPT="+O3 -lm -lBSD -lcl -N"
		LD_LINK_OPT=""
                VHDL_IMPORT_LINK_OPT="-L\$CDS_VHDL/lib -llfsm -lcfc -lfmi"
		LM_MACHINE_DIRNAME="pa_hp80"
		;;
	ibmrs)
		MOTIF_LIB_DIR="/usr/lib"
		MOTIF_LINK_CMD="-lXm -lXt -lX11"
		CC_LINK_OPT="-lm -lld"
                LD_LINK_OPT=""
                VHDL_IMPORT_LINK_OPT="\$CDS_VHDL/lib/liblfsm.o \$CDS_VHDL/lib/libcfc.o \$CDS_VHDL/lib/libfmi.o -bE:\$CDS_VHDL/lib/cif.imp"
		LM_MACHINE_DIRNAME="rs6000_3.1"
		;;
	decds)
		MOTIF_LIB_DIR="/usr/lib"
		MOTIF_LINK_CMD="-lXt -lX11"
		CC_LINK_OPT="-lc -lm"
                LD_LINK_OPT=""
		LM_MACHINE_DIRNAME="DECstation_V4.2"
		;;
	sun4v)
		MOTIF_LIB_DIR="/usr/openwin/lib"
		MOTIF_LINK_CMD="-lXt -lX11"
		CC_LINK_OPT="-lsocket -lnsl -lm -ldl -lw -lgen"
                LD_LINK_OPT=""
                VHDL_IMPORT_LINK_OPT="-Bdynamic -L\$CDS_VHDL/lib -llfsm -lcfc -lfmi"
		LM_MACHINE_DIRNAME="sun4_5.2"
		;;
	deca)
		key_echo "vconfig:  ERROR.  Currently unsupported CDSPLAT:  $CDSPLAT"
		;;

	*)
		key_echo "vconfig:  ERROR.  Unsupported/unidentified CDSPLAT:  $CDSPLAT"
		exit 1
		;;
	esac
}

#------------------------------------------------------------------------------
target_q()
{
  divider
  key_echo    "Please choose a target.            "
  key_echo    "  valid choices: 1) Stand Alone,   "
  key_echo    "                 2) Backplane,     "
  key_echo    "                 3) Verilog Export,"
  key_echo    "                 4) VHDL Import    "

  VARIABLE=0
  while [ "$VARIABLE" -lt 1 -o "$VARIABLE" -gt 4 ]; do 
    key_echo_n "  <Enter 1-4> [1] : "
    key_read 
    if [ -z "$VARIABLE" ]; then
      VARIABLE=1
      break
    fi
  done
  logger "$VARIABLE"

  case $VARIABLE in
    1)
      TARGET="SA"
      TARGET_NAME="Stand Alone Verilog-XL"
      EXE_NAME=verilog
      ;;

    2)
      TARGET="BP"
      TARGET_NAME="Verilog-XL Backplane Object"
      EXE_NAME=simlink.o
      ;;

    3)
      TARGET="VE"
      TARGET_NAME="Verilog-XL Export Object"
      EXE_NAME=vxl_export.o
      SHM="y"
      ;;

    4)
      if [ -z "$CDS_VHDL" ]; then
        echo
        key_echo "The CDS_VHDL environment variable is not set !"
	key_echo "Please set this environment variable to point to the installation directory"
	key_echo "of your VHDL object files and re-run vconfig."
        echo
        cleanup
      fi
      TARGET="VI"
      TARGET_NAME="Verilog-XL with VHDL Import capability"
      EXE_NAME=verilog
      SHM="y"
      ;;
  esac
}


#------------------------------------------------------------------------------
output_script_q()
{
  divider
  key_echo "Please enter the the name of the output script."

  prompt_w_default "$SCRIPT_FILE"
  SCRIPT_FILE="$VARIABLE"

  if [ -f "$SCRIPT_FILE" ]; then
    echo "Renaming old $SCRIPT_FILE to $SCRIPT_FILE.bak"
    mv $SCRIPT_FILE $SCRIPT_FILE.bak
  fi
}


#------------------------------------------------------------------------------
exe_name_q()
{
  if [ "$TARGET" != "BP" ]; then
    divider
    key_echo "What do you want to name the Verilog-XL target ?"
    prompt_w_default "$EXE_NAME"
    EXE_NAME=$VARIABLE
  fi
}


#------------------------------------------------------------------------------
shm_q()
{
  if [ "$SHM" = "n" ]; then
    divider
    key_echo "Do you want to include the Simulation History"
    key_echo "Manager software in this Verilog-XL executable ?" 
    DEFAULT="y"
    prompt_yn
    SHM=$VARIABLE
  fi
}


#------------------------------------------------------------------------------
cwaves_q()
{
  if [ "$ENV" = "y" ]; then
    if [ "$TARGET" != "BP" -a "$TARGET" != "VE" -a "$CWAVES" = "n" ]; then
      divider
      key_echo "Do you want to include the CWAVES interface in this Verilog-XL executable ?"
      DEFAULT="y"
      prompt_yn
      CWAVES="$VARIABLE"
      if [ "$CWAVES" = "y" ]; then
        SHM="y"
        GRAPHICS="n"
        COMPILER="CC"
      fi
    fi
  fi
}


#------------------------------------------------------------------------------
graphics_q()
{
  if [ "$TARGET" != "BP" -a "$TARGET" != "VE" -a "$GRAPHICS" != "n" ]; then
    divider
    key_echo    "Do you want to include GR WAVES in this Verilog-XL executable ?"
    DEFAULT="n"
    prompt_yn
    GRAPHICS="$VARIABLE"
  fi
}


#------------------------------------------------------------------------------
dynamic_lai_q()
{
  if [ "$CDSPLAT" = "sun4" ]; then
    if [ "$TARGET" = "BP" ]; then
      echo
      key_echo "*** The Dynamic LAI interface cannot be used in the backplane confguration ***"
      key_echo "*** Please use the Static LAI interface ***"
    else
      divider
      key_echo "Do you want to include the Dynamic LAI interface in this Verilog-XL executable ?"
      DEFAULT="n"
      prompt_yn
      D_LAI="$VARIABLE"
    fi
  fi
}


#------------------------------------------------------------------------------
static_lai_q()
{
  if [ "$D_LAI" = "n" ]; then
    divider
    key_echo    "Do you want to include STATIC LOGIC AUTOMATION"
    key_echo    "models in this Verilog-XL executable ?"
    DEFAULT="n"
    prompt_yn
    S_LAI="$VARIABLE"
    if [ "$S_LAI" = "y" ]; then
      echo  
      key_echo "The model and interface files from Logic Automation"
      key_echo "must be linked in.  The default answers to"
      key_echo "the following questions match the locations in which"
      key_echo "the Logic Automation files are placed by the"
      key_echo "installation procedure and instructions sent by Logic"
      key_echo "Automation with their software.  If you are unsure of"
      key_echo "the location of any of these files, please check on"
      key_echo "this before continuing."
      echo  

      key_echo  "Location and name of file with list of models to"
      key_echo  "be linked ?"
      prompt_w_default "$LAI_LIST"
      while [ ! -f "$VARIABLE" ]; do
        key_echo "File $VARIABLE could not be opened"
        key_echo "for reading - please retype the file name"
        key_echo "or discontinue this program and check the"
        key_echo "file name."
        prompt_w_default "$LAI_LIST"
      done
      LAI_LIST="$VARIABLE"

      echo  
      key_echo  "Location of Logic Automation binary model files ?"
      prompt_w_default "$LAI_LIB"
      LAI_LIB="$VARIABLE"

      echo  
      key_echo  "Location of Logic Automation binary (tool) files ?"
      prompt_w_default "$LAI_TOOL"
      LAI_TOOL="$VARIABLE"

      echo  
      key_echo  "What do you want to name the file of concatenated"
      key_echo  "LOGIC AUTOMATION module definitions ?"
      prompt_w_default "$LAI_MOD_FILE"
      LAI_MOD_FILE="$VARIABLE"

#      for VARIABLE in `cat $LAI_LIST`; do
#        if [ ! -f $LAI_LIB/$VARIABLE.o ]; then
#          echo 
#	  key_echo "*** WARNING ***"
#          key_echo "  The Logic Automation model $LAI_LIB/$VARIABLE.o"
#          key_echo "  listed in the list file does not exist."
#          echo 
#          key_echo "  Do you want to write the link script anyway ?"
#	  DEFAULT="n"
#	  prompt_yn
#	  if [ "$VARIABLE" = "n" ]; then
#            cleanup
#          fi
#        fi
#      done
    fi 
  fi
}


#------------------------------------------------------------------------------
lmsi_q()
{
   divider
   key_echo    "Do you want to include the LMSI HARDWARE MODELER"
   key_echo    "interface software in this Verilog-XL executable ?"
   DEFAULT="n"
   prompt_yn
   LMSI=$VARIABLE

   if [ "$LMSI" = "y" ]; then

      if [ -n "$LM_DIR" ]; then
        for VARIABLE in `echo $LM_DIR | awk 'BEGIN {FS=":"} { for(i=1; i<=NF; i++) print $i}'`
          do
            if [ -d "$VARIABLE/../lib/$LM_MACHINE_DIRNAME" ]; then
              LMSI_DIR=$VARIABLE/../lib/$LM_MACHINE_DIRNAME 
	      break
            fi
          done
      fi

      if [ "$TARGET" != "BP" ]; then
        echo    
        key_echo "Please enter the path name to the directory containing your"
        key_echo "LMC modeler library files (*sfi.a)."
        echo "The default presented in [] reflects what was found using"
        echo "the LM_DIR environment variable"
        prompt_w_default $LMSI_DIR
        LMSI_DIR=$VARIABLE
      fi

   fi
}


#------------------------------------------------------------------------------
verimix_q()
{
    if [ "$TARGET" = "SA" -o "$TARGET" = "VI" ]; then
        divider
        key_echo    "Do you want to include the Verilog Mixed-Signal"
        key_echo    "interface software in this Verilog-XL executable ?"
        DEFAULT="n"
        prompt_yn
        VERIMIX=$VARIABLE 
    fi
}


#------------------------------------------------------------------------------
cdc_q()
{
  if [ "$D_LAI" != "y"  -a  "$TARGET" != "BP" ]; then
    divider
    key_echo "Do you want to include the CDC in this Verilog-XL executable ?" 
    DEFAULT="n"
    prompt_yn
    CDC=$VARIABLE
    if [ "$CDC" = "y" ]; then
      SDFA="y"
    fi
  fi
}


#------------------------------------------------------------------------------
sdfa_q()
{
  if [ "$CDC" = "n" -a "$SDFA" = "n" ]; then
    divider
    key_echo "Do you want to include the Standard Delay File"
    key_echo "Annotator in this Verilog-XL executable ?"
    DEFAULT="y"
    prompt_yn
    SDFA=$VARIABLE
  fi
}


#------------------------------------------------------------------------------
env_q()
{
  if [ "$TARGET" = "SA" -o "$TARGET" = "VI" ]; then
    if [ "$CDSPLAT" != "deca" -a "$CDSPLAT" != "decds" ]; then
      divider
      key_echo "Do you want to compile for the Verilog-XL environment ?"
      DEFAULT="y"
      prompt_yn
      ENV=$VARIABLE
      if [ "$ENV" = "y" ]; then
        SHM="y"
        CWAVES="y"
        GRAPHICS="n"
        COMPILER="CC"
      fi
    fi
  fi
}


#------------------------------------------------------------------------------
strip_path()
{
   # this routine strips the path portion of a file and modifies the extension
   # from .c to .o
   path_tail=`basename $VARIABLE`
   VARIABLE="`echo $path_tail | sed "s/\.c$/\.o/1"`"
}


#------------------------------------------------------------------------------
pli_q()
{
  divider
  key_echo "If you have any user routines which need to be linked to"
  key_echo "Verilog-XL, the output script will include a section to"
  key_echo "compile them, and they will be included in the link"
  key_echo "statement."
  echo 
  key_echo "The user template file 'veriuser.c' must always be"
  key_echo "included in the link statement.  What is the path"
  key_echo "name of this file ?"

  prompt_w_default $VERIUSER
  VERIUSER=$VARIABLE

  echo $VERIUSER                                                > $USER_PLI_FILE

  echo 
  key_echo "Please list any other user files to be linked with"
  key_echo "this Verilog-XL.  Files ending with '.c' will be taken"
  key_echo "as C source files and compiled before being linked"
  key_echo "with Verilog-XL.  All other files will be added to the"
  key_echo "final link command as-is."
  echo
  key_echo "For C++ linking in the Standalone mode, you must manually"
  key_echo "edit the resultant shell script."
  echo
  key_echo "List the files one at a time, terminating"
  key_echo "the list with a single '.'"

  # need to keep reading data until user gives a <CR> by itself
  key_echo_n "-----------> "
  key_read
  DATA="$VARIABLE"
  logger "$DATA"
  while [ "$DATA" != "." ]; do
    echo $DATA                                                 >> $USER_PLI_FILE
    key_echo_n "-----------> "
    key_read
    DATA="$VARIABLE"
    logger "$DATA"
  done
}


#------------------------------------------------------------------------------
create_script_file()
{
  echo    "#!/bin/csh -f"                            >> $SCRIPT_FILE
  echo    "#"                                        >> $SCRIPT_FILE
  echo    "#"                                        >> $SCRIPT_FILE
  echo    "#"                                        >> $SCRIPT_FILE
  echo_n "# Script to create : "                     >> $SCRIPT_FILE
  echo    $TARGET_NAME                               >> $SCRIPT_FILE
  if [ $VERBOSE_MODE -eq 1 ]
  then
    echo  "# Created by VCONFIG version $VERSION on `date` on $CDSPLAT"   >> $SCRIPT_FILE
  fi
  echo    "#"                                                 >> $SCRIPT_FILE

  if [ "$CDSPLAT" = "sun4" -a "$TARGET" != "BP" ]; then
    echo                                                      >> $SCRIPT_FILE
    echo "echo \"\""                                            >> $SCRIPT_FILE
    echo "echo \"\""                                            >> $SCRIPT_FILE
    echo "echo \"***** NOTICE *****\""                          >> $SCRIPT_FILE
    echo "echo \"\""                                            >> $SCRIPT_FILE
    echo "echo \" This release of Verilog-XL has been compiled with ANSI C \""                                                                 >> $SCRIPT_FILE
    echo "echo \" This linking script is going to use the cc or CC compiler and the \""                                                        >> $SCRIPT_FILE
    echo "echo \" ANSI C libraries to link your new Verilog-XL executable. \""                                                                 >> $SCRIPT_FILE
    echo "echo \" The Cadence supplied ANSI C library will be used. \""                                                     >> $SCRIPT_FILE
    echo "echo \"\""                                            >> $SCRIPT_FILE
    echo "echo \"******************\""                          >> $SCRIPT_FILE
    echo "echo \"\""                                            >> $SCRIPT_FILE
  fi

  if [ "$COMPILER" = "CC" ]; then
    if [ "$TARGET" = "SA" -o "$TARGET" = "VI" ]; then
      echo "#"                                                  >> $SCRIPT_FILE
      echo "setenv ccC cc"                                      >> $SCRIPT_FILE
      echo "setenv LLIBPATH \"-L$CDSROOT/tools/cxx-3.0.1/External/lib\"" >> $SCRIPT_FILE      
      echo "#"                                                  >> $SCRIPT_FILE
    fi
  fi

  if [ "$TARGET" = "VI" -a "$CDSPLAT" = "hppa" ]; then
    echo "setenv LDOPTS \"+s -E -Bimmediate\""                  >> $SCRIPT_FILE
    echo "#"                                                    >> $SCRIPT_FILE
  fi

  echo    "set verbose"                                         >> $SCRIPT_FILE
  echo    "#"                                                   >> $SCRIPT_FILE

  if [ "$S_LAI" = "y" ]; then

     echo    "# The following commands concatenate all of   "   >> $SCRIPT_FILE
     echo    "# the verilog syntax circuit description files"   >> $SCRIPT_FILE
     echo    "# for the LOGIC AUTOMATION models into one    "   >> $SCRIPT_FILE
     echo    "# file.  This file must be compiled along with"   >> $SCRIPT_FILE
     echo    "# all other verilog circuit description files "   >> $SCRIPT_FILE
     echo    "# if LOGIC AUTOMATION models are used in your "   >> $SCRIPT_FILE
     echo    "# circuit.                                    "   >> $SCRIPT_FILE
     echo    "#                                             "   >> $SCRIPT_FILE

     echo    "cat \\"                                           >> $SCRIPT_FILE
     for VARIABLE in `cat $LAI_LIST`
       do
         echo    "   $LAI_LIB/$VARIABLE.v \\"                   >> $SCRIPT_FILE
       done
     echo    "      > $LAI_MOD_FILE"                            >> $SCRIPT_FILE
     echo    "#"                                                >> $SCRIPT_FILE

  fi

# Is there any pre-compiling needing to be done ?
# If so - do it here !
  if [ "$TARGET" = "BP" -o "$TARGET" = "VE" -o "$COMPILER" = "CC" ]; then
    if [ -f $USER_PLI_FILE ]; then
    FIRST_C_FILE=1
      for DATA in `cat $USER_PLI_FILE`; do
        if [ -n "`echo $DATA|egrep '\.c$'`" ]; then
          if [ $FIRST_C_FILE -eq 1 ]; then
            echo "#"                                            >> $SCRIPT_FILE
            echo "# The following line(s) will pre-compile your" >> $SCRIPT_FILE
            echo "# PLI C source files before the linking step." >> $SCRIPT_FILE
            echo "#"                                            >> $SCRIPT_FILE
            FIRST_C_FILE=0
          fi
          echo "cc -c $DATA \\"                                 >> $SCRIPT_FILE
          echo "   -I$VLOG_INC_DIR"                             >> $SCRIPT_FILE
        fi
      done
    fi
  fi 
# ==========

  echo    "# The following is the actual compile/link"          >> $SCRIPT_FILE
  echo    "# statement:                              "          >> $SCRIPT_FILE
  echo    "#                                         "          >> $SCRIPT_FILE

  case $TARGET in
      "SA")
         echo    "$COMPILER -o $EXE_NAME \\"                    >> $SCRIPT_FILE
         echo    "   $VLOG_O \\"                                >> $SCRIPT_FILE
         echo    "   $OMNITASKS_O \\"                           >> $SCRIPT_FILE
         ;;

      "BP")
         echo    "ld -r -o $EXE_NAME \\"                        >> $SCRIPT_FILE
         echo    "   $VLOG_O \\"                                >> $SCRIPT_FILE
         echo    "   $OMNITASKS_O \\"                           >> $SCRIPT_FILE
         echo    "   $CDSROOT/tools/verilog/lib/env_bp.o \\"    >> $SCRIPT_FILE
         echo    "   $BP_VLOG_XFACE_O \\"                       >> $SCRIPT_FILE
   	;;

      "VE")
         echo    "ld -r -o $EXE_NAME \\"                        >> $SCRIPT_FILE
         echo    "   $VLOG_O \\"                                >> $SCRIPT_FILE
         echo    "   $OMNITASKS_O \\"                           >> $SCRIPT_FILE
         ;;

      "VI")
         echo    "$COMPILER -o $EXE_NAME \\"                    >> $SCRIPT_FILE
         echo    "   $VLOG_O \\"                                >> $SCRIPT_FILE
         echo    "   $OMNITASKS_O \\"                           >> $SCRIPT_FILE
         echo    "   $VHDL_LIB_DIR/vhdl_export.o \\"            >> $SCRIPT_FILE
         ;;
  esac

  if [ "$ENV" = "y" ]; then
    echo    "   $ENV_VXL_O \\"                                  >> $SCRIPT_FILE
  fi   

  if [ "$CWAVES" = "y" ]; then
    echo    "   $CWAVES_O \\"                                   >> $SCRIPT_FILE
    if [ "$ENV" = "n" ]; then
      echo    "   $ENV_ITC_O \\"                                >> $SCRIPT_FILE
    fi
  fi

  if [ "$GRAPHICS" = "y" ]; then
    echo    "   $GR_VLOG_O \\"                                  >> $SCRIPT_FILE
  fi

  if [ "$SHM" = "y" ]; then
    echo    "   $SHM_VLOG_O \\"                                 >> $SCRIPT_FILE
  fi

  if [ "$VERIMIX" = "y" ]; then
    echo    "   $VM_VLOG_O \\"                                  >> $SCRIPT_FILE
  fi

  if [ "$S_LAI" = "y" ]; then
    echo "   $CDSROOT/tools/verilog/lib/la_vlog.o \\"           >> $SCRIPT_FILE
      echo "   $LAI_TOOL/lai_lookup.o \\"                       >> $SCRIPT_FILE

      for VARIABLE in `cat $LAI_LIST`
          do
              echo    "   $LAI_LIB/$VARIABLE.o \\"              >> $SCRIPT_FILE
          done

      echo "   $LAI_TOOL/lai_utl.a \\"                          >> $SCRIPT_FILE
      echo "   $LAI_TOOL/lai_stub.o \\"                         >> $SCRIPT_FILE
  fi

  if [ "$D_LAI" = "y" ]; then
      echo "   $CDSROOT/tools/verilog/lib/la_vlog.o \\"         >> $SCRIPT_FILE
      echo "   $CDSROOT/tools/verilog/lib/lai_dld.o \\"         >> $SCRIPT_FILE
      echo "   \$LMC_VLOG/tools/ansi_utls.o         \\"         >> $SCRIPT_FILE
  fi

  if [ "$LMSI" = "y" ]; then
      echo    "   $CDSROOT/tools/verilog/lib/lm_vlog.o \\"      >> $SCRIPT_FILE
      if [ "$TARGET" != "BP" ]; then
        echo    "   $LMSI_DIR/lm_sfi.a \\"                      >> $SCRIPT_FILE
      fi
  fi

  if [ -f $USER_PLI_FILE ]; then
    for DATA in `cat $USER_PLI_FILE`; do
      if [ "$TARGET" = "BP" -o "$TARGET" = "VE" -o "$COMPILER" = "CC" ]; then
        if [ -n "`echo $DATA|egrep '\.c$'`" ]; then
          VARIABLE=$DATA
          strip_path
          echo "   $VARIABLE \\"                                >> $SCRIPT_FILE
        else
          echo "   $DATA \\"                                    >> $SCRIPT_FILE
        fi
      else
          echo "   $DATA \\"                                    >> $SCRIPT_FILE
      fi
    done
  fi

  if [ "$CDC" = "y" ]; then
    echo "   $CDSROOT/tools/dfII/lib/vxlCDC.a \\"               >> $SCRIPT_FILE
  fi

  if [ "$TARGET" != "VE" -a "$TARGET" != "BP" ]; then
    if [ "$ENV" = "y" -o "$SHM" = "y" ]; then
      if [ "$CDSPLAT" = "ibmrs" ]; then
	if [ "$CDC" = "y" ]; then
          echo "   $VIRTUOS_ARCH \\"                              >> $SCRIPT_FILE
        else
          echo "   $VOLITE_ARCH  \\"                              >> $SCRIPT_FILE
	fi
      else
	echo "   $VIRTUOS_ARCH \\"                                >> $SCRIPT_FILE
      fi
    fi
  fi

#   Now write the "-I" options :
  if [ "$TARGET" = "SA" -o "$TARGET" = "VI" ]; then
    echo    "   -I$VLOG_INC_DIR \\"                             >> $SCRIPT_FILE
  fi

  if [ "$CDC" = "y" ]; then
    echo "   -I$CDSROOT/tools/dfII/include" \\                  >> $SCRIPT_FILE
  fi
# 


#   Now lets get all the other stuff we need from Verilog/lib
  echo "   -L$VLOG_LIB_DIR \\"                                  >> $SCRIPT_FILE

  if [ "$D_LAI" = "y" ]; then
    echo "   -ldld -N \\"                                     >> $SCRIPT_FILE
##    echo "   -ldld \\"                                          >> $SCRIPT_FILE
  fi

  if [ "$SDFA" = "y" ]; then
    echo "   -lsdfa \\"                                         >> $SCRIPT_FILE
    if [ "$TARGET" != "VE" -a "$TARGET" != "VI" ]; then
      echo "   -lsdf \\"                                        >> $SCRIPT_FILE
    fi
  fi

  if [ "$TARGET" = "VI" ]; then
    echo    "   -lsdf \\"                                       >> $SCRIPT_FILE
    echo    "   -lcosim \\"                                     >> $SCRIPT_FILE
    if [ "$CDSPLAT" = "hppa" ]; then
      echo    "   -lcl \\"                                      >> $SCRIPT_FILE
    fi
  fi

# cman libraries
  if [ "$ENV" = "y" -o "$CWAVES" = "y" ]; then
    echo    "   $CMAN_LIB_DIR/libcman.a \\"                     >> $SCRIPT_FILE
#    echo    "   -L$CMAN_LIB_DIR \\"                             >> $SCRIPT_FILE
#    echo    "   -lcman \\"                                      >> $SCRIPT_FILE
  fi
#


# motif libraries
  if [ "$ENV" = "y" ]; then
    echo    "   -L$MOTIF_LIB_DIR \\"                            >> $SCRIPT_FILE
    echo    "   $MOTIF_LINK_CMD \\"                             >> $SCRIPT_FILE
  fi
 
  if [ "$GRAPHICS" = "y" ]; then
    echo    "   -L$MOTIF_LIB_DIR \\"                            >> $SCRIPT_FILE
    echo    "   -lX11 \\"                                       >> $SCRIPT_FILE
  fi
#

  case "$TARGET" in
      "SA")
         echo   "   -lvoids \\"                                 >> $SCRIPT_FILE
         echo_n "   $CC_LINK_OPT"                               >> $SCRIPT_FILE
         echo_n "   $LD_LINK_OPT"                               >> $SCRIPT_FILE
         ;;

      "VI")
         echo   "   -lvoids \\"                                 >> $SCRIPT_FILE
         echo_n "   $VHDL_IMPORT_LINK_OPT"                      >> $SCRIPT_FILE
         echo_n "   $CC_LINK_OPT"                               >> $SCRIPT_FILE
         echo_n "   $LD_LINK_OPT"                               >> $SCRIPT_FILE
         ;;

      "BP")
         echo_n "   -lvoids"                                    >> $SCRIPT_FILE
	 if [ "$LD_LINK_OPT" != "" ]; then
             echo " \\"                                         >> $SCRIPT_FILE
             echo_n "   $LD_LINK_OPT"                           >> $SCRIPT_FILE
	 fi
         ;;

      "VE")
         echo_n "   $LD_LINK_OPT"                               >> $SCRIPT_FILE
         ;;
  esac

  if [ "$CDSPLAT" = "sun4" -a "$TARGET" != "BP" ]; then
    if [ "$TARGET" != "VE" ]; then
      echo " \\"                                                >> $SCRIPT_FILE
      echo_n "$CDSROOT/tools/lib/libansi.a"                     >> $SCRIPT_FILE
    fi

  fi

  if [ "$CDC" = "y" ]; then
    if [ "$CDSPLAT" = "sun4v" ]; then
      echo " \\"                                                >> $SCRIPT_FILE
      echo "-Bdynamic -ldl"                                     >> $SCRIPT_FILE
    fi
  fi

  echo                                                          >> $SCRIPT_FILE

  if [ "$CDC" = "y" ]; then
    echo "#"                                                    >> $SCRIPT_FILE
    echo "$CDSROOT/tools/dfII/bin/cdsld $EXE_NAME"              >> $SCRIPT_FILE
  fi

  echo    "#"                                                   >> $SCRIPT_FILE
  echo    "unset verbose"                                       >> $SCRIPT_FILE

  chmod 777 $SCRIPT_FILE
}

#------------------------------------------------------------------------------
# The real thing starts here

initialize_variables
error_chk_cdsroot
process_argv $arglist

# interrupt handler 
trap cleanup 2

NUM_OF_RESPONSES=0
NUM=0
if [ $INTERACTIVE -eq 0 ]; then
  if [ -f $RESPONSE_FILE ]; then
    set `cat $RESPONSE_FILE`
    NUM_OF_RESPONSES=`wc -l $RESPONSE_FILE | awk '{ print $1 }'`
    NUM=1
  else 
    echo "Could not find file: $RESPONSE_FILE"
    cleanup 
  fi
fi 

header

# initialization

is_pwd_writable
configure_echo
compute_platform

# start asking configuration questions
output_script_q
target_q
exe_name_q
env_q
cwaves_q
graphics_q
shm_q
dynamic_lai_q
static_lai_q
lmsi_q
verimix_q
cdc_q
sdfa_q
pli_q
create_script_file

DONE=1
cleanup

process_batch_mode

