[Pkg-electronics-commits] [gtkwave] 01/03: Imported Upstream version 3.3.48

أحمد المحمودي (Ahmed El-Mahmoudy) aelmahmoudy at sabily.org
Thu Sep 12 12:56:56 UTC 2013


This is an automated email from the git hooks/post-receive script.

aelmahmoudy-guest pushed a commit to branch master
in repository gtkwave.

commit 82b004af9f4fed0177f5bc84d3aa51fffc8c50a1
Author: أحمد المحمودي (Ahmed El-Mahmoudy) <aelmahmoudy at sabily.org>
Date:   Sat Aug 24 17:02:29 2013 +0200

    Imported Upstream version 3.3.48
---
 ChangeLog                                         |   33 +
 LICENSE.TXT                                       |    2 +-
 Makefile.in                                       |    6 +
 configure                                         | 1553 +++++++++++++++------
 configure.ac                                      |   89 +-
 contrib/Makefile.in                               |    6 +
 contrib/bundle_for_osx/Info-gtkwave.plist         |    6 +-
 contrib/pccts/IBM_VISUAL_AGE_PROJECTS/Makefile.in |    6 +
 contrib/pccts/Makefile.in                         |    6 +
 contrib/pccts/antlr/Makefile.in                   |    6 +
 contrib/pccts/dlg/Makefile.in                     |    6 +
 contrib/pccts/h/Makefile.in                       |    6 +
 contrib/pccts/sorcerer/Makefile.in                |    6 +
 contrib/pccts/sorcerer/h/Makefile.in              |    6 +
 contrib/pccts/sorcerer/lib/Makefile.in            |    6 +
 contrib/pccts/sorcerer/test/Makefile.in           |    6 +
 contrib/pccts/sorcerer/test/test7/Makefile.in     |    6 +
 contrib/pccts/sorcerer/testcpp/Makefile.in        |    6 +
 contrib/pccts/support/DECmms/Makefile.in          |    6 +
 contrib/pccts/support/Makefile.in                 |    6 +
 contrib/pccts/support/genmk/Makefile.in           |    6 +
 contrib/pccts/support/rexpr/Makefile.in           |    6 +
 contrib/pccts/support/set/Makefile.in             |    6 +
 contrib/pccts/support/sym/Makefile.in             |    6 +
 contrib/pccts/testcpp/Makefile.in                 |    6 +
 contrib/rtlbrowse/Makefile.in                     |    6 +
 contrib/rtlbrowse/vlex.l                          |    8 +-
 contrib/vermin/Makefile.in                        |    6 +
 doc/Makefile.in                                   |    6 +
 examples/Makefile.in                              |    6 +
 examples/gtkwaverc                                |    1 +
 man/Makefile.in                                   |    6 +
 share/Makefile.in                                 |    6 +
 share/applications/Makefile.in                    |    6 +
 share/icons/Makefile.in                           |    6 +
 share/icons/gnome/16x16/Makefile.in               |    6 +
 share/icons/gnome/16x16/mimetypes/Makefile.in     |    6 +
 share/icons/gnome/32x32/Makefile.in               |    6 +
 share/icons/gnome/32x32/mimetypes/Makefile.in     |    6 +
 share/icons/gnome/48x48/Makefile.in               |    6 +
 share/icons/gnome/48x48/mimetypes/Makefile.in     |    6 +
 share/icons/gnome/Makefile.in                     |    6 +
 share/mime/Makefile.in                            |    6 +
 share/mime/packages/Makefile.in                   |    6 +
 src/Makefile.am                                   |   11 +-
 src/Makefile.in                                   |   96 +-
 src/analyzer.h                                    |   42 +-
 src/bitvec.c                                      |    8 +-
 src/cocoa/Makefile.in                             |    6 +
 src/entry.c                                       |   18 +-
 src/extload.c                                     | 1083 +++++++++-----
 src/extload.h                                     |    4 +
 src/fsdb_wrapper_api.cc                           |  725 ++++++++++
 src/fsdb_wrapper_api.h                            |   65 +
 src/fst.c                                         |   45 +-
 src/globals.c                                     |   67 +-
 src/globals.h                                     |   22 +
 src/helpers/Makefile.in                           |    6 +
 src/helpers/evcd2vcd.c                            |    4 +
 src/helpers/fst/Makefile.in                       |    6 +
 src/helpers/fst/fstapi.c                          |  199 ++-
 src/helpers/fst/fstapi.h                          |  104 +-
 src/helpers/fst2vcd.c                             |    5 +-
 src/helpers/lxt2miner.c                           |    4 +
 src/helpers/lxt2vcd.c                             |    4 +
 src/helpers/vcd2fst.c                             |  322 ++++-
 src/helpers/vcd2lxt2.c                            |    4 +
 src/helpers/vcd2vzt.c                             |    4 +
 src/helpers/vzt2vcd.c                             |    4 +
 src/libbz2/Makefile.in                            |    6 +
 src/liblzma/Makefile.in                           |    6 +
 src/libz/Makefile.in                              |    6 +
 src/lx2.c                                         |    3 +
 src/lx2.h                                         |    2 +-
 src/main.c                                        |   11 +-
 src/menu.c                                        |  118 +-
 src/menu.h                                        |    2 +
 src/pixmaps.c                                     |  604 ++++++++
 src/savefile.c                                    |    2 +-
 src/signalwindow.c                                |   14 +-
 src/status.c                                      |    1 +
 src/tcl_commands.c                                |    1 +
 src/tree.c                                        |    7 +
 src/tree.h                                        |    9 +-
 src/treesearch.h                                  |    2 +-
 src/treesearch_gtk2.c                             |   41 +-
 src/vcd.c                                         |   14 +
 src/vcd.h                                         |    9 +-
 src/vcd_keywords.c                                |  154 +-
 src/vcd_keywords.gperf                            |    8 +
 src/vcd_partial.c                                 |    7 +-
 src/vcd_recoder.c                                 |    6 +
 92 files changed, 4840 insertions(+), 965 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2a9aeaa..a5e2cb2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1292,3 +1292,36 @@
 		Added preliminary do-nothing generate support in vermin.
 		Fixed minmax_valid for partial VCD loader: affects scaling
 		on floating-point traces.
+3.3.48	04aug13	Fixed infinite loop hang on various helpers executables
+		when extra arguments are specified.
+		Delete changed marker name if it exists when marker is removed.
+		Added "Open Hierarchy" option that will expand the SST and
+		select the hierarchy for a given signal selected in the
+		Signals window.
+		Added preliminary support for FsdbReader.
+		FSDB fix for generate created hierarchies.
+		FSDB fix for new debug info output style to be parsed.
+		Added generate as scope type to VCD/FST/FSDB.
+		Preliminary add for module port direction for FSDB and FST.
+		Display signal direction column in SST if not all signals are 
+		declared as FST_VD_IMPLICIT.
+		Fixed GTK warning when hide_sst is enabled and SST is opened
+		then closed.
+		Added extraction of in/out/inout from FSDB into FST with
+		vcd2fst helper executable.  (It also converts FSDB to FST.)
+		Added support for SV structures, unions, classes, packages,
+		programs, and interfaces.
+		Updated signal parsing in FST/FSDB to handle NC declarations
+		for arrays in VCD.  (i.e., bitranges are missing)  Use vcd2fst
+		or the -o option to read NC VCD files with arrays properly.
+		Preliminary support for SV datatypes of bit, logic, int,
+		shortint, longint, byte, enum, and shortreal in VCD and FST.
+		Added sparse array datatype to FST (currently unused by
+		gtkwave).
+		Added support for attribute begin/end in FST.  (Currently
+		unused by gtkwave.)  This allows embedding of various data
+		inside the structure tree.
+		Added autoraise on entry window on keystrokes or periodically
+		when it exists.
+		Added ability to store $comment in FST files via the attribute
+		mechanism (FST_AT_MISC/FST_MT_COMMENT).
diff --git a/LICENSE.TXT b/LICENSE.TXT
index db42431..47ebc7e 100644
--- a/LICENSE.TXT
+++ b/LICENSE.TXT
@@ -1,6 +1,6 @@
 ##########################################################################
 
-GTKWave 3.3.47 Wave Viewer is Copyright (C) 1999-2013 Tony Bybell.  
+GTKWave 3.3.48 Wave Viewer is Copyright (C) 1999-2013 Tony Bybell.  
 Portions of GTKWave are Copyright (C) 1999-2013 Udi Finkelstein. 
 Context support is Copyright (C) 2007-2013 Kermin Elliott Fleming.
 Trace group support is  Copyright (C) 2009-2013 Donald Baltus.
diff --git a/Makefile.in b/Makefile.in
index 6813db6..faf7f6d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -180,6 +180,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -193,6 +196,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -264,6 +269,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/configure b/configure
index 45e92fa..4843442 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for gtkwave 3.3.47.
+# Generated by GNU Autoconf 2.69 for gtkwave 3.3.48.
 #
 # Report bugs to <bybell at rocketmail.com>.
 #
@@ -580,8 +580,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='gtkwave'
 PACKAGE_TARNAME='gtkwave'
-PACKAGE_VERSION='3.3.47'
-PACKAGE_STRING='gtkwave 3.3.47'
+PACKAGE_VERSION='3.3.48'
+PACKAGE_STRING='gtkwave 3.3.48'
 PACKAGE_BUGREPORT='bybell at rocketmail.com'
 PACKAGE_URL=''
 
@@ -671,6 +671,12 @@ LEX
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
+ac_ct_CC
+CFLAGS
+CC
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
 am__nodep
 AMDEPBACKSLASH
 AMDEP_FALSE
@@ -680,11 +686,13 @@ am__include
 DEPDIR
 OBJEXT
 EXEEXT
-ac_ct_CC
+ac_ct_CXX
 CPPFLAGS
 LDFLAGS
-CFLAGS
-CC
+CXXFLAGS
+CXX
+FSDB_LDADD
+FSDB_CFLAGS
 AET2_LDADD
 AET2_CFLAGS
 TK_INCLUDE_SPEC
@@ -802,6 +810,7 @@ enable_stubify
 enable_gtk1
 enable_fatlines
 enable_ae2
+enable_fsdb
 enable_dependency_tracking
 enable_local_libz
 enable_local_libbz2
@@ -813,11 +822,14 @@ enable_largefile
       ac_precious_vars='build_alias
 host_alias
 target_alias
-CC
-CFLAGS
+CXX
+CXXFLAGS
 LDFLAGS
 LIBS
 CPPFLAGS
+CCC
+CC
+CFLAGS
 PKG_CONFIG
 GTK_CFLAGS
 GTK_LIBS
@@ -1368,7 +1380,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures gtkwave 3.3.47 to adapt to many kinds of systems.
+\`configure' configures gtkwave 3.3.48 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1434,7 +1446,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of gtkwave 3.3.47:";;
+     short | recursive ) echo "Configuration of gtkwave 3.3.48:";;
    esac
   cat <<\_ACEOF
 
@@ -1460,6 +1472,8 @@ Optional Features:
                           instead of gtk2.
   --enable-fatlines       Renders lines as double width in gtkwave.
   --enable-ae2            Compiles in AE2 from env var SIMARAMA_BASE location.
+  --enable-fsdb           Compiles in FsdbReader from env vars FSDBREADER_HDRS
+                          header and FSDBREADER_LIBS library directories.
   --enable-dependency-tracking
                           do not reject slow dependency extractors
   --disable-dependency-tracking
@@ -1487,13 +1501,15 @@ Optional Packages:
   --with-tk               directory containing tk configuration (tkConfig.sh)
 
 Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
   LIBS        libraries to pass to the linker, e.g. -l<library>
   CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
+  CC          C compiler command
+  CFLAGS      C compiler flags
   PKG_CONFIG  path to pkg-config utility
   GTK_CFLAGS  C compiler flags for GTK, overriding pkg-config
   GTK_LIBS    linker flags for GTK, overriding pkg-config
@@ -1576,7 +1592,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-gtkwave configure 3.3.47
+gtkwave configure 3.3.48
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1590,6 +1606,44 @@ fi
 ## Autoconf initialization. ##
 ## ------------------------ ##
 
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
 # ac_fn_c_try_compile LINENO
 # --------------------------
 # Try to compile conftest.$ac_ext, and return whether this succeeded.
@@ -2182,7 +2236,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by gtkwave $as_me 3.3.47, which was
+It was created by gtkwave $as_me 3.3.48, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3049,7 +3103,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='gtkwave'
- VERSION='3.3.47'
+ VERSION='3.3.48'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3279,6 +3333,15 @@ if test "X$SIMARAMA_BASE" = "X" ; then
 	SIMARAMA_BASE="/afs/awd/projects/simarama/releases/latest"
 fi
 
+# ------------- Set fsdbreader base -------------------
+if test "X$FSDBREADER_HDRS" = "X" ; then
+	FSDBREADER_HDRS="/pub/FsdbReader"
+fi
+if test "X$FSDBREADER_LIBS" = "X" ; then
+	FSDBREADER_LIBS="/pub/FsdbReader"
+fi
+
+
 # Checks for build options
 # ------------- Inline -------------------
 
@@ -4097,65 +4160,218 @@ fi
 
 
 
-# Checks for programs.
-# AC_PROG_CXX  # not needed as gtkwave and related programs don't use c++
-for ac_prog in gawk mawk nawk awk
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if FsdbReader support should be used" >&5
+$as_echo_n "checking if FsdbReader support should be used... " >&6; }
+
+FFR_CFLAGS=
+FSDB_LDADD=
+FFR=no
+# Check whether --enable-fsdb was given.
+if test "${enable_fsdb+set}" = set; then :
+  enableval=$enable_fsdb;
+if test "X$enable_fsdb" = "Xno" ; then
+	FFR=no
+else
+	FFR=yes
+fi
+
+else
+
+FFR=no
+
+fi
+
+
+if test "X$FFR" = "Xyes" ; then
+	as_ac_File=`$as_echo "ac_cv_file_"$FSDBREADER_LIBS/libnffr.so"" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for \"$FSDBREADER_LIBS/libnffr.so\"" >&5
+$as_echo_n "checking for \"$FSDBREADER_LIBS/libnffr.so\"... " >&6; }
+if eval \${$as_ac_File+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r ""$FSDBREADER_LIBS/libnffr.so""; then
+  eval "$as_ac_File=yes"
 else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  FSDB_SO=yes
+else
+  FSDB_SO=no
+fi
+
+
+	if test "X$FSDB_SO" = "Xyes" ; then
+		FSDB_CFLAGS="-DFSDB_IS_PRESENT -I$FSDBREADER_HDRS"
+		FSDB_LDADD="$FSDBREADER_LIBS/libnffr.so"
+	else
 
+		as_ac_File=`$as_echo "ac_cv_file_"$FSDBREADER_LIBS/libnffr.a"" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for \"$FSDBREADER_LIBS/libnffr.a\"" >&5
+$as_echo_n "checking for \"$FSDBREADER_LIBS/libnffr.a\"... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r ""$FSDBREADER_LIBS/libnffr.a""; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
 fi
 fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  FSDB_A=yes
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+  FSDB_A=no
+fi
+
+		if test "X$FSDB_A" = "Xyes" ; then
+			FSDB_CFLAGS="-DFSDB_IS_PRESENT -I$FSDBREADER_HDRS"
+			FSDB_LDADD="$FSDBREADER_LIBS/libnffr.a"
+		else
+
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FSDB reader library not found, skipping." >&5
+$as_echo "$as_me: WARNING: FSDB reader library not found, skipping." >&2;}
+
+		fi
+	fi
+
+	as_ac_File=`$as_echo "ac_cv_file_"$FSDBREADER_LIBS/libnsys.so"" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for \"$FSDBREADER_LIBS/libnsys.so\"" >&5
+$as_echo_n "checking for \"$FSDBREADER_LIBS/libnsys.so\"... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r ""$FSDBREADER_LIBS/libnsys.so""; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  AFSDB_SO=yes
+else
+  AFSDB_SO=no
+fi
+
+
+	if test "X$AFSDB_SO" = "Xyes" ; then
+		FSDB_CFLAGS="-DFSDB_NSYS_IS_PRESENT $FSDB_CFLAGS"
+		FSDB_LDADD="$FSDBREADER_LIBS/libnsys.so $FSDB_LDADD"
+	else
+
+		as_ac_File=`$as_echo "ac_cv_file_"$FSDBREADER_LIBS/libnsys.a"" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for \"$FSDBREADER_LIBS/libnsys.a\"" >&5
+$as_echo_n "checking for \"$FSDBREADER_LIBS/libnsys.a\"... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r ""$FSDBREADER_LIBS/libnsys.a""; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  FSDB_A=yes
+else
+  FSDB_A=no
+fi
+
+		if test "X$AFSDB_A" = "Xyes" ; then
+			FSDB_CFLAGS="-DFSDB_NSYS_IS_PRESENT $FSDB_CFLAGS"
+			FSDB_LDADD="$FSDBREADER_LIBS/libnsys.a $FSDB_LDADD"
+		else
+
+		FSDB_CFLAGS=
+		FSDB_LDADD=
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FSDB system library not found, skipping." >&5
+$as_echo "$as_me: WARNING: FSDB system library not found, skipping." >&2;}
+
+		fi
+	fi
+
+	as_ac_File=`$as_echo "ac_cv_file_"$FSDBREADER_HDRS/ffrAPI.h"" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for \"$FSDBREADER_HDRS/ffrAPI.h\"" >&5
+$as_echo_n "checking for \"$FSDBREADER_HDRS/ffrAPI.h\"... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r ""$FSDBREADER_HDRS/ffrAPI.h""; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  FSDB_SOY=yes
+else
+  FSDB_SOY=no
+fi
+
+	if test "X$FSDB_SOY" = "Xno" ; then
+		FSDB_CFLAGS=
+		FSDB_LDADD=
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FSDB header not found, skipping." >&5
+$as_echo "$as_me: WARNING: FSDB header not found, skipping." >&2;}
+	fi
+
+else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$AWK" && break
-done
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
+
+
+# Checks for programs.
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+if ${ac_cv_prog_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -4164,7 +4380,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4174,28 +4390,32 @@ IFS=$as_save_IFS
 
 fi
 fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
+    test -n "$CXX" && break
+  done
 fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -4204,7 +4424,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4214,17 +4434,21 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_CC" = x; then
-    CC=""
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -4232,29 +4456,755 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    CC=$ac_ct_CC
+    CXX=$ac_ct_CXX
   fi
-else
-  CC="$ac_cv_prog_CC"
 fi
 
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5
+$as_echo_n "checking whether the C++ compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C++ compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5
+$as_echo_n "checking for C++ compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
@@ -4403,322 +5353,72 @@ do
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-	then :; else
-	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	fi
-	# We set ac_cv_exeext here because the later test for it is not
-	# safe: cross compilers may not add the suffix if given an `-o'
-	# argument, so we may need to know it at that point already.
-	# Even if this section looks crufty: it has the advantage of
-	# actually working.
-	break;;
-    * )
-	break;;
-  esac
+  fi
 done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
+  done
+IFS=$as_save_IFS
 
-else
-  ac_file=''
 fi
-if test -z "$ac_file"; then :
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
 
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
 
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
+  test -n "$ac_ct_CC" && break
+done
 
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
+  if test "x$ac_ct_CC" = x; then
+    CC=""
   else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
-    fi
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
 
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+fi
 
-int
-main ()
-{
 
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
 $as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
   ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
+  test $ac_status = 0; }
 done
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
 if ${ac_cv_c_compiler_gnu+:} false; then :
@@ -4929,69 +5629,6 @@ ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then :
-  enableval=$enable_dependency_tracking;
-fi
-
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-  am__nodep='_no'
-fi
- if test "x$enable_dependency_tracking" != xno; then
-  AMDEP_TRUE=
-  AMDEP_FALSE='#'
-else
-  AMDEP_TRUE='#'
-  AMDEP_FALSE=
-fi
-
-
 
 depcc="$CC"   am_compiler_list=
 
@@ -9595,6 +10232,9 @@ ac_config_files="$ac_config_files Makefile doc/Makefile contrib/Makefile contrib
   AET2_CFLAGS           : $AET2_CFLAGS
   AET2_LDADD            : $AET2_LDADD
 
+  FSDB_CFLAGS           : $FSDB_CFLAGS
+  FSDB_LDADD            : $FSDB_LDADD
+
   EXTLOAD_CFLAGS        : $EXTLOAD_CFLAGS
 
   TCL_INCLUDE_SPEC      : $TCL_INCLUDE_SPEC
@@ -9651,6 +10291,9 @@ $as_echo "$as_me:
   AET2_CFLAGS           : $AET2_CFLAGS
   AET2_LDADD            : $AET2_LDADD
 
+  FSDB_CFLAGS           : $FSDB_CFLAGS
+  FSDB_LDADD            : $FSDB_LDADD
+
   EXTLOAD_CFLAGS        : $EXTLOAD_CFLAGS
 
   TCL_INCLUDE_SPEC      : $TCL_INCLUDE_SPEC
@@ -9819,6 +10462,10 @@ if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
   as_fn_error $? "conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
   as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -10220,7 +10867,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by gtkwave $as_me 3.3.47, which was
+This file was extended by gtkwave $as_me 3.3.48, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -10286,7 +10933,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-gtkwave config.status 3.3.47
+gtkwave config.status 3.3.48
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 54bfbce..4cd5b97 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT(gtkwave, 3.3.47, bybell at rocketmail.com)
+AC_INIT(gtkwave, 3.3.48, bybell at rocketmail.com)
 AC_CONFIG_SRCDIR([src/vcd.c])
 AM_INIT_AUTOMAKE
 AC_CONFIG_HEADER([config.h])
@@ -66,6 +66,15 @@ if test "X$SIMARAMA_BASE" = "X" ; then
 	SIMARAMA_BASE="/afs/awd/projects/simarama/releases/latest"
 fi
 
+# ------------- Set fsdbreader base -------------------
+if test "X$FSDBREADER_HDRS" = "X" ; then
+	FSDBREADER_HDRS="/pub/FsdbReader"
+fi
+if test "X$FSDBREADER_LIBS" = "X" ; then
+	FSDBREADER_LIBS="/pub/FsdbReader"
+fi
+
+
 # Checks for build options
 # ------------- Inline -------------------
 
@@ -318,8 +327,81 @@ AC_SUBST(AET2_CFLAGS)
 AC_SUBST(AET2_LDADD)
 
 
+AC_MSG_CHECKING([if FsdbReader support should be used])
+
+FFR_CFLAGS=
+FSDB_LDADD=
+FFR=no
+AC_ARG_ENABLE([fsdb],
+[  --enable-fsdb           Compiles in FsdbReader from env vars FSDBREADER_HDRS
+                          header and FSDBREADER_LIBS library directories.],
+[
+if test "X$enable_fsdb" = "Xno" ; then
+	FFR=no
+else
+	FFR=yes
+fi
+],
+[
+FFR=no
+])
+
+if test "X$FFR" = "Xyes" ; then
+	AC_CHECK_FILE("$FSDBREADER_LIBS/libnffr.so", FSDB_SO=yes, FSDB_SO=no)
+
+	if test "X$FSDB_SO" = "Xyes" ; then
+		FSDB_CFLAGS="-DFSDB_IS_PRESENT -I$FSDBREADER_HDRS"
+		FSDB_LDADD="$FSDBREADER_LIBS/libnffr.so"
+	else
+
+		AC_CHECK_FILE("$FSDBREADER_LIBS/libnffr.a", FSDB_A=yes, FSDB_A=no)
+		if test "X$FSDB_A" = "Xyes" ; then
+			FSDB_CFLAGS="-DFSDB_IS_PRESENT -I$FSDBREADER_HDRS"
+			FSDB_LDADD="$FSDBREADER_LIBS/libnffr.a"
+		else
+
+		AC_MSG_WARN([FSDB reader library not found, skipping.])
+
+		fi
+	fi
+
+	AC_CHECK_FILE("$FSDBREADER_LIBS/libnsys.so", AFSDB_SO=yes, AFSDB_SO=no)
+
+	if test "X$AFSDB_SO" = "Xyes" ; then
+		FSDB_CFLAGS="-DFSDB_NSYS_IS_PRESENT $FSDB_CFLAGS"
+		FSDB_LDADD="$FSDBREADER_LIBS/libnsys.so $FSDB_LDADD"
+	else
+
+		AC_CHECK_FILE("$FSDBREADER_LIBS/libnsys.a", FSDB_A=yes, FSDB_A=no)
+		if test "X$AFSDB_A" = "Xyes" ; then
+			FSDB_CFLAGS="-DFSDB_NSYS_IS_PRESENT $FSDB_CFLAGS"
+			FSDB_LDADD="$FSDBREADER_LIBS/libnsys.a $FSDB_LDADD"
+		else
+
+		FSDB_CFLAGS=
+		FSDB_LDADD=
+		AC_MSG_WARN([FSDB system library not found, skipping.])
+
+		fi
+	fi
+
+	AC_CHECK_FILE("$FSDBREADER_HDRS/ffrAPI.h", FSDB_SOY=yes, FSDB_SOY=no)
+	if test "X$FSDB_SOY" = "Xno" ; then
+		FSDB_CFLAGS=
+		FSDB_LDADD=
+		AC_MSG_WARN([FSDB header not found, skipping.])
+	fi
+
+else
+	AC_MSG_RESULT([no])
+fi
+
+AC_SUBST(FSDB_CFLAGS)
+AC_SUBST(FSDB_LDADD)
+
+
 # Checks for programs.
-# AC_PROG_CXX  # not needed as gtkwave and related programs don't use c++
+AC_PROG_CXX
 AC_PROG_AWK
 AC_PROG_CC
 AC_PROG_MAKE_SET
@@ -820,6 +902,9 @@ AC_MSG_NOTICE([
   AET2_CFLAGS           : $AET2_CFLAGS
   AET2_LDADD            : $AET2_LDADD
 
+  FSDB_CFLAGS           : $FSDB_CFLAGS
+  FSDB_LDADD            : $FSDB_LDADD
+
   EXTLOAD_CFLAGS        : $EXTLOAD_CFLAGS
 
   TCL_INCLUDE_SPEC      : $TCL_INCLUDE_SPEC
diff --git a/contrib/Makefile.in b/contrib/Makefile.in
index a9d6fe5..880ae9b 100644
--- a/contrib/Makefile.in
+++ b/contrib/Makefile.in
@@ -156,6 +156,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -169,6 +172,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -240,6 +245,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/bundle_for_osx/Info-gtkwave.plist b/contrib/bundle_for_osx/Info-gtkwave.plist
index 92ba1a4..1be8c58 100644
--- a/contrib/bundle_for_osx/Info-gtkwave.plist
+++ b/contrib/bundle_for_osx/Info-gtkwave.plist
@@ -8,7 +8,7 @@
     <key>CFBundleExecutable</key>
     <string>gtkwave</string>
     <key>CFBundleGetInfoString</key>
-    <string>3.3.47, (C) 1999-2013 Tony Bybell http://gtkwave.sourceforge.net</string>
+    <string>3.3.48, (C) 1999-2013 Tony Bybell http://gtkwave.sourceforge.net</string>
     <key>CFBundleIconFile</key>
     <string>gtkwave.icns</string>
     <key>CFBundleIdentifier</key>
@@ -18,11 +18,11 @@
     <key>CFBundlePackageType</key>
     <string>APPL</string>
     <key>CFBundleShortVersionString</key>
-    <string>3.3.47</string>
+    <string>3.3.48</string>
     <key>CFBundleSignature</key>
     <string>????</string>
     <key>CFBundleVersion</key>
-    <string>3.3.47</string>
+    <string>3.3.48</string>
     <key>NSHumanReadableCopyright</key>
     <string>Copyright 1999 - 2013 Tony Bybell, GNU General Public License.</string>
     <key>LSMinimumSystemVersion</key>
diff --git a/contrib/pccts/IBM_VISUAL_AGE_PROJECTS/Makefile.in b/contrib/pccts/IBM_VISUAL_AGE_PROJECTS/Makefile.in
index 695a9a6..e5c1fd0 100644
--- a/contrib/pccts/IBM_VISUAL_AGE_PROJECTS/Makefile.in
+++ b/contrib/pccts/IBM_VISUAL_AGE_PROJECTS/Makefile.in
@@ -96,6 +96,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -109,6 +112,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -180,6 +185,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/Makefile.in b/contrib/pccts/Makefile.in
index e10887e..286115d 100644
--- a/contrib/pccts/Makefile.in
+++ b/contrib/pccts/Makefile.in
@@ -156,6 +156,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -169,6 +172,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -240,6 +245,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/antlr/Makefile.in b/contrib/pccts/antlr/Makefile.in
index 6f7164e..ff0fed2 100644
--- a/contrib/pccts/antlr/Makefile.in
+++ b/contrib/pccts/antlr/Makefile.in
@@ -145,6 +145,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -158,6 +161,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -229,6 +234,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/dlg/Makefile.in b/contrib/pccts/dlg/Makefile.in
index 5610995..6415b09 100644
--- a/contrib/pccts/dlg/Makefile.in
+++ b/contrib/pccts/dlg/Makefile.in
@@ -143,6 +143,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -156,6 +159,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -227,6 +232,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/h/Makefile.in b/contrib/pccts/h/Makefile.in
index 3d6f8b5..a06f26b 100644
--- a/contrib/pccts/h/Makefile.in
+++ b/contrib/pccts/h/Makefile.in
@@ -96,6 +96,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -109,6 +112,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -180,6 +185,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/sorcerer/Makefile.in b/contrib/pccts/sorcerer/Makefile.in
index ff461c6..6c85656 100644
--- a/contrib/pccts/sorcerer/Makefile.in
+++ b/contrib/pccts/sorcerer/Makefile.in
@@ -185,6 +185,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -198,6 +201,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -269,6 +274,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/sorcerer/h/Makefile.in b/contrib/pccts/sorcerer/h/Makefile.in
index 5d36a92..a6a2a01 100644
--- a/contrib/pccts/sorcerer/h/Makefile.in
+++ b/contrib/pccts/sorcerer/h/Makefile.in
@@ -96,6 +96,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -109,6 +112,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -180,6 +185,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/sorcerer/lib/Makefile.in b/contrib/pccts/sorcerer/lib/Makefile.in
index f78aacc..002833c 100644
--- a/contrib/pccts/sorcerer/lib/Makefile.in
+++ b/contrib/pccts/sorcerer/lib/Makefile.in
@@ -100,6 +100,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -113,6 +116,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -184,6 +189,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/sorcerer/test/Makefile.in b/contrib/pccts/sorcerer/test/Makefile.in
index 387c27f..cdded32 100644
--- a/contrib/pccts/sorcerer/test/Makefile.in
+++ b/contrib/pccts/sorcerer/test/Makefile.in
@@ -156,6 +156,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -169,6 +172,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -240,6 +245,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/sorcerer/test/test7/Makefile.in b/contrib/pccts/sorcerer/test/test7/Makefile.in
index 8896b6c..2cca819 100644
--- a/contrib/pccts/sorcerer/test/test7/Makefile.in
+++ b/contrib/pccts/sorcerer/test/test7/Makefile.in
@@ -96,6 +96,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -109,6 +112,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -180,6 +185,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/sorcerer/testcpp/Makefile.in b/contrib/pccts/sorcerer/testcpp/Makefile.in
index 33098de..9c4171e 100644
--- a/contrib/pccts/sorcerer/testcpp/Makefile.in
+++ b/contrib/pccts/sorcerer/testcpp/Makefile.in
@@ -169,6 +169,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -182,6 +185,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -253,6 +258,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/support/DECmms/Makefile.in b/contrib/pccts/support/DECmms/Makefile.in
index 808e1dc..75e91aa 100644
--- a/contrib/pccts/support/DECmms/Makefile.in
+++ b/contrib/pccts/support/DECmms/Makefile.in
@@ -96,6 +96,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -109,6 +112,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -180,6 +185,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/support/Makefile.in b/contrib/pccts/support/Makefile.in
index 0b13cd5..99f2c22 100644
--- a/contrib/pccts/support/Makefile.in
+++ b/contrib/pccts/support/Makefile.in
@@ -156,6 +156,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -169,6 +172,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -240,6 +245,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/support/genmk/Makefile.in b/contrib/pccts/support/genmk/Makefile.in
index 93fca2e..14b4566 100644
--- a/contrib/pccts/support/genmk/Makefile.in
+++ b/contrib/pccts/support/genmk/Makefile.in
@@ -137,6 +137,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -150,6 +153,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -221,6 +226,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/support/rexpr/Makefile.in b/contrib/pccts/support/rexpr/Makefile.in
index 559d013..e0d4531 100644
--- a/contrib/pccts/support/rexpr/Makefile.in
+++ b/contrib/pccts/support/rexpr/Makefile.in
@@ -137,6 +137,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -150,6 +153,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -221,6 +226,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/support/set/Makefile.in b/contrib/pccts/support/set/Makefile.in
index a81283f..637affd 100644
--- a/contrib/pccts/support/set/Makefile.in
+++ b/contrib/pccts/support/set/Makefile.in
@@ -96,6 +96,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -109,6 +112,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -180,6 +185,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/support/sym/Makefile.in b/contrib/pccts/support/sym/Makefile.in
index d003db2..b21c9fc 100644
--- a/contrib/pccts/support/sym/Makefile.in
+++ b/contrib/pccts/support/sym/Makefile.in
@@ -96,6 +96,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -109,6 +112,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -180,6 +185,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/pccts/testcpp/Makefile.in b/contrib/pccts/testcpp/Makefile.in
index d803774..584f51f 100644
--- a/contrib/pccts/testcpp/Makefile.in
+++ b/contrib/pccts/testcpp/Makefile.in
@@ -96,6 +96,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -109,6 +112,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -180,6 +185,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/rtlbrowse/Makefile.in b/contrib/rtlbrowse/Makefile.in
index 1d2d452..e3e776e 100644
--- a/contrib/rtlbrowse/Makefile.in
+++ b/contrib/rtlbrowse/Makefile.in
@@ -201,6 +201,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -214,6 +217,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -285,6 +290,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/contrib/rtlbrowse/vlex.l b/contrib/rtlbrowse/vlex.l
index 1cc909c..de60c1d 100644
--- a/contrib/rtlbrowse/vlex.l
+++ b/contrib/rtlbrowse/vlex.l
@@ -168,7 +168,6 @@ endtable 						{ return V_KW; }
 specify 						{ return V_KW; }
 endspecify 						{ return V_KW; }
 
-
 automatic						{ return V_KW_2005; }
 cell							{ return V_KW_2005; }
 config							{ return V_KW_2005; }
@@ -193,6 +192,13 @@ signed							{ return V_KW_2005; }
 use							{ return V_KW_2005; }
 uwire							{ return V_KW_2005; }
 
+bit							{ return V_KW_2005; }
+logic							{ return V_KW_2005; }
+int							{ return V_KW_2005; }
+shortint						{ return V_KW_2005; }
+longint							{ return V_KW_2005; }
+byte							{ return V_KW_2005; }
+enum							{ return V_KW_2005; }
 
 macromodule 						{ return V_MODULE; }
 module 							{ return V_MODULE; }
diff --git a/contrib/vermin/Makefile.in b/contrib/vermin/Makefile.in
index f8d953f..7d38635 100644
--- a/contrib/vermin/Makefile.in
+++ b/contrib/vermin/Makefile.in
@@ -141,6 +141,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -154,6 +157,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -225,6 +230,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 0023a4f..969feb1 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -127,6 +127,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -140,6 +143,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -211,6 +216,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/examples/Makefile.in b/examples/Makefile.in
index d30b31b..ac26a1c 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -127,6 +127,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -140,6 +143,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -211,6 +216,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/examples/gtkwaverc b/examples/gtkwaverc
index 00b927a..91ebf85 100644
--- a/examples/gtkwaverc
+++ b/examples/gtkwaverc
@@ -23,6 +23,7 @@ enable_fast_exit yes
 disable_empty_gui off
 analog_redraw_skip_count 20
 splash_disable off
+hide_sst off
 sst_dynamic_filter on
 use_standard_clicking on
 use_toolbutton_interface on
diff --git a/man/Makefile.in b/man/Makefile.in
index 579cc17..9068373 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -129,6 +129,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -142,6 +145,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -213,6 +218,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/Makefile.in b/share/Makefile.in
index 9fa528d..dc112c3 100644
--- a/share/Makefile.in
+++ b/share/Makefile.in
@@ -156,6 +156,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -169,6 +172,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -240,6 +245,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/applications/Makefile.in b/share/applications/Makefile.in
index f8521d3..ce978f7 100644
--- a/share/applications/Makefile.in
+++ b/share/applications/Makefile.in
@@ -126,6 +126,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -139,6 +142,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -210,6 +215,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/icons/Makefile.in b/share/icons/Makefile.in
index e94e770..529821d 100644
--- a/share/icons/Makefile.in
+++ b/share/icons/Makefile.in
@@ -186,6 +186,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -199,6 +202,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -270,6 +275,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/icons/gnome/16x16/Makefile.in b/share/icons/gnome/16x16/Makefile.in
index ba41668..37f261a 100644
--- a/share/icons/gnome/16x16/Makefile.in
+++ b/share/icons/gnome/16x16/Makefile.in
@@ -156,6 +156,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -169,6 +172,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -240,6 +245,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/icons/gnome/16x16/mimetypes/Makefile.in b/share/icons/gnome/16x16/mimetypes/Makefile.in
index 96e270f..0f20dc5 100644
--- a/share/icons/gnome/16x16/mimetypes/Makefile.in
+++ b/share/icons/gnome/16x16/mimetypes/Makefile.in
@@ -126,6 +126,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -139,6 +142,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -210,6 +215,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/icons/gnome/32x32/Makefile.in b/share/icons/gnome/32x32/Makefile.in
index b07b824..5bb6d1f 100644
--- a/share/icons/gnome/32x32/Makefile.in
+++ b/share/icons/gnome/32x32/Makefile.in
@@ -156,6 +156,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -169,6 +172,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -240,6 +245,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/icons/gnome/32x32/mimetypes/Makefile.in b/share/icons/gnome/32x32/mimetypes/Makefile.in
index 273bd07..29becf4 100644
--- a/share/icons/gnome/32x32/mimetypes/Makefile.in
+++ b/share/icons/gnome/32x32/mimetypes/Makefile.in
@@ -126,6 +126,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -139,6 +142,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -210,6 +215,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/icons/gnome/48x48/Makefile.in b/share/icons/gnome/48x48/Makefile.in
index de6bbee..66e8716 100644
--- a/share/icons/gnome/48x48/Makefile.in
+++ b/share/icons/gnome/48x48/Makefile.in
@@ -156,6 +156,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -169,6 +172,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -240,6 +245,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/icons/gnome/48x48/mimetypes/Makefile.in b/share/icons/gnome/48x48/mimetypes/Makefile.in
index e83192c..ba884f7 100644
--- a/share/icons/gnome/48x48/mimetypes/Makefile.in
+++ b/share/icons/gnome/48x48/mimetypes/Makefile.in
@@ -126,6 +126,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -139,6 +142,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -210,6 +215,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/icons/gnome/Makefile.in b/share/icons/gnome/Makefile.in
index 0cf2b8c..ed022dd 100644
--- a/share/icons/gnome/Makefile.in
+++ b/share/icons/gnome/Makefile.in
@@ -156,6 +156,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -169,6 +172,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -240,6 +245,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/mime/Makefile.in b/share/mime/Makefile.in
index d3d3df3..de24086 100644
--- a/share/mime/Makefile.in
+++ b/share/mime/Makefile.in
@@ -156,6 +156,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -169,6 +172,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -240,6 +245,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/share/mime/packages/Makefile.in b/share/mime/packages/Makefile.in
index 5a74baa..fac3f37 100644
--- a/share/mime/packages/Makefile.in
+++ b/share/mime/packages/Makefile.in
@@ -126,6 +126,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -139,6 +142,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -210,6 +215,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/src/Makefile.am b/src/Makefile.am
index cfc516c..26a58de 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -14,7 +14,12 @@ LIBCOCOA_LDADD = ./cocoa/libgtkwmacintegration.a $(COCOA_GTK_LDADD)
 
 bin_PROGRAMS=	gtkwave twinwave
 
-AM_CFLAGS=	-I$(srcdir)/.. -I$(srcdir)/helpers $(FASTTREE_CFLAGS) $(GTK_CFLAGS) $(LIBLZMA_CFLAGS) $(LIBZ_CFLAGS) $(LIBBZ2_CFLAGS) $(LIBFST_CFLAGS) $(AET2_CFLAGS) $(TCL_INCLUDE_SPEC) $(TCL_DEFADD) $(TK_INCLUDE_SPEC) $(EXTLOAD_CFLAGS) $(LIBJUDY_CFLAGS) $(INLINE_ASM) $(GTK_MAC_CFLAGS) $(GCONF_CFLAGS) $(LIBCOCOA_CFLAGS) $(GTK_UNIX_PRINT_CFLAGS)
+AM_CFLAGS=	-I$(srcdir)/.. -I$(srcdir)/helpers $(FASTTREE_CFLAGS) $(GTK_CFLAGS) $(LIBLZMA_CFLAGS) \
+		$(LIBZ_CFLAGS) $(LIBBZ2_CFLAGS) $(LIBFST_CFLAGS) $(AET2_CFLAGS) $(FSDB_CFLAGS) $(TCL_INCLUDE_SPEC) \
+		$(TCL_DEFADD) $(TK_INCLUDE_SPEC) $(EXTLOAD_CFLAGS) $(LIBJUDY_CFLAGS) $(INLINE_ASM) \
+		$(GTK_MAC_CFLAGS) $(GCONF_CFLAGS) $(LIBCOCOA_CFLAGS) $(GTK_UNIX_PRINT_CFLAGS)
+
+AM_CXXFLAGS=	$(AM_CFLAGS)
 
 ./liblzma/libgwlzma.a: $(srcdir)/liblzma/LzmaLib.c $(srcdir)/liblzma/LzmaLib.h
 
@@ -23,6 +28,7 @@ AM_CFLAGS=	-I$(srcdir)/.. -I$(srcdir)/helpers $(FASTTREE_CFLAGS) $(GTK_CFLAGS) $
 ./cocoa/libgtkwmacintegration.a: $(srcdir)/cocoa/cocoa_misc.c $(srcdir)/cocoa/cocoa_misc.h
 
 gtkwave_SOURCES= \
+	fsdb_wrapper_api.cc fsdb_wrapper_api.h \
 	baseconvert.h wavewindow.h zoombuttons.h fetchbuttons.h timeentry.h shiftbuttons.h pagebuttons.h edgebuttons.h \
 	signalwindow.h entry.h file.h status.h search.h showchange.h treesearch.h hiersearch.h renderopt.h markerbox.h \
 	simplereq.h help.h logfile.h vcd_partial.h mouseover.h mouseover_sigs.h interp.h \
@@ -46,10 +52,9 @@ gtkwave_SOURCES= \
 	vcd_partial.c vcd_recoder.c vcd_saver.c vcd_saver.h version.h vlist.c vlist.h vzt.c vzt.h wavealloca.h \
 	wavewindow.c zoombuttons.c
 
-gtkwave_LDADD= $(LIBCOCOA_LDADD) $(GTK_LIBS) $(LIBLZMA_LDADD) $(LIBZ_LDADD) $(LIBBZ2_LDADD) $(LIBFST_LDADD) $(AET2_LDADD) $(TCL_LDADD) $(TK_LDADD) $(LIBJUDY_LDADD) $(GTK_MAC_LIBS) $(GCONF_LIBS) $(GTK_UNIX_PRINT_LIBS)
+gtkwave_LDADD= $(LIBCOCOA_LDADD) $(GTK_LIBS) $(LIBLZMA_LDADD) $(LIBZ_LDADD) $(LIBBZ2_LDADD) $(LIBFST_LDADD) $(AET2_LDADD) $(FSDB_LDADD) $(TCL_LDADD) $(TK_LDADD) $(LIBJUDY_LDADD) $(GTK_MAC_LIBS) $(GCONF_LIBS) $(GTK_UNIX_PRINT_LIBS)
 gtkwave_LDFLAGS = $(COCOA_GTK_LDFLAGS)
 
-
 twinwave_SOURCES= twinwave.c
 twinwave_LDADD= $(GTK_LIBS) $(GTK_MAC_LIBS) $(GCONF_LIBS)
 
diff --git a/src/Makefile.in b/src/Makefile.in
index a6a9098..f51110c 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -62,27 +62,28 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
-am_gtkwave_OBJECTS = globals.$(OBJEXT) ae2.$(OBJEXT) \
-	analyzer.$(OBJEXT) baseconvert.$(OBJEXT) bitvec.$(OBJEXT) \
-	bsearch.$(OBJEXT) busy.$(OBJEXT) clipping.$(OBJEXT) \
-	color.$(OBJEXT) currenttime.$(OBJEXT) debug.$(OBJEXT) \
-	discardbuttons.$(OBJEXT) edgebuttons.$(OBJEXT) entry.$(OBJEXT) \
-	extload.$(OBJEXT) fetchbuttons.$(OBJEXT) fgetdynamic.$(OBJEXT) \
-	file.$(OBJEXT) fonts.$(OBJEXT) fst.$(OBJEXT) gconf.$(OBJEXT) \
-	getopt.$(OBJEXT) getopt1.$(OBJEXT) ghw.$(OBJEXT) \
-	ghwlib.$(OBJEXT) hierpack.$(OBJEXT) jrb.$(OBJEXT) \
-	help.$(OBJEXT) lxt2_read.$(OBJEXT) lxt_write.$(OBJEXT) \
-	vzt_read.$(OBJEXT) hiersearch.$(OBJEXT) interp.$(OBJEXT) \
-	logfile.$(OBJEXT) lx2.$(OBJEXT) lxt.$(OBJEXT) main.$(OBJEXT) \
-	markerbox.$(OBJEXT) menu.$(OBJEXT) mouseover.$(OBJEXT) \
-	mouseover_sigs.$(OBJEXT) pagebuttons.$(OBJEXT) \
-	pipeio.$(OBJEXT) pixmaps.$(OBJEXT) print.$(OBJEXT) \
-	ptranslate.$(OBJEXT) rc.$(OBJEXT) regex.$(OBJEXT) \
-	renderopt.$(OBJEXT) rgb.$(OBJEXT) savefile.$(OBJEXT) \
-	search.$(OBJEXT) shiftbuttons.$(OBJEXT) showchange.$(OBJEXT) \
-	signalwindow.$(OBJEXT) simplereq.$(OBJEXT) splash.$(OBJEXT) \
-	status.$(OBJEXT) strace.$(OBJEXT) symbol.$(OBJEXT) \
-	tcl_commands.$(OBJEXT) tcl_helper.$(OBJEXT) tcl_np.$(OBJEXT) \
+am_gtkwave_OBJECTS = fsdb_wrapper_api.$(OBJEXT) globals.$(OBJEXT) \
+	ae2.$(OBJEXT) analyzer.$(OBJEXT) baseconvert.$(OBJEXT) \
+	bitvec.$(OBJEXT) bsearch.$(OBJEXT) busy.$(OBJEXT) \
+	clipping.$(OBJEXT) color.$(OBJEXT) currenttime.$(OBJEXT) \
+	debug.$(OBJEXT) discardbuttons.$(OBJEXT) edgebuttons.$(OBJEXT) \
+	entry.$(OBJEXT) extload.$(OBJEXT) fetchbuttons.$(OBJEXT) \
+	fgetdynamic.$(OBJEXT) file.$(OBJEXT) fonts.$(OBJEXT) \
+	fst.$(OBJEXT) gconf.$(OBJEXT) getopt.$(OBJEXT) \
+	getopt1.$(OBJEXT) ghw.$(OBJEXT) ghwlib.$(OBJEXT) \
+	hierpack.$(OBJEXT) jrb.$(OBJEXT) help.$(OBJEXT) \
+	lxt2_read.$(OBJEXT) lxt_write.$(OBJEXT) vzt_read.$(OBJEXT) \
+	hiersearch.$(OBJEXT) interp.$(OBJEXT) logfile.$(OBJEXT) \
+	lx2.$(OBJEXT) lxt.$(OBJEXT) main.$(OBJEXT) markerbox.$(OBJEXT) \
+	menu.$(OBJEXT) mouseover.$(OBJEXT) mouseover_sigs.$(OBJEXT) \
+	pagebuttons.$(OBJEXT) pipeio.$(OBJEXT) pixmaps.$(OBJEXT) \
+	print.$(OBJEXT) ptranslate.$(OBJEXT) rc.$(OBJEXT) \
+	regex.$(OBJEXT) renderopt.$(OBJEXT) rgb.$(OBJEXT) \
+	savefile.$(OBJEXT) search.$(OBJEXT) shiftbuttons.$(OBJEXT) \
+	showchange.$(OBJEXT) signalwindow.$(OBJEXT) \
+	simplereq.$(OBJEXT) splash.$(OBJEXT) status.$(OBJEXT) \
+	strace.$(OBJEXT) symbol.$(OBJEXT) tcl_commands.$(OBJEXT) \
+	tcl_helper.$(OBJEXT) tcl_np.$(OBJEXT) \
 	tcl_support_commands.$(OBJEXT) timeentry.$(OBJEXT) \
 	translate.$(OBJEXT) tree.$(OBJEXT) treesearch.$(OBJEXT) \
 	tree_component.$(OBJEXT) ttranslate.$(OBJEXT) vcd.$(OBJEXT) \
@@ -99,8 +100,9 @@ gtkwave_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(LIBFST_LDADD) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-gtkwave_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(gtkwave_LDFLAGS) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+gtkwave_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(gtkwave_LDFLAGS) \
 	$(LDFLAGS) -o $@
 am_twinwave_OBJECTS = twinwave.$(OBJEXT)
 twinwave_OBJECTS = $(am_twinwave_OBJECTS)
@@ -138,6 +140,19 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
 SOURCES = $(gtkwave_SOURCES) $(twinwave_SOURCES)
 DIST_SOURCES = $(gtkwave_SOURCES) $(twinwave_SOURCES)
 RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
@@ -224,6 +239,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -237,6 +255,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -308,6 +328,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -353,8 +374,14 @@ LIBLZMA_CFLAGS = -I$(srcdir)/liblzma $(LIBXZ_CFLAGS)
 LIBLZMA_LDADD = ./liblzma/libgwlzma.a $(LIBXZ_LDADD)
 LIBCOCOA_CFLAGS = -I$(srcdir)/cocoa
 LIBCOCOA_LDADD = ./cocoa/libgtkwmacintegration.a $(COCOA_GTK_LDADD)
-AM_CFLAGS = -I$(srcdir)/.. -I$(srcdir)/helpers $(FASTTREE_CFLAGS) $(GTK_CFLAGS) $(LIBLZMA_CFLAGS) $(LIBZ_CFLAGS) $(LIBBZ2_CFLAGS) $(LIBFST_CFLAGS) $(AET2_CFLAGS) $(TCL_INCLUDE_SPEC) $(TCL_DEFADD) $(TK_INCLUDE_SPEC) $(EXTLOAD_CFLAGS) $(LIBJUDY_CFLAGS) $(INLINE_ASM) $(GTK_MAC_CFLAGS) $(GCONF_CFLAGS) $(LIBCOCOA_CFLAGS) $(GTK_UNIX_PRINT_CFLAGS)
+AM_CFLAGS = -I$(srcdir)/.. -I$(srcdir)/helpers $(FASTTREE_CFLAGS) $(GTK_CFLAGS) $(LIBLZMA_CFLAGS) \
+		$(LIBZ_CFLAGS) $(LIBBZ2_CFLAGS) $(LIBFST_CFLAGS) $(AET2_CFLAGS) $(FSDB_CFLAGS) $(TCL_INCLUDE_SPEC) \
+		$(TCL_DEFADD) $(TK_INCLUDE_SPEC) $(EXTLOAD_CFLAGS) $(LIBJUDY_CFLAGS) $(INLINE_ASM) \
+		$(GTK_MAC_CFLAGS) $(GCONF_CFLAGS) $(LIBCOCOA_CFLAGS) $(GTK_UNIX_PRINT_CFLAGS)
+
+AM_CXXFLAGS = $(AM_CFLAGS)
 gtkwave_SOURCES = \
+	fsdb_wrapper_api.cc fsdb_wrapper_api.h \
 	baseconvert.h wavewindow.h zoombuttons.h fetchbuttons.h timeentry.h shiftbuttons.h pagebuttons.h edgebuttons.h \
 	signalwindow.h entry.h file.h status.h search.h showchange.h treesearch.h hiersearch.h renderopt.h markerbox.h \
 	simplereq.h help.h logfile.h vcd_partial.h mouseover.h mouseover_sigs.h interp.h \
@@ -378,7 +405,7 @@ gtkwave_SOURCES = \
 	vcd_partial.c vcd_recoder.c vcd_saver.c vcd_saver.h version.h vlist.c vlist.h vzt.c vzt.h wavealloca.h \
 	wavewindow.c zoombuttons.c
 
-gtkwave_LDADD = $(LIBCOCOA_LDADD) $(GTK_LIBS) $(LIBLZMA_LDADD) $(LIBZ_LDADD) $(LIBBZ2_LDADD) $(LIBFST_LDADD) $(AET2_LDADD) $(TCL_LDADD) $(TK_LDADD) $(LIBJUDY_LDADD) $(GTK_MAC_LIBS) $(GCONF_LIBS) $(GTK_UNIX_PRINT_LIBS)
+gtkwave_LDADD = $(LIBCOCOA_LDADD) $(GTK_LIBS) $(LIBLZMA_LDADD) $(LIBZ_LDADD) $(LIBBZ2_LDADD) $(LIBFST_LDADD) $(AET2_LDADD) $(FSDB_LDADD) $(TCL_LDADD) $(TK_LDADD) $(LIBJUDY_LDADD) $(GTK_MAC_LIBS) $(GCONF_LIBS) $(GTK_UNIX_PRINT_LIBS)
 gtkwave_LDFLAGS = $(COCOA_GTK_LDFLAGS)
 twinwave_SOURCES = twinwave.c
 twinwave_LDADD = $(GTK_LIBS) $(GTK_MAC_LIBS) $(GCONF_LIBS)
@@ -391,7 +418,7 @@ all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
-.SUFFIXES: .c .o .obj
+.SUFFIXES: .c .cc .o .obj
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
@@ -466,7 +493,7 @@ clean-binPROGRAMS:
 	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
 gtkwave$(EXEEXT): $(gtkwave_OBJECTS) $(gtkwave_DEPENDENCIES) $(EXTRA_gtkwave_DEPENDENCIES) 
 	@rm -f gtkwave$(EXEEXT)
-	$(AM_V_CCLD)$(gtkwave_LINK) $(gtkwave_OBJECTS) $(gtkwave_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(gtkwave_LINK) $(gtkwave_OBJECTS) $(gtkwave_LDADD) $(LIBS)
 twinwave$(EXEEXT): $(twinwave_OBJECTS) $(twinwave_DEPENDENCIES) $(EXTRA_twinwave_DEPENDENCIES) 
 	@rm -f twinwave$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(twinwave_OBJECTS) $(twinwave_LDADD) $(LIBS)
@@ -495,6 +522,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fgetdynamic.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fonts.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fsdb_wrapper_api.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fst.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gconf.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getopt.Po at am__quote@
@@ -614,6 +642,20 @@ vzt_read.obj: helpers/vzt_read.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vzt_read.obj `if test -f 'helpers/vzt_read.c'; then $(CYGPATH_W) 'helpers/vzt_read.c'; else $(CYGPATH_W) '$(srcdir)/helpers/vzt_read.c'; fi`
 
+.cc.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run 'make' without going through this Makefile.
 # To change the values of 'make' variables: instead of editing Makefiles,
diff --git a/src/analyzer.h b/src/analyzer.h
index d7e9cfa..d839077 100644
--- a/src/analyzer.h
+++ b/src/analyzer.h
@@ -187,7 +187,7 @@ struct Node
     unsigned int array_height, this_row;
 #endif
 
-    unsigned vardir : 2;  /* see nodeVarDir, this is an internal value (currently unused) */
+    unsigned vardir : 2;  /* see nodeVarDir, this is an internal value (currently used only by extload and FST) */
     unsigned vartype : 5; /* see nodeVarType, this is an internal value */
 
     unsigned extvals : 1; /* was formerly a pointer to ExtNode "ext", now simply a flag */
@@ -223,6 +223,14 @@ static const char *vartype_strings[] = { \
     "realtime", \
     "port", \
     "string", \
+    "bit", \
+    "logic", \
+    "int", \
+    "s_int", \
+    "l_int", \
+    "byte", \
+    "enum", \
+    "s_real", \
     "net", \
     "alias", \
     "missing" \
@@ -256,18 +264,40 @@ enum nodeVarType {
     ND_VCD_PORT		   = 21,
     ND_GEN_STRING          = 22,    /* generic string type */
 
-    ND_GEN_NET		   = 23,    /* used for AE2 */
-    ND_GEN_ALIAS	   = 24,
-    ND_GEN_MISSING	   = 25,
+    ND_SV_BIT              = 23,    /* SV types */
+    ND_SV_LOGIC            = 24,
+    ND_SV_INT              = 25,
+    ND_SV_SHORTINT         = 26,
+    ND_SV_LONGINT          = 27,
+    ND_SV_BYTE             = 28,
+    ND_SV_ENUM             = 29,
+    ND_SV_SHORTREAL        = 30,
+    
+
+    ND_GEN_NET		   = 31,    /* used for AE2 */
+    ND_GEN_ALIAS	   = 32,
+    ND_GEN_MISSING	   = 33,
 
-    ND_VARTYPE_MAX	   = 25
+    ND_VARTYPE_MAX	   = 33
 };
 
+
+#define WAVE_NODEVARDIR_STR \
+static const char *vardir_strings[] = { \
+    "", \
+    "I", \
+    "O", \
+    "IO" \
+};
+
+
 enum nodeVarDir {
     ND_DIR_IMPLICIT        = 0,
     ND_DIR_IN              = 1,
     ND_DIR_OUT             = 2,
-    ND_DIR_INOUT           = 3
+    ND_DIR_INOUT           = 3,
+
+    ND_DIR_MAX             = 3
 };
 
 typedef struct BitAttributes
diff --git a/src/bitvec.c b/src/bitvec.c
index aa2ccd0..4e2cb1d 100644
--- a/src/bitvec.c
+++ b/src/bitvec.c
@@ -213,14 +213,14 @@ if(GLOBALS->is_lxt)
 	import_lxt_trace(np);
 	}
 else
-if(GLOBALS->is_lx2)
+if(GLOBALS->extload) /*needs to be ahead of is_lx2 as now can be is_lx2 with FsdbReader */
 	{
-	import_lx2_trace(np);
+	import_extload_trace(np);
 	}
 else
-if(GLOBALS->extload)
+if(GLOBALS->is_lx2)
 	{
-	import_extload_trace(np);
+	import_lx2_trace(np);
 	}
 else
 	{
diff --git a/src/cocoa/Makefile.in b/src/cocoa/Makefile.in
index 43b867b..c6632bd 100644
--- a/src/cocoa/Makefile.in
+++ b/src/cocoa/Makefile.in
@@ -149,6 +149,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -162,6 +165,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -233,6 +238,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/src/entry.c b/src/entry.c
index 423142e..8d2b780 100644
--- a/src/entry.c
+++ b/src/entry.c
@@ -1,5 +1,5 @@
 /* 
- * Copyright (c) Tony Bybell 1999-2012.
+ * Copyright (c) Tony Bybell 1999-2013.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -21,6 +21,18 @@
 #endif
 
 #ifndef WAVE_MAC_USE_ENTRY
+static gint keypress_local(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+if(GLOBALS->window_entry_c_1)
+	{
+	gdk_window_raise(GLOBALS->window_entry_c_1->window);
+	}
+
+return(FALSE);
+}
+#endif
+
+#ifndef WAVE_MAC_USE_ENTRY
 static void enter_callback(GtkWidget *widget, GtkWidget *nothing)
 {
   G_CONST_RETURN gchar *entry_text;
@@ -155,6 +167,10 @@ return;
 
     gtk_widget_show(GLOBALS->window_entry_c_1);
     wave_gtk_grab_add(GLOBALS->window_entry_c_1);
+    gdk_window_raise(GLOBALS->window_entry_c_1->window);
+
+    gtk_signal_connect(GTK_OBJECT(GLOBALS->window_entry_c_1), "key_press_event",GTK_SIGNAL_FUNC(keypress_local), NULL);
+
 #endif
 }
 
diff --git a/src/extload.c b/src/extload.c
index c7078e2..f6b9a5b 100644
--- a/src/extload.c
+++ b/src/extload.c
@@ -1,5 +1,5 @@
 /* 
- * Copyright (c) Tony Bybell 2009-2012.
+ * Copyright (c) Tony Bybell 2009-2013.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -13,6 +13,8 @@
 #include "vzt.h"
 #include "lx2.h"
 
+#include "fsdb_wrapper_api.h"
+
 #ifndef _MSC_VER
 #include <unistd.h>
 #endif
@@ -48,8 +50,21 @@ fprintf(stderr, "%s", extload_loader_fail_msg);
 exit(255);
 }
 
+void fsdb_import_masked(void)
+{
+fprintf(stderr, "%s", extload_loader_fail_msg);
+exit(255);
+}
+
+void fsdb_set_fac_process_mask(nptr np)
+{
+fprintf(stderr, "%s", extload_loader_fail_msg);
+exit(255);
+}
+
 #else
 
+#ifndef WAVE_FSDB_READER_IS_PRESENT
 static int last_modification_check(void)
 {
 #ifdef HAVE_SYS_STAT_H
@@ -96,29 +111,217 @@ if(GLOBALS->extload_lastmod)
 return(1);
 #endif
 }
+#endif
 
-
-static char *get_varname(unsigned char *vtp, void *xc)
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+static char *get_varname(char *sbuff, unsigned char *vtp, unsigned char *vdp, int i)
+{
+#else
+static char *get_varname(unsigned char *vtp, unsigned char *vdp, int i)
 {
 static char sbuff[65537];
+#endif
 char * rc;
 int vt, vt_len;
 
+#ifndef WAVE_FSDB_READER_IS_PRESENT
 for(;;)
+#endif
 	{
+#ifndef WAVE_FSDB_READER_IS_PRESENT
 	rc = fgets(sbuff, 65536, GLOBALS->extload);
-	if(!rc)
+	if(rc)
+		{
+		if(isspace(rc[0]))
+			{
+			char *snp;
+			char sbuff2[65537];
+
+			sbuff2[0] = 0;
+
+			if((snp=strstr(rc+1, "Struct Name:")))
+				{
+				sscanf(rc+14,"%s", sbuff2);
+				if(sbuff2[0])
+					{
+					sprintf(rc, "Scope: vcd_struct %s NULL\n", sbuff2);
+					}
+				} 
+			else
+			if((snp=strstr(rc+1, "Struct End")))
+				{
+				sprintf(rc, "Upscope:\n");
+				} 
+			}
+		}
+	else
 		{
 		return(NULL);
 		}
+#else
+	rc = sbuff;
+#endif
 
-        if(rc[0] == 'V')
-                {
-                if(!strncmp("Var: ", rc, 5))
+	if((rc[0] == 'V') && (i >= 0))
+		{
+#ifndef WAVE_FSDB_READER_IS_PRESENT
+		if(!strncmp("Var: ", rc, 5))
+#endif
 			{
 			char *pnt = rc + 5;
-			char *vtyp_nam = pnt;
-			char *cpyto = sbuff;
+			char *last_l = NULL;
+			char typ[64];
+			char *esc = NULL;
+			char *lb = NULL;
+			char *colon = NULL;
+			char *rb = NULL;
+			int state = 0;
+			char *vtyp_nam;
+			char *cpyto;
+			char *pntd;
+	
+			sscanf(rc + 5, "%s", typ);
+
+			while(*pnt)
+				{
+				if((pnt[0] == 'l') && (pnt[1] == ':'))
+					{
+					last_l = pnt;
+					}
+				else if(pnt[0] == '\\')
+					{
+					esc = pnt;
+					}
+				else if(!last_l)
+					{
+					if(pnt[0] == '[')
+						{
+						lb = pnt;
+						colon = NULL;
+						rb = NULL;
+						state = 1;
+						}
+					else if(pnt[0] == ']')
+						{
+						rb = pnt;
+						state = 0;
+						if(!isspace(pnt[1]))
+							{
+							lb = colon = rb = NULL;
+							}
+						}
+					else if(pnt[0] == ':')
+						{
+						if(state)
+							{
+							colon = pnt;
+							}
+						}
+					}
+				
+				pnt++;
+				}
+
+			if(last_l)
+				{
+				unsigned int l, r;
+				char s1[32];
+				unsigned int d2;
+				sscanf(last_l+2, "%u r:%u %s %u", &l, &r, s1, &d2);
+
+				GLOBALS->extload_idcodes[i] = d2;
+				if(GLOBALS->extload_inv_idcodes[d2] == 0) GLOBALS->extload_inv_idcodes[d2] = i+1; /* root alias */
+
+				if(!strcmp("vcd_real", typ))
+					{
+					GLOBALS->mvlfacs_vzt_c_3[i].flags = VZT_RD_SYM_F_DOUBLE;
+					GLOBALS->extload_node_block[i].msi=0;				
+					GLOBALS->extload_node_block[i].lsi=0;				
+					GLOBALS->mvlfacs_vzt_c_3[i].len=64;
+					}
+				else
+				if(!strcmp("vcd_integer", typ))
+					{
+					GLOBALS->mvlfacs_vzt_c_3[i].flags = VZT_RD_SYM_F_INTEGER;
+					GLOBALS->extload_node_block[i].msi=0;				
+					GLOBALS->extload_node_block[i].lsi=0;				
+					GLOBALS->mvlfacs_vzt_c_3[i].len=32;
+					}
+				else
+					{
+					int len_parse = 1;
+
+					GLOBALS->mvlfacs_vzt_c_3[i].len=(l>r) ? (l-r+1) : (r-l+1);
+
+					if(esc && lb && rb)
+						{
+						GLOBALS->extload_node_block[i].msi = atoi(lb+1);
+						if(colon)
+							{
+							GLOBALS->extload_node_block[i].lsi = atoi(colon+1);
+							}
+							else
+							{
+							GLOBALS->extload_node_block[i].lsi = GLOBALS->extload_node_block[i].msi;
+							}						
+
+						len_parse = (GLOBALS->extload_node_block[i].msi > GLOBALS->extload_node_block[i].lsi)
+								? (GLOBALS->extload_node_block[i].msi - GLOBALS->extload_node_block[i].lsi + 1)
+								: (GLOBALS->extload_node_block[i].lsi - GLOBALS->extload_node_block[i].msi + 1);
+
+						if(len_parse != GLOBALS->mvlfacs_vzt_c_3[i].len)
+							{
+							GLOBALS->extload_node_block[i].msi=l;				
+							GLOBALS->extload_node_block[i].lsi=r;				
+							}
+						}
+						else
+						{
+						if(lb && !l && !r) /* fix for stranded signals */
+							{
+							GLOBALS->extload_node_block[i].msi=atoi(lb+1);				
+							GLOBALS->extload_node_block[i].lsi=atoi(lb+1);				
+							}
+							else
+							{
+							GLOBALS->extload_node_block[i].msi=l;				
+							GLOBALS->extload_node_block[i].lsi=r;				
+							}
+						}
+
+					GLOBALS->mvlfacs_vzt_c_3[i].flags = VZT_RD_SYM_F_BITS; 
+					}
+				}
+
+			/* now extract directional/type information */
+			pnt = rc + 5;
+			vtyp_nam = pnt;
+			cpyto = sbuff;
+			pntd = strrchr(last_l ? last_l : pnt, ':');
+
+			if(pntd)
+				{
+				unsigned char vd = ND_DIR_IMPLICIT;
+
+				pntd = strchr(pntd, ' ');
+				if(pntd)
+					{
+					pntd++;
+					if(*pntd == 'o')
+						{
+						vd = ND_DIR_OUT;
+						GLOBALS->nonimplicit_direction_encountered = 1;
+						}
+					else
+					if(!strncmp(pntd, "in", 2))
+						{
+						vd = (pntd[2] == 'p') ? ND_DIR_IN : ND_DIR_INOUT;
+						GLOBALS->nonimplicit_direction_encountered = 1;
+						}
+					}
+
+				if(vdp) { *vdp = vd; }
+				}
 
 			while(*pnt)
 				{
@@ -178,7 +381,33 @@ for(;;)
 					/* if((*pnt == '[')||(isspace(*pnt))) break; */
 
 					if(isspace(*pnt)) break;
-					if((*pnt == '[') && (pnt == strrchr(pnt, '['))) break; /* fixes arrays */
+					if((*pnt == '[') && (pnt == strrchr(pnt, '['))) /* fix for arrays */
+						{
+						/* now to fix possible generate... */
+						char *pnt2 = pnt;
+						char lastch = *pnt2;
+						int colon_seen = 0;
+
+						pnt2++;
+						while(*pnt2 && !isspace(*pnt2) && (*pnt2 != '[')) 
+							{ 
+							lastch = *pnt2; pnt2++; 
+							if(lastch == ':') { colon_seen = 1; }
+							};
+
+						if(lastch == ']') /* fix for NC verilog arrays */
+							{
+							int rng;
+
+							if(colon_seen) break;
+
+							rng = GLOBALS->extload_node_block[i].msi - GLOBALS->extload_node_block[i].lsi;
+							if(!rng)
+								{
+								break;
+								}
+							}
+						}
 
 					if(*pnt == '\\') /* this is not strictly correct, but fixes generic ranges from icarus */
 						{
@@ -195,7 +424,9 @@ for(;;)
 	else
         if(rc[0] == 'S')
                 {
+#ifndef WAVE_FSDB_READER_IS_PRESENT
 		if(!strncmp(rc, "Scope:", 6))
+#endif
 			{
 			char vht[2048];
 			char cname[2048];
@@ -204,7 +435,7 @@ for(;;)
 
 			vht[0] = vht[4] = vht[5] = cname[0] = ctype[0] = 0;
 			sscanf(rc+6, "%s %s %s", vht, cname, ctype);
-                        GLOBALS->fst_scope_name = fstReaderPushScope(xc, cname, GLOBALS->mod_tree_parent);
+                        GLOBALS->fst_scope_name = fstReaderPushScope(GLOBALS->extload_xc, cname, GLOBALS->mod_tree_parent);
 			if(!strcmp(ctype, "NULL")) { ctype[0] = 0; }
 
 			if(!strncmp(vht, "vcd_", 4))
@@ -215,6 +446,17 @@ for(;;)
 		                        case 't':       ttype = TREE_VCD_ST_TASK; break;
 		                        case 'f':	ttype = (vht[5] == 'u') ? TREE_VCD_ST_FUNCTION : TREE_VCD_ST_FORK; break;
 		                        case 'b':       ttype = TREE_VCD_ST_BEGIN; break;
+		                        case 'g':       ttype = TREE_VCD_ST_GENERATE; break;
+					case 's':	ttype = TREE_VCD_ST_STRUCT; break;
+		                        default:        ttype = TREE_UNKNOWN; break;
+		                        }
+				}
+			else
+			if(!strncmp(vht, "sv_", 3))
+				{
+		                switch(vht[3])
+					{
+		                        case 'i':       ttype = TREE_VCD_ST_INTERFACE; break;
 		                        default:        ttype = TREE_UNKNOWN; break;
 		                        }
 				}
@@ -229,327 +471,102 @@ for(;;)
 	else
         if(rc[0] == 'U')
                 {
-                GLOBALS->mod_tree_parent = fstReaderGetCurrentScopeUserInfo(xc);
-                GLOBALS->fst_scope_name = fstReaderPopScope(xc);
+                GLOBALS->mod_tree_parent = fstReaderGetCurrentScopeUserInfo(GLOBALS->extload_xc);
+                GLOBALS->fst_scope_name = fstReaderPopScope(GLOBALS->extload_xc);
 		}
 	}
+
+return(NULL);
 }
 
-/*
- * mainline
- */
-TimeType extload_main(char *fname, char *skip_start, char *skip_end)
-{
-char sbuff[65537];
-int max_idcode;
-unsigned int msk = 0;
-unsigned char vt_prev, vt, nvt;
-void *xc = NULL;
 
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+static void process_extload_variable(char *s_gv)
+#else
+static void process_extload_variable(void)
+#endif
+{
 int i;
+unsigned char vt, nvt;
+unsigned char vd;
 struct Node *n;
-struct symbol *s, *prevsymroot=NULL, *prevsym=NULL;
-struct symbol *sym_block = NULL;
-struct Node *node_block = NULL;
-char **namecache = NULL;
-
-if(!(GLOBALS->extload=fopen(fname, "rb")))
-	{
-	GLOBALS->extload_already_errored = 1;
-	return(LLDescriptor(0)); 	/* look at GLOBALS->vzt_vzt_c_1 in caller for success status... */
-	}
-fclose(GLOBALS->extload);
+struct symbol *s;
+char buf[65537];
+char *str;	
+struct fac *f;
+char *fnam;
+int flen;
 
-/* SPLASH */                            splash_create();
+i = GLOBALS->extload_i;
 
-last_modification_check();
-sprintf(sbuff, "%s -info %s 2>&1", EXTLOAD_PATH, fname);
-GLOBALS->extload = popen(sbuff, "r");
-for(;;)
+if(i<0)
 	{
-	char * rc = fgets(sbuff, 65536, GLOBALS->extload);
-	if(!rc) break;
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+	fnam = get_varname(s_gv, &GLOBALS->extload_vt_prev, &GLOBALS->extload_vd_prev, 0);
+	flen = strlen(fnam);
 
-	switch(rc[0])
+	if(GLOBALS->extload_hlen)
 		{
-		case 's':
-			if(!strncmp("scale unit         :", rc, 20))
-				{
-				char *pnt = rc+20;
-
-				GLOBALS->time_scale = atoi(rc+20);
-				GLOBALS->time_dimension = 'n';
-				while(*pnt)
-					{
-					if(isalpha(*pnt))
-						{
-						GLOBALS->time_dimension = tolower(*pnt);
-						break;
-						}
-					pnt++;
-					}
-				
-				msk |= 1;
-				}
-			break;
-
-		case 'm':
-			if(!strncmp("minimum xtag       : (", rc, 22))
-				{
-				unsigned int lo = 0, hi = 0;
-				sscanf(rc + 22, "%u %u", &hi, &lo);
-				GLOBALS->min_time = (TimeType)((((UTimeType)hi)<<32) + ((UTimeType)lo));
-
-				msk |= 2;
-				}
-			else
-			if(!strncmp("maximum xtag       : (", rc, 22))
-				{
-				unsigned int lo = 0, hi = 0;
-				sscanf(rc + 22, "%u %u", &hi, &lo);
-				GLOBALS->max_time = (TimeType)((((UTimeType)hi)<<32) + ((UTimeType)lo));
-
-				msk |= 4;
-				}
-			else
-			if(!strncmp("max var idcode     :", rc, 20))
-				{
-				sscanf(rc + 21, "%d", &max_idcode);
-
-				msk |= 8;
-				}
-
-			break;
-
-		case 'v':
-			if(!strncmp("var creation cnt   :", rc, 20))
-				{
-				sscanf(rc + 21, "%d", &GLOBALS->numfacs);
-
-				msk |= 16;
-				}
-
-		case 'f':
-			if(!strncmp("file status        : finished", rc, 29))
-				{
-				msk |= 32;
-				}
-			break;
-
-		default:
-			break;
+		GLOBALS->extload_namecache[0]=malloc_2(GLOBALS->extload_hlen+1+flen+1);
+		strcpy(GLOBALS->extload_namecache[0], GLOBALS->fst_scope_name);
+		*(GLOBALS->extload_namecache[0]+GLOBALS->extload_hlen) = '.';
+		strcpy(GLOBALS->extload_namecache[0]+GLOBALS->extload_hlen+1, fnam);
 		}
-	}
-pclose(GLOBALS->extload);
-
-if(msk != (1+2+4+8+16+32))
-	{
-	fprintf(stderr, EXTLOAD"Could not initialize '%s' properly.\n", fname);
-	if((msk & (1+2+4+8+16+32)) == (1+2+4+8+16))
+	else
 		{
-		fprintf(stderr, EXTLOAD"File is not finished dumping.\n");
+		GLOBALS->extload_namecache[0]=malloc_2(flen+1);
+		strcpy(GLOBALS->extload_namecache[0], fnam);
 		}
-	GLOBALS->extload_already_errored = 1;
-	return(LLDescriptor(0));
-	}
-
-GLOBALS->min_time *= GLOBALS->time_scale;
-GLOBALS->max_time *= GLOBALS->time_scale;
-
-GLOBALS->mvlfacs_vzt_c_3=(struct fac *)calloc_2(GLOBALS->numfacs,sizeof(struct fac));
-GLOBALS->vzt_table_vzt_c_1=(struct lx2_entry *)calloc_2(GLOBALS->numfacs, sizeof(struct lx2_entry));
-namecache=(char **)calloc_2(GLOBALS->numfacs, sizeof(char *));
-sym_block = (struct symbol *)calloc_2(GLOBALS->numfacs, sizeof(struct symbol));
-node_block=(struct Node *)calloc_2(GLOBALS->numfacs,sizeof(struct Node));
-GLOBALS->extload_idcodes=(unsigned int *)calloc_2(GLOBALS->numfacs, sizeof(unsigned int));
-GLOBALS->extload_inv_idcodes=(int *)calloc_2(max_idcode+1, sizeof(int));
+#else
+	fnam = get_varname(&GLOBALS->extload_vt_prev, &GLOBALS->extload_vd_prev, 0);
+	flen = strlen(fnam);
 
-if(!last_modification_check()) { GLOBALS->extload_already_errored = 1; return(LLDescriptor(0)); }
-sprintf(sbuff, "%s -hier_tree %s 2>&1", EXTLOAD_PATH, fname);
-GLOBALS->extload = popen(sbuff, "r");
-i = 0;
-for(;;)
+	GLOBALS->extload_namecache[0]=malloc_2(flen+1);
+	strcpy(GLOBALS->extload_namecache[0], fnam);
+#endif
+	}
+else
 	{
-	char * rc = fgets(sbuff, 65536, GLOBALS->extload);
-	if(!rc) break;
-
-	if(rc[0] == 'V')
+	vt = GLOBALS->extload_vt_prev;
+	vd = GLOBALS->extload_vd_prev;
+	if(i!=(GLOBALS->numfacs-1))
 		{
-		if(!strncmp("Var:", rc, 4))
-			{
-			char *pnt = rc + 5;
-			char *last_l = NULL;
-			char typ[64];
-			char *esc = NULL;
-			char *lb = NULL;
-			char *colon = NULL;
-			char *rb = NULL;
-			int state = 0;
-
-			sscanf(rc + 5, "%s", typ);
-
-			while(*pnt)
-				{
-				if((pnt[0] == 'l') && (pnt[1] == ':'))
-					{
-					last_l = pnt;
-					}
-				else if(pnt[0] == '\\')
-					{
-					esc = pnt;
-					}
-				else if(pnt[0] == '[')
-					{
-					lb = pnt;
-					colon = NULL;
-					state = 1;
-					}
-				else if(pnt[0] == ']')
-					{
-					rb = pnt;
-					state = 0;
-					}
-				else if(pnt[0] == ':')
-					{
-					if(state)
-						{
-						colon = pnt;
-						}
-					}
-				
-				pnt++;
-				}
-
-			if(last_l)
-				{
-				unsigned int l, r;
-				char s1[32], s3[32], s4[32];
-				unsigned int d2;
-				sscanf(last_l, "l:%u r:%u %s %u %s %s", &l, &r, s1, &d2, s3, s4);
-
-				GLOBALS->extload_idcodes[i] = d2;
-				if(GLOBALS->extload_inv_idcodes[d2] == 0) GLOBALS->extload_inv_idcodes[d2] = i+1; /* root alias */
-
-				if(!strcmp("vcd_real", typ))
-					{
-					GLOBALS->mvlfacs_vzt_c_3[i].flags = VZT_RD_SYM_F_DOUBLE;
-					node_block[i].msi=0;				
-					node_block[i].lsi=0;				
-					GLOBALS->mvlfacs_vzt_c_3[i].len=64;
-					}
-				else
-				if(!strcmp("vcd_integer", typ))
-					{
-					GLOBALS->mvlfacs_vzt_c_3[i].flags = VZT_RD_SYM_F_INTEGER;
-					node_block[i].msi=0;				
-					node_block[i].lsi=0;				
-					GLOBALS->mvlfacs_vzt_c_3[i].len=32;
-					}
-				else
-					{
-					int len_parse = 1;
-
-					GLOBALS->mvlfacs_vzt_c_3[i].len=(l>r) ? (l-r+1) : (r-l+1);
-
-					if(esc && lb && rb)
-						{
-						node_block[i].msi = atoi(lb+1);
-						if(colon)
-							{
-							node_block[i].lsi = atoi(colon+1);
-							}
-							else
-							{
-							node_block[i].lsi = node_block[i].msi;
-							}						
-
-						len_parse = (node_block[i].msi > node_block[i].lsi)
-								? (node_block[i].msi - node_block[i].lsi + 1)
-								: (node_block[i].lsi - node_block[i].msi + 1);
-
-						if(len_parse != GLOBALS->mvlfacs_vzt_c_3[i].len)
-							{
-							node_block[i].msi=l;				
-							node_block[i].lsi=r;				
-							}
-						}
-						else
-						{
-						node_block[i].msi=l;				
-						node_block[i].lsi=r;				
-						}
-
-					GLOBALS->mvlfacs_vzt_c_3[i].flags = VZT_RD_SYM_F_BITS; 
-					}
-				}
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+		fnam = get_varname(s_gv, &GLOBALS->extload_vt_prev, &GLOBALS->extload_vd_prev, i+1);
+		flen = strlen(fnam);
 
-			i++;
+		if(GLOBALS->extload_hlen)
+			{
+			GLOBALS->extload_namecache[i+1]=malloc_2(GLOBALS->extload_hlen+1+flen+1);
+			strcpy(GLOBALS->extload_namecache[i+1], GLOBALS->fst_scope_name);
+			*(GLOBALS->extload_namecache[i+1]+GLOBALS->extload_hlen) = '.';
+			strcpy(GLOBALS->extload_namecache[i+1]+GLOBALS->extload_hlen+1, fnam);
 			}
-		}
-
-	}
-
-pclose(GLOBALS->extload);
-
-if(i==GLOBALS->numfacs)
-	{
-	fprintf(stderr, EXTLOAD"Finished building %d facs.\n", GLOBALS->numfacs);
-	}
-	else
-	{
-	fprintf(stderr, EXTLOAD"Fac count mismatch: %d expected vs %d found, exiting.\n", GLOBALS->numfacs, i);
-	GLOBALS->extload_already_errored = 1;
-	return(LLDescriptor(0));
-	}
-/* SPLASH */                            splash_sync(1, 5);
-
-if(!last_modification_check()) { GLOBALS->extload_already_errored = 1; return(LLDescriptor(0)); }
-sprintf(sbuff, "%s -hier_tree %s 2>&1", EXTLOAD_PATH, fname);
-GLOBALS->extload = popen(sbuff, "r");
-
-/* do your stuff here..all useful info has been initialized by now */
-
-if(!GLOBALS->hier_was_explicitly_set)    /* set default hierarchy split char */
-        {
-        GLOBALS->hier_delimeter='.';
-        }
-
-xc = fstReaderOpenForUtilitiesOnly();
-
-if(GLOBALS->numfacs)
-	{
-	char *fnam = get_varname(&vt_prev, xc);
-	int flen = strlen(fnam);
-	namecache[0]=malloc_2(flen+1);
-	strcpy(namecache[0], fnam);
-	}
-
-for(i=0;i<GLOBALS->numfacs;i++)
-        {
-	char buf[65537];
-	char *str;	
-	struct fac *f;
+		else
+			{
+			GLOBALS->extload_namecache[i+1]=malloc_2(flen+1);
+			strcpy(GLOBALS->extload_namecache[i+1], fnam);
+			}
+#else
+		fnam = get_varname(&GLOBALS->extload_vt_prev, &GLOBALS->extload_vd_prev, i+1);
+		flen = strlen(fnam);
 
-	vt = vt_prev;
-	if(i!=(GLOBALS->numfacs-1))
-		{
-		char *fnam = get_varname(&vt_prev, xc);
-		int flen = strlen(fnam);
-		namecache[i+1]=malloc_2(flen+1);
-		strcpy(namecache[i+1], fnam);
+		GLOBALS->extload_namecache[i+1]=malloc_2(flen+1);
+		strcpy(GLOBALS->extload_namecache[i+1], fnam);
+#endif
 		}
 
 	if(i>1)
 		{
-		free_2(namecache[i-2]);
-		namecache[i-2] = NULL;
+		free_2(GLOBALS->extload_namecache[i-2]);
+		GLOBALS->extload_namecache[i-2] = NULL;
 		}
 
 	f=GLOBALS->mvlfacs_vzt_c_3+i;
 
 	if((f->len>1)&& (!(f->flags&(VZT_RD_SYM_F_INTEGER|VZT_RD_SYM_F_DOUBLE|VZT_RD_SYM_F_STRING))) )
 		{
-		int len=sprintf(buf, "%s[%d:%d]", namecache[i],node_block[i].msi, node_block[i].lsi);
+		int len=sprintf(buf, "%s[%d:%d]", GLOBALS->extload_namecache[i],GLOBALS->extload_node_block[i].msi, GLOBALS->extload_node_block[i].lsi);
 		str=malloc_2(len+1);
 
 		if(!GLOBALS->alt_hier_delimeter)
@@ -560,19 +577,19 @@ for(i=0;i<GLOBALS->numfacs;i++)
 			{
 			strcpy_vcdalt(str, buf, GLOBALS->alt_hier_delimeter);
 			}
-		s=&sym_block[i];
+		s=&GLOBALS->extload_sym_block[i];
 	        symadd_name_exists_sym_exists(s,str,0);
-		prevsymroot = prevsym = NULL;
+		GLOBALS->extload_prevsymroot = GLOBALS->extload_prevsym = NULL;
 		}
 	else if ( 
 			((f->len==1)&&(!(f->flags&(VZT_RD_SYM_F_INTEGER|VZT_RD_SYM_F_DOUBLE|VZT_RD_SYM_F_STRING)))&&
-			((i!=GLOBALS->numfacs-1)&&(!strcmp(namecache[i], namecache[i+1]))))
+			((i!=GLOBALS->numfacs-1)&&(!strcmp(GLOBALS->extload_namecache[i], GLOBALS->extload_namecache[i+1]))))
 			||
-			(((i!=0)&&(!strcmp(namecache[i], namecache[i-1]))) &&
-			(node_block[i].msi!=-1)&&(node_block[i].lsi!=-1))
+			(((i!=0)&&(!strcmp(GLOBALS->extload_namecache[i], GLOBALS->extload_namecache[i-1]))) &&
+			(GLOBALS->extload_node_block[i].msi!=-1)&&(GLOBALS->extload_node_block[i].lsi!=-1))
 		)
 		{
-		int len = sprintf(buf, "%s[%d]", namecache[i],node_block[i].msi);
+		int len = sprintf(buf, "%s[%d]", GLOBALS->extload_namecache[i],GLOBALS->extload_node_block[i].msi);
 		str=malloc_2(len+1);
 		if(!GLOBALS->alt_hier_delimeter)
 			{
@@ -582,44 +599,44 @@ for(i=0;i<GLOBALS->numfacs;i++)
 			{
 			strcpy_vcdalt(str, buf, GLOBALS->alt_hier_delimeter);
 			}
-		s=&sym_block[i];
+		s=&GLOBALS->extload_sym_block[i];
 	        symadd_name_exists_sym_exists(s,str,0);
-		if((prevsym)&&(i>0)&&(!strcmp(namecache[i], namecache[i-1])))	/* allow chaining for search functions.. */
+		if((GLOBALS->extload_prevsym)&&(i>0)&&(!strcmp(GLOBALS->extload_namecache[i], GLOBALS->extload_namecache[i-1])))	/* allow chaining for search functions.. */
 			{
-			prevsym->vec_root = prevsymroot;
-			prevsym->vec_chain = s;
-			s->vec_root = prevsymroot;
-			prevsym = s;
+			GLOBALS->extload_prevsym->vec_root = GLOBALS->extload_prevsymroot;
+			GLOBALS->extload_prevsym->vec_chain = s;
+			s->vec_root = GLOBALS->extload_prevsymroot;
+			GLOBALS->extload_prevsym = s;
 			}
 			else
 			{
-			prevsymroot = prevsym = s;
+			GLOBALS->extload_prevsymroot = GLOBALS->extload_prevsym = s;
 			}
 		}
 		else
 		{
-		str=malloc_2(strlen(namecache[i])+1);
+		str=malloc_2(strlen(GLOBALS->extload_namecache[i])+1);
 		if(!GLOBALS->alt_hier_delimeter)
 			{
-			strcpy(str, namecache[i]);
+			strcpy(str, GLOBALS->extload_namecache[i]);
 			}
 			else
 			{
-			strcpy_vcdalt(str, namecache[i], GLOBALS->alt_hier_delimeter);
+			strcpy_vcdalt(str, GLOBALS->extload_namecache[i], GLOBALS->alt_hier_delimeter);
 			}
-		s=&sym_block[i];
+		s=&GLOBALS->extload_sym_block[i];
 	        symadd_name_exists_sym_exists(s,str,0);
-		prevsymroot = prevsym = NULL;
+		GLOBALS->extload_prevsymroot = GLOBALS->extload_prevsym = NULL;
 
 		if(f->flags&VZT_RD_SYM_F_INTEGER)
 			{
-			node_block[i].msi=31;
-			node_block[i].lsi=0;
+			GLOBALS->extload_node_block[i].msi=31;
+			GLOBALS->extload_node_block[i].lsi=0;
 			GLOBALS->mvlfacs_vzt_c_3[i].len=32;
 			}
 		}
 		
-        n=&node_block[i];
+        n=&GLOBALS->extload_node_block[i];
         n->nname=s->name;
         n->mv.mvlfac = GLOBALS->mvlfacs_vzt_c_3+i;
 	GLOBALS->mvlfacs_vzt_c_3[i].working_node = n;
@@ -657,25 +674,338 @@ for(i=0;i<GLOBALS->numfacs;i++)
 	        default:                nvt = ND_UNSPECIFIED_DEFAULT; break;
 	        }
 	n->vartype = nvt;
+	n->vardir = vd;
+        }
+
+GLOBALS->extload_i++;
+}
+
+
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+static void extload_hiertree_callback(void *pnt)
+{
+char *s = (char *)pnt;
+
+switch(s[0])
+	{
+	case 'S':
+	case 'U': 	get_varname(s, NULL, NULL, -1);
+			GLOBALS->extload_hlen = GLOBALS->fst_scope_name ? strlen(GLOBALS->fst_scope_name) : 0;
+			break;
+
+	case 'V':	process_extload_variable(s);
+	default:	break;
+	}
+}
+#endif
+
+
+/*
+ * mainline
+ */
+static TimeType extload_main_2(char *fname, char *skip_start, char *skip_end)
+{
+int max_idcode;
+#ifndef WAVE_FSDB_READER_IS_PRESENT
+char sbuff[65537];
+unsigned int msk = 0;
+#endif
+
+int i;
+
+if(!(GLOBALS->extload=fopen(fname, "rb")))
+	{
+	GLOBALS->extload_already_errored = 1;
+	return(LLDescriptor(0)); 	/* look at GLOBALS->vzt_vzt_c_1 in caller for success status... */
+	}
+fclose(GLOBALS->extload);
+
+
+/* SPLASH */                            splash_create();
+
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+GLOBALS->extload_ffr_ctx = fsdbReaderOpenFile(GLOBALS->loaded_file_name);
+GLOBALS->is_lx2 = LXT2_IS_FSDB;
+
+if(GLOBALS->extload_ffr_ctx)
+	{
+	int rv;
+	int mult;
+	char scale;
+	uint64_t tim;
+	struct fsdbReaderGetStatistics_t *gs;
+	int success_count = 0;
+	int attempt_count = 0;
+
+	attempt_count++;
+	rv = fsdbReaderExtractScaleUnit(GLOBALS->extload_ffr_ctx, &mult, &scale);
+	if(rv)
+		{
+		GLOBALS->time_scale = mult;
+		GLOBALS->time_dimension = tolower(scale);
+		success_count++;
+		}
+
+	attempt_count++;
+	rv = fsdbReaderGetMinFsdbTag64(GLOBALS->extload_ffr_ctx, &tim);
+	if(rv)
+		{
+		GLOBALS->min_time = tim;
+		success_count++;
+		}
+	
+	attempt_count++;
+	rv = fsdbReaderGetMaxFsdbTag64(GLOBALS->extload_ffr_ctx, &tim);
+	if(rv)
+		{
+		GLOBALS->max_time = tim;
+		if(GLOBALS->max_time == LLDescriptor(0))
+			{
+			GLOBALS->max_time = LLDescriptor(1);
+			}
+		success_count++;
+		}
+
+	attempt_count++;
+	max_idcode = fsdbReaderGetMaxVarIdcode(GLOBALS->extload_ffr_ctx);
+	if(max_idcode)
+		{
+		success_count++;
+		}
+	
+	attempt_count++;
+	gs = fsdbReaderGetStatistics(GLOBALS->extload_ffr_ctx);
+	if(gs)
+		{
+		GLOBALS->numfacs = gs->varCount;
+		free(gs);
+		success_count++;
+		}
+
+	if(attempt_count != success_count)
+		{
+		fprintf(stderr, EXTLOAD"Could not initialize '%s' properly.\n", fname);
+		GLOBALS->extload_already_errored = 1;
+		return(LLDescriptor(0));
+		}
+	}
+	else
+	{
+	fprintf(stderr, EXTLOAD"Could not initialize '%s' properly.\n", fname);
+	GLOBALS->extload_already_errored = 1;
+	return(LLDescriptor(0));
+	}
+
+#else
+
+last_modification_check();
+sprintf(sbuff, "%s -info %s 2>&1", EXTLOAD_PATH, fname);
+GLOBALS->extload = popen(sbuff, "r");
+for(;;)
+	{
+	char * rc = fgets(sbuff, 65536, GLOBALS->extload);
+	if(!rc) break;
+
+	switch(rc[0])
+		{
+		case 's':
+			if(!strncmp("scale unit", rc, 10))
+				{
+				char *pnt = strchr(rc+10, ':');
+
+				if(pnt)
+					{
+					pnt++;
+					GLOBALS->time_scale = atoi(pnt);
+					GLOBALS->time_dimension = 'n';
+					while(*pnt)
+						{
+						if(isalpha(*pnt))
+							{
+							GLOBALS->time_dimension = tolower(*pnt);
+							break;
+							}
+						pnt++;
+						}
+					
+					msk |= 1;
+					}
+				}
+			break;
+
+		case 'm':
+			if(!strncmp("minimum xtag", rc, 12))
+				{
+				char *pnt = strchr(rc+12, '(');
+				if(pnt)
+					{
+					unsigned int lo = 0, hi = 0;
+					pnt++;
+					sscanf(pnt, "%u %u", &hi, &lo);
+					GLOBALS->min_time = (TimeType)((((UTimeType)hi)<<32) + ((UTimeType)lo));
+
+					msk |= 2;
+					}
+				}
+			else
+			if(!strncmp("maximum xtag", rc, 12))
+				{
+				char *pnt = strchr(rc+12, '(');
+				if(pnt)
+					{
+					unsigned int lo = 0, hi = 0;
+					pnt++;
+					sscanf(pnt, "%u %u", &hi, &lo);
+					GLOBALS->max_time = (TimeType)((((UTimeType)hi)<<32) + ((UTimeType)lo));
+					if(GLOBALS->max_time == LLDescriptor(0))
+						{
+						GLOBALS->max_time = LLDescriptor(1);
+						}
+
+					msk |= 4;
+					}
+				}
+			else
+			if(!strncmp("max var idcode", rc, 14))
+				{
+				char *pnt = strchr(rc+14, ':');
+				if(pnt)
+					{
+					pnt++;
+					sscanf(pnt, "%d", &max_idcode);
+
+					msk |= 8;
+					}
+				}
+
+			break;
+
+		case 'v':
+			if(!strncmp("var creation cnt", rc, 16))
+				{
+				char *pnt = strchr(rc+16, ':');
+				if(pnt)
+					{
+					pnt++;
+					sscanf(pnt, "%d", &GLOBALS->numfacs);
+
+					msk |= 16;
+					}
+				}
+
+		case 'f':
+			if(!strncmp("file status", rc, 11))
+				{
+				char *pnt = strchr(rc+11, ':');
+				if(pnt)
+					{
+					pnt++;
+					if(strstr(pnt, "finished"))
+						{
+						msk |= 32;
+						}
+					}
+				}
+			break;
+
+		default:
+			break;
+		}
+	}
+pclose(GLOBALS->extload);
+
+if(msk != (1+2+4+8+16+32))
+	{
+	fprintf(stderr, EXTLOAD"Could not initialize '%s' properly.\n", fname);
+	if((msk & (1+2+4+8+16+32)) == (1+2+4+8+16))
+		{
+		fprintf(stderr, EXTLOAD"File is not finished dumping.\n");
+		}
+	GLOBALS->extload_already_errored = 1;
+	return(LLDescriptor(0));
+	}
+
+#endif
+
+GLOBALS->min_time *= GLOBALS->time_scale;
+GLOBALS->max_time *= GLOBALS->time_scale;
+
+GLOBALS->mvlfacs_vzt_c_3=(struct fac *)calloc_2(GLOBALS->numfacs,sizeof(struct fac));
+GLOBALS->vzt_table_vzt_c_1=(struct lx2_entry *)calloc_2(GLOBALS->numfacs, sizeof(struct lx2_entry));
+GLOBALS->extload_namecache=(char **)calloc_2(GLOBALS->numfacs, sizeof(char *));
+GLOBALS->extload_sym_block = (struct symbol *)calloc_2(GLOBALS->numfacs, sizeof(struct symbol));
+GLOBALS->extload_node_block=(struct Node *)calloc_2(GLOBALS->numfacs,sizeof(struct Node));
+GLOBALS->extload_idcodes=(unsigned int *)calloc_2(GLOBALS->numfacs, sizeof(unsigned int));
+GLOBALS->extload_inv_idcodes=(int *)calloc_2(max_idcode+1, sizeof(int));
+
+/* SPLASH */                            splash_sync(1, 5);
+
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+
+if(!GLOBALS->hier_was_explicitly_set)    /* set default hierarchy split char */
+        {
+        GLOBALS->hier_delimeter='.';
+        }
+
+GLOBALS->extload_xc = fstReaderOpenForUtilitiesOnly();
+
+GLOBALS->extload_i=-1;
+fsdbReaderReadScopeVarTree(GLOBALS->extload_ffr_ctx, extload_hiertree_callback);
+process_extload_variable(NULL); /* flush out final cached variable */
+
+decorated_module_cleanup(); /* ...also now in gtk2_treesearch.c */
+iter_through_comp_name_table();
+
+for(i=0;((i<2)&&(i<GLOBALS->numfacs));i++)
+	{
+	if(GLOBALS->extload_namecache[i])
+		{
+		free_2(GLOBALS->extload_namecache[i]);
+		GLOBALS->extload_namecache[i] = NULL;
+		}
+	}
+free_2(GLOBALS->extload_namecache); GLOBALS->extload_namecache = NULL;
+
+fstReaderClose(GLOBALS->extload_xc); /* corresponds to fstReaderOpenForUtilitiesOnly() */
+
+#else
+
+if(!last_modification_check()) { GLOBALS->extload_already_errored = 1; return(LLDescriptor(0)); }
+sprintf(sbuff, "%s -hier_tree %s 2>&1", EXTLOAD_PATH, fname);
+GLOBALS->extload = popen(sbuff, "r");
+
+/* do your stuff here..all useful info has been initialized by now */
+
+if(!GLOBALS->hier_was_explicitly_set)    /* set default hierarchy split char */
+        {
+        GLOBALS->hier_delimeter='.';
         }
 
-while(get_varname(&vt_prev, xc)); /* read through end to process all upscopes */
+GLOBALS->extload_xc = fstReaderOpenForUtilitiesOnly();
+
+for(GLOBALS->extload_i=-1;(GLOBALS->numfacs) && (GLOBALS->extload_i<GLOBALS->numfacs);)
+	{
+	process_extload_variable();
+	}
+while(get_varname(&GLOBALS->extload_vt_prev, NULL, -1)); /* read through end to process all upscopes */
 
 decorated_module_cleanup(); /* ...also now in gtk2_treesearch.c */
 iter_through_comp_name_table();
 
 for(i=0;((i<2)&&(i<GLOBALS->numfacs));i++)
 	{
-	if(namecache[i])
+	if(GLOBALS->extload_namecache[i])
 		{
-		free_2(namecache[i]);
-		namecache[i] = NULL;
+		free_2(GLOBALS->extload_namecache[i]);
+		GLOBALS->extload_namecache[i] = NULL;
 		}
 	}
-free_2(namecache); namecache = NULL;
+free_2(GLOBALS->extload_namecache); GLOBALS->extload_namecache = NULL;
 pclose(GLOBALS->extload);
 
-fstReaderClose(xc); /* corresponds to fstReaderOpenForUtilitiesOnly() */
+fstReaderClose(GLOBALS->extload_xc); /* corresponds to fstReaderOpenForUtilitiesOnly() */
+
+#endif
 
 /* SPLASH */                            splash_sync(2, 5);  
 GLOBALS->facs=(struct symbol **)malloc_2(GLOBALS->numfacs*sizeof(struct symbol *));
@@ -685,7 +1015,7 @@ if(GLOBALS->fast_tree_sort)
         for(i=0;i<GLOBALS->numfacs;i++)
                 {
                 int len;
-                GLOBALS->facs[i]=&sym_block[i]; 
+                GLOBALS->facs[i]=&GLOBALS->extload_sym_block[i]; 
                 if((len=strlen(GLOBALS->facs[i]->name))>GLOBALS->longestname) GLOBALS->longestname=len;
                 }
                                 
@@ -717,7 +1047,7 @@ if(GLOBALS->fast_tree_sort)
 #endif
 		int len;
 
-		GLOBALS->facs[i]=&sym_block[i];
+		GLOBALS->facs[i]=&GLOBALS->extload_sym_block[i];
 		subst=GLOBALS->facs[i]->name;
 	        if((len=strlen(subst))>GLOBALS->longestname) GLOBALS->longestname=len;
 #ifdef WAVE_HIERFIX
@@ -792,6 +1122,25 @@ return(GLOBALS->max_time);
 }
 
 
+TimeType extload_main(char *fname, char *skip_start, char *skip_end)
+{
+TimeType tt = extload_main_2(fname, skip_start, skip_end);
+
+if(!tt)
+	{
+        if(GLOBALS->extload_ffr_ctx)
+                {
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+                fsdbReaderClose(GLOBALS->extload_ffr_ctx);
+#endif
+                GLOBALS->extload_ffr_ctx = NULL;
+                }
+	}
+
+return(tt);
+}
+
+
 /*
  * extload callback (only does bits for now)
  */
@@ -913,11 +1262,52 @@ if(GLOBALS->extload_inv_idcodes[txidx_in_trace] < 0)
 
 GLOBALS->extload_inv_idcodes[txidx_in_trace] = - (txidx + 1); 
 
+#ifndef WAVE_FSDB_READER_IS_PRESENT
 fprintf(stderr, EXTLOAD"Import: %s\n", np->nname);
+#endif
 
 /* new stuff */
 len = np->mv.mvlfac->len;
 
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+{
+void *hdl;
+
+/* fsdbReaderAddToSignalList(GLOBALS->extload_ffr_ctx, txidx_in_trace); */
+/* fsdbReaderLoadSignals(GLOBALS->extload_ffr_ctx); */
+
+hdl = fsdbReaderCreateVCTraverseHandle(GLOBALS->extload_ffr_ctx, txidx_in_trace);
+if(fsdbReaderHasIncoreVC(GLOBALS->extload_ffr_ctx, hdl))
+	{
+	TimeType mxt = (TimeType)fsdbReaderGetMinXTag(GLOBALS->extload_ffr_ctx, hdl);
+	fsdbReaderGotoXTag(GLOBALS->extload_ffr_ctx, hdl, mxt);
+
+	for(;;)
+		{
+		void *val_ptr;
+		char *b;
+		if(!fsdbReaderGetVC(GLOBALS->extload_ffr_ctx, hdl, &val_ptr))
+			{
+			break;
+			}
+
+		b = fsdbReaderTranslateVC(hdl, val_ptr);
+		extload_callback(&mxt, &txidx, &b);
+
+		if(!fsdbReaderGotoNextVC(GLOBALS->extload_ffr_ctx, hdl))
+			{
+			break;
+			}
+			
+		mxt = (TimeType)fsdbReaderGetXTag(GLOBALS->extload_ffr_ctx, hdl);
+		}
+	}
+fsdbReaderFree(GLOBALS->extload_ffr_ctx, hdl);
+/* fsdbReaderUnloadSignals(GLOBALS->extload_ffr_ctx); */
+}
+
+#else
+
 if(last_modification_check()) /* place array height check here in an "&&" branch, sorry, arrays not supported */
 	{
 	char sbuff[65537];
@@ -985,6 +1375,7 @@ if(last_modification_check()) /* place array height check here in an "&&" branch
 
 	pclose(GLOBALS->extload);
 	}
+#endif
 
 histent_tail = htemp = histent_calloc();
 if(len>1)
@@ -1066,5 +1457,37 @@ if(nold!=np)
 	}
 }
 
+
+void fsdb_import_masked(void)
+{
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+fsdbReaderLoadSignals(GLOBALS->extload_ffr_ctx);
+GLOBALS->extload_ffr_import_count = 0;
+#endif
+}
+
+void fsdb_set_fac_process_mask(nptr np)
+{
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+struct fac *f;
+int txidx, txidx_in_trace;
+
+if(!(f=np->mv.mvlfac)) return;	/* already imported */
+
+txidx = f - GLOBALS->mvlfacs_vzt_c_3;
+txidx_in_trace = GLOBALS->extload_idcodes[txidx];
+
+if(GLOBALS->extload_inv_idcodes[txidx_in_trace] > 0)
+	{
+	if(!GLOBALS->extload_ffr_import_count)
+		{
+		fsdbReaderUnloadSignals(GLOBALS->extload_ffr_ctx);
+		}
+	GLOBALS->extload_ffr_import_count++;
+
+	fsdbReaderAddToSignalList(GLOBALS->extload_ffr_ctx, txidx_in_trace);
+	}
 #endif
+}
 
+#endif
diff --git a/src/extload.h b/src/extload.h
index 338a38c..ede3ebb 100644
--- a/src/extload.h
+++ b/src/extload.h
@@ -23,5 +23,9 @@
 TimeType 	extload_main(char *fname, char *skip_start, char *skip_end);
 void 		import_extload_trace(nptr np);
 
+/* FsdbReader adds */
+void 		fsdb_import_masked(void);
+void 		fsdb_set_fac_process_mask(nptr np);
+
 #endif
 
diff --git a/src/fsdb_wrapper_api.cc b/src/fsdb_wrapper_api.cc
new file mode 100644
index 0000000..58fa732
--- /dev/null
+++ b/src/fsdb_wrapper_api.cc
@@ -0,0 +1,725 @@
+/*
+ * Copyright (c) Tony Bybell 2013.
+ *
+ * This program 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
+ * of the License, or (at your option) any later version.
+ */
+
+#include <config.h>
+#include "fsdb_wrapper_api.h"
+
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+
+#ifdef NOVAS_FSDB
+#undef NOVAS_FSDB
+#endif
+
+#include "ffrAPI.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <inttypes.h>
+
+#ifndef FALSE
+#define FALSE   0
+#endif
+
+#ifndef TRUE
+#define TRUE    1
+#endif
+
+static bool_T __TreeCB(fsdbTreeCBType cb_type, void *client_data, void *tree_cb_data)
+{
+return(TRUE); /* currently unused along with var/scope traversal */
+}
+
+static bool_T __MyTreeCB(fsdbTreeCBType cb_type, void *client_data, void *tree_cb_data);
+
+
+extern "C" void *fsdbReaderOpenFile(char *nam)
+{
+if(!ffrObject::ffrIsFSDB(nam))
+	{
+	return(NULL);
+	}
+
+ffrFSDBInfo fsdb_info;
+ffrObject::ffrGetFSDBInfo(nam, fsdb_info);
+if(fsdb_info.file_type != FSDB_FT_VERILOG)
+	{
+	return(NULL);
+	}
+
+ffrObject *fsdb_obj = ffrObject::ffrOpen3(nam);
+if(!fsdb_obj)
+	{
+	return(NULL);
+	}
+
+fsdb_obj->ffrSetTreeCBFunc(__TreeCB, NULL);
+    
+if(fsdb_obj->ffrGetFileType() != FSDB_FT_VERILOG)
+	{
+        fsdb_obj->ffrClose();
+	return(NULL);
+	}
+
+return((void *)fsdb_obj);
+}
+
+
+extern "C" void fsdbReaderReadScopeVarTree(void *ctx,void (*cb)(void *))
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+
+fsdb_obj->ffrSetTreeCBFunc(__MyTreeCB, (void *) cb);
+fsdb_obj->ffrReadScopeVarTree();
+}
+
+
+extern "C" int fsdbReaderGetMaxVarIdcode(void *ctx)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+fsdbVarIdcode max_var_idcode = fsdb_obj->ffrGetMaxVarIdcode();
+return(max_var_idcode);
+}
+
+
+extern "C" void fsdbReaderAddToSignalList(void *ctx, int i)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+fsdb_obj->ffrAddToSignalList(i);
+}
+
+
+extern "C" void fsdbReaderLoadSignals(void *ctx)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+fsdb_obj->ffrLoadSignals();
+}
+
+
+extern "C" void *fsdbReaderCreateVCTraverseHandle(void *ctx, int i)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+ffrVCTrvsHdl hdl = fsdb_obj->ffrCreateVCTraverseHandle(i);
+return((void *)hdl);
+}
+
+
+extern "C" int fsdbReaderHasIncoreVC(void *ctx, void *hdl)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+ffrVCTrvsHdl fsdb_hdl = (ffrVCTrvsHdl)hdl;
+return(fsdb_hdl->ffrHasIncoreVC() == TRUE);
+}
+
+
+extern "C" void fsdbReaderFree(void *ctx, void *hdl)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+ffrVCTrvsHdl fsdb_hdl = (ffrVCTrvsHdl)hdl;
+
+fsdb_hdl->ffrFree();
+}
+
+
+extern "C" uint64_t fsdbReaderGetMinXTag(void *ctx, void *hdl)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+ffrVCTrvsHdl fsdb_hdl = (ffrVCTrvsHdl)hdl;
+fsdbTag64 timetag;
+
+fsdb_hdl->ffrGetMinXTag((void*)&timetag);
+uint64_t rv = (((uint64_t)timetag.H) << 32) | ((uint64_t)timetag.L);
+return(rv);
+}
+
+
+extern "C" uint64_t fsdbReaderGetMaxXTag(void *ctx, void *hdl)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+ffrVCTrvsHdl fsdb_hdl = (ffrVCTrvsHdl)hdl;
+fsdbTag64 timetag;
+
+fsdb_hdl->ffrGetMaxXTag((void*)&timetag);
+uint64_t rv = (((uint64_t)timetag.H) << 32) | ((uint64_t)timetag.L);
+return(rv);
+}
+
+
+extern "C" void fsdbReaderGotoXTag(void *ctx, void *hdl, uint64_t tim)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+ffrVCTrvsHdl fsdb_hdl = (ffrVCTrvsHdl)hdl;
+fsdbTag64 timetag;
+
+timetag.H = (uint32_t)(tim >> 32);
+timetag.L = (uint32_t)(tim & 0xFFFFFFFFUL);
+
+fsdb_hdl->ffrGotoXTag((void*)&timetag);
+}
+
+
+extern "C" uint64_t fsdbReaderGetXTag(void *ctx, void *hdl)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+ffrVCTrvsHdl fsdb_hdl = (ffrVCTrvsHdl)hdl;
+fsdbTag64 timetag;
+
+fsdb_hdl->ffrGetXTag((void*)&timetag);
+uint64_t rv = (((uint64_t)timetag.H) << 32) | ((uint64_t)timetag.L);
+return(rv);
+}
+
+
+extern "C" int fsdbReaderGetVC(void *ctx, void *hdl, void **val_ptr)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+ffrVCTrvsHdl fsdb_hdl = (ffrVCTrvsHdl)hdl;
+
+return(fsdb_hdl->ffrGetVC((byte_T**)val_ptr) == FSDB_RC_SUCCESS);
+}
+
+
+extern "C" int fsdbReaderGotoNextVC(void *ctx, void *hdl)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+ffrVCTrvsHdl fsdb_hdl = (ffrVCTrvsHdl)hdl;
+
+return(fsdb_hdl->ffrGotoNextVC() == FSDB_RC_SUCCESS);
+}
+
+
+extern "C" void fsdbReaderUnloadSignals(void *ctx)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+fsdb_obj->ffrUnloadSignals();
+}
+
+
+extern "C" void fsdbReaderClose(void *ctx)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+fsdb_obj->ffrClose();
+}
+
+
+extern "C" int fsdbReaderGetBytesPerBit(void *hdl)
+{
+ffrVCTrvsHdl fsdb_hdl = (ffrVCTrvsHdl)hdl;
+
+return(fsdb_hdl->ffrGetBytesPerBit());
+}
+
+
+extern "C" int fsdbReaderGetBitSize(void *hdl)
+{
+ffrVCTrvsHdl fsdb_hdl = (ffrVCTrvsHdl)hdl;
+
+return(fsdb_hdl->ffrGetBitSize());
+}
+
+
+extern "C" int fsdbReaderGetVarType(void *hdl)
+{
+ffrVCTrvsHdl fsdb_hdl = (ffrVCTrvsHdl)hdl;
+
+return(fsdb_hdl->ffrGetVarType());
+}
+
+
+extern "C" char *fsdbReaderTranslateVC(void *hdl, void *val_ptr)
+{ 
+ffrVCTrvsHdl vc_trvs_hdl = (ffrVCTrvsHdl)hdl;
+byte_T *vc_ptr = (byte_T *)val_ptr;
+
+static byte_T buffer[FSDB_MAX_BIT_SIZE+1];
+uint_T i;
+fsdbVarType   var_type; 
+    
+switch (vc_trvs_hdl->ffrGetBytesPerBit()) 
+	{
+	case FSDB_BYTES_PER_BIT_1B:
+	        for (i = 0; i < vc_trvs_hdl->ffrGetBitSize(); i++) 
+			{
+		    	switch(vc_ptr[i]) 
+				{
+	 	    		case FSDB_BT_VCD_0:
+		        		buffer[i] = '0';
+		        		break;
+	
+		    		case FSDB_BT_VCD_1:
+		        		buffer[i] = '1';
+		        		break;
+
+		    		case FSDB_BT_VCD_X:
+		        		buffer[i] = 'x';
+		        		break;
+	
+		    		case FSDB_BT_VCD_Z:
+		        		buffer[i] = 'z';
+		        		break;
+	
+		    		default:
+		        		buffer[i] = 'u';
+					break;
+		    		}
+	        	}
+	        buffer[i] = 0;
+		break;
+
+	case FSDB_BYTES_PER_BIT_4B:
+		var_type = vc_trvs_hdl->ffrGetVarType();
+		switch(var_type)
+			{
+			case FSDB_VT_VCD_MEMORY_DEPTH:
+			case FSDB_VT_VHDL_MEMORY_DEPTH:
+				buffer[0] = 0;
+				break;
+	               
+			default:    
+				vc_trvs_hdl->ffrGetVC(&vc_ptr);
+				sprintf((char *)buffer, "%f", *((float*)vc_ptr));
+				break;
+			}
+		break;
+	
+	case FSDB_BYTES_PER_BIT_8B:
+		sprintf((char *)buffer, "%lg", *((double*)vc_ptr));
+		break;
+
+	default:
+		buffer[0] = 0;
+		break;
+	}
+
+return((char *)buffer);
+}
+
+
+extern "C" int fsdbReaderExtractScaleUnit(void *ctx, int *mult, char *scale)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+uint_T digit;
+char *unit;
+
+str_T su = fsdb_obj->ffrGetScaleUnit();
+fsdbRC rc = fsdb_obj->ffrExtractScaleUnit(su, digit, unit);
+
+if(rc == FSDB_RC_SUCCESS)
+	{
+	*mult = ((int)digit);
+	*scale = unit[0];
+	}
+
+return(rc == FSDB_RC_SUCCESS);
+}
+
+
+extern "C" int fsdbReaderGetMinFsdbTag64(void *ctx, uint64_t *tim)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+fsdbTag64 tag64;
+fsdbRC rc = fsdb_obj->ffrGetMinFsdbTag64(&tag64);
+
+if(rc == FSDB_RC_SUCCESS)
+	{
+	*tim = (((uint64_t)tag64.H) << 32) | ((uint64_t)tag64.L);
+	}
+
+return(rc == FSDB_RC_SUCCESS);
+}
+
+
+extern "C" int fsdbReaderGetMaxFsdbTag64(void *ctx, uint64_t *tim)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+fsdbTag64 tag64;
+fsdbRC rc = fsdb_obj->ffrGetMaxFsdbTag64(&tag64);
+
+if(rc == FSDB_RC_SUCCESS)
+	{
+	*tim = (((uint64_t)tag64.H) << 32) | ((uint64_t)tag64.L);
+	}
+
+return(rc == FSDB_RC_SUCCESS);
+}
+
+
+static bool_T __fsdbReaderGetStatisticsCB(fsdbTreeCBType cb_type, void *client_data, void *tree_cb_data)
+{
+struct fsdbReaderGetStatistics_t *gs = (struct fsdbReaderGetStatistics_t *)client_data;
+
+switch (cb_type)
+	{
+	case FSDB_TREE_CBT_VAR:		gs->varCount++;
+					break;
+	case FSDB_TREE_CBT_SCOPE:	gs->scopeCount++;
+					break;
+
+	default:			break;
+	}
+
+return(TRUE);
+}
+
+
+extern "C" struct fsdbReaderGetStatistics_t *fsdbReaderGetStatistics(void *ctx)
+{
+ffrObject *fsdb_obj = (ffrObject *)ctx;
+struct fsdbReaderGetStatistics_t *gs = (struct fsdbReaderGetStatistics_t *)calloc(1, sizeof(struct fsdbReaderGetStatistics_t));
+
+fsdb_obj->ffrSetTreeCBFunc(__fsdbReaderGetStatisticsCB, gs);
+fsdb_obj->ffrReadScopeVarTree();
+
+return(gs);
+}
+
+
+static void 
+__DumpScope(fsdbTreeCBDataScope* scope, void (*cb)(void *))
+{
+str_T type;
+char bf[65537];
+
+switch (scope->type) 
+	{
+    	case FSDB_ST_VCD_MODULE:
+		type = (str_T) "vcd_module"; 
+		break;
+
+	case FSDB_ST_VCD_TASK:
+		type = (str_T) "vcd_task"; 
+		break;
+
+	case FSDB_ST_VCD_FUNCTION:
+		type = (str_T) "vcd_function"; 
+		break;
+	
+	case FSDB_ST_VCD_BEGIN:
+		type = (str_T) "vcd_begin"; 
+		break;
+	
+	case FSDB_ST_VCD_FORK:
+		type = (str_T) "vcd_fork"; 
+		break;
+
+	case FSDB_ST_VCD_GENERATE:
+		type = (str_T) "vcd_generate"; 
+		break;
+
+	case FSDB_ST_SV_INTERFACE:
+		type = (str_T) "sv_interface"; 
+		break;
+
+	default:
+		type = (str_T) "unknown_scope_type";
+		break;
+    	}
+
+sprintf(bf, "Scope: %s %s %s", type, scope->name, scope->module ? scope->module : "NULL");
+cb(bf);
+}
+
+
+static char* itoa_2(int value, char* result)
+{
+char* ptr = result, *ptr1 = result, tmp_char;
+int tmp_value;
+
+do {
+        tmp_value = value;
+        value /= 10; 
+        *ptr++ = "9876543210123456789" [9 + (tmp_value - value * 10)];
+} while ( value );
+
+if (tmp_value < 0) *ptr++ = '-';
+result = ptr;
+*ptr-- = '\0';
+while(ptr1 < ptr) {
+        tmp_char = *ptr;
+        *ptr--= *ptr1;
+        *ptr1++ = tmp_char;
+}
+return(result);
+}  
+
+
+static void 
+__DumpVar(fsdbTreeCBDataVar *var, void (*cb)(void *))
+{
+str_T type;
+str_T bpb;
+str_T direction;
+char *pnt;
+int len;
+int typelen;
+int dirlen;
+char bf[65537];
+
+switch(var->bytes_per_bit) 
+	{
+   	case FSDB_BYTES_PER_BIT_1B:
+		bpb = (str_T) "1B";
+		break;
+
+    	case FSDB_BYTES_PER_BIT_2B:
+		bpb = (str_T) "2B";
+		break;
+
+    	case FSDB_BYTES_PER_BIT_4B:
+		bpb = (str_T) "4B";
+		break;
+
+    	case FSDB_BYTES_PER_BIT_8B:
+		bpb = (str_T) "8B";
+		break;
+
+    	default:
+		bpb = (str_T) "XB";
+		break;
+	}
+
+switch (var->type) 
+	{
+    	case FSDB_VT_VCD_EVENT:
+		type = (str_T) "vcd_event"; 
+		typelen = 9;
+  		break;
+
+    	case FSDB_VT_VCD_INTEGER:
+		type = (str_T) "vcd_integer"; 
+		typelen = 11;
+		break;
+
+    	case FSDB_VT_VCD_PARAMETER:
+		type = (str_T) "vcd_parameter"; 
+		typelen = 13;
+		break;
+
+    	case FSDB_VT_VCD_REAL:
+		type = (str_T) "vcd_real"; 
+		typelen = 8;
+		break;
+
+    	case FSDB_VT_VCD_REG:
+		type = (str_T) "vcd_reg"; 
+		typelen = 7;
+		break;
+
+    	case FSDB_VT_VCD_SUPPLY0:
+		type = (str_T) "vcd_supply0"; 
+		typelen = 11;
+		break;
+
+    	case FSDB_VT_VCD_SUPPLY1:
+		type = (str_T) "vcd_supply1"; 
+		typelen = 11;
+		break;
+
+    	case FSDB_VT_VCD_TIME:
+		type = (str_T) "vcd_time";
+		typelen = 8;
+		break;
+
+    	case FSDB_VT_VCD_TRI:
+		type = (str_T) "vcd_tri";
+		typelen = 7;
+		break;
+
+    	case FSDB_VT_VCD_TRIAND:
+		type = (str_T) "vcd_triand";
+		typelen = 10;
+		break;
+
+    	case FSDB_VT_VCD_TRIOR:
+		type = (str_T) "vcd_trior";
+		typelen = 9;
+		break;
+
+    	case FSDB_VT_VCD_TRIREG:
+		type = (str_T) "vcd_trireg";
+		typelen = 10;
+		break;
+
+    	case FSDB_VT_VCD_TRI0:
+		type = (str_T) "vcd_tri0";
+		typelen = 8;
+		break;
+
+    	case FSDB_VT_VCD_TRI1:
+		type = (str_T) "vcd_tri1";
+		typelen = 8;
+		break;
+
+    	case FSDB_VT_VCD_WAND:
+		type = (str_T) "vcd_wand";
+		typelen = 8;
+		break;
+
+    	case FSDB_VT_VCD_WIRE:
+		type = (str_T) "vcd_wire";
+		typelen = 8;
+		break;
+
+    	case FSDB_VT_VCD_WOR:
+		type = (str_T) "vcd_wor";
+		typelen = 7;
+		break;
+
+    	case FSDB_VT_VHDL_SIGNAL:
+    	case FSDB_VT_VHDL_VARIABLE:
+    	case FSDB_VT_VHDL_CONSTANT:
+    	case FSDB_VT_VHDL_FILE:
+    	case FSDB_VT_VCD_MEMORY:
+    	case FSDB_VT_VHDL_MEMORY:
+    	case FSDB_VT_VCD_MEMORY_DEPTH:
+    	case FSDB_VT_VHDL_MEMORY_DEPTH:         
+    	default:
+		type = (str_T) "vcd_wire";
+		typelen = 8;
+		break;
+    	}
+
+    switch(var->direction)
+	{
+	case FSDB_VD_INPUT:    	direction = (str_T) "input"; 	dirlen = 5; break;
+	case FSDB_VD_OUTPUT:   	direction = (str_T) "output"; 	dirlen = 6; break;
+	case FSDB_VD_INOUT:    	direction = (str_T) "inout"; 	dirlen = 5; break;
+	case FSDB_VD_BUFFER:   	direction = (str_T) "buffer"; 	dirlen = 6; break;
+	case FSDB_VD_LINKAGE:  	direction = (str_T) "linkage"; 	dirlen = 7; break;
+	case FSDB_VD_IMPLICIT: 
+	default:	       	direction = (str_T) "implicit"; dirlen = 8; break;
+	}
+
+/*
+sprintf(bf, "Var: %s %s l:%d r:%d %s %d %s %d", type, var->name, var->lbitnum, var->rbitnum, 
+	direction,
+	var->u.idcode, bpb, var->dtidcode);
+*/
+
+memcpy(bf, "Var: ", 5);
+pnt = bf+5;
+len = typelen; /* strlen(type) */
+memcpy(pnt, type, len);
+pnt += len;
+*(pnt++) = ' ';
+len = strlen(var->name);
+memcpy(pnt, var->name, len);
+pnt += len;
+memcpy(pnt, " l:", 3);
+pnt += 3;
+pnt = itoa_2(var->lbitnum, pnt);
+memcpy(pnt, " r:", 3);
+pnt += 3;
+pnt = itoa_2(var->rbitnum, pnt);
+*(pnt++) = ' ';
+len = dirlen; /* strlen(direction) */
+memcpy(pnt, direction, len);    
+pnt += len;
+*(pnt++) = ' ';
+pnt = itoa_2(var->u.idcode, pnt);
+*(pnt++) = ' ';
+len = 2; /* strlen(bpb) */
+memcpy(pnt, bpb, len);    
+pnt += len;
+*(pnt++) = ' ';
+pnt = itoa_2(var->dtidcode, pnt);
+*(pnt) = 0;
+
+cb(bf);
+}
+
+
+static void 
+__DumpStruct(fsdbTreeCBDataStructBegin* str, void (*cb)(void *))
+{
+char bf[65537];
+
+/* printf("NAME: %s FIELDS: %d TYPE: %d is_partial_dumped: %d\n", str->name, (int)str->fieldCount, (int)str->type, (int)str->is_partial_dumped); */
+
+sprintf(bf, "Scope: vcd_struct %s %s", str->name, "NULL");
+cb(bf);
+}
+
+
+static void 
+__DumpArray(fsdbTreeCBDataArrayBegin* arr, void (*cb)(void *))
+{
+/* printf("NAME: %s SIZE: %d is_partial_dumped: %d\n", arr->name, (int)arr->size, (int)arr->is_partial_dumped); */
+}
+
+
+
+static bool_T __MyTreeCB(fsdbTreeCBType cb_type, 
+			 void *client_data, void *tree_cb_data)
+{
+void (*cb)(void *) = (void (*)(void *))client_data;
+char bf[16];
+
+switch (cb_type) 
+	{
+    	case FSDB_TREE_CBT_BEGIN_TREE:
+		/* fprintf(stderr, "Begin Tree:\n"); */
+		break;
+
+    	case FSDB_TREE_CBT_SCOPE:
+		__DumpScope((fsdbTreeCBDataScope*)tree_cb_data, cb);
+		break;
+
+    	case FSDB_TREE_CBT_VAR:
+		__DumpVar((fsdbTreeCBDataVar*)tree_cb_data, cb);
+		break;
+
+    	case FSDB_TREE_CBT_UPSCOPE:
+		strcpy(bf, "Upscope:");
+		cb(bf);
+		break;
+
+    	case FSDB_TREE_CBT_END_TREE:
+		/* fprintf(stderr, "End Tree:\n"); */
+		break;
+
+	case FSDB_TREE_CBT_STRUCT_BEGIN:
+		__DumpStruct((fsdbTreeCBDataStructBegin*)tree_cb_data, cb);
+		break;
+
+	case FSDB_TREE_CBT_STRUCT_END:
+		strcpy(bf, "Upscope:");
+		cb(bf);
+		break;
+
+	/* not yet supported */
+    	case FSDB_TREE_CBT_ARRAY_BEGIN:
+		__DumpArray((fsdbTreeCBDataArrayBegin*)tree_cb_data, cb);
+		break;
+    	case FSDB_TREE_CBT_ARRAY_END:
+		break;
+
+    	case FSDB_TREE_CBT_FILE_TYPE:
+    	case FSDB_TREE_CBT_SIMULATOR_VERSION:
+    	case FSDB_TREE_CBT_SIMULATION_DATE:
+    	case FSDB_TREE_CBT_X_AXIS_SCALE:
+    	case FSDB_TREE_CBT_END_ALL_TREE:
+    	case FSDB_TREE_CBT_RECORD_BEGIN:
+    	case FSDB_TREE_CBT_RECORD_END:
+        	break;
+             
+    	default:
+		return(FALSE);
+    	}
+
+return(TRUE);
+}
+
+
+#else
+
+static void dummy_compilation_unit(void)
+{
+
+}
+
+#endif
diff --git a/src/fsdb_wrapper_api.h b/src/fsdb_wrapper_api.h
new file mode 100644
index 0000000..641034e
--- /dev/null
+++ b/src/fsdb_wrapper_api.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) Tony Bybell 2013.
+ *
+ * This program 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
+ * of the License, or (at your option) any later version.
+ */
+
+#ifndef FSDB_WRAPPER_API_H
+#define FSDB_WRAPPER_API_H
+
+#if defined(FSDB_IS_PRESENT) && defined(FSDB_NSYS_IS_PRESENT)
+#define WAVE_FSDB_READER_IS_PRESENT
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <inttypes.h>
+
+
+struct fsdbReaderGetStatistics_t
+{
+int varCount;
+int scopeCount;
+};
+
+
+void *fsdbReaderOpenFile(char *nam);
+void fsdbReaderReadScopeVarTree(void *ctx,void (*cb)(void *));
+int fsdbReaderGetMaxVarIdcode(void *ctx);
+struct fsdbReaderGetStatistics_t *fsdbReaderGetStatistics(void *ctx);
+void fsdbReaderAddToSignalList(void *ctx, int i);
+void fsdbReaderLoadSignals(void *ctx);
+void *fsdbReaderCreateVCTraverseHandle(void *ctx, int i);
+int fsdbReaderHasIncoreVC(void *ctx, void *hdl);
+void fsdbReaderFree(void *ctx, void *hdl);
+uint64_t fsdbReaderGetMinXTag(void *ctx, void *hdl);
+uint64_t fsdbReaderGetMaxXTag(void *ctx, void *hdl);
+void fsdbReaderGotoXTag(void *ctx, void *hdl, uint64_t tim);
+uint64_t fsdbReaderGetXTag(void *ctx, void *hdl);
+int fsdbReaderGetVC(void *ctx, void *hdl, void **val_ptr);
+int fsdbReaderGotoNextVC(void *ctx, void *hdl);
+void fsdbReaderUnloadSignals(void *ctx);
+void fsdbReaderClose(void *ctx);
+int fsdbReaderGetBytesPerBit(void *hdl);
+int fsdbReaderGetBitSize(void *hdl);
+int fsdbReaderGetVarType(void *hdl);
+char *fsdbReaderTranslateVC(void *hdl, void *val_ptr);
+int fsdbReaderExtractScaleUnit(void *ctx, int *mult, char *scale);
+int fsdbReaderGetMinFsdbTag64(void *ctx, uint64_t *tim);
+int fsdbReaderGetMaxFsdbTag64(void *ctx, uint64_t *tim);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/src/fst.c b/src/fst.c
index 8340ca8..a27db9f 100644
--- a/src/fst.c
+++ b/src/fst.c
@@ -168,6 +168,13 @@ while((h = fstReaderIterateHier(xc)))
 				case FST_ST_VCD_FUNCTION:	ttype = TREE_VCD_ST_FUNCTION; break;
 				case FST_ST_VCD_BEGIN:		ttype = TREE_VCD_ST_BEGIN; break;
 				case FST_ST_VCD_FORK:		ttype = TREE_VCD_ST_FORK; break;
+				case FST_ST_VCD_GENERATE:	ttype = TREE_VCD_ST_GENERATE; break;
+				case FST_ST_VCD_STRUCT:		ttype = TREE_VCD_ST_STRUCT; break;
+				case FST_ST_VCD_UNION:		ttype = TREE_VCD_ST_UNION; break;
+				case FST_ST_VCD_CLASS:		ttype = TREE_VCD_ST_CLASS; break;
+				case FST_ST_VCD_INTERFACE:	ttype = TREE_VCD_ST_INTERFACE; break;
+				case FST_ST_VCD_PACKAGE:	ttype = TREE_VCD_ST_PACKAGE; break;
+				case FST_ST_VCD_PROGRAM:	ttype = TREE_VCD_ST_PROGRAM; break;
 				default:			ttype = TREE_UNKNOWN; break;
 				}
 
@@ -178,6 +185,7 @@ while((h = fstReaderIterateHier(xc)))
                         GLOBALS->fst_scope_name = fstReaderPopScope(xc);
 			GLOBALS->fst_scope_name_len = fstReaderGetCurrentScopeLen(xc);
                         break;
+
                 case FST_HT_VAR:
                         /* GLOBALS->fst_scope_name = fstReaderGetCurrentFlatScope(xc); */
 			/* GLOBALS->fst_scope_name_len = fstReaderGetCurrentScopeLen(xc); */
@@ -207,6 +215,12 @@ while((h = fstReaderIterateHier(xc)))
 				{
 				*msb = *lsb = -1;
 				}
+			else if	((h->u.var.length > 1) && !col_last && lb_last) /* add for NC arrays that don't add final explicit bitrange like VCS does */
+				{
+				lb_last = NULL;
+				*msb = h->u.var.length -1;
+				*lsb = 0;
+				}
 			else
 				{
 				int sgna = 1, sgnb = 1;
@@ -263,6 +277,13 @@ while((h = fstReaderIterateHier(xc)))
 			*nam = s;
 			return(h);
                         break;
+
+		case FST_HT_ATTRBEGIN:	/* currently ignored */
+		case FST_HT_ATTREND:
+			break;
+
+		default:
+			break;
                 }
         }
 
@@ -420,7 +441,7 @@ for(i=0;i<GLOBALS->numfacs;i++)
 	char *str;	
 	struct fac *f;
 	int hier_len, name_len, tlen;
-	unsigned char nvt;
+	unsigned char nvt, nvd;
 	int longest_nam_candidate = 0;
 	char *fnam;
 
@@ -485,6 +506,15 @@ for(i=0;i<GLOBALS->numfacs;i++)
 
 	if(h->u.var.length)
 		{
+		switch(h->u.var.direction)
+			{
+			case FST_VD_INPUT:		nvd = ND_DIR_IN; GLOBALS->nonimplicit_direction_encountered = 1; break;
+			case FST_VD_OUTPUT:		nvd = ND_DIR_OUT; GLOBALS->nonimplicit_direction_encountered = 1; break;
+			case FST_VD_INOUT:		nvd = ND_DIR_INOUT; GLOBALS->nonimplicit_direction_encountered = 1; break;
+			case FST_VD_IMPLICIT:
+			default:			nvd = ND_DIR_IMPLICIT; break;
+			}
+
 		switch(h->u.var.typ)
 			{
 	                case FST_VT_VCD_EVENT: 		nvt = ND_VCD_EVENT; break;
@@ -507,7 +537,18 @@ for(i=0;i<GLOBALS->numfacs;i++)
 	                case FST_VT_VCD_WIRE: 		nvt = ND_VCD_WIRE; break;
 	                case FST_VT_VCD_WOR: 		nvt = ND_VCD_WOR; break;
 	                case FST_VT_VCD_PORT: 		nvt = ND_VCD_PORT; break;
+
 	                case FST_VT_GEN_STRING:		nvt = ND_GEN_STRING; break;
+
+			case FST_VT_SV_BIT:             nvt = ND_SV_BIT; break;
+			case FST_VT_SV_LOGIC:           nvt = ND_SV_LOGIC; break;
+			case FST_VT_SV_INT:             nvt = ND_SV_INT; break;
+			case FST_VT_SV_SHORTINT:        nvt = ND_SV_SHORTINT; break;
+			case FST_VT_SV_LONGINT:         nvt = ND_SV_LONGINT; break;
+			case FST_VT_SV_BYTE:            nvt = ND_SV_BYTE; break;
+			case FST_VT_SV_ENUM:            nvt = ND_SV_ENUM; break;
+			case FST_VT_SV_SHORTREAL:       nvt = ND_SV_SHORTREAL; break;
+
 			default: 			nvt = ND_UNSPECIFIED_DEFAULT; break;
 			}
 
@@ -521,6 +562,7 @@ for(i=0;i<GLOBALS->numfacs;i++)
 			case FST_VT_VCD_REAL:
 			case FST_VT_VCD_REAL_PARAMETER:
 			case FST_VT_VCD_REALTIME:
+			case FST_VT_SV_SHORTREAL:
 				GLOBALS->mvlfacs_fst_c_3[i].flags = VZT_RD_SYM_F_DOUBLE;
 				break;
 
@@ -706,6 +748,7 @@ for(i=0;i<GLOBALS->numfacs;i++)
         n->mv.mvlfac = GLOBALS->mvlfacs_fst_c_3+i;
 	GLOBALS->mvlfacs_fst_c_3[i].working_node = n;
 	n->vartype = nvt;
+	n->vardir = nvd;
 
 	if((f->len>1)||(f->flags&(VZT_RD_SYM_F_DOUBLE|VZT_RD_SYM_F_STRING)))
 		{
diff --git a/src/globals.c b/src/globals.c
index b2fb0bb..1ca4b5d 100644
--- a/src/globals.c
+++ b/src/globals.c
@@ -47,6 +47,8 @@
 #include "fst.h"
 #include "hierpack.h"
 
+#include "fsdb_wrapper_api.h"
+
 #ifdef __MINGW32__
 #define sleep(x) Sleep(x)
 #endif
@@ -226,11 +228,13 @@ NULL, /* atoi_cont_ptr 78 */
 0, /* entry_entry_c_1 81 */
 NULL, /* entrybox_text 82 */
 0, /* cleanup_entry_c_1 83 */
-
+0, /* entry_raise_timer */
 
 /* 
  * extload.c 
  */
+0, /* extload_ffr_import_count */
+NULL, /* extload_ffr_ctx */
 NULL, /* extload */
 NULL, /* extload_idcodes */
 NULL, /* extload_inv_idcodes */
@@ -238,6 +242,17 @@ NULL, /* extload_inv_idcodes */
 0, /* extload_lastmod */
 0, /* extload_already_errored */
 #endif
+NULL, /* extload_namecache */
+NULL, /* extload_sym_block */
+NULL, /* extload_node_block */
+NULL, /* extload_xc */
+NULL, /* extload_prevsymroot */
+NULL, /* extload_prevsym */
+0, /* extload_i */
+0, /* extload_hlen */
+0, /* extload_vt_prev */
+0, /* extload_vd_prev */
+
 
 /*
  * fetchbuttons.c
@@ -298,6 +313,7 @@ NULL, /* mvlfacs_fst_rvs_alias */
 0, /* busycnt_fst_c_2 */
 NULL, /* double_curr_fst */
 NULL, /* double_fini_fst */
+0, /* nonimplicit_direction_encountered */
 
 
 /*
@@ -647,6 +663,14 @@ NULL, /* hiericon_begin_pixmap */
 NULL, /* hiericon_begin_mask */
 NULL, /* hiericon_fork_pixmap */
 NULL, /* hiericon_fork_mask */
+NULL, /* hiericon_interface_pixmap */
+NULL, /* hiericon_interface_mask */
+NULL, /* hiericon_svpackage_pixmap */
+NULL, /* hiericon_svpackage_mask */
+NULL, /* hiericon_program_pixmap */
+NULL, /* hiericon_program_mask */
+NULL, /* hiericon_class_pixmap */
+NULL, /* hiericon_class_mask */
 NULL, /* hiericon_design_pixmap */
 NULL, /* hiericon_design_mask */
 NULL, /* hiericon_block_pixmap */
@@ -1976,14 +2000,24 @@ void reload_into_new_context_2(void)
 #endif
 	break;
   
+#ifdef EXTLOAD_SUFFIX
+   case EXTLOAD_FILE:
+	if(GLOBALS->extload_ffr_ctx)
+		{
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+		fsdbReaderClose(GLOBALS->extload_ffr_ctx);
+#endif
+		GLOBALS->extload_ffr_ctx = NULL;
+		}
+	break;
+#endif
+
    case MISSING_FILE:
    case DUMPLESS_FILE:
    case GHW_FILE:
    case VCD_FILE:
    case VCD_RECODER_FILE: 
-#ifdef EXTLOAD_SUFFIX
-   case EXTLOAD_FILE:
-#endif
+   default:
 	/* do nothing */ break;
  }
 
@@ -2520,15 +2554,25 @@ void free_and_destroy_page_context(void)
 #endif
 #endif
         break;
+
+#ifdef EXTLOAD_SUFFIX
+   case EXTLOAD_FILE:
+	if(GLOBALS->extload_ffr_ctx)
+		{
+#ifdef WAVE_FSDB_READER_IS_PRESENT
+		fsdbReaderClose(GLOBALS->extload_ffr_ctx);
+#endif
+		GLOBALS->extload_ffr_ctx = NULL;
+		}
+	break;
+#endif
  
    case MISSING_FILE:
    case DUMPLESS_FILE:
    case GHW_FILE:
    case VCD_FILE:
    case VCD_RECODER_FILE: 
-#ifdef EXTLOAD_SUFFIX   
-   case EXTLOAD_FILE:
-#endif          
+   default:
 	/* do nothing */ break;
  }
 
@@ -2813,7 +2857,14 @@ void clone_icon_pointers_across_contexts(struct Global *a, struct Global *b)
  a->hiericon_begin_mask = b->hiericon_begin_mask;  
  a->hiericon_fork_pixmap = b->hiericon_fork_pixmap;
  a->hiericon_fork_mask = b->hiericon_fork_mask;
- 
+ a->hiericon_interface_pixmap = b->hiericon_interface_pixmap;
+ a->hiericon_interface_mask = b->hiericon_interface_mask;
+ a->hiericon_svpackage_pixmap = b->hiericon_svpackage_pixmap;
+ a->hiericon_svpackage_mask = b->hiericon_svpackage_mask;
+ a->hiericon_program_pixmap = b->hiericon_program_pixmap;
+ a->hiericon_program_mask = b->hiericon_program_mask;
+ a->hiericon_class_pixmap = b->hiericon_class_pixmap;
+ a->hiericon_class_mask = b->hiericon_class_mask;
  a->hiericon_design_pixmap = b->hiericon_design_pixmap;
  a->hiericon_design_mask = b->hiericon_design_mask;  
  a->hiericon_block_pixmap = b->hiericon_block_pixmap;
diff --git a/src/globals.h b/src/globals.h
index 89cc74e..33e0624 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -228,9 +228,12 @@ GtkWidget *window_entry_c_1; /* from entry.c 81 */
 GtkWidget *entry_entry_c_1; /* from entry.c 82 */
 char *entrybox_text; /* from entry.c 83 */
 void (*cleanup_entry_c_1)(void); /* from entry.c 84 */
+int entry_raise_timer;
 
 
 /* extload.c */
+unsigned int extload_ffr_import_count; /* from extload.c */
+void *extload_ffr_ctx; /* from extload.c */
 FILE *extload; /* from extload.c */
 unsigned int *extload_idcodes; /* from extload.c */
 int *extload_inv_idcodes; /* from extload.c */
@@ -238,6 +241,16 @@ int *extload_inv_idcodes; /* from extload.c */
 time_t extload_lastmod; /* from extload.c */
 char extload_already_errored; /* from extload.c */
 #endif
+char **extload_namecache;
+struct symbol *extload_sym_block;
+struct Node *extload_node_block;
+void *extload_xc;
+struct symbol *extload_prevsymroot;
+struct symbol *extload_prevsym;
+int extload_i;
+int extload_hlen;
+unsigned char extload_vt_prev;
+unsigned char extload_vd_prev;
 
 
 /*
@@ -299,6 +312,7 @@ fstHandle fst_maxhandle;
 int busycnt_fst_c_2; 
 double *double_curr_fst;
 double *double_fini_fst;
+char nonimplicit_direction_encountered;
 
 
 /*
@@ -646,6 +660,14 @@ GdkDrawable *hiericon_begin_pixmap; /* from pixmaps.c */
 GdkDrawable *hiericon_begin_mask; /* from pixmaps.c */
 GdkDrawable *hiericon_fork_pixmap; /* from pixmaps.c */
 GdkDrawable *hiericon_fork_mask; /* from pixmaps.c */
+GdkDrawable *hiericon_interface_pixmap;
+GdkDrawable *hiericon_interface_mask;
+GdkDrawable *hiericon_svpackage_pixmap;
+GdkDrawable *hiericon_svpackage_mask;
+GdkDrawable *hiericon_program_pixmap;
+GdkDrawable *hiericon_program_mask;
+GdkDrawable *hiericon_class_pixmap;
+GdkDrawable *hiericon_class_mask;
 GdkDrawable *hiericon_design_pixmap;
 GdkDrawable *hiericon_design_mask;
 GdkDrawable *hiericon_block_pixmap;
diff --git a/src/helpers/Makefile.in b/src/helpers/Makefile.in
index ce7b8a0..3975ee3 100644
--- a/src/helpers/Makefile.in
+++ b/src/helpers/Makefile.in
@@ -204,6 +204,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -217,6 +220,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -288,6 +293,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/src/helpers/evcd2vcd.c b/src/helpers/evcd2vcd.c
index 495e28d..5a2180a 100644
--- a/src/helpers/evcd2vcd.c
+++ b/src/helpers/evcd2vcd.c
@@ -485,6 +485,10 @@ if (optind < argc)
                         vname = malloc(strlen(argv[optind])+1);
                         strcpy(vname, argv[optind++]);
                         } 
+			else
+			{
+			break;
+			}
                 }
         }
                         
diff --git a/src/helpers/fst/Makefile.in b/src/helpers/fst/Makefile.in
index 3d7c9a4..65ad7a3 100644
--- a/src/helpers/fst/Makefile.in
+++ b/src/helpers/fst/Makefile.in
@@ -143,6 +143,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -156,6 +159,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -227,6 +232,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/src/helpers/fst/fstapi.c b/src/helpers/fst/fstapi.c
index da65758..0bb79cf 100644
--- a/src/helpers/fst/fstapi.c
+++ b/src/helpers/fst/fstapi.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2012 Tony Bybell.
+ * Copyright (c) 2009-2013 Tony Bybell.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -548,6 +548,8 @@ if(rc<0)
 	perror("Why");
 #endif
 	}
+
+return(rc);
 }
 
 
@@ -1840,6 +1842,26 @@ if(xc && vers)
 }
 
 
+void fstWriterSetComment(void *ctx, const char *comm)
+{
+struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
+if(xc && comm)
+        {
+	char *s = strdup(comm);
+	char *sf = s;
+
+	while(*s)
+		{
+		if((*s == '\n') || (*s == '\r')) *s = ' ';
+		s++;
+		}
+
+	fstWriterSetAttrBegin(xc, FST_AT_MISC, FST_MT_COMMENT, sf, 0);
+	free(sf);
+	}
+}
+
+
 void fstWriterSetTimescale(void *ctx, int ts)
 {
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
@@ -1985,7 +2007,7 @@ return(0);
 
 
 /*
- * writer scope/var creation
+ * writer attr/scope/var creation
  */
 fstHandle fstWriterCreateVar(void *ctx, enum fstVarType vt, enum fstVarDir vd,
         uint32_t len, const char *nam, fstHandle aliasHandle)
@@ -2007,7 +2029,7 @@ if(xc && nam)
 	fputc(0, xc->hier_handle);
 	xc->hier_file_len += (nlen+3);
 
-	if((vt == FST_VT_VCD_REAL) || (vt == FST_VT_VCD_REAL_PARAMETER) || (vt == FST_VT_VCD_REALTIME))
+	if((vt == FST_VT_VCD_REAL) || (vt == FST_VT_VCD_REAL_PARAMETER) || (vt == FST_VT_VCD_REALTIME) || (vt == FST_VT_SV_SHORTREAL))
 		{
 		is_real = 1;
 		len = 8; /* recast number of bytes to that of what a double is */
@@ -2091,7 +2113,7 @@ void fstWriterSetScope(void *ctx, enum fstScopeType scopetype,
 {
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 
-if(xc && scopename)
+if(xc)
 	{
 	fputc(FST_ST_VCD_SCOPE, xc->hier_handle);
 	if((scopetype < FST_ST_VCD_MODULE) || (scopetype > FST_ST_MAX)) { scopetype = FST_ST_VCD_MODULE; }
@@ -2127,6 +2149,54 @@ if(xc)
 }
 
 
+void fstWriterSetAttrBegin(void *ctx, enum fstAttrType attrtype, int subtype,
+                const char *attrname, uint64_t arg)
+{
+struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
+
+if(xc)
+	{
+	fputc(FST_ST_GEN_ATTRBEGIN, xc->hier_handle);
+	if((attrtype < FST_AT_MISC) || (attrtype > FST_AT_MAX)) { attrtype = FST_AT_MISC; subtype = FST_MT_UNKNOWN; }
+	fputc(attrtype, xc->hier_handle);
+
+	switch(attrtype)
+		{
+		case FST_AT_ARRAY:	if((subtype < FST_AR_NONE) || (subtype > FST_AR_MAX)) subtype = FST_AR_NONE; break;
+		case FST_AT_ENUM:	if((subtype < FST_EV_SV_INTEGER) || (subtype > FST_EV_MAX)) subtype = FST_EV_SV_INTEGER; break;
+		case FST_AT_PACK:	if((subtype < FST_PT_NONE) || (subtype > FST_PT_MAX)) subtype = FST_PT_NONE; break;
+
+		case FST_AT_MISC:
+		default:		break;
+		}
+
+	fputc(subtype, xc->hier_handle);
+	fprintf(xc->hier_handle, "%s%c",
+		attrname ? attrname : "", 0);
+	
+	if(attrname)
+		{
+		xc->hier_file_len += strlen(attrname);
+		}
+
+	xc->hier_file_len += 4; /* FST_ST_GEN_ATTRBEGIN + type + subtype + string terminating zero */
+	xc->hier_file_len += fstWriterVarint(xc->hier_handle, arg);
+	}
+}
+
+
+void fstWriterSetAttrEnd(void *ctx)
+{
+struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
+
+if(xc)
+	{
+	fputc(FST_ST_GEN_ATTREND, xc->hier_handle);
+	xc->hier_file_len++;
+	}
+}
+
+
 /*
  * value and time change emission
  */
@@ -2385,14 +2455,33 @@ static const char *vartypes[] = {
 	"event", "integer", "parameter", "real", "real_parameter",
 	"reg", "supply0", "supply1", "time", "tri",
 	"triand", "trior", "trireg", "tri0", "tri1", 
-	"wand", "wire", "wor", "port", "array", "realtime",
-	"string"
+	"wand", "wire", "wor", "port", "sparray", "realtime",
+	"string",
+	"bit", "logic", "int", "shortint", "longint", "byte", "enum", "shortreal"
 	};
 
 static const char *modtypes[] = {
-	"module", "task", "function", "begin", "fork"
+	"module", "task", "function", "begin", "fork", "generate", "struct", "union", "class", "interface", "package", "program"
 	};
 
+static const char *attrtypes[] = {
+	"misc", "array", "enum", "class"
+	};
+
+static const char *arraytypes[] = {
+	"none", "unpacked", "packed", "sparse"
+	};
+
+static const char *enumvaluetypes[] = {
+	"integer", "bit", "logic", "int", "shortint", "longint", "byte",
+	"unsigned_integer", "unsigned_bit", "unsigned_logic", "unsigned_int", "unsigned_shortint", "unsigned_longint", "unsigned_byte"
+	};
+
+static const char *packtypes[] = {
+	"none", "unpacked", "packed", "tagged_packed"
+	};
+
+
 struct fstCurrHier
 {
 struct fstCurrHier *prev;
@@ -2490,6 +2579,8 @@ if(rc<0)
 	perror("Why");
 #endif
 	}
+
+return(rc);
 }
 
 
@@ -3079,6 +3170,25 @@ if(!(isfeof=feof(xc->fh)))
 			xc->hier.htyp = FST_HT_UPSCOPE;
 			break;
 
+		case FST_ST_GEN_ATTRBEGIN:
+			xc->hier.htyp = FST_HT_ATTRBEGIN;
+			xc->hier.u.attr.typ = fgetc(xc->fh);
+			xc->hier.u.attr.subtype = fgetc(xc->fh);
+			xc->hier.u.attr.name = pnt = xc->str_scope_nam;
+			while((ch = fgetc(xc->fh))) 
+				{
+				*(pnt++) = ch; 
+				}; /* scopename */
+			*pnt = 0;
+			xc->hier.u.attr.name_length = pnt - xc->hier.u.scope.name;
+
+			xc->hier.u.attr.arg = fstReaderVarint64(xc->fh);
+			break;
+
+		case FST_ST_GEN_ATTREND:
+			xc->hier.htyp = FST_HT_ATTREND;
+			break;
+
 		case FST_VT_VCD_EVENT:
 		case FST_VT_VCD_INTEGER:
 		case FST_VT_VCD_PARAMETER:
@@ -3098,9 +3208,17 @@ if(!(isfeof=feof(xc->fh)))
 		case FST_VT_VCD_WIRE:
 		case FST_VT_VCD_WOR:
 		case FST_VT_VCD_PORT:
-		case FST_VT_VCD_ARRAY:
+		case FST_VT_VCD_SPARRAY:
 		case FST_VT_VCD_REALTIME:
 		case FST_VT_GEN_STRING:
+		case FST_VT_SV_BIT:
+		case FST_VT_SV_LOGIC:
+		case FST_VT_SV_INT:
+		case FST_VT_SV_SHORTINT:
+		case FST_VT_SV_LONGINT:
+		case FST_VT_SV_BYTE:
+		case FST_VT_SV_ENUM:
+		case FST_VT_SV_SHORTREAL:
 			xc->hier.htyp = FST_HT_VAR;
 
 			xc->hier.u.var.typ = tag;
@@ -3155,6 +3273,8 @@ int vartype;
 uint32_t len, alias;
 /* uint32_t maxvalpos=0; */
 int num_signal_dyn = 65536;
+int attrtype, subtype;
+uint64_t attrarg;
 
 if(!xc) return(0);
 
@@ -3233,6 +3353,7 @@ while(!feof(xc->fh))
 		{
 		case FST_ST_VCD_SCOPE:
 			scopetype = fgetc(xc->fh);
+			if((scopetype < FST_ST_VCD_MIN) || (scopetype > FST_ST_MAX)) scopetype = FST_ST_VCD_MODULE;
 			pnt = str;
 			while((ch = fgetc(xc->fh))) 
 				{
@@ -3248,6 +3369,50 @@ while(!feof(xc->fh))
 			if(fv) fprintf(fv, "$upscope $end\n");
 			break;
 
+		case FST_ST_GEN_ATTRBEGIN:
+			attrtype = fgetc(xc->fh);
+			subtype = fgetc(xc->fh);
+			pnt = str;
+			while((ch = fgetc(xc->fh))) 
+				{
+				*(pnt++) = ch; 
+				}; /* attrname */
+			*pnt = 0;
+
+			attrarg = fstReaderVarint64(xc->fh);
+
+			if(fv)
+				{
+				switch(attrtype)
+					{
+					case FST_AT_ARRAY:	if((subtype < FST_AR_NONE) || (subtype > FST_AR_MAX)) subtype = FST_AR_NONE;
+								fprintf(fv, "$attrbegin %s %s %s %"PRId64" $end\n", attrtypes[attrtype], arraytypes[subtype], str, attrarg);
+								break;
+					case FST_AT_ENUM:	if((subtype < FST_EV_SV_INTEGER) || (subtype > FST_EV_MAX)) subtype = FST_EV_SV_INTEGER;
+								fprintf(fv, "$attrbegin %s %s %s %"PRId64" $end\n", attrtypes[attrtype], enumvaluetypes[subtype], str, attrarg);
+								break;
+					case FST_AT_PACK:	if((subtype < FST_PT_NONE) || (subtype > FST_PT_MAX)) subtype = FST_PT_NONE;
+								fprintf(fv, "$attrbegin %s %s %s %"PRId64" $end\n", attrtypes[attrtype], packtypes[subtype], str, attrarg);
+								break;
+					case FST_AT_MISC:	
+					default:		attrtype = FST_AT_MISC;
+								if(subtype == FST_MT_COMMENT)
+									{
+									fprintf(fv, "$comment\n\t%s\n$end\n", str);
+									}
+									else
+									{
+									fprintf(fv, "$attrbegin %s %02x %s %"PRId64" $end\n", attrtypes[attrtype], subtype, str, attrarg);
+									}
+								break;
+					}
+				}
+			break;
+
+		case FST_ST_GEN_ATTREND:
+			if(fv) fprintf(fv, "$attrend $end\n");
+			break;
+
 		case FST_VT_VCD_EVENT:
 		case FST_VT_VCD_INTEGER:
 		case FST_VT_VCD_PARAMETER:
@@ -3267,9 +3432,17 @@ while(!feof(xc->fh))
 		case FST_VT_VCD_WIRE:
 		case FST_VT_VCD_WOR:
 		case FST_VT_VCD_PORT:
-		case FST_VT_VCD_ARRAY:
+		case FST_VT_VCD_SPARRAY:
 		case FST_VT_VCD_REALTIME:
 		case FST_VT_GEN_STRING:
+		case FST_VT_SV_BIT:
+		case FST_VT_SV_LOGIC:
+		case FST_VT_SV_INT:
+		case FST_VT_SV_SHORTINT:
+		case FST_VT_SV_LONGINT:
+		case FST_VT_SV_BYTE:
+		case FST_VT_SV_ENUM:
+		case FST_VT_SV_SHORTREAL:
 			vartype = tag;
 			/* vardir = */ fgetc(xc->fh); /* unused in VCD reader, but need to advance read pointer */
 			pnt = str;
@@ -3298,9 +3471,9 @@ while(!feof(xc->fh))
 					xc->longest_signal_value_len = len;
 					}
 
-				if((vartype == FST_VT_VCD_REAL) || (vartype == FST_VT_VCD_REAL_PARAMETER) || (vartype == FST_VT_VCD_REALTIME))
+				if((vartype == FST_VT_VCD_REAL) || (vartype == FST_VT_VCD_REAL_PARAMETER) || (vartype == FST_VT_VCD_REALTIME) || (vartype == FST_VT_SV_SHORTREAL))
 					{
-					len = 64;
+					len = (vartype != FST_VT_SV_SHORTREAL) ? 64 : 32;
 					xc->signal_typs[xc->maxhandle] = FST_VT_VCD_REAL;
 					}
 				if(fv) 
@@ -3312,9 +3485,9 @@ while(!feof(xc->fh))
 				}
 				else
 				{
-				if((vartype == FST_VT_VCD_REAL) || (vartype == FST_VT_VCD_REAL_PARAMETER) || (vartype == FST_VT_VCD_REALTIME))
+				if((vartype == FST_VT_VCD_REAL) || (vartype == FST_VT_VCD_REAL_PARAMETER) || (vartype == FST_VT_VCD_REALTIME) || (vartype == FST_VT_SV_SHORTREAL))
 					{
-					len = 64;
+					len = (vartype != FST_VT_SV_SHORTREAL) ? 64 : 32;
 					xc->signal_typs[xc->maxhandle] = FST_VT_VCD_REAL;
 					}
 				if(fv) 
diff --git a/src/helpers/fst/fstapi.h b/src/helpers/fst/fstapi.h
index bd7bacc..8f67319 100644
--- a/src/helpers/fst/fstapi.h
+++ b/src/helpers/fst/fstapi.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2012 Tony Bybell.
+ * Copyright (c) 2009-2013 Tony Bybell.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -59,9 +59,19 @@ enum fstScopeType {
     FST_ST_VCD_FUNCTION        = 2,
     FST_ST_VCD_BEGIN           = 3,
     FST_ST_VCD_FORK            = 4,
-    FST_ST_VCD_MAX             = 4,
+    FST_ST_VCD_GENERATE        = 5,
+    FST_ST_VCD_STRUCT          = 6,
+    FST_ST_VCD_UNION           = 7,
+    FST_ST_VCD_CLASS           = 8,
+    FST_ST_VCD_INTERFACE       = 9,
+    FST_ST_VCD_PACKAGE         = 10,
+    FST_ST_VCD_PROGRAM         = 11,
+    FST_ST_VCD_MAX             = 11,
 
-    FST_ST_MAX                 = 4,
+    FST_ST_MAX                 = 11,
+
+    FST_ST_GEN_ATTRBEGIN       = 252,
+    FST_ST_GEN_ATTREND         = 253,
 
     FST_ST_VCD_SCOPE           = 254,
     FST_ST_VCD_UPSCOPE         = 255
@@ -88,11 +98,21 @@ enum fstVarType {
     FST_VT_VCD_WIRE            = 16,
     FST_VT_VCD_WOR             = 17,
     FST_VT_VCD_PORT            = 18,
-    FST_VT_VCD_ARRAY           = 19,	/* used to define the rownum (index) port on the array */
+    FST_VT_VCD_SPARRAY         = 19,	/* used to define the rownum (index) port for a sparse array */
     FST_VT_VCD_REALTIME        = 20,
+
     FST_VT_GEN_STRING	       = 21,	/* generic string type   (max len is defined dynamically via fstWriterEmitVariableLengthValueChange) */
 
-    FST_VT_VCD_MAX             = 21	/* end of VCD datatypes */
+    FST_VT_SV_BIT              = 22,
+    FST_VT_SV_LOGIC            = 23,
+    FST_VT_SV_INT              = 24,	/* declare as 31:0 */
+    FST_VT_SV_SHORTINT         = 25,	/* declare as 15:0 */
+    FST_VT_SV_LONGINT          = 26,	/* declare as 63:0 */
+    FST_VT_SV_BYTE             = 27,	/* declare as 7:0  */
+    FST_VT_SV_ENUM             = 28,	/* declare as appropriate type range */
+    FST_VT_SV_SHORTREAL        = 29,	/* declare and emit same as FST_VT_VCD_REAL */
+
+    FST_VT_VCD_MAX             = 29	/* end of VCD datatypes */
 };
 
 enum fstVarDir {
@@ -108,8 +128,63 @@ enum fstHierType {
     FST_HT_SCOPE       = 0,
     FST_HT_UPSCOPE     = 1,
     FST_HT_VAR         = 2,
+    FST_HT_ATTRBEGIN   = 3,
+    FST_HT_ATTREND     = 4,
+
+    FST_HT_MAX         = 4
+};
 
-    FST_HT_MAX         = 2
+enum fstAttrType {
+    FST_AT_MISC        = 0,
+    FST_AT_ARRAY       = 1,
+    FST_AT_ENUM        = 2,
+    FST_AT_PACK        = 3,
+
+    FST_AT_MAX         = 3
+};
+
+enum fstMiscType {
+    FST_MT_COMMENT     = 0,	/* self-contained: does not need matching FST_HT_ATTREND, use fstWriterSetComment() to emit */
+    FST_MT_UNKNOWN     = 1,
+
+    FST_MT_MAX         = 1
+};
+
+enum fstArrayType {
+    FST_AR_NONE        = 0,
+    FST_AR_UNPACKED    = 1,
+    FST_AR_PACKED      = 2,
+    FST_AR_SPARSE      = 3,
+
+    FST_AR_MAX         = 3
+};
+
+enum fstEnumValueType {
+    FST_EV_SV_INTEGER           = 0,
+    FST_EV_SV_BIT               = 1,
+    FST_EV_SV_LOGIC             = 2,
+    FST_EV_SV_INT               = 3,
+    FST_EV_SV_SHORTINT          = 4,
+    FST_EV_SV_LONGINT           = 5,
+    FST_EV_SV_BYTE              = 6,
+    FST_EV_SV_UNSIGNED_INTEGER  = 7,
+    FST_EV_SV_UNSIGNED_BIT      = 8,
+    FST_EV_SV_UNSIGNED_LOGIC    = 9,
+    FST_EV_SV_UNSIGNED_INT      = 10,
+    FST_EV_SV_UNSIGNED_SHORTINT = 11,
+    FST_EV_SV_UNSIGNED_LONGINT  = 12,
+    FST_EV_SV_UNSIGNED_BYTE     = 13,
+
+    FST_EV_MAX                  = 13
+};
+
+enum fstPackType {
+    FST_PT_NONE          = 0,
+    FST_PT_UNPACKED      = 1,
+    FST_PT_PACKED        = 2,
+    FST_PT_TAGGED_PACKED = 3,
+
+    FST_PT_MAX           = 6
 };
 
 struct fstHier
@@ -119,7 +194,7 @@ unsigned char htyp;
 union {
 	/* if htyp == FST_HT_SCOPE */
 	struct fstHierScope {
-		unsigned char typ; /* FST_ST_VCD_MODULE ... FST_ST_VCD_FORK */
+		unsigned char typ; /* FST_ST_VCD_MODULE ... FST_ST_VCD_PROGRAM */
 		const char *name;
 		const char *component;
 		uint32_t name_length;		/* strlen(u.scope.name) */
@@ -128,7 +203,7 @@ union {
 
 	/* if htyp == FST_HT_VAR */
 	struct fstHierVar {
-		unsigned char typ; /* FST_VT_VCD_EVENT ... FST_VT_VCD_REALTIME */
+		unsigned char typ; /* FST_VT_VCD_EVENT ... FST_VT_GEN_STRING */
 		unsigned char direction; /* FST_VD_IMPLICIT ... FST_VD_INOUT */
 		const char *name;
 		uint32_t length;
@@ -136,6 +211,15 @@ union {
 		uint32_t name_length; /* strlen(u.var.name) */
 		unsigned is_alias : 1;
 		} var;
+
+	/* if htyp == FST_HT_ATTRBEGIN */
+	struct fstHierAttr {
+		unsigned char typ; /* FST_AT_MISC ... FST_AT_PACK */
+		unsigned char subtype; /* from fstArrayType, fstEnumValueType, fstPackType */
+		const char *name;
+		uint64_t arg; /* number of array elements, struct members, or some other payload (possibly ignored) */
+		uint32_t name_length; /* strlen(u.attr.name) */
+		} attr;
 	} u;
 };
 
@@ -157,6 +241,7 @@ void *fstWriterCreate(const char *nam, int use_compressed_hier);
 void fstWriterClose(void *ctx);
 void fstWriterSetDate(void *ctx, const char *dat);
 void fstWriterSetVersion(void *ctx, const char *vers);
+void fstWriterSetComment(void *ctx, const char *comm);
 void fstWriterSetTimescale(void *ctx, int ts);
 void fstWriterSetTimescaleFromString(void *ctx, const char *s);
 void fstWriterSetTimezero(void *ctx, int64_t tim);
@@ -168,6 +253,9 @@ void fstWriterEmitVariableLengthValueChange(void *ctx, fstHandle handle, const v
 void fstWriterEmitDumpActive(void *ctx, int enable);
 void fstWriterEmitTimeChange(void *ctx, uint64_t tim);
 void fstWriterFlushContext(void *ctx);
+void fstWriterSetAttrBegin(void *ctx, enum fstAttrType attrtype, int subtype,
+                const char *attrname, uint64_t arg);
+void fstWriterSetAttrEnd(void *ctx);
 
 /*
  * reader functions
diff --git a/src/helpers/fst2vcd.c b/src/helpers/fst2vcd.c
index 52ef1de..f47c01a 100644
--- a/src/helpers/fst2vcd.c
+++ b/src/helpers/fst2vcd.c
@@ -129,6 +129,10 @@ if (optind < argc)
                         fstname = malloc(strlen(argv[optind])+1);
                         strcpy(fstname, argv[optind++]);
                         }
+			else
+			{
+			break;
+			}
                 }
         }
                         
@@ -184,4 +188,3 @@ free(fstname);
 
 exit(0);
 }
-
diff --git a/src/helpers/lxt2miner.c b/src/helpers/lxt2miner.c
index abb4139..f801037 100644
--- a/src/helpers/lxt2miner.c
+++ b/src/helpers/lxt2miner.c
@@ -300,6 +300,10 @@ if (optind < argc)
                         lxname = malloc(strlen(argv[optind])+1);
                         strcpy(lxname, argv[optind++]);
                         }
+			else
+			{
+			break;
+			}
                 }
         }
                         
diff --git a/src/helpers/lxt2vcd.c b/src/helpers/lxt2vcd.c
index 93ae74f..f00ebd1 100644
--- a/src/helpers/lxt2vcd.c
+++ b/src/helpers/lxt2vcd.c
@@ -423,6 +423,10 @@ if (optind < argc)
                         lxname = malloc(strlen(argv[optind])+1);
                         strcpy(lxname, argv[optind++]);
                         }
+			else
+			{
+			break;
+			}
                 }
         }
                         
diff --git a/src/helpers/vcd2fst.c b/src/helpers/vcd2fst.c
index cb30636..9b0a788 100644
--- a/src/helpers/vcd2fst.c
+++ b/src/helpers/vcd2fst.c
@@ -46,21 +46,57 @@
 #define VCD2FST_EXTLOADERS_CONV
 #endif
 
+static uint32_t var_direction_idx = 0;
+static unsigned char *var_direction = NULL;
+
 /*********************************************************/
 /*** vvv extload component type name determination vvv ***/
 /*********************************************************/
 
 #if defined(VCD2FST_EXTLOAD_CONV)
 
-#include <Judy.h>
-
 #ifdef _WAVE_HAVE_JUDY
+#include <Judy.h>
 Pvoid_t  PJArray = NULL;
 #else
 JRB comp_name_jrb = NULL;
 #endif
 
 static const char *fst_scope_name = NULL;
+static uint32_t numfacs = 0;
+
+static char *get_info(FILE *extload)
+{
+static char sbuff[65537];
+char * rc;
+
+for(;;)
+        {
+        rc = fgets(sbuff, 65536, extload);
+	if(!rc)
+                {
+                return(NULL);
+                }
+
+	switch(rc[0])
+		{
+                case 'v':
+                        if(!strncmp("var creation cnt", rc, 16))
+                                {
+                                char *pnt = strchr(rc+16, ':');
+                                if(pnt)
+                                        {
+                                        pnt++;
+                                        sscanf(pnt, "%d", &numfacs);
+                                        }
+                                }
+			break;
+
+		default:
+			break;			
+		}
+	}
+}
 
 static char *get_scopename(void *xc, FILE *extload)
 {
@@ -76,11 +112,65 @@ Jval jv;
 for(;;)
         {
         rc = fgets(sbuff, 65536, extload);
-        if(!rc)
+        if(rc)
+		{
+                if(isspace(rc[0]))
+                        {
+                        char sbuff2[65537];
+
+                        sbuff2[0] = 0;
+
+                        if(strstr(rc+1, "Struct Name:"))
+                                {
+                                sscanf(rc+14,"%s", sbuff2);
+                                if(sbuff2[0])
+                                        {
+                                        sprintf(rc, "Scope: vcd_struct %s NULL\n", sbuff2);
+                                        }
+                                }
+                        else
+                        if(strstr(rc+1, "Struct End"))
+                                {
+                                sprintf(rc, "Upscope:\n");  
+                                }
+			}
+		}
+	else
                 {
                 return(NULL);
                 }
 
+	if(rc[0] == 'V')
+		{
+                if(!strncmp("Var: ", rc, 5))
+                        {
+                        char *pnt = rc + 5;
+                        char *pntd = strrchr(pnt, ':');
+
+                        if(pntd)
+                                {
+                                unsigned char vd = FST_VD_IMPLICIT;
+
+                                pntd = strchr(pntd, ' ');
+                                if(pntd)
+                                        {
+                                        pntd++;
+                                        if(*pntd == 'o')
+                                                {
+                                                vd = FST_VD_OUTPUT;
+                                                }
+                                        else
+                                        if(!strncmp(pntd, "in", 2))
+                                                {
+                                                vd = (pntd[2] == 'p') ? FST_VD_INPUT : FST_VD_INOUT;
+                                                }
+                                        }
+
+				var_direction[var_direction_idx++] = vd;
+                                }
+			}
+		}
+	else
         if(rc[0] == 'S')
                 {
                 if(!strncmp(rc, "Scope:", 6))
@@ -88,14 +178,36 @@ for(;;)
                         char vht[2048];
                         char cname[2048];
                         char ctype[2048];
+			int mtype = FST_ST_VCD_MODULE;
+
+			cname[0] = ctype[1] = 0;
+
+                        sscanf(rc+6, "%s %s %s", vht, cname, ctype+1);
+			if(!strncmp("vcd_", vht, 4))
+				{
+				switch(vht[4])
+					{
+					case 'g':	mtype = FST_ST_VCD_GENERATE; break; /* other code looks for non-modules to replace type with */
+					case 's':	mtype = FST_ST_VCD_STRUCT;   break; /* other code looks for non-modules to replace type with */
+					default:	break;
+					}
+				}
+			else
+			if(!strncmp("sv_", vht, 3))
+				{
+				switch(vht[3])
+					{
+					case 'i':	mtype = FST_ST_VCD_INTERFACE; break; /* other code looks for non-modules to replace type with */
+					default:	break;
+					}
+				}
 
-			cname[0] = ctype[0] = 0;
+			ctype[0] = mtype + 1; /* bias for zero terminated string */
 
-                        sscanf(rc+6, "%s %s %s", vht, cname, ctype);
                         fst_scope_name = fstReaderPushScope(xc, cname, NULL);
 
 			/* process fst_scope_name + cname vs ctype here */
-			if(strcmp(ctype, "NULL") && strcmp(cname, ctype))
+			if((strcmp(ctype+1, "NULL") && strcmp(cname, ctype+1)) || (mtype != FST_ST_VCD_MODULE))
 				{
 #ifdef _WAVE_HAVE_JUDY
 				PPValue = JudySLIns(&PJArray, (uint8_t *)fst_scope_name, PJE0);
@@ -133,12 +245,30 @@ char sbuff[65537];
 FILE *extload;
 void *xc = fstReaderOpenForUtilitiesOnly();
 
-sprintf(sbuff, "%s -scope %s 2>&1", EXTLOAD_PATH, fname);
+sprintf(sbuff, "%s -info %s 2>&1", EXTLOAD_PATH, fname);
 extload = popen(sbuff, "r");
+if(extload)
+	{
+	while(get_info(extload));
+	pclose(extload);
+	}
 
-while(get_scopename(xc, extload));
+if(numfacs)
+	{
+	var_direction = calloc(numfacs, sizeof(unsigned char));
+	var_direction_idx = 0;
+	}
+
+sprintf(sbuff, "%s -tree %s 2>&1", EXTLOAD_PATH, fname);
+extload = popen(sbuff, "r");
+if(extload)
+	{
+	while(get_scopename(xc, extload));
+	pclose(extload);
+	}
+
+var_direction_idx = 0;
 
-pclose(extload);
 fstReaderClose(xc); /* corresponds to fstReaderOpenForUtilitiesOnly() */
 }
 
@@ -398,11 +528,51 @@ while(!feof(f))
 				break;
 
 			case 'i':
-				vartype = FST_VT_VCD_INTEGER;
+				if(!strcmp(st, "integer"))		
+					{
+					vartype = FST_VT_VCD_INTEGER;
+					}
+				else
+				if(!strcmp(st, "int"))		
+					{
+					vartype = FST_VT_SV_INT;
+					}
 				break;
 
 			case 'e':
-				vartype = FST_VT_VCD_EVENT;
+				if(!strcmp(st, "event"))
+					{	
+					vartype = FST_VT_VCD_EVENT;
+					}
+				else
+				if(!strcmp(st, "enum"))
+					{	
+					vartype = FST_VT_SV_ENUM;
+					}
+				break;
+
+			case 'b':
+				if(!strcmp(st, "bit"))
+					{
+					vartype = FST_VT_SV_BIT;
+					}
+				else
+				if(!strcmp(st, "byte"))
+					{
+					vartype = FST_VT_SV_BYTE;
+					}
+				break;
+
+			case 'l':
+				if(!strcmp(st, "logic"))
+					{
+					vartype = FST_VT_SV_LOGIC;
+					}
+				else
+				if(!strcmp(st, "longint"))
+					{
+					vartype = FST_VT_SV_LONGINT;
+					}
 				break;
 
 			case 's':
@@ -420,6 +590,21 @@ while(!feof(f))
 					{
 					vartype = FST_VT_GEN_STRING;
 					}
+				else
+				if(!strcmp(st, "shortint"))		
+					{
+					vartype = FST_VT_SV_SHORTINT;
+					}
+				else
+				if(!strcmp(st, "shortreal"))		
+					{
+					vartype = FST_VT_SV_SHORTREAL;
+					}
+				else
+				if(!strcmp(st, "sparray"))		
+					{
+					vartype = FST_VT_VCD_SPARRAY;
+					}
 				break;
 
 			case 't':
@@ -506,14 +691,25 @@ while(!feof(f))
 			if(!node)
 				{
 				Jval val;
-				returnedhandle = fstWriterCreateVar(ctx, vartype, FST_VD_IMPLICIT, len, nam, 0);
+				returnedhandle = fstWriterCreateVar(ctx, vartype, !var_direction ? FST_VD_IMPLICIT : var_direction[var_direction_idx++], len, nam, 0);
 				val.i = returnedhandle;
 				jrb_insert_int(vcd_ids, hash, val)->val2.i = len;
 				}
 				else
 				{
-				fstWriterCreateVar(ctx, vartype, FST_VD_IMPLICIT, node->val2.i, nam, node->val.i);
+				fstWriterCreateVar(ctx, vartype, !var_direction ? FST_VD_IMPLICIT : var_direction[var_direction_idx++], node->val2.i, nam, node->val.i);
 				}
+
+#if defined(VCD2FST_EXTLOAD_CONV)
+			if(var_direction)
+				{
+				if(var_direction_idx == numfacs)
+					{
+					free(var_direction);
+					var_direction = NULL;
+					}
+				}
+#endif
 			}
 		}
 	else
@@ -547,6 +743,41 @@ while(!feof(f))
 			scopetype = FST_ST_VCD_FORK;
 			}
 		else
+		if(!strcmp(st, "generate"))
+			{
+			scopetype = FST_ST_VCD_GENERATE;
+			}
+		else
+		if(!strcmp(st, "struct"))
+			{
+			scopetype = FST_ST_VCD_STRUCT;
+			}
+		else
+		if(!strcmp(st, "union"))
+			{
+			scopetype = FST_ST_VCD_UNION;
+			}
+		else
+		if(!strcmp(st, "class"))
+			{
+			scopetype = FST_ST_VCD_CLASS;
+			}
+		else
+		if(!strcmp(st, "interface"))
+			{
+			scopetype = FST_ST_VCD_INTERFACE;
+			}
+		else
+		if(!strcmp(st, "package"))
+			{
+			scopetype = FST_ST_VCD_PACKAGE;
+			}
+		else
+		if(!strcmp(st, "program"))
+			{
+			scopetype = FST_ST_VCD_PROGRAM;
+			}
+		else
 			{
 			scopetype = FST_ST_VCD_MODULE;
 			}
@@ -557,22 +788,58 @@ while(!feof(f))
 #ifdef _WAVE_HAVE_JUDY
 		if(PJArray)
 			{
-			const char *fst_scope_name = fstReaderPushScope(xc, st, NULL);
-			PPvoid_t PPValue = JudySLGet(PJArray, (uint8_t *)fst_scope_name, PJE0);
+			const char *fst_scope_name2 = fstReaderPushScope(xc, st, NULL);
+			PPvoid_t PPValue = JudySLGet(PJArray, (uint8_t *)fst_scope_name2, PJE0);
+
+			if(PPValue)
+				{
+				unsigned char st_replace = (*((unsigned char *)*PPValue)) - 1;
+				if(st_replace != FST_ST_VCD_MODULE)
+					{
+					scopetype = st_replace;
+					}
 
-			fstWriterSetScope(ctx, scopetype, st, PPValue ? *PPValue : NULL);
+				if((scopetype == FST_ST_VCD_GENERATE)||(scopetype == FST_ST_VCD_STRUCT))
+					{
+					PPValue = NULL;
+					}
+
+				fstWriterSetScope(ctx, scopetype, st, PPValue ? ((char *)(*PPValue)+1) : NULL);
+				}
+				else
+				{
+				fstWriterSetScope(ctx, scopetype, st, NULL);
+				}
 			}
 #else
 		if(comp_name_jrb)
 			{
-			const char *fst_scope_name = fstReaderPushScope(xc, st, NULL);
+			const char *fst_scope_name2 = fstReaderPushScope(xc, st, NULL);
 			char cstring[65537];
 			JRB str;
 
-			strcpy(cstring, fst_scope_name);
+			strcpy(cstring, fst_scope_name2);
 			str = jrb_find_str(comp_name_jrb, cstring);
 
-			fstWriterSetScope(ctx, scopetype, st, str ? str->val.s : NULL);
+			if(str)
+				{
+				unsigned char st_replace = str->val.s[0] - 1;
+				if(st_replace != FST_ST_VCD_MODULE)
+					{
+					scopetype = st_replace;
+					}
+
+				if((scopetype == FST_ST_VCD_GENERATE)||(scopetype == FST_ST_VCD_STRUCT))
+					{
+					str = NULL;
+					}
+
+				fstWriterSetScope(ctx, scopetype, st, str ? (str->val.s+1) : NULL);
+				}
+				else
+				{
+				fstWriterSetScope(ctx, scopetype, st, NULL);
+				}
 			}
 #endif
 			else
@@ -744,9 +1011,10 @@ while(!feof(f))
 		fstWriterSetDate(ctx, pnt);
 		}
 	else
-	if(!strncmp(buf, "$version", 8))
+	if((!strncmp(buf, "$version", 8)) || (!strncmp(buf, "$comment", 8)))
 		{
 		char *pnt, *crpnt, *rsp;
+		int is_version = (buf[1] == 'v');
 
                 if((pnt = strstr(buf, "$end")))
                         {
@@ -781,7 +1049,15 @@ while(!feof(f))
 		if(crpnt) *crpnt = 0;
 		crpnt = strchr(pnt, '\r');
 		if(crpnt) *crpnt = 0;
-		fstWriterSetVersion(ctx, pnt);
+
+		if(is_version)
+			{
+			fstWriterSetVersion(ctx, pnt);
+			}
+			else
+			{
+			fstWriterSetComment(ctx, pnt);
+			}
 		}
 	}
 
@@ -1282,6 +1558,10 @@ if (optind < argc)
                         lxname = malloc(strlen(argv[optind])+1);
                         strcpy(lxname, argv[optind++]);
                         }
+		else
+			{
+			break;
+			}
                 }
         }
                         
diff --git a/src/helpers/vcd2lxt2.c b/src/helpers/vcd2lxt2.c
index 751115a..a080c5f 100644
--- a/src/helpers/vcd2lxt2.c
+++ b/src/helpers/vcd2lxt2.c
@@ -2006,6 +2006,10 @@ if (optind < argc)
                         lxname = malloc_2(strlen(argv[optind])+1);
                         strcpy(lxname, argv[optind++]);
                         }
+		else
+			{
+			break;
+			}
                 }
         }
                         
diff --git a/src/helpers/vcd2vzt.c b/src/helpers/vcd2vzt.c
index 8940903..975bea6 100644
--- a/src/helpers/vcd2vzt.c
+++ b/src/helpers/vcd2vzt.c
@@ -2013,6 +2013,10 @@ if (optind < argc)
                         lxname = malloc_2(strlen(argv[optind])+1);
                         strcpy(lxname, argv[optind++]);
                         }
+		else
+			{
+			break;
+			}
                 }
         }
                         
diff --git a/src/helpers/vzt2vcd.c b/src/helpers/vzt2vcd.c
index fb4c950..b182a54 100644
--- a/src/helpers/vzt2vcd.c
+++ b/src/helpers/vzt2vcd.c
@@ -436,6 +436,10 @@ if (optind < argc)
                         lxname = malloc(strlen(argv[optind])+1);
                         strcpy(lxname, argv[optind++]);
                         }
+			else
+			{
+			break;
+			}
                 }
         }
                         
diff --git a/src/libbz2/Makefile.in b/src/libbz2/Makefile.in
index f8a1345..3c9f7a6 100644
--- a/src/libbz2/Makefile.in
+++ b/src/libbz2/Makefile.in
@@ -145,6 +145,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -158,6 +161,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -229,6 +234,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/src/liblzma/Makefile.in b/src/liblzma/Makefile.in
index 549db79..4666283 100644
--- a/src/liblzma/Makefile.in
+++ b/src/liblzma/Makefile.in
@@ -143,6 +143,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -156,6 +159,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -227,6 +232,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/src/libz/Makefile.in b/src/libz/Makefile.in
index 75d1353..c15103e 100644
--- a/src/libz/Makefile.in
+++ b/src/libz/Makefile.in
@@ -148,6 +148,9 @@ COCOA_GTK_LDADD = @COCOA_GTK_LDADD@
 COCOA_GTK_LDFLAGS = @COCOA_GTK_LDFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -161,6 +164,8 @@ EXTDEBUG2 = @EXTDEBUG2@
 EXTDEBUG3 = @EXTDEBUG3@
 EXTLOAD_CFLAGS = @EXTLOAD_CFLAGS@
 FASTTREE_CFLAGS = @FASTTREE_CFLAGS@
+FSDB_CFLAGS = @FSDB_CFLAGS@
+FSDB_LDADD = @FSDB_LDADD@
 GCONF_CFLAGS = @GCONF_CFLAGS@
 GCONF_LIBS = @GCONF_LIBS@
 GPERF = @GPERF@
@@ -232,6 +237,7 @@ abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/src/lx2.c b/src/lx2.c
index 58ba0cf..aad6697 100644
--- a/src/lx2.c
+++ b/src/lx2.c
@@ -550,6 +550,7 @@ switch(GLOBALS->is_lx2)
 	case LXT2_IS_VZT:  	import_vzt_trace(np); return;
 	case LXT2_IS_VLIST: 	import_vcd_trace(np); return;
 	case LXT2_IS_FST: 	import_fst_trace(np); return;
+	case LXT2_IS_FSDB:	import_extload_trace(np); return;
 	default: break; /* fallthrough */
 	}
 
@@ -677,6 +678,7 @@ switch(GLOBALS->is_lx2)
         case LXT2_IS_VZT:  	vzt_set_fac_process_mask(np); return;
 	case LXT2_IS_VLIST: 	vcd_set_fac_process_mask(np); return;
 	case LXT2_IS_FST: 	fst_set_fac_process_mask(np); return;
+	case LXT2_IS_FSDB:	fsdb_set_fac_process_mask(np); return;
         default: break; /* fallthrough */
         }
 
@@ -712,6 +714,7 @@ switch(GLOBALS->is_lx2)
         case LXT2_IS_VZT:  	vzt_import_masked(); return;
         case LXT2_IS_VLIST:  	vcd_import_masked(); return;
         case LXT2_IS_FST:  	fst_import_masked(); return;
+	case LXT2_IS_FSDB:	fsdb_import_masked(); return;
         default: break; /* fallthrough */
         }
 
diff --git a/src/lx2.h b/src/lx2.h
index 8bd3e91..f7f644c 100644
--- a/src/lx2.h
+++ b/src/lx2.h
@@ -21,7 +21,7 @@
 
 #define F_NAME_MODULUS (3)
 
-enum LXT2_Loader_Type_Encodings { LXT2_IS_INACTIVE, LXT2_IS_LXT2, LXT2_IS_VZT, LXT2_IS_AET2, LXT2_IS_VLIST, LXT2_IS_FST };
+enum LXT2_Loader_Type_Encodings { LXT2_IS_INACTIVE, LXT2_IS_LXT2, LXT2_IS_VZT, LXT2_IS_AET2, LXT2_IS_VLIST, LXT2_IS_FST, LXT2_IS_FSDB };
 
 #ifdef WAVE_USE_STRUCT_PACKING
 #pragma pack(push)
diff --git a/src/main.c b/src/main.c
index 3a6ff36..17fe1bb 100644
--- a/src/main.c
+++ b/src/main.c
@@ -21,6 +21,10 @@
 #include <windows.h>
 #endif
 
+/*
+#define WAVE_CRASH_ON_GTK_WARNING
+*/
+
 #include "wave_locale.h"
 
 #if !defined _MSC_VER && !defined __MINGW32__
@@ -683,6 +687,10 @@ if(!mainwindow_already_built)
 		fprintf(stderr, "Could not initialize GTK!  Is DISPLAY env var/xhost set?\n\n");
 		print_help(argv[0]);
 		}
+
+#ifdef WAVE_CRASH_ON_GTK_WARNING
+	g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING);
+#endif
 	}
 
 #if defined(__APPLE__)
@@ -1590,6 +1598,7 @@ if((wname)||(vcd_save_handle_cached)||(is_smartsave))
 				case LXT2_IS_VZT:  vzt_import_masked(); break;
 				case LXT2_IS_VLIST: vcd_import_masked(); break;
 				case LXT2_IS_FST: fst_import_masked(); break;
+				case LXT2_IS_FSDB: fsdb_import_masked(); break;
 				}
 
 			if(wave_is_compressed)
@@ -2238,7 +2247,7 @@ if(GLOBALS->treeopen_chain_head)
 		{
 		if(GLOBALS->ctree_main)
 			{
-			force_open_tree_node(t->str);
+			force_open_tree_node(t->str, 0);
 			}
 
 		t2 = t->next;
diff --git a/src/menu.c b/src/menu.c
index 83589fb..63f0900 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -3718,6 +3718,12 @@ for(i=0;i<26;i++)
 		GLOBALS->named_markers[i]=-1;
 		dirty=1;
 		}
+
+	if(GLOBALS->marker_names[i])
+		{
+		free_2(GLOBALS->marker_names[i]);
+		GLOBALS->marker_names[i] = NULL;
+		}
 	}
 
 if(dirty)
@@ -3752,6 +3758,13 @@ if(GLOBALS->tims.marker!=-1)
 			GLOBALS->named_markers[i]=-1;
 			signalarea_configure_event(GLOBALS->signalarea, NULL);
 			wavearea_configure_event(GLOBALS->wavearea, NULL);
+
+			if(GLOBALS->marker_names[i])
+				{
+				free_2(GLOBALS->marker_names[i]);
+				GLOBALS->marker_names[i] = NULL;
+				}
+
 			/* return; */
 			}
 		}
@@ -4994,6 +5007,105 @@ if(GLOBALS->helpbox_is_active)
 colorformat(WAVE_COLOR_CYCLE);
 }
 /**/
+
+void
+menu_open_hierarchy(gpointer null_data, guint callback_action, GtkWidget *widget)
+{
+Trptr t;
+int fix=0;
+
+if(GLOBALS->helpbox_is_active)
+        {
+        help_text_bold("\n\nOpen Hierarchy");
+        help_text(
+#if WAVE_USE_GTK2   
+		" opens and selects the appropriate level of hierarchy in the SST"
+		" for the first selected signal."
+#else
+		" is not available with this build.  Please build against GTK 2."
+#endif
+        );
+        return;
+        }
+
+#if WAVE_USE_GTK2   
+
+if((t=GLOBALS->traces.first))
+    	{
+      	while(t)
+		{
+	  	if(IsSelected(t)&&!IsShadowed(t))
+	    		{
+			char *tname = NULL;
+
+	      		if (HasAlias(t))
+				{
+		  		tname = strdup_2(t->name_full);
+				}
+	      		else if(t->vector==TRUE)
+				{
+		  		tname = strdup_2(t->n.vec->bvname);
+				}
+	      		else
+				{
+				int flagged = HIER_DEPACK_ALLOC;
+
+				tname = hier_decompress_flagged(t->n.nd->nname, &flagged);
+				if(!flagged)
+					{
+					tname = strdup_2(tname);
+					}
+				}
+
+			if(tname)
+				{
+				char *lasthier = strrchr(tname, GLOBALS->hier_delimeter);
+				if(lasthier)
+					{
+					char *tname_copy;
+
+					lasthier++; /* zero out character after hierarchy */
+					*lasthier = 0;
+					tname_copy = strdup_2(tname); /* force_open_tree_node() is destructive */
+					if(!force_open_tree_node(tname_copy, 1))
+						{
+						if(GLOBALS->selected_hierarchy_name)
+							{
+							free_2(GLOBALS->selected_hierarchy_name);
+							GLOBALS->selected_hierarchy_name = strdup_2(tname);
+							}
+
+						select_tree_node(tname);
+						}
+					free_2(tname_copy);
+					}
+	
+				free_2(tname);
+				fix=1;
+		      		break;
+				}
+			}
+
+		t=t->t_next;
+		}
+
+	if(fix)
+		{
+		GLOBALS->signalwindow_width_dirty=1;
+		MaxSignalLength();
+		signalarea_configure_event(GLOBALS->signalarea, NULL);
+		wavearea_configure_event(GLOBALS->wavearea, NULL);
+		}
+
+	}
+
+#endif
+}
+
+
+/**/
+
+
 static void dataformat(int mask, int patch)
 {
   Trptr t;
@@ -6130,6 +6242,8 @@ static gtkwave_mlist_t menu_items[] =
     WAVE_GTKIFE("/Search/Signal Search Hierarchy", "<Alt>T", menu_hiersearch, WV_MENU_SSH, "<Item>"),
     WAVE_GTKIFE("/Search/Signal Search Tree", "<Shift><Alt>T", menu_treesearch, WV_MENU_SST, "<Item>"),
     WAVE_GTKIFE("/Search/<separator>", NULL, NULL, WV_MENU_SEP7, "<Separator>"),
+    WAVE_GTKIFE("/Search/Open Hierarchy", NULL, menu_open_hierarchy, WV_MENU_OPENH, "<Item>"),
+    WAVE_GTKIFE("/Search/<separator>", NULL, NULL, WV_MENU_SEP7D, "<Separator>"),
     WAVE_GTKIFE("/Search/Autocoalesce", NULL, menu_autocoalesce, WV_MENU_ACOL, "<ToggleItem>"),
     WAVE_GTKIFE("/Search/Autocoalesce Reversal", NULL, menu_autocoalesce_reversal, WV_MENU_ACOLR, "<ToggleItem>"),
     WAVE_GTKIFE("/Search/Autoname Bundles", NULL, menu_autoname_bundles_on, WV_MENU_ABON, "<ToggleItem>"),
@@ -6753,7 +6867,9 @@ static gtkwave_mlist_t popmenu_items[] =
     WAVE_GTKIFE("/<separator>", NULL, NULL, WV_MENU_SEP3, "<Separator>"),
     WAVE_GTKIFE("/Cut", NULL, menu_cut_traces, WV_MENU_EC, "<Item>"),
     WAVE_GTKIFE("/Copy", NULL, menu_copy_traces, WV_MENU_ECY, "<Item>"),
-    WAVE_GTKIFE("/Paste", NULL, menu_paste_traces, WV_MENU_EP, "<Item>")
+    WAVE_GTKIFE("/Paste", NULL, menu_paste_traces, WV_MENU_EP, "<Item>"),
+    WAVE_GTKIFE("/<separator>", NULL, NULL, WV_MENU_SEP4, "<Separator>"),
+    WAVE_GTKIFE("/Open Hierarchy", NULL, menu_open_hierarchy, WV_MENU_OPENH, "<Item>")
 };
 
 
diff --git a/src/menu.h b/src/menu.h
index c5f5cff..5d5e4d0 100644
--- a/src/menu.h
+++ b/src/menu.h
@@ -200,6 +200,8 @@ WV_MENU_SSR,
 WV_MENU_SSH,
 WV_MENU_SST,
 WV_MENU_SEP7,
+WV_MENU_OPENH,
+WV_MENU_SEP7D,
 WV_MENU_ACOL,
 WV_MENU_ACOLR,
 WV_MENU_ABON,
diff --git a/src/pixmaps.c b/src/pixmaps.c
index 1daf631..767c6e2 100644
--- a/src/pixmaps.c
+++ b/src/pixmaps.c
@@ -2305,6 +2305,600 @@ static char *arrow_divide[] = {
 
 
 /* XPM */
+static char *arrow_inout[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 109 2",
+"   c #418A3E",
+".  c #428B3F",
+"X  c #428C3F",
+"o  c #438D40",
+"O  c #448D40",
+"+  c #458E41",
+"@  c #458F41",
+"#  c #469042",
+"$  c #479143",
+"%  c #499244",
+"&  c #499445",
+"*  c #4A9545",
+"=  c #4B9646",
+"-  c #4C9747",
+";  c #4E974A",
+":  c #4D9948",
+">  c #4E9948",
+",  c #4F9B4A",
+"<  c #509C4A",
+"1  c #519E4B",
+"2  c #529F4C",
+"3  c #5A9C56",
+"4  c #5B9E57",
+"5  c #54A14E",
+"6  c #55A24E",
+"7  c #56A34F",
+"8  c #57A450",
+"9  c #57A550",
+"0  c #58A551",
+"q  c #58A651",
+"w  c #59A752",
+"e  c #5AA852",
+"r  c #5AA853",
+"t  c #5BA953",
+"y  c #5BAA54",
+"u  c #5CAA54",
+"i  c #5CAB54",
+"p  c #5DAB55",
+"a  c #5EAA57",
+"s  c #5DAC55",
+"d  c #5EAD56",
+"f  c #5FAD56",
+"g  c #5FAE57",
+"h  c #5EA15A",
+"j  c #60A15C",
+"k  c #62A45F",
+"l  c #60AF58",
+"z  c #61B058",
+"x  c #61B159",
+"c  c #62B159",
+"v  c #62B259",
+"b  c #63B35A",
+"n  c #64B35A",
+"m  c #64B25B",
+"M  c #64B45B",
+"N  c #64B05C",
+"B  c #66B65C",
+"V  c #67B75D",
+"C  c #68B95E",
+"Z  c #69B95F",
+"A  c #68A963",
+"S  c #6DB167",
+"D  c #6ABB60",
+"F  c #6BBC60",
+"G  c #6CBD61",
+"H  c #6CBE62",
+"J  c #6DBF62",
+"K  c #6DBF63",
+"L  c #6EB168",
+"P  c #6FB369",
+"I  c #77B96F",
+"U  c #75B071",
+"Y  c #77B373",
+"T  c #79B374",
+"R  c #77B871",
+"E  c #78BB70",
+"W  c #79BB71",
+"Q  c #79B972",
+"!  c #7ABA73",
+"~  c #7BB874",
+"^  c #7EB679",
+"/  c #6EC063",
+"(  c #70C365",
+")  c #71C365",
+"_  c #72C466",
+"`  c #72C566",
+"'  c #72C467",
+"]  c #73C667",
+"[  c #73C269",
+"{  c #74C768",
+"}  c #85BF7D",
+"|  c #87CA7E",
+" . c #86BD80",
+".. c #89BF83",
+"X. c #8AC184",
+"o. c #8BC186",
+"O. c #8DC387",
+"+. c #8ACD80",
+"@. c #8BCE81",
+"#. c #8CCC83",
+"$. c #90CF86",
+"%. c #92C68C",
+"&. c #93C78C",
+"*. c #94C78D",
+"=. c #98CD8E",
+"-. c #9FD197",
+";. c #A0D098",
+":. c #A7D69E",
+">. c None",
+/* pixels */
+"{ { ] ] ( >.>.>.>.>.>.B M c l d ",
+"{ @.$.( >.K >.>.>.>.B >.n W R u ",
+"] @.:.#.[ K >.>.>.>.n c W *.W r ",
+"( ( | =.-.F >.>.>.>.c &.} W 0 0 ",
+"( >.K -.-.Z >.>.>.>.g &.O.u >.8 ",
+">.K K F Z Z >.>.>.>.u t 0 0 6 >.",
+">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.",
+">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.",
+">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.",
+">.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.",
+">.c c g d r >.>.>.>.1 < : ; * >.",
+"B >.c X.o.r >.>.>.>., ^ T * >.$ ",
+"l g R ~  .8 >.>.>.>., T A h % @ ",
+"d R ..L 8 6 >.>.>.>.* ; k U 4 X ",
+"d L L 9 >.5 >.>.>.>.* >.@ h 3 X ",
+"0 9 8 6 1 >.>.>.>.>.>.@ @ @ X   "
+};
+
+
+/* XPM */
+static char *application[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 90 1",
+"  c #5171A9",
+". c #5172A9",
+"X c #5373A9",
+"o c #5373AA",
+"O c #5475AB",
+"+ c #5475AC",
+"@ c #5676AD",
+"# c #5779AE",
+"$ c #587AB0",
+"% c #587BB1",
+"& c #5A7CB2",
+"* c #5C7EB4",
+"= c #5C7EB5",
+"- c #5E81B7",
+"; c #5F83B9",
+": c #6085BA",
+"> c #6185BB",
+", c #6387BD",
+"< c #6488BE",
+"1 c #668BC0",
+"2 c #688EC3",
+"3 c #6F90C1",
+"4 c #6C92C8",
+"5 c #6C94C9",
+"6 c #6E94CA",
+"7 c #6F96CB",
+"8 c #6F97CC",
+"9 c #7A9AC4",
+"0 c #7099CE",
+"q c #729ACF",
+"w c #739CD1",
+"e c #739DD2",
+"r c #759ED4",
+"t c #76A0D5",
+"y c #79A2D8",
+"u c #79A3D9",
+"i c #7AA4DA",
+"p c #7AA4DB",
+"a c #7AA6DC",
+"s c #7BA7DC",
+"d c #85ACDD",
+"f c #8DB1DD",
+"g c #92B9E8",
+"h c #DEE7F2",
+"j c #E4EAF3",
+"k c #E7EBF5",
+"l c #E8ECF6",
+"z c #EAEFF6",
+"x c #EAF0F7",
+"c c #EBF2F7",
+"v c #EDF3F7",
+"b c #ECF2F8",
+"n c #EFF3FA",
+"m c #EEF4F8",
+"M c #F0F5F9",
+"N c #F2F5FB",
+"B c #F1F6FB",
+"V c #F2F7FA",
+"C c #F2F7FB",
+"Z c #F3F7FB",
+"A c #F4F7FB",
+"S c #F4F8FB",
+"D c #F5F8FB",
+"F c #F5F9FB",
+"G c #F7F9FB",
+"H c #F6FAFB",
+"J c #F7FAFB",
+"K c #F6FBFB",
+"L c #F7FBFC",
+"P c #F7FCFC",
+"I c #F9FBFB",
+"U c #F8FBFC",
+"Y c #F9FBFC",
+"T c #F8FCFC",
+"R c #F9FCFC",
+"E c #F8FDFD",
+"W c #F9FDFD",
+"Q c #FAFCFC",
+"! c #FAFDFD",
+"~ c #FBFDFD",
+"^ c #FAFEFE",
+"/ c #FBFEFE",
+"( c #FCFDFD",
+") c #FCFEFE",
+"_ c #FDFEFE",
+"` c #FCFFFF",
+"' c #FDFFFF",
+"] c #FEFFFF",
+"[ c #FFFFFF",
+"{ c None",
+/* pixels */
+"{{{{{{{{{{{{{{{{",
+"{faaputreqq759{{",
+"dggggggggggggg3{",
+"sssssssaassssa1{",
+"p[[[[[[[[[[[[[,{",
+"u[UUGASmvzjjh[:{",
+"u[!IUGGSBmbxl[-{",
+"t[[I!!GSGBAbb[={",
+"r[!![!!PGGSCC[&{",
+"e[[[!!!!PIHPC[${",
+"8[!![!!!!!!PG[+{",
+"5[[[[[[!![!!![o{",
+"4[[[[[[[[[[[[[ {",
+"o21,,;*&$#+Oooo{",
+"{{{{{{{{{{{{{{{{",
+"{{{{{{{{{{{{{{{{"
+};
+
+
+/* XPM */
+static char *package[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 176 2",
+"   c #C38322",
+".  c #C38423",
+"X  c #C48524",
+"o  c #C48625",
+"O  c #C58726",
+"+  c #C58928",
+"@  c #C68A28",
+"#  c #C78D2B",
+"$  c #C88E2C",
+"%  c #C88F2D",
+"&  c #C9902E",
+"*  c #C9922F",
+"=  c #CB9532",
+"-  c #CC9834",
+";  c #C8943B",
+":  c #CE9D39",
+">  c #DE9F32",
+",  c #D1A43F",
+"<  c #E2AA37",
+"1  c #E2A938",
+"2  c #E3AB3A",
+"3  c #E6B53A",
+"4  c #E6B43D",
+"5  c #E6B53F",
+"6  c #ECB638",
+"7  c #E9B53D",
+"8  c #F0BD3B",
+"9  c #C88E40",
+"0  c #CA904A",
+"q  c #D09753",
+"w  c #D2A540",
+"e  c #D3A842",
+"r  c #D4AA44",
+"t  c #D5AC45",
+"y  c #D5AD47",
+"u  c #D6B049",
+"i  c #D7B04A",
+"p  c #D7B24B",
+"a  c #D8B24B",
+"s  c #D8B44C",
+"d  c #D8B44D",
+"f  c #D9B54D",
+"g  c #D9B54E",
+"h  c #D9B74F",
+"j  c #D5A651",
+"k  c #DAAD50",
+"l  c #D7A45F",
+"z  c #DBB156",
+"x  c #E1A740",
+"c  c #E6B542",
+"v  c #E4B145",
+"b  c #E6B147",
+"n  c #E7BA41",
+"m  c #E9BD40",
+"M  c #E8BE43",
+"N  c #E9BD45",
+"B  c #E4B14C",
+"V  c #E9B44C",
+"C  c #E8BF48",
+"Z  c #E8BB4F",
+"A  c #F5BD40",
+"S  c #E5AF56",
+"D  c #DBB262",
+"F  c #DDB969",
+"G  c #D6B870",
+"H  c #DCBD77",
+"J  c #E6B66B",
+"K  c #E2B76F",
+"L  c #E5BF6F",
+"P  c #E4B374",
+"I  c #EAC443",
+"U  c #EAC146",
+"Y  c #ECC547",
+"T  c #EBC648",
+"R  c #EFC748",
+"E  c #F9C248",
+"W  c #F9C448",
+"Q  c #F1C156",
+"!  c #F5C969",
+"~  c #E1C072",
+"^  c #E0C07D",
+"/  c #E0C67E",
+"(  c #F5CF7F",
+")  c #FFD577",
+"_  c #F5D078",
+"`  c #F5D07F",
+"'  c #FED678",
+"]  c #FED97C",
+"[  c #DBC389",
+"{  c #DEC995",
+"}  c #E5C482",
+"|  c #EBC182",
+" . c #ECC583",
+".. c #EEC483",
+"X. c #EDC687",
+"o. c #ECCA84",
+"O. c #EBCC84",
+"+. c #E7CC88",
+"@. c #EECA88",
+"#. c #EFCA8A",
+"$. c #EBCD8F",
+"%. c #F1CF86",
+"&. c #F0CE8A",
+"*. c #FBDC84",
+"=. c #F1D28B",
+"-. c #F7D589",
+";. c #F7D78B",
+":. c #F0D08C",
+">. c #FBDA8D",
+",. c #FFDC8C",
+"<. c #E5CF92",
+"1. c #EDD292",
+"2. c #EAD59C",
+"3. c #F1D590",
+"4. c #F5D790",
+"5. c #F2D695",
+"6. c #FBDB92",
+"7. c #FEDF95",
+"8. c #F8DB9D",
+"9. c #FEE094",
+"0. c #FEE194",
+"q. c #FEE196",
+"w. c #FFE19B",
+"e. c #FFE39F",
+"r. c #EDD9A5",
+"t. c #F2DDAF",
+"y. c #EDDEBE",
+"u. c #FFE4A4",
+"i. c #FFE4A5",
+"p. c #FFE5A5",
+"a. c #F9E1AA",
+"s. c #FAE3AA",
+"d. c #FFE7AD",
+"f. c #FFE8A8",
+"g. c #FFE8AB",
+"h. c #F7E4B2",
+"j. c #FAE4B0",
+"k. c #FFEAB3",
+"l. c #FFE9B6",
+"z. c #FFEBB7",
+"x. c #F6E5BF",
+"c. c #FFEAB9",
+"v. c #FFEBBA",
+"b. c #FFEBBD",
+"n. c #FFEDBE",
+"m. c #FFEEC1",
+"M. c #FFEFC1",
+"N. c #FFEFC4",
+"B. c #FCEEC7",
+"V. c #FBEDCB",
+"C. c #FFEFC8",
+"Z. c #F9EBCD",
+"A. c #FAECCE",
+"S. c #FFF0C9",
+"D. c #FFF2CC",
+"F. c #FFF2CE",
+"G. c #FFF4CC",
+"H. c #F5EBD2",
+"J. c #F7EED1",
+"K. c #FFF3D4",
+"L. c #FFF3D5",
+"P. c #FFF4D7",
+"I. c #FFF5D9",
+"U. c #FFF4DA",
+"Y. c #FFF6DB",
+"T. c #FFF6DD",
+"R. c #FCF6E2",
+"E. c #FDF6E2",
+"W. c #FEF6E3",
+"Q. c #FEF8E1",
+"!. c #FDF8E2",
+"~. c #FCF8E6",
+"^. c #FEFBE7",
+"/. c #FFFEF0",
+"(. c #FFFFF6",
+"). c None",
+/* pixels */
+").).).).).).).a p ).).).).).).).",
+").).).).).g p 2.+.r r ).).).).).",
+").).).).g <.~.R.t.j.~ w ).).).).",
+").).g / J.(./.V.k ;.a.5.D : ).).",
+"g g r.H.y.{ [ G F 4.( 8.a.o.j = ",
+"g Q.A.1.O.L z ; A.I.c.7.' p.*.* ",
+"p R.K.s.&.` _ B j.l.w.' A 7 3.% ",
+"p R.I.K.b.-.! V >.,.W 6 C Z :.# ",
+"y R.P.D.N.c.6.Q E 8 R N c b #.+ ",
+"r R.K.D.m.k.d.] R I M 4 1 x  .O ",
+"e ~.T.M.l.g.u.q.T m 4 1 > J  .o ",
+", H x.T.m.p.e.q.U 3 < S  .P 0   ",
+").).: ^ B.D.p.q.n v #.| q . ).).",
+").).).- = } G.N.:.&.l o o ).).).",
+").).).).).* % $.K 9 o ).).).).).",
+").).).).).).).+ O ).).).).).).)."
+};
+
+
+/* XPM */
+static char *plugin[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 123 2",
+"   c #3A8A36",
+".  c #3D8C39",
+"X  c #3D8D39",
+"o  c #3F8E3A",
+"O  c #408F3B",
+"+  c #41903C",
+"@  c #42913D",
+"#  c #42923E",
+"$  c #43923E",
+"%  c #459440",
+"&  c #469641",
+"*  c #479642",
+"=  c #4A9945",
+"-  c #4D9C48",
+";  c #4E9D48",
+":  c #4F9E49",
+">  c #51A04B",
+",  c #52A14C",
+"<  c #55A44F",
+"1  c #59B54F",
+"2  c #59A752",
+"3  c #5AA953",
+"4  c #5DAB56",
+"5  c #5EAD57",
+"6  c #5BB651",
+"7  c #5DB752",
+"8  c #5FB853",
+"9  c #61AF5A",
+"0  c #62AC5C",
+"q  c #63AD5D",
+"w  c #60B955",
+"e  c #61B956",
+"r  c #61BA56",
+"t  c #63B15B",
+"y  c #65B45E",
+"u  c #67B55F",
+"i  c #63BA58",
+"p  c #64BB58",
+"a  c #64BB59",
+"s  c #66BB5A",
+"d  c #66BB5D",
+"f  c #68BC5B",
+"g  c #69BC5D",
+"h  c #69BD5D",
+"j  c #6ABD5E",
+"k  c #6CBE5F",
+"l  c #6CB565",
+"z  c #6DB566",
+"x  c #6AB862",
+"c  c #6BB963",
+"v  c #6BBD62",
+"b  c #6DBF60",
+"n  c #6EBC65",
+"m  c #6FBF65",
+"M  c #6FBD66",
+"N  c #6FC062",
+"B  c #71C164",
+"V  c #72C165",
+"C  c #73C265",
+"Z  c #71C066",
+"A  c #73C267",
+"S  c #72C069",
+"D  c #72C169",
+"F  c #77C369",
+"G  c #76C46D",
+"H  c #77C46D",
+"J  c #78C66F",
+"K  c #7AC072",
+"L  c #7AC770",
+"P  c #7CC376",
+"I  c #7BC971",
+"U  c #7CC972",
+"Y  c #7DCA73",
+"T  c #7DCB73",
+"R  c #7ECB74",
+"E  c #80CD75",
+"W  c #80CE76",
+"Q  c #81CE76",
+"!  c #81C67A",
+"~  c #81C67B",
+"^  c #83C77C",
+"/  c #87CB79",
+"(  c #82CD78",
+")  c #82CF78",
+"_  c #85C97C",
+"`  c #84C87E",
+"'  c #85C87E",
+"]  c #83D079",
+"[  c #87CA80",
+"{  c #88CA80",
+"}  c #88CA81",
+"|  c #89CA82",
+" . c #89CA83",
+".. c #8ACB83",
+"X. c #8BCC83",
+"o. c #8CCC84",
+"O. c #8DCD85",
+"+. c #8ECD86",
+"@. c #90CF88",
+"#. c #91CF88",
+"$. c #92CF8A",
+"%. c #93CF8B",
+"&. c #94CF8A",
+"*. c #94CF8B",
+"=. c #95CF8B",
+"-. c #95D08C",
+";. c #96D18D",
+":. c #97D28D",
+">. c #98D18F",
+",. c #99D290",
+"<. c #9CD493",
+"1. c #9DD593",
+"2. c #9ED595",
+"3. c #A1D796",
+"4. c #A1D797",
+"5. c #A2D897",
+"6. c #A2D798",
+"7. c #A2D898",
+"8. c #A3D899",
+"9. c #A4D899",
+"0. c #A6D99B",
+"q. c #A7D99C",
+"w. c None",
+/* pixels */
+"w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.",
+"w.w.w.w.w.( W T L w.w.w.w.w.w.w.",
+"w.w.w.w.w.( q.5.H w.w.w.w.w.w.w.",
+"w.w.w.w.w.T 5.>.S w.w.w.w.w.w.w.",
+"w.] W W T H 4.1.n x u t w.w.w.w.",
+"w.W 9.9.4.4.1.<.>.-.*.5 w.w.w.w.",
+"w.T 8.4./ F C B V V *.3 w.w.w.w.",
+"w.L H _ <.V m k j s @.z , ; = w.",
+"w.w.w.M ,.k j s a r n X. .[ & w.",
+"w.w.w.x ;.j s s 8 7 v [ _ [ # w.",
+"w.n x K @.s r 7 6 6 _ 0 % # o w.",
+"w.x *.-.S O.O.X. .d [ % w.w.w.w.",
+"w.y @.r O.z > ; q ~ ~ o w.w.w.w.",
+"w.t O.o. ., w.w.& ~ P o w.w.w.w.",
+"w.4 2 < , - w.w.$ O o   w.w.w.w.",
+"w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w."
+};
+
+
+/* XPM */
 static char *arrow_rotate_clockwise[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 97 2",
@@ -3986,6 +4580,16 @@ GLOBALS->hiericon_begin_pixmap=gdk_pixmap_create_from_xpm_d(window->window, &GLO
 GLOBALS->hiericon_fork_pixmap=gdk_pixmap_create_from_xpm_d(window->window, &GLOBALS->hiericon_fork_mask,
 	&style->bg[GTK_STATE_NORMAL], (gchar **)arrow_divide);
 
+/* SV */
+GLOBALS->hiericon_interface_pixmap=gdk_pixmap_create_from_xpm_d(window->window, &GLOBALS->hiericon_interface_mask,
+	&style->bg[GTK_STATE_NORMAL], (gchar **)arrow_inout);
+GLOBALS->hiericon_svpackage_pixmap=gdk_pixmap_create_from_xpm_d(window->window, &GLOBALS->hiericon_svpackage_mask,
+	&style->bg[GTK_STATE_NORMAL], (gchar **)package);
+GLOBALS->hiericon_program_pixmap=gdk_pixmap_create_from_xpm_d(window->window, &GLOBALS->hiericon_program_mask,
+	&style->bg[GTK_STATE_NORMAL], (gchar **)application);
+GLOBALS->hiericon_class_pixmap=gdk_pixmap_create_from_xpm_d(window->window, &GLOBALS->hiericon_class_mask,
+	&style->bg[GTK_STATE_NORMAL], (gchar **)plugin);
+
 /* VHDL */
 GLOBALS->hiericon_design_pixmap=gdk_pixmap_create_from_xpm_d(window->window, &GLOBALS->hiericon_design_mask,
 	&style->bg[GTK_STATE_NORMAL], (gchar **)database);
diff --git a/src/savefile.c b/src/savefile.c
index 9f543ed..fe0384f 100644
--- a/src/savefile.c
+++ b/src/savefile.c
@@ -1589,7 +1589,7 @@ else if (*w2 == '[')
 
 	if(GLOBALS->ctree_main)
 		{
-		force_open_tree_node(w);
+		force_open_tree_node(w, 0);
 		}
 		else
 		{
diff --git a/src/signalwindow.c b/src/signalwindow.c
index c9007f0..1e34792 100644
--- a/src/signalwindow.c
+++ b/src/signalwindow.c
@@ -729,6 +729,16 @@ if(GLOBALS->splash_fix_win_title)
 	wave_gtk_window_set_title(GTK_WINDOW(GLOBALS->mainwindow), GLOBALS->winname, GLOBALS->dumpfile_is_modified ? WAVE_SET_TITLE_MODIFIED: WAVE_SET_TITLE_NONE, 0);
 	}
 
+if(GLOBALS->window_entry_c_1)
+        {
+	GLOBALS->entry_raise_timer++;
+	if(GLOBALS->entry_raise_timer > 50)
+		{
+		gdk_window_raise(GLOBALS->window_entry_c_1->window);
+		GLOBALS->entry_raise_timer = 0;
+		}
+        }
+
 #ifdef WAVE_USE_GTK2
 #ifdef MAC_INTEGRATION
 if(GLOBALS->dnd_helper_quartz)
@@ -1240,12 +1250,11 @@ if(GLOBALS->signalpixmap)
 	}
 
  if (!GLOBALS->left_justify_sigs && !GLOBALS->do_resize_signals)
+   {
    if (width < GLOBALS->max_signal_name_pixel_width+15)
      {
        int delta = GLOBALS->max_signal_name_pixel_width+15 - width;
        
-	 GtkAdjustment *hadj;
-
 	 if(GLOBALS->signalpixmap)
 	   {
 
@@ -1264,6 +1273,7 @@ if(GLOBALS->signalpixmap)
        } else {
 	 GLOBALS->right_align_active = 1;
        }
+   }
 
 GLOBALS->old_signal_fill_height= widget->allocation.height;
 gdk_draw_rectangle(GLOBALS->signalpixmap, widget->style->bg_gc[GTK_STATE_PRELIGHT], TRUE, 0, 0,
diff --git a/src/status.c b/src/status.c
index 20f13df..3276b80 100644
--- a/src/status.c
+++ b/src/status.c
@@ -88,6 +88,7 @@ if(GLOBALS->is_lx2)
 		case LXT2_IS_AET2: status_text("AET2 loaded successfully.\n"); break;
 		case LXT2_IS_VZT:  status_text("VZT loaded successfully.\n"); break;
 		case LXT2_IS_VLIST:  status_text("VCD loaded successfully.\n"); break;
+		case LXT2_IS_FSDB:  status_text("FSDB loaded successfully.\n"); break;
 		}
 	}
 
diff --git a/src/tcl_commands.c b/src/tcl_commands.c
index 10f56cc..16aae07 100644
--- a/src/tcl_commands.c
+++ b/src/tcl_commands.c
@@ -313,6 +313,7 @@ if(GLOBALS->is_lx2)
                 case LXT2_IS_VZT:  reportString = "VZT"; break;
                 case LXT2_IS_VLIST:reportString = "VCD"; break;
                 case LXT2_IS_FST:  reportString = "FST"; break;
+                case LXT2_IS_FSDB:  reportString = "FSDB"; break;
                 }
         }
 
diff --git a/src/tree.c b/src/tree.c
index 7a3825f..819a815 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -473,6 +473,13 @@ switch(mode)
    			case TREE_VCD_ST_FUNCTION:	pxm = GLOBALS->hiericon_function_pixmap; msk = GLOBALS->hiericon_function_mask; break;
    			case TREE_VCD_ST_BEGIN:		pxm = GLOBALS->hiericon_begin_pixmap; msk = GLOBALS->hiericon_begin_mask; break;
    			case TREE_VCD_ST_FORK:		pxm = GLOBALS->hiericon_fork_pixmap; msk = GLOBALS->hiericon_fork_mask; break;
+			case TREE_VCD_ST_GENERATE:	pxm = GLOBALS->hiericon_generatefor_pixmap; msk = GLOBALS->hiericon_generatefor_mask; break; /* same as TREE_VHDL_ST_GENFOR */
+			case TREE_VCD_ST_STRUCT:	pxm = GLOBALS->hiericon_block_pixmap; msk = GLOBALS->hiericon_block_mask; break; /* same as TREE_VHDL_ST_BLOCK */
+			case TREE_VCD_ST_UNION:		pxm = GLOBALS->hiericon_instance_pixmap; msk = GLOBALS->hiericon_instance_mask; break; /* same as TREE_VHDL_ST_INSTANCE */
+			case TREE_VCD_ST_CLASS:		pxm = GLOBALS->hiericon_class_pixmap; msk = GLOBALS->hiericon_class_mask; break;
+			case TREE_VCD_ST_INTERFACE:	pxm = GLOBALS->hiericon_interface_pixmap; msk = GLOBALS->hiericon_interface_mask; break;
+			case TREE_VCD_ST_PACKAGE:	pxm = GLOBALS->hiericon_svpackage_pixmap; msk = GLOBALS->hiericon_svpackage_mask; break;
+			case TREE_VCD_ST_PROGRAM:	pxm = GLOBALS->hiericon_program_pixmap; msk = GLOBALS->hiericon_program_mask; break;
 
 			case TREE_VHDL_ST_DESIGN:	pxm = GLOBALS->hiericon_design_pixmap; msk = GLOBALS->hiericon_design_mask; break;
 			case TREE_VHDL_ST_BLOCK:	pxm = GLOBALS->hiericon_block_pixmap; msk = GLOBALS->hiericon_block_mask; break;
diff --git a/src/tree.h b/src/tree.h
index d864391..857d155 100644
--- a/src/tree.h
+++ b/src/tree.h
@@ -54,12 +54,19 @@ enum tree_kind
    /* A base (source file).  Not yet implemented.  */
    TREE_BASE,
 
-   /* Verilog scope types */
+   /* Verilog/SV scope types */
    TREE_VCD_ST_MODULE,
    TREE_VCD_ST_TASK,
    TREE_VCD_ST_FUNCTION,
    TREE_VCD_ST_BEGIN,
    TREE_VCD_ST_FORK,
+   TREE_VCD_ST_GENERATE,
+   TREE_VCD_ST_STRUCT,
+   TREE_VCD_ST_UNION,
+   TREE_VCD_ST_CLASS,
+   TREE_VCD_ST_INTERFACE,
+   TREE_VCD_ST_PACKAGE,
+   TREE_VCD_ST_PROGRAM,
 
    /* VHDL scope types */
    TREE_VHDL_ST_DESIGN,
diff --git a/src/treesearch.h b/src/treesearch.h
index 9a2139e..54b3328 100644
--- a/src/treesearch.h
+++ b/src/treesearch.h
@@ -14,7 +14,7 @@ void treebox(char *title, GtkSignalFunc func, GtkWidget *old_window);
 GtkWidget* treeboxframe(char *title, GtkSignalFunc func);
 void mkmenu_treesearch_cleanup(GtkWidget *widget, gpointer data);
 void dump_open_tree_nodes(FILE *wave, xl_Tree *t);
-int force_open_tree_node(char *name);
+int force_open_tree_node(char *name, int keep_path_nodes_open);
 void select_tree_node(char *name);   
 void dnd_setup(GtkWidget *src, GtkWidget *widget, int enable_receive); /* dnd from gtk2 tree to signalwindow */
 void treeview_select_all_callback(void); /* gtk2 */
diff --git a/src/treesearch_gtk2.c b/src/treesearch_gtk2.c
index 45dac19..5262bdd 100644
--- a/src/treesearch_gtk2.c
+++ b/src/treesearch_gtk2.c
@@ -24,6 +24,7 @@
 #include "tcl_helper.h"
 
 WAVE_NODEVARTYPE_STR
+WAVE_NODEVARDIR_STR
 
 enum { VIEW_DRAG_INACTIVE, TREE_TO_VIEW_DRAG_ACTIVE, SEARCH_TO_VIEW_DRAG_ACTIVE };
 
@@ -41,7 +42,7 @@ enum { VIEW_DRAG_INACTIVE, TREE_TO_VIEW_DRAG_ACTIVE, SEARCH_TO_VIEW_DRAG_ACTIVE
 /* The signal area is based on a tree view which requires a store model.
    This store model contains the list of signals to be displayed.
 */
-enum { NAME_COLUMN, TREE_COLUMN, TYPE_COLUMN, N_COLUMNS };
+enum { NAME_COLUMN, TREE_COLUMN, TYPE_COLUMN, DIR_COLUMN, N_COLUMNS };
 
 /* list of autocoalesced (synthesized) filter names that need to be freed at some point) */
 
@@ -131,6 +132,7 @@ fill_sig_store (void)
 	int i = t->t_which;
 	char *s, *tmp2;
 	int vartype;
+	int vardir;
 	int is_tname = 0;
 
 	if(i < 0) continue;
@@ -141,6 +143,12 @@ fill_sig_store (void)
 		vartype = 0;
 		}
 
+	vardir = GLOBALS->facs[i]->n->vardir; /* two bit already chops down to 0..3, but this doesn't hurt */
+	if((vardir < 0) || (vardir > ND_DIR_MAX))
+		{
+		vardir = 0;
+		}
+
         if(!GLOBALS->facs[i]->vec_root)
 		{
 		is_tname = 1;
@@ -181,6 +189,7 @@ fill_sig_store (void)
 				    NAME_COLUMN, s,
 				    TREE_COLUMN, t,
 				    TYPE_COLUMN, vartype_strings[vartype],
+				    DIR_COLUMN,vardir_strings[vardir],
 				    -1);
 
 			if(s != t->name)
@@ -199,6 +208,7 @@ fill_sig_store (void)
 				    NAME_COLUMN, s,
 				    TREE_COLUMN, t,
 				    TYPE_COLUMN, vartype_strings[vartype],
+				    DIR_COLUMN,vardir_strings[vardir],
 				    -1);
 			}
       		}
@@ -254,7 +264,7 @@ if(node)
 }
 
 
-int force_open_tree_node(char *name) {
+int force_open_tree_node(char *name, int keep_path_nodes_open) {
   GtkCTree *ctree = GLOBALS->ctree_main;
   int rv = 1 ;			/* can possible open */
   if(ctree) {
@@ -295,7 +305,7 @@ int force_open_tree_node(char *name) {
 	    node = gctr->parent;
 	    gctr = GTK_CTREE_ROW(node);
 	    nodehist[i] = node;
-	    exp1[i--] = gctr->expanded;
+	    exp1[i--] = gctr->expanded || (keep_path_nodes_open != 0);
 	  }        
 	  gtk_clist_freeze(GTK_CLIST(ctree));
 	  /* fully expand down */
@@ -1175,6 +1185,7 @@ static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
   GLOBALS->dnd_sigview = NULL;
   GLOBALS->gtk2_tree_frame = NULL;
   GLOBALS->ctree_main = NULL;
+  GLOBALS->filter_entry = NULL; /* when treebox() SST goes away after closed and rc hide_sst is true */
   free_afl();
 
   if(GLOBALS->selected_hierarchy_name)
@@ -1345,7 +1356,7 @@ do_tooltips:
 
 
     /* Signal names.  */
-    GLOBALS->sig_store_treesearch_gtk2_c_1 = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING);
+    GLOBALS->sig_store_treesearch_gtk2_c_1 = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING);
     GLOBALS->sig_root_treesearch_gtk2_c_1 = GLOBALS->treeroot;
     fill_sig_store ();
 
@@ -1367,6 +1378,16 @@ do_tooltips:
 		case EXTLOAD_FILE:
 #endif
 		case FST_FILE:
+					/* fallthrough for Dir is deliberate for extload and FST */
+					if(GLOBALS->nonimplicit_direction_encountered)
+						{
+						column = gtk_tree_view_column_new_with_attributes ("Dir",
+								   renderer,
+								   "text", DIR_COLUMN,
+								   NULL);
+						gtk_tree_view_append_column (GTK_TREE_VIEW (sig_view), column);
+						}
+
 		case AE2_FILE:
 		case VCD_FILE:
 		case VCD_RECODER_FILE:
@@ -1610,7 +1631,7 @@ GtkWidget* treeboxframe(char *title, GtkSignalFunc func)
 
 
     /* Signal names.  */
-    GLOBALS->sig_store_treesearch_gtk2_c_1 = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING);
+    GLOBALS->sig_store_treesearch_gtk2_c_1 = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING);
     GLOBALS->sig_root_treesearch_gtk2_c_1 = GLOBALS->treeroot;
     fill_sig_store ();
 
@@ -1632,6 +1653,16 @@ GtkWidget* treeboxframe(char *title, GtkSignalFunc func)
 		case EXTLOAD_FILE:
 #endif
 		case FST_FILE:
+					/* fallthrough for Dir is deliberate for extload and FST */
+					if(GLOBALS->nonimplicit_direction_encountered)
+						{
+						column = gtk_tree_view_column_new_with_attributes ("Dir",
+								   renderer,
+								   "text", DIR_COLUMN,
+								   NULL);
+						gtk_tree_view_append_column (GTK_TREE_VIEW (sig_view), column);
+						}
+
 		case AE2_FILE:
 		case VCD_FILE:
 		case VCD_RECODER_FILE:
diff --git a/src/vcd.c b/src/vcd.c
index 9aa4be2..b163fff 100644
--- a/src/vcd.c
+++ b/src/vcd.c
@@ -1146,6 +1146,12 @@ for(;;)
                                         case 't':       ttype = TREE_VCD_ST_TASK; break;
                                         case 'f':       ttype = (GLOBALS->yytext_vcd_c_1[1] == 'u') ? TREE_VCD_ST_FUNCTION : TREE_VCD_ST_FORK; break;
                                         case 'b':       ttype = TREE_VCD_ST_BEGIN; break;
+					case 'g':	ttype = TREE_VCD_ST_GENERATE; break;
+					case 's':	ttype = TREE_VCD_ST_STRUCT; break;
+					case 'u':	ttype = TREE_VCD_ST_UNION; break;
+					case 'c':	ttype = TREE_VCD_ST_CLASS; break;
+					case 'i':	ttype = TREE_VCD_ST_INTERFACE; break;
+					case 'p':	ttype = (GLOBALS->yytext_vcd_c_1[1] == 'r') ? TREE_VCD_ST_PROGRAM : TREE_VCD_ST_PACKAGE; break;
                                         default:        ttype = TREE_UNKNOWN;
                                                         break;
                                         }
@@ -2056,6 +2062,14 @@ switch(v->vartype)
         case V_WOR:             nvt = ND_VCD_WOR; break;
         case V_PORT:            nvt = ND_VCD_PORT; break;
 	case V_STRINGTYPE:	nvt = ND_GEN_STRING; break;
+	case V_BIT:		nvt = ND_SV_BIT; break;
+	case V_LOGIC:		nvt = ND_SV_LOGIC; break;
+	case V_INT:		nvt = ND_SV_INT; break;
+	case V_SHORTINT:	nvt = ND_SV_SHORTINT; break;
+	case V_LONGINT:		nvt = ND_SV_LONGINT; break;
+	case V_BYTE:		nvt = ND_SV_BYTE; break;
+	case V_ENUM:		nvt = ND_SV_ENUM; break;
+	/* V_SHORTREAL as a type does not exist for VCD: is cast to V_REAL */
         default:                nvt = ND_UNSPECIFIED_DEFAULT; break;
 	}
 n->vartype = nvt;
diff --git a/src/vcd.h b/src/vcd.h
index 6777cf7..4c7b7ea 100644
--- a/src/vcd.h
+++ b/src/vcd.h
@@ -60,10 +60,13 @@ VCDNAM_ESCAPE };
 /* fix for contrib/rtlbrowse */
 #ifndef VLEX_DEFINES_H
 enum VarTypes { V_EVENT, V_PARAMETER,
-                V_INTEGER, V_REAL, V_REAL_PARAMETER=V_REAL, V_REALTIME=V_REAL, V_REG, V_SUPPLY0,
+                V_INTEGER, V_REAL, V_REAL_PARAMETER=V_REAL, V_REALTIME=V_REAL, V_SHORTREAL=V_REAL, V_REG, V_SUPPLY0,
                 V_SUPPLY1, V_TIME, V_TRI, V_TRIAND, V_TRIOR,
-                V_TRIREG, V_TRI0, V_TRI1, V_WAND, V_WIRE, V_WOR, V_PORT, V_IN=V_PORT, V_OUT=V_PORT, V_INOUT=V_PORT, V_STRINGTYPE,
-                V_END, V_LB, V_COLON, V_RB, V_STRING };
+                V_TRIREG, V_TRI0, V_TRI1, V_WAND, V_WIRE, V_WOR, V_PORT, V_IN=V_PORT, V_OUT=V_PORT, V_INOUT=V_PORT, 
+		V_BIT, V_LOGIC, V_INT, V_SHORTINT, V_LONGINT, V_BYTE, V_ENUM,
+		V_STRINGTYPE,
+                V_END, V_LB, V_COLON, V_RB, V_STRING
+};
 #endif
 
 /* for vcd_recoder.c */
diff --git a/src/vcd_keywords.c b/src/vcd_keywords.c
index df319c0..133636d 100644
--- a/src/vcd_keywords.c
+++ b/src/vcd_keywords.c
@@ -43,12 +43,12 @@ error "gperf generated tables don't work with this execution character set. Plea
 struct vcd_keyword { const char *name; int token; };
 
 
-#define TOTAL_KEYWORDS 25
+#define TOTAL_KEYWORDS 33
 #define MIN_WORD_LENGTH 2
 #define MAX_WORD_LENGTH 14
 #define MIN_HASH_VALUE 5
-#define MAX_HASH_VALUE 41
-/* maximum key range = 37, duplicates = 0 */
+#define MAX_HASH_VALUE 69
+/* maximum key range = 65, duplicates = 0 */
 
 #ifdef __GNUC__
 __inline
@@ -64,34 +64,34 @@ keyword_hash (str, len)
 {
   static const unsigned char asso_values[] =
     {
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 26, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42,  4,  1,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      11,  6, 42,  1, 42, 16, 42, 42, 24, 42,
-       1,  6, 16, 42,  1,  6,  1, 42, 42, 21,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-      42, 42, 42, 42, 42, 42
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 36, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 56, 51,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 26,
+      26,  1, 36,  1, 70, 36,  6, 70, 31,  1,
+       1, 70, 16,  1,  6,  1,  6,  1, 70, 70,
+      21, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+      70, 70, 70, 70, 70, 70, 70
     };
-  return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]];
+  return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]+1];
 }
 
 #ifdef __GNUC__
@@ -110,59 +110,83 @@ check_identifier (str, len)
       {""}, {""}, {""}, {""}, {""},
 #line 23 "./vcd_keywords.gperf"
       {"reg", V_REG},
-#line 32 "./vcd_keywords.gperf"
-      {"tri1", V_TRI1},
-#line 29 "./vcd_keywords.gperf"
-      {"trior", V_TRIOR},
-#line 30 "./vcd_keywords.gperf"
-      {"trireg", V_TRIREG},
-#line 31 "./vcd_keywords.gperf"
-      {"tri0", V_TRI0},
-#line 38 "./vcd_keywords.gperf"
-      {"out", V_OUT},
 #line 26 "./vcd_keywords.gperf"
       {"time", V_TIME},
-#line 17 "./vcd_keywords.gperf"
-      {"event", V_EVENT},
-#line 40 "./vcd_keywords.gperf"
-      {"string", V_STRINGTYPE},
-#line 25 "./vcd_keywords.gperf"
-      {"supply1", V_SUPPLY1},
-#line 22 "./vcd_keywords.gperf"
-      {"realtime", V_REALTIME},
-#line 21 "./vcd_keywords.gperf"
-      {"real_parameter", V_REAL_PARAMETER},
-#line 24 "./vcd_keywords.gperf"
-      {"supply0", V_SUPPLY0},
-#line 28 "./vcd_keywords.gperf"
-      {"triand", V_TRIAND},
+      {""},
+#line 30 "./vcd_keywords.gperf"
+      {"trireg", V_TRIREG},
 #line 37 "./vcd_keywords.gperf"
       {"in", V_IN},
-#line 27 "./vcd_keywords.gperf"
-      {"tri", V_TRI},
+#line 22 "./vcd_keywords.gperf"
+      {"realtime", V_REALTIME},
 #line 36 "./vcd_keywords.gperf"
       {"port", V_PORT},
+#line 29 "./vcd_keywords.gperf"
+      {"trior", V_TRIOR},
+#line 40 "./vcd_keywords.gperf"
+      {"string", V_STRINGTYPE},
+#line 45 "./vcd_keywords.gperf"
+      {"longint", V_LONGINT},
+#line 43 "./vcd_keywords.gperf"
+      {"int", V_INT},
+#line 18 "./vcd_keywords.gperf"
+      {"parameter", V_PARAMETER},
 #line 39 "./vcd_keywords.gperf"
       {"inout", V_INOUT},
       {""},
 #line 19 "./vcd_keywords.gperf"
       {"integer", V_INTEGER},
+#line 44 "./vcd_keywords.gperf"
+      {"shortint", V_SHORTINT},
+#line 21 "./vcd_keywords.gperf"
+      {"real_parameter", V_REAL_PARAMETER},
+      {""}, {""}, {""},
+#line 38 "./vcd_keywords.gperf"
+      {"out", V_OUT},
+#line 34 "./vcd_keywords.gperf"
+      {"wire", V_WIRE},
+      {""}, {""}, {""},
 #line 35 "./vcd_keywords.gperf"
       {"wor", V_WOR},
-#line 18 "./vcd_keywords.gperf"
-      {"parameter", V_PARAMETER},
-      {""}, {""},
+#line 46 "./vcd_keywords.gperf"
+      {"byte", V_BYTE},
+#line 42 "./vcd_keywords.gperf"
+      {"logic", V_LOGIC},
+#line 28 "./vcd_keywords.gperf"
+      {"triand", V_TRIAND},
+      {""},
+#line 41 "./vcd_keywords.gperf"
+      {"bit", V_BIT},
 #line 20 "./vcd_keywords.gperf"
       {"real", V_REAL},
-      {""},
-#line 34 "./vcd_keywords.gperf"
-      {"wire", V_WIRE},
+      {""}, {""}, {""},
+#line 27 "./vcd_keywords.gperf"
+      {"tri", V_TRI},
+#line 47 "./vcd_keywords.gperf"
+      {"enum", V_ENUM},
       {""}, {""}, {""}, {""},
+#line 48 "./vcd_keywords.gperf"
+      {"shortreal", V_SHORTREAL},
+#line 17 "./vcd_keywords.gperf"
+      {"event", V_EVENT},
+      {""}, {""}, {""},
 #line 33 "./vcd_keywords.gperf"
       {"wand", V_WAND},
       {""}, {""}, {""}, {""},
-#line 41 "./vcd_keywords.gperf"
-      {"$end", V_END}
+#line 32 "./vcd_keywords.gperf"
+      {"tri1", V_TRI1},
+      {""}, {""}, {""}, {""},
+#line 31 "./vcd_keywords.gperf"
+      {"tri0", V_TRI0},
+      {""}, {""},
+#line 25 "./vcd_keywords.gperf"
+      {"supply1", V_SUPPLY1},
+      {""},
+#line 49 "./vcd_keywords.gperf"
+      {"$end", V_END},
+      {""}, {""},
+#line 24 "./vcd_keywords.gperf"
+      {"supply0", V_SUPPLY0}
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
@@ -179,7 +203,7 @@ check_identifier (str, len)
     }
   return 0;
 }
-#line 42 "./vcd_keywords.gperf"
+#line 50 "./vcd_keywords.gperf"
 
 
 int vcd_keyword_code(const char *s, unsigned int len)
diff --git a/src/vcd_keywords.gperf b/src/vcd_keywords.gperf
index cc4b8cc..777fc44 100644
--- a/src/vcd_keywords.gperf
+++ b/src/vcd_keywords.gperf
@@ -38,6 +38,14 @@ in, V_IN
 out, V_OUT
 inout, V_INOUT
 string, V_STRINGTYPE
+bit, V_BIT
+logic, V_LOGIC
+int, V_INT
+shortint, V_SHORTINT
+longint, V_LONGINT
+byte, V_BYTE
+enum, V_ENUM
+shortreal, V_SHORTREAL
 $end, V_END
 %%
 
diff --git a/src/vcd_partial.c b/src/vcd_partial.c
index d32c9e0..bcdb332 100644
--- a/src/vcd_partial.c
+++ b/src/vcd_partial.c
@@ -1096,6 +1096,12 @@ for(;;)
                                         case 't':       ttype = TREE_VCD_ST_TASK; break;
                                         case 'f':       ttype = (GLOBALS->yytext_vcd_partial_c_2[1] == 'u') ? TREE_VCD_ST_FUNCTION : TREE_VCD_ST_FORK; break;
                                         case 'b':       ttype = TREE_VCD_ST_BEGIN; break;
+					case 'g':       ttype = TREE_VCD_ST_GENERATE; break;
+					case 's':       ttype = TREE_VCD_ST_STRUCT; break;
+					case 'u':       ttype = TREE_VCD_ST_UNION; break;
+					case 'c':       ttype = TREE_VCD_ST_CLASS; break;
+					case 'i':       ttype = TREE_VCD_ST_INTERFACE; break;
+					case 'p':       ttype = (GLOBALS->yytext_vcd_partial_c_2[1] == 'r') ? TREE_VCD_ST_PROGRAM : TREE_VCD_ST_PACKAGE; break;
                                         default:        ttype = TREE_UNKNOWN;
                                                         break;
                                         }
@@ -2553,7 +2559,6 @@ if(GLOBALS->partial_vcd)
 
 	while(*GLOBALS->consume_ptr_vcd_partial_c_1)
 		{
-		Trptr t;
 		int old_maxtime_marker_conflict = (GLOBALS->tims.marker > GLOBALS->max_time);
 
 		vcd_parse();
diff --git a/src/vcd_recoder.c b/src/vcd_recoder.c
index c210593..43eb6fc 100644
--- a/src/vcd_recoder.c
+++ b/src/vcd_recoder.c
@@ -1486,6 +1486,12 @@ for(;;)
 					case 't':	ttype = TREE_VCD_ST_TASK; break;
 					case 'f':	ttype = (GLOBALS->yytext_vcd_recoder_c_3[1] == 'u') ? TREE_VCD_ST_FUNCTION : TREE_VCD_ST_FORK; break;
 					case 'b':	ttype = TREE_VCD_ST_BEGIN; break;
+					case 'g':       ttype = TREE_VCD_ST_GENERATE; break;
+					case 's':       ttype = TREE_VCD_ST_STRUCT; break;
+					case 'u':       ttype = TREE_VCD_ST_UNION; break;
+					case 'c':       ttype = TREE_VCD_ST_CLASS; break;
+					case 'i':       ttype = TREE_VCD_ST_INTERFACE; break;
+					case 'p':       ttype = (GLOBALS->yytext_vcd_recoder_c_3[1] == 'r') ? TREE_VCD_ST_PROGRAM : TREE_VCD_ST_PACKAGE; break;
 					default:	ttype = TREE_UNKNOWN;
 							break;
 					}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-electronics/gtkwave.git



More information about the Pkg-electronics-commits mailing list