[Pkg-electronics-commits] [gtkwave] 02/04: Imported Upstream version 3.3.61

أحمد المحمودي (Ahmed El-Mahmoudy) aelmahmoudy at sabily.org
Mon Aug 11 11:59:12 UTC 2014


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

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

commit f5bf797aa95d2de2fc695db6b741f05cbf59f0c9
Author: أحمد المحمودي (Ahmed El-Mahmoudy) <aelmahmoudy at sabily.org>
Date:   Mon Aug 11 12:41:05 2014 +0300

    Imported Upstream version 3.3.61
---
 ChangeLog                        |    6 +
 LICENSE.TXT                      |    2 +-
 configure                        |   53 +-
 configure.ac                     |   27 +-
 contrib/rtlbrowse/logfile.c      |   52 +-
 contrib/rtlbrowse/stem_recurse.c |    2 +
 contrib/rtlbrowse/tcl_helper.c   |   17 +
 contrib/rtlbrowse/tree_widget.c  |   16 +
 src/ae2.c                        |   56 +-
 src/analyzer.c                   |    2 +-
 src/analyzer.h                   |    2 +-
 src/bitvec.c                     |    2 +-
 src/busy.c                       |    6 +-
 src/debug.c                      |    4 +-
 src/edgebuttons.c                |    6 +
 src/entry.c                      |   15 +-
 src/extload.c                    |   13 +-
 src/fetchbuttons.c               |   12 +
 src/file.c                       |   63 +-
 src/fst.c                        |   13 +-
 src/gconf.c                      |   27 +
 src/ghwlib.c                     |   12 +-
 src/globals.c                    |   10 +-
 src/globals.h                    |   12 +-
 src/help.c                       |    6 +
 src/helpers/evcd2vcd.c           |    4 +-
 src/helpers/fst/fstapi.c         | 7812 +++++++++++++++++++-------------------
 src/helpers/fst/fstapi.h         |  276 +-
 src/helpers/fst/lz4.c            |  797 ++--
 src/helpers/fst/lz4.h            |  252 +-
 src/helpers/fstminer.c           |    6 +-
 src/helpers/lxt2_read.c          |   32 +-
 src/helpers/lxt2_read.h          |   44 +-
 src/helpers/lxt2_write.c         |    8 +-
 src/helpers/lxt2_write.h         |    4 +-
 src/helpers/lxt2miner.c          |    5 +-
 src/helpers/lxt_write.c          |   18 +-
 src/helpers/shmidcat.c           |    2 +-
 src/helpers/vcd2fst.c            |    6 +-
 src/helpers/vzt_read.c           |   43 +-
 src/helpers/vzt_read.h           |   48 +-
 src/helpers/vzt_write.c          |    8 +-
 src/helpers/vztminer.c           |    4 +-
 src/hierpack.c                   |    2 +-
 src/hierpack.h                   |    2 +-
 src/hiersearch.c                 |   34 +
 src/liblzma/LzmaLib.c            |    8 +
 src/logfile.c                    |   17 +-
 src/lx2.c                        |    8 +-
 src/lxt.c                        |   19 +-
 src/main.c                       |   23 +-
 src/markerbox.c                  |  144 +-
 src/markerbox.h                  |   21 +-
 src/menu.c                       |  907 ++++-
 src/pagebuttons.c                |   18 +-
 src/print.c                      |    7 +-
 src/ptranslate.c                 |   23 +-
 src/renderopt.c                  |   24 +
 src/savefile.c                   |   59 +-
 src/search.c                     |   42 +
 src/shiftbuttons.c               |    6 +
 src/showchange.c                 |   14 +
 src/signalwindow.c               |   36 +
 src/simplereq.c                  |    8 +
 src/splash.c                     |    5 +
 src/status.c                     |    3 +
 src/strace.c                     |   16 +-
 src/symbol.c                     |    4 +
 src/tcl_commands.c               |   66 +-
 src/tcl_helper.c                 |   24 +
 src/tcl_np.c                     |    2 +
 src/tcl_support_commands.c       |    4 +-
 src/timeentry.c                  |    4 +
 src/translate.c                  |   21 +
 src/treesearch.c                 |    3 +
 src/treesearch_gtk2.c            |   81 +
 src/ttranslate.c                 |   72 +-
 src/twinwave.c                   |    5 +
 src/vcd_recoder.c                |    4 +-
 src/vcd_saver.c                  |   19 +-
 src/vzt.c                        |    8 +-
 src/wavewindow.c                 |   41 +-
 src/zoombuttons.c                |   21 +
 83 files changed, 6921 insertions(+), 4709 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index fe23cc6..1a10752 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1474,3 +1474,9 @@
 3.3.60	14may14	Fix MinGW tmpfile_open() patch from previous release as it
 		was using the wrong filename.
 		Harden fsdb reader against xtags that move backward in time.
+3.3.61	27jun14	Parameterized number of named markers, so that
+		--enable-manymarkers at configure time allows up to 702
+		named markers instead of 26 (disabled by default).
+		Updated LZ4 for version r118.
+		Fixed broken VCD/TIM export in Windows (broken by new file
+		requester).
diff --git a/LICENSE.TXT b/LICENSE.TXT
index 2023c8c..3c87e86 100644
--- a/LICENSE.TXT
+++ b/LICENSE.TXT
@@ -1,6 +1,6 @@
 ##########################################################################
 
-GTKWave 3.3.59 Wave Viewer is Copyright (C) 1999-2014 Tony Bybell.  
+GTKWave 3.3.61 Wave Viewer is Copyright (C) 1999-2014 Tony Bybell.  
 Portions of GTKWave are Copyright (C) 1999-2014 Udi Finkelstein. 
 Context support is Copyright (C) 2007-2014 Kermin Elliott Fleming.
 Trace group support is  Copyright (C) 2009-2014 Donald Baltus.
diff --git a/configure b/configure
index 1a86f7c..eef0d44 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.60.
+# Generated by GNU Autoconf 2.69 for gtkwave 3.3.61.
 #
 # 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.60'
-PACKAGE_STRING='gtkwave 3.3.60'
+PACKAGE_VERSION='3.3.61'
+PACKAGE_STRING='gtkwave 3.3.61'
 PACKAGE_BUGREPORT='bybell at rocketmail.com'
 PACKAGE_URL=''
 
@@ -811,6 +811,7 @@ with_tk
 enable_stubify
 enable_gtk1
 enable_fatlines
+enable_manymarkers
 enable_ae2
 enable_fsdb
 enable_dependency_tracking
@@ -1382,7 +1383,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.60 to adapt to many kinds of systems.
+\`configure' configures gtkwave 3.3.61 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1448,7 +1449,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of gtkwave 3.3.60:";;
+     short | recursive ) echo "Configuration of gtkwave 3.3.61:";;
    esac
   cat <<\_ACEOF
 
@@ -1472,6 +1473,7 @@ Optional Features:
   --enable-gtk1           Causes the GTK+ frontend to be built with gtk1
                           instead of gtk2.
   --enable-fatlines       Renders lines as double width in gtkwave.
+  --enable-manymarkers    Expands named marker count from 26 to 702.
   --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.
@@ -1593,7 +1595,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-gtkwave configure 3.3.60
+gtkwave configure 3.3.61
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2237,7 +2239,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.60, which was
+It was created by gtkwave $as_me 3.3.61, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3104,7 +3106,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='gtkwave'
- VERSION='3.3.60'
+ VERSION='3.3.61'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3895,6 +3897,37 @@ $as_echo "yes" >&6; }
 fi
 
 
+# check for massive amounts of named markers enabled
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if manymarkers should be used" >&5
+$as_echo_n "checking if manymarkers should be used... " >&6; }
+
+MMC=no
+# Check whether --enable-manymarkers was given.
+if test "${enable_manymarkers+set}" = set; then :
+  enableval=$enable_manymarkers;
+if test "X$enable_manymarkers" = "Xno" ; then
+	MMC=no
+else
+	MMC=yes
+fi
+
+else
+
+MMC=no
+
+fi
+
+
+if test "X$MMC" = "Xno" ; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	CPPFLAGS="-DWAVE_MANYMARKERS_MODE $CPPFLAGS"
+fi
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ae2 support should be used" >&5
 $as_echo_n "checking if ae2 support should be used... " >&6; }
 
@@ -10959,7 +10992,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.60, which was
+This file was extended by gtkwave $as_me 3.3.61, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -11025,7 +11058,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.60
+gtkwave config.status 3.3.61
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index a87aae3..a67c18e 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.60, bybell at rocketmail.com)
+AC_INIT(gtkwave, 3.3.61, bybell at rocketmail.com)
 AC_CONFIG_SRCDIR([src/vcd.c])
 AM_INIT_AUTOMAKE
 AC_CONFIG_HEADER([config.h])
@@ -229,6 +229,31 @@ else
 fi
 
 
+# check for massive amounts of named markers enabled
+AC_MSG_CHECKING([if manymarkers should be used])
+
+MMC=no
+AC_ARG_ENABLE([manymarkers],
+[  --enable-manymarkers    Expands named marker count from 26 to 702.],
+[
+if test "X$enable_manymarkers" = "Xno" ; then
+	MMC=no
+else
+	MMC=yes
+fi
+],
+[
+MMC=no
+])
+
+if test "X$MMC" = "Xno" ; then
+	AC_MSG_RESULT([no])
+else
+	AC_MSG_RESULT([yes])
+	CPPFLAGS="-DWAVE_MANYMARKERS_MODE $CPPFLAGS"
+fi
+
+
 AC_MSG_CHECKING([if ae2 support should be used])
 
 AE2_CFLAGS=
diff --git a/contrib/rtlbrowse/logfile.c b/contrib/rtlbrowse/logfile.c
index 6cc0e9b..cdfc60e 100644
--- a/contrib/rtlbrowse/logfile.c
+++ b/contrib/rtlbrowse/logfile.c
@@ -118,6 +118,8 @@ return(FALSE);
 
 static gint expose_event_local(GtkWidget *widget, GdkEventExpose *event)
 {
+(void)event;
+
 struct text_find_t *tr = text_root;
 
 while(tr)
@@ -448,12 +450,18 @@ static char *search_string = NULL;
 
 static void search_backward(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 tr_search_backward(search_string);
 }
 
 static gboolean forward_noskip = FALSE;
 static void search_forward(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 tr_search_forward(search_string, forward_noskip);
 }
 
@@ -462,6 +470,8 @@ tr_search_forward(search_string, forward_noskip);
 static
 gboolean find_edit_cb (GtkWidget *widget, GdkEventKey *ev, gpointer *data)
 {
+(void)data;
+
   /* Maybe this test is too strong ?  */
   if (ev->keyval == GDK_Return)
     {
@@ -483,6 +493,8 @@ gboolean find_edit_cb (GtkWidget *widget, GdkEventKey *ev, gpointer *data)
 
 static void toggle_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 matchcase_active = (GTK_TOGGLE_BUTTON(widget)->active != 0);
 tr_search_forward(search_string, TRUE);
 }
@@ -582,6 +594,7 @@ static char *tmpnam_rtlbrowse(char *s, int *fd)
 return(tmpnam(s));
 
 #else
+(void)s;
 
 char *backpath = "gtkwaveXXXXXX";
 char *tmpspace;
@@ -766,6 +779,10 @@ static void DNDBeginCB(
         GtkWidget *widget, GdkDragContext *dc, gpointer data
 )
 {
+(void)widget;
+(void)dc;
+(void)data;
+
 /* nothing */
 }
 
@@ -773,6 +790,10 @@ static void DNDEndCB(
         GtkWidget *widget, GdkDragContext *dc, gpointer data
 )
 {
+(void)widget;
+(void)dc;
+(void)data;
+
 /* nothing */
 }
 
@@ -780,6 +801,10 @@ static void DNDDataDeleteCB(
         GtkWidget *widget, GdkDragContext *dc, gpointer data
 )
 {
+(void)widget;
+(void)dc;
+(void)data;
+
 /* nothing */
 }
 
@@ -789,6 +814,10 @@ static void DNDDataRequestCB(
         gpointer data
 )
 {
+(void)dc;
+(void)t;
+(void)info;
+
 struct logfile_context_t *ctx = (struct logfile_context_t *)data;
 GtkWidget *text = (GtkWidget *)widget;
 gchar *sel = NULL;
@@ -1016,6 +1045,8 @@ if(sel)
 void log_text(GtkWidget *text, GdkFont *font, char *str)
 {
 #if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN)
+(void)font;
+
 gtk_text_buffer_insert_with_tags (GTK_TEXT_VIEW (text)->buffer, &iterx,
                                  str, -1, mono_tag, size_tag, NULL);
 #else
@@ -1026,6 +1057,8 @@ gtk_text_insert (GTK_TEXT (text), font, &text->style->black, NULL, str, -1);
 void log_text_bold(GtkWidget *text, GdkFont *font, char *str)
 {
 #if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN)
+(void)font;
+
 gtk_text_buffer_insert_with_tags (GTK_TEXT_VIEW (text)->buffer, &iterx,
                                  str, -1, bold_tag, mono_tag, size_tag, fwht_tag, blue_tag, NULL);
 #else
@@ -1036,6 +1069,8 @@ gtk_text_insert (GTK_TEXT (text), font, &text->style->fg[GTK_STATE_SELECTED], &t
 void log_text_active(GtkWidget *text, GdkFont *font, char *str)
 {
 #if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN)
+(void)font;
+
 gtk_text_buffer_insert_with_tags (GTK_TEXT_VIEW (text)->buffer, &iterx,
                                  str, -1, dgray_tag, mono_tag, size_tag, NULL);
 #else
@@ -1046,6 +1081,8 @@ gtk_text_insert (GTK_TEXT (text), font, &text->style->fg[GTK_STATE_ACTIVE], &tex
 void log_text_prelight(GtkWidget *text, GdkFont *font, char *str)
 {
 #if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN)
+(void)font;
+
 gtk_text_buffer_insert_with_tags (GTK_TEXT_VIEW (text)->buffer, &iterx,
                                  str, -1, lgray_tag, mono_tag, size_tag, NULL);
 #else
@@ -1056,6 +1093,9 @@ gtk_text_insert (GTK_TEXT (text), font, &text->style->fg[GTK_STATE_PRELIGHT], &t
 static void
 log_realize_text (GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 /* nothing for now */
 }
 
@@ -1065,7 +1105,9 @@ static JRB lx2vals = NULL;
 
 static void lx2_iter_fn(struct lxt2_rd_trace **lt, lxtint64_t *pnt_time, lxtint32_t *pnt_facidx, char **pnt_value)
 {
-if(*pnt_time <= anno_ctx->marker)
+(void)lt;
+
+if(*pnt_time <= (lxtint64_t)anno_ctx->marker)
 	{
 	JRB node = jrb_find_int(lx2vals, *pnt_facidx);
 	Jval jv;
@@ -1123,6 +1165,8 @@ free(s2);
 static gboolean
 button_release_event (GtkWidget *text, GdkEventButton *event)
 {
+(void)event;
+
 gchar *sel;
 
 #if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN)
@@ -1272,6 +1316,8 @@ return(FALSE); /* call remaining handlers... */
 static        gint
 scroll_event( GtkWidget * widget, GdkEventScroll * event, gpointer text)
 {
+(void)widget;
+
   GtkTextView *text_view = GTK_TEXT_VIEW(text);
   /* GtkAdjustment *hadj = text_view->hadjustment; */
   GtkAdjustment *vadj = text_view->vadjustment;
@@ -1394,6 +1440,8 @@ return(table);
 
 static void ok_callback(GtkWidget *widget, struct logfile_context_t *ctx)
 {
+(void)widget;
+
   bwlogbox(ctx->which->fullname, ctx->width, ctx->which, (ctx->display_mode == 0));
 }
 
@@ -1500,6 +1548,8 @@ return(TRUE);
 
 static void destroy_callback(GtkWidget *widget, gpointer dummy)
 {
+(void)dummy;
+
 struct text_find_t *t = text_root, *tprev = NULL;
 struct logfile_context_t *ctx = NULL;
 int which = (notebook != NULL);
diff --git a/contrib/rtlbrowse/stem_recurse.c b/contrib/rtlbrowse/stem_recurse.c
index 0492124..79d310b 100644
--- a/contrib/rtlbrowse/stem_recurse.c
+++ b/contrib/rtlbrowse/stem_recurse.c
@@ -430,6 +430,8 @@ return(pnt);
 
 static void free_fn(void* ptr, size_t size)
 {
+(void)size;
+
 free(ptr);
 }
 
diff --git a/contrib/rtlbrowse/tcl_helper.c b/contrib/rtlbrowse/tcl_helper.c
index 4fa1d05..966f16a 100644
--- a/contrib/rtlbrowse/tcl_helper.c
+++ b/contrib/rtlbrowse/tcl_helper.c
@@ -643,6 +643,10 @@ static gboolean DNDDragMotionCB(
         gpointer data
 )
 {
+(void)widget;
+(void)xx;
+(void)yy;
+(void)data;
 #ifdef WAVE_USE_GTK2
 	GdkDragAction suggested_action;
 
@@ -669,6 +673,9 @@ static gboolean DNDDragMotionCB(
         /* All else respond with 0. */
         else
             gdk_drag_status(dc, 0, tt);
+#else
+(void)dc;
+(void)tt;
 #endif
 
 return(FALSE);
@@ -678,12 +685,18 @@ static void DNDBeginCB(
         GtkWidget *widget, GdkDragContext *dc, gpointer data
 )
 {
+(void)widget;
+(void)dc;
+(void)data;
 }
 
 static void DNDEndCB(
         GtkWidget *widget, GdkDragContext *dc, gpointer data
 )
 {
+(void)widget;
+(void)dc;
+(void)data;
 }
 
 /*
@@ -699,6 +712,10 @@ static void DNDDataReceivedCB(
 	GtkWidget *widget, GdkDragContext *dc,
 	gint x, gint y, GtkSelectionData *selection_data,
 	guint info, guint t, gpointer data) {
+(void)x;
+(void)y;
+(void)t;
+
     gboolean same;
     GtkWidget *source_widget;
 
diff --git a/contrib/rtlbrowse/tree_widget.c b/contrib/rtlbrowse/tree_widget.c
index 8bff10a..3af9506 100644
--- a/contrib/rtlbrowse/tree_widget.c
+++ b/contrib/rtlbrowse/tree_widget.c
@@ -32,6 +32,11 @@ GtkCTree *ctree_main=NULL;
 static void select_row_callback(GtkWidget *widget, gint row, gint column,
         GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)column;
+(void)event;
+(void)data;
+
 ds_Tree *t=(ds_Tree *)gtk_clist_get_row_data(GTK_CLIST(ctree_main), row);
 selectedtree=t;
 
@@ -56,6 +61,12 @@ if(t->filename)
 static void unselect_row_callback(GtkWidget *widget, gint row, gint column,
         GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)row;
+(void)column;
+(void)event;
+(void)data;
+
 /* ds_Tree *t=(ds_Tree *)gtk_clist_get_row_data(GTK_CLIST(ctree_main), row); */
 selectedtree=NULL;
 }
@@ -75,6 +86,9 @@ static GtkSignalFunc cleanup;
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   is_active=0;
   gtk_widget_destroy(window);
   gtk_main_quit();
@@ -87,6 +101,8 @@ static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
  */
 void treebox(char *title, GtkSignalFunc func, GtkWidget *old_window)
 {
+(void)old_window;
+
     GtkWidget *scrolled_win;
     GtkWidget *frame2;
     GtkWidget *table;
diff --git a/src/ae2.c b/src/ae2.c
index 2397c93..fb9c77f 100644
--- a/src/ae2.c
+++ b/src/ae2.c
@@ -38,6 +38,10 @@ const char *ae2_loader_fail_msg = "Sorry, AET2 support was not compiled into thi
 
 TimeType ae2_main(char *fname, char *skip_start, char *skip_end)
 {
+(void)fname;
+(void)skip_start;
+(void)skip_end;
+
 fprintf(stderr, "%s", ae2_loader_fail_msg);
 exit(255);
 
@@ -58,7 +62,7 @@ exit(255);
  */
 int aet2_rd_get_fac_process_mask(unsigned int facidx)
 {
-if(facidx<GLOBALS->numfacs)
+if((int)facidx<GLOBALS->numfacs)
 	{
 	int process_idx = facidx/8;
 	int process_bit = facidx&7;
@@ -72,7 +76,7 @@ return(0);
 
 void aet2_rd_set_fac_process_mask(unsigned int facidx)
 {
-if(facidx<GLOBALS->numfacs)
+if((int)facidx<GLOBALS->numfacs)
 	{
 	int idx = facidx/8;
 	int bitpos = facidx&7;
@@ -84,7 +88,7 @@ if(facidx<GLOBALS->numfacs)
 
 void aet2_rd_clr_fac_process_mask(unsigned int facidx)
 {
-if(facidx<GLOBALS->numfacs)
+if((int)facidx<GLOBALS->numfacs)
 	{
 	int idx = facidx/8;
 	int bitpos = facidx&7;
@@ -133,6 +137,8 @@ va_end(ap);
 
 static unsigned long symbol_fn (cchar *name, void *udata)
 {
+(void)udata;
+
 AE2_FACREF f2;
 return(ae2_read_find_symbol(GLOBALS->ae2, name, &f2));
 }
@@ -149,6 +155,8 @@ return(pnt);
 
 static void free_fn(void* ptr, size_t size)
 {
+(void)size;
+
 if(ptr)
 	{
 	free_2(ptr);
@@ -423,7 +431,7 @@ return(s2 - s);
  */
 TimeType ae2_main(char *fname, char *skip_start, char *skip_end)
 {
-int i;
+unsigned int i;
 int match_idx;
 struct Node *n;
 struct symbol *s;
@@ -528,8 +536,8 @@ missing = calloc_2(1, (GLOBALS->ae2_num_aliases + 7 + 1) / 8); /* + 1 to mirror
 for(i=0;i<GLOBALS->ae2_num_aliases;i++)
 	{
 	unsigned long numTerms;
-        int idx = i+1;
-	int ii;
+        unsigned int idx = i+1;
+	unsigned int ii;
 	int midx, mbit;
 	int mcnt;
 
@@ -632,12 +640,12 @@ if(!GLOBALS->hier_was_explicitly_set)    /* set default hierarchy split char */
         }
 
 match_idx = 0;
-for(i=0;i<GLOBALS->numfacs;i++)
+for(i=0;i<(unsigned int)GLOBALS->numfacs;i++)
         {
 	char *str;
         int idx;
 	int typ;
-	unsigned long len, clen;
+	long len, clen;
 	int row_iter, mx_row, mx_row_adjusted;
 
 #ifdef AET2_ALIASDB_IS_PRESENT
@@ -780,7 +788,7 @@ GLOBALS->facs=(struct symbol **)malloc_2(GLOBALS->numfacs*sizeof(struct symbol *
 
 if(GLOBALS->fast_tree_sort)
 	{
-	for(i=0;i<GLOBALS->numfacs;i++)
+	for(i=0;i<(unsigned int)GLOBALS->numfacs;i++)
 		{
 		GLOBALS->facs[i]=&monolithic_sym[i];
 		}
@@ -790,7 +798,7 @@ if(GLOBALS->fast_tree_sort)
 
 	init_tree();
 
-	for(i=0;i<GLOBALS->numfacs;i++)
+	for(i=0;i<(unsigned int)GLOBALS->numfacs;i++)
 		{
 		int was_packed = HIER_DEPACK_STATIC; /* no need to free_2() afterward then */
 		char *sb = hier_decompress_flagged(GLOBALS->facs[i]->name, &was_packed);
@@ -809,7 +817,7 @@ if(GLOBALS->fast_tree_sort)
 	}
 	else
 	{
-	for(i=0;i<GLOBALS->numfacs;i++)
+	for(i=0;i<(unsigned int)GLOBALS->numfacs;i++)
 		{
 #ifdef WAVE_HIERFIX
 		char *subst;
@@ -849,7 +857,7 @@ if(GLOBALS->fast_tree_sort)
 	fprintf(stderr, AET2_RDLOAD"Building facility hierarchy tree.\n");
 
 	init_tree();
-	for(i=0;i<GLOBALS->numfacs;i++)
+	for(i=0;i<(unsigned int)GLOBALS->numfacs;i++)
 		{
 		build_tree_from_name(GLOBALS->facs[i]->name, i);
 		}
@@ -1001,11 +1009,11 @@ char buf[AE2_MAXFACLEN+1];
 
 autofacs = calloc_2(GLOBALS->numfacs, sizeof(struct ae2_ncycle_autosort));
 
-for(i=0;i<GLOBALS->numfacs;i++)
+for(i=0;i<(unsigned int)GLOBALS->numfacs;i++)
 	{
 	if(aet2_rd_get_fac_process_mask(i))
 		{
-		int nr = ae2_read_symbol_rows_2(GLOBALS->ae2,GLOBALS->ae2_fr[i].s);
+		unsigned int nr = ae2_read_symbol_rows_2(GLOBALS->ae2,GLOBALS->ae2_fr[i].s);
 		if(!nr) nr = 1;
 		for(r=0;r<nr;r++)
 			{
@@ -1031,7 +1039,7 @@ for(j=0;j<GLOBALS->ae2_num_sections;j++)
 
 	autosort = calloc_2(ecyc - cyc + 1, sizeof(struct ae2_ncycle_autosort *));
 
-	for(i=0;i<GLOBALS->numfacs;i++)
+	for(i=0;i<(unsigned int)GLOBALS->numfacs;i++)
 		{
 		if(aet2_rd_get_fac_process_mask(i))
 			{
@@ -1053,7 +1061,7 @@ for(j=0;j<GLOBALS->ae2_num_sections;j++)
 				unsigned long sf = ae2_read_symbol_sparse_flag(GLOBALS->ae2, GLOBALS->ae2_fr[i].s);
 				if(sf)
 					{
-					int rows = ae2_read_num_sparse_rows(GLOBALS->ae2, GLOBALS->ae2_fr[i].s, cyc);
+					unsigned int rows = ae2_read_num_sparse_rows(GLOBALS->ae2, GLOBALS->ae2_fr[i].s, cyc);
 					if(rows)
 						{
 			                        for(r=1;r<rows+1;r++)
@@ -1075,7 +1083,7 @@ for(j=0;j<GLOBALS->ae2_num_sections;j++)
 					}
 					else
 					{
-					int rows = ae2_read_symbol_rows_2(GLOBALS->ae2, GLOBALS->ae2_fr[i].s);
+					unsigned int rows = ae2_read_symbol_rows_2(GLOBALS->ae2, GLOBALS->ae2_fr[i].s);
 					if(rows)
 						{
 			                        for(r=0;r<rows;r++)
@@ -1101,7 +1109,7 @@ for(j=0;j<GLOBALS->ae2_num_sections;j++)
 
 	deadlist=NULL;
 
-	for(i=0;i<GLOBALS->numfacs;i++)
+	for(i=0;i<(unsigned int)GLOBALS->numfacs;i++)
 		{
 		uint64_t ncyc;
 		nptr np;
@@ -1120,7 +1128,7 @@ for(j=0;j<GLOBALS->ae2_num_sections;j++)
 			unsigned long sf = ae2_read_symbol_sparse_flag(GLOBALS->ae2, GLOBALS->ae2_fr[i].s);
 			if(sf)
 				{
-				int rows = ae2_read_num_sparse_rows(GLOBALS->ae2, GLOBALS->ae2_fr[i].s, cyc);
+				unsigned int rows = ae2_read_num_sparse_rows(GLOBALS->ae2, GLOBALS->ae2_fr[i].s, cyc);
 				uint64_t mxcyc = end_cycle+1;
 
 	                        for(r=1;r<rows+1;r++)
@@ -1146,7 +1154,7 @@ for(j=0;j<GLOBALS->ae2_num_sections;j++)
 				}
 				else
 				{
-				int rows = ae2_read_symbol_rows_2(GLOBALS->ae2, GLOBALS->ae2_fr[i].s);
+				unsigned int rows = ae2_read_symbol_rows_2(GLOBALS->ae2, GLOBALS->ae2_fr[i].s);
 				uint64_t mxcyc = end_cycle+1;
 
 	                        for(r=0;r<rows;r++)
@@ -1220,7 +1228,7 @@ for(j=0;j<GLOBALS->ae2_num_sections;j++)
 					unsigned long sf = ae2_read_symbol_sparse_flag(GLOBALS->ae2, GLOBALS->ae2_fr[i].s);
 					if(sf)
 						{
-						int rows = ae2_read_num_sparse_rows(GLOBALS->ae2, GLOBALS->ae2_fr[i].s, step_cyc);
+						unsigned int rows = ae2_read_num_sparse_rows(GLOBALS->ae2, GLOBALS->ae2_fr[i].s, step_cyc);
 						uint64_t mxcyc = end_cycle+1;
 
 			                        for(r=1;r<rows+1;r++)
@@ -1253,7 +1261,7 @@ for(j=0;j<GLOBALS->ae2_num_sections;j++)
 						}
 						else
 						{
-						int rows = ae2_read_symbol_rows_2(GLOBALS->ae2, GLOBALS->ae2_fr[i].s);
+						unsigned int rows = ae2_read_symbol_rows_2(GLOBALS->ae2, GLOBALS->ae2_fr[i].s);
 						uint64_t mxcyc = end_cycle+1;
 
 			                        for(r=0;r<rows;r++)
@@ -1309,11 +1317,11 @@ for(j=0;j<GLOBALS->ae2_num_sections;j++)
 	}
 
 
-for(i=0;i<GLOBALS->numfacs;i++)
+for(i=0;i<(unsigned int)GLOBALS->numfacs;i++)
 	{
 	if(aet2_rd_get_fac_process_mask(i))
 		{
-		int nr = ae2_read_symbol_rows_2(GLOBALS->ae2,GLOBALS->ae2_fr[i].s);
+		unsigned int nr = ae2_read_symbol_rows_2(GLOBALS->ae2,GLOBALS->ae2_fr[i].s);
 		if(!nr) nr = 1;
 		for(r=0;r<nr;r++)
 			{
diff --git a/src/analyzer.c b/src/analyzer.c
index 83e3761..bb2a9c5 100644
--- a/src/analyzer.c
+++ b/src/analyzer.c
@@ -578,7 +578,7 @@ if(nd->array_height <= 1)
 #ifdef WAVE_ARRAY_SUPPORT
 	else
 	{
-	int i;
+	unsigned int i;
 	int rc = 1;
 
 	for(i=0;i<nd->array_height;i++)
diff --git a/src/analyzer.h b/src/analyzer.h
index 3e46977..2541992 100644
--- a/src/analyzer.h
+++ b/src/analyzer.h
@@ -150,7 +150,7 @@ unsigned char v[]; /* C99 */
 #endif
 
 
-#define MAX_HISTENT_TIME (~( (ULLDescriptor(-1)) << (sizeof(TimeType) * 8 - 1)))
+#define MAX_HISTENT_TIME ((TimeType)(~( (ULLDescriptor(-1)) << (sizeof(TimeType) * 8 - 1))))
 
 
 typedef struct ExpandInfo	/* only used when expanding atomic vex.. */
diff --git a/src/bitvec.c b/src/bitvec.c
index c71f93e..2eab400 100644
--- a/src/bitvec.c
+++ b/src/bitvec.c
@@ -1527,7 +1527,7 @@ static struct symbol **hp;
 static void heapify(int i, int heap_size)
 {
 int l, r;
-unsigned int largest;
+int largest;
 struct symbol *t;
 int maxele=heap_size/2-1;	/* points to where heapswaps don't matter anymore */
 
diff --git a/src/busy.c b/src/busy.c
index dd720ee..00ee045 100644
--- a/src/busy.c
+++ b/src/busy.c
@@ -36,6 +36,8 @@ return(GLOBALS->splash_is_loading != 0);
 
 static void GuiDoEvent(GdkEvent *event, gpointer data)
 {
+(void)data;
+
 if(!GLOBALS->busy_busy_c_1)
 	{
 	gtk_main_do_event(event);
@@ -128,7 +130,7 @@ gdk_event_handler_set((GdkEventFunc)GuiDoEvent, NULL, NULL);
 
 void set_window_busy_no_refresh(GtkWidget *w)
 {
-int i;
+unsigned int i;
 
 /* if(GLOBALS->tree_dnd_begin) return; */
 
@@ -155,7 +157,7 @@ busy_window_refresh();
 
 void set_window_idle(GtkWidget *w)
 {
-int i;
+unsigned int i;
 
 /* if(GLOBALS->tree_dnd_begin) return; */
 
diff --git a/src/debug.c b/src/debug.c
index 193de4a..59cbd51 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -544,6 +544,8 @@ if(!GLOBALS->disable_tooltips)
 
 char *tmpnam_2(char *s, int *fd)
 {
+(void)s;
+
 #if defined _MSC_VER || defined __MINGW32__
 char *fname = NULL;
 TCHAR szTempFileName[MAX_PATH];
@@ -700,7 +702,7 @@ if(stat(path, &buf) == 0)
 		FILE *f = fopen(path, "rb");
 		if(f)
 			{
-			unsigned int hdr[2] = { 0, 0 };
+			int hdr[2] = { 0, 0 };
 			unsigned int magic_word;
 
 			hdr[0] = fgetc(f);
diff --git a/src/edgebuttons.c b/src/edgebuttons.c
index 51d697e..1642bcd 100644
--- a/src/edgebuttons.c
+++ b/src/edgebuttons.c
@@ -512,6 +512,9 @@ for(i=0;i<=i_high_cnt;i++)
 void
 service_left_edge(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nFind Previous Edge");
@@ -530,6 +533,9 @@ DEBUG(printf("Edge Left\n"));
 void
 service_right_edge(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nFind Next Edge");
diff --git a/src/entry.c b/src/entry.c
index 62f1811..f59dbe9 100644
--- a/src/entry.c
+++ b/src/entry.c
@@ -13,6 +13,7 @@
 #include "gtk12compat.h"
 #include "menu.h"
 #include "debug.h"
+#include <cocoa_misc.h>
 #include <string.h>
 
 #ifdef MAC_INTEGRATION
@@ -23,6 +24,10 @@
 #ifndef WAVE_MAC_USE_ENTRY
 static gint keypress_local(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
+(void)widget;
+(void)event;
+(void)data;
+
 if(GLOBALS->window_entry_c_1)
 	{
 	gdk_window_raise(GLOBALS->window_entry_c_1->window);
@@ -35,6 +40,9 @@ return(FALSE);
 #ifndef WAVE_MAC_USE_ENTRY
 static void enter_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   G_CONST_RETURN gchar *entry_text;
   int len;
   entry_text = gtk_entry_get_text(GTK_ENTRY(GLOBALS->entry_entry_c_1));
@@ -52,6 +60,9 @@ static void enter_callback(GtkWidget *widget, GtkWidget *nothing)
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   DEBUG(printf("Entry Cancel\n"));
   GLOBALS->entrybox_text=NULL;
   wave_gtk_grab_remove(GLOBALS->window_entry_c_1);
@@ -62,9 +73,11 @@ static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 
 void entrybox(char *title, int width, char *dflt_text, char *comment, int maxch, GtkSignalFunc func)
 {
+#ifndef WAVE_MAC_USE_ENTRY
     GtkWidget *vbox, *hbox;
     GtkWidget *button1, *button2;
     int height = (comment) ? 75 : 60;
+#endif
 
     GLOBALS->cleanup_entry_c_1=func;
 
@@ -93,7 +106,7 @@ void entrybox(char *title, int width, char *dflt_text, char *comment, int maxch,
 #ifdef WAVE_MAC_USE_ENTRY
 {
 char *out_text_entry = NULL;
-int rc = entrybox_req_bridge(title, width, dflt_text, comment, maxch, &out_text_entry);
+entrybox_req_bridge(title, width, dflt_text, comment, maxch, &out_text_entry);
 if(out_text_entry)
 	{
 	int len=strlen(out_text_entry);
diff --git a/src/extload.c b/src/extload.c
index 55305ea..8fa2ba3 100644
--- a/src/extload.c
+++ b/src/extload.c
@@ -38,6 +38,10 @@ const char *extload_loader_fail_msg = "Sorry, EXTLOAD support was not compiled i
 
 TimeType extload_main(char *fname, char *skip_start, char *skip_end)
 {
+(void)fname;
+(void)skip_start;
+(void)skip_end;
+
 fprintf(stderr, "%s", extload_loader_fail_msg);
 exit(255);
 
@@ -46,6 +50,8 @@ return(0); /* for vc++ */
 
 void import_extload_trace(nptr np)
 {
+(void)np;
+
 fprintf(stderr, "%s", extload_loader_fail_msg);
 exit(255);
 }
@@ -58,6 +64,8 @@ exit(255);
 
 void fsdb_set_fac_process_mask(nptr np)
 {
+(void)np;
+
 fprintf(stderr, "%s", extload_loader_fail_msg);
 exit(255);
 }
@@ -1266,9 +1274,6 @@ int len, i;
 struct fac *f;
 int txidx, txidx_in_trace;
 nptr nold = np;
-#ifdef WAVE_FSDB_READER_IS_PRESENT
-void *trans_info;
-#endif
 
 if(!(f=np->mv.mvlfac)) return;	/* already imported */
 
@@ -1522,6 +1527,8 @@ if(GLOBALS->extload_inv_idcodes[txidx_in_trace] > 0)
 
 	fsdbReaderAddToSignalList(GLOBALS->extload_ffr_ctx, txidx_in_trace);
 	}
+#else
+(void)np;
 #endif
 }
 
diff --git a/src/fetchbuttons.c b/src/fetchbuttons.c
index 479f7f7..b96ff10 100644
--- a/src/fetchbuttons.c
+++ b/src/fetchbuttons.c
@@ -17,6 +17,9 @@
 void
 fetch_left(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 TimeType newlo;
 char fromstr[32];
 
@@ -55,6 +58,9 @@ if(newlo<(GLOBALS->tims.last))
 void
 fetch_right(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 TimeType newhi;
 char tostr[32];
 
@@ -91,6 +97,9 @@ if(newhi>(GLOBALS->tims.first))
 void
 discard_left(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 TimeType newlo;
 char tostr[32];
 
@@ -122,6 +131,9 @@ if(newlo<(GLOBALS->tims.last))
 void
 discard_right(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 TimeType newhi;
 char tostr[32];
 
diff --git a/src/file.c b/src/file.c
index f10d8cc..2753f94 100644
--- a/src/file.c
+++ b/src/file.c
@@ -30,6 +30,8 @@
 #ifndef MAC_INTEGRATION
 static gboolean ffunc (const GtkFileFilterInfo *filter_info, gpointer data)
 {
+(void)data;
+
 const char *rms = strrchr(filter_info->filename, '\\');
 const char *rms2;
 
@@ -57,6 +59,8 @@ if(!strchr(GLOBALS->pFileChooseFilterName, '*') && !strchr(GLOBALS->pFileChooseF
 static
 void filter_edit_cb (GtkWidget *widget, GdkEventKey *ev, gpointer *data)
 {
+(void)ev;
+
 const char *t;
 gchar *folder_filename;
 
@@ -105,6 +109,9 @@ filter_edit_cb (widget, &ev, data);
 
 static void enter_callback(GtkWidget *widget, GtkFileSelection *fw)
 {
+(void)widget;
+(void)fw;
+
 G_CONST_RETURN char *allocbuf;
 int alloclen;
 
@@ -126,6 +133,9 @@ GLOBALS->cleanup_file_c_2();
 
 static void cancel_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 DEBUG(printf("Filesel Entry Cancel\n"));
 wave_gtk_grab_remove(GLOBALS->fs_file_c_1);
 gtk_widget_destroy(GLOBALS->fs_file_c_1);
@@ -135,6 +145,9 @@ if(GLOBALS->bad_cleanup_file_c_1) GLOBALS->bad_cleanup_file_c_1();
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 DEBUG(printf("Filesel Destroy\n"));
 gtkwave_main_iteration();
 if(GLOBALS->bad_cleanup_file_c_1) GLOBALS->bad_cleanup_file_c_1();
@@ -148,6 +161,9 @@ char szFile[260];       /* buffer for file name */
 char szPath[260];       /* buffer for path name */
 char lpstrFilter[260];	/* more than enough room for some patterns */
 BOOL rc;
+#else
+(void)pattn;
+(void)is_writemode;
 #endif
 
 GLOBALS->fileselbox_text=filesel_path;
@@ -207,7 +223,52 @@ if (rc==TRUE)
 	{
 	GLOBALS->filesel_ok=1;
         if(*GLOBALS->fileselbox_text) free_2(*GLOBALS->fileselbox_text);
-        *GLOBALS->fileselbox_text=(char *)strdup_2(szFile);
+	if(!is_writemode)
+		{
+	        *GLOBALS->fileselbox_text=(char *)strdup_2(szFile);
+		}
+		else
+		{
+		char *suf_str = NULL;
+		int suf_add = 0;
+		int szlen = 0;
+		int suflen = 0;
+
+		if(pattn)
+			{
+			suf_str = strstr(pattn, "*.");
+			if(suf_str) suf_str++;
+			}
+
+		if(suf_str)
+			{
+			szlen = strlen(szFile);
+			suflen = strlen(suf_str);
+			if(suflen > szlen)
+				{
+				suf_add = 1;
+				}
+				else
+				{
+				if(strcasecmp(szFile + (szlen - suflen), suf_str))
+					{
+					suf_add = 1;
+					}		
+				}
+			}
+
+		if(suf_str && suf_add)
+			{
+			*GLOBALS->fileselbox_text=(char *)malloc_2(szlen + suflen + 1);
+			strcpy(*GLOBALS->fileselbox_text, szFile);
+			strcpy(*GLOBALS->fileselbox_text + szlen, suf_str);
+			}
+			else
+			{
+		        *GLOBALS->fileselbox_text=(char *)strdup_2(szFile);
+			}
+		}
+
 	GLOBALS->cleanup_file_c_2();
 	}
 	else
diff --git a/src/fst.c b/src/fst.c
index f89093d..7e70b07 100644
--- a/src/fst.c
+++ b/src/fst.c
@@ -144,7 +144,7 @@ return(s2 - s);
 /******************************************************************/
 
 
-static struct fstHier *extractNextVar(void *xc, int *msb, int *lsb, char **nam, int *namlen, int *nnam_max)
+static struct fstHier *extractNextVar(void *xc, int *msb, int *lsb, char **nam, int *namlen, unsigned int *nnam_max)
 {
 struct fstHier *h;
 const char *pnts;
@@ -479,8 +479,8 @@ int i;
 struct Node *n;
 struct symbol *s, *prevsymroot=NULL, *prevsym=NULL;
 signed char scale;
-unsigned int numalias = 0;
-unsigned int numvars = 0;
+int numalias = 0;
+int numvars = 0;
 struct symbol *sym_block = NULL;
 struct Node *node_block = NULL;
 struct fstHier *h = NULL;
@@ -491,7 +491,7 @@ struct tree *npar = NULL;
 char **f_name = NULL;
 int   *f_name_len = NULL, *f_name_max_len = NULL;
 int allowed_to_autocoalesce;
-int nnam_max = 0;
+unsigned int nnam_max = 0;
 
 int f_name_build_buf_len = 128;
 char *f_name_build_buf = malloc_2(f_name_build_buf_len + 1);
@@ -1233,6 +1233,8 @@ for(j=0;j<len;j++)
  */
 static void fst_callback2(void *user_callback_data_pointer, uint64_t tim, fstHandle txidx, const unsigned char *value, uint32_t plen)
 {
+(void)user_callback_data_pointer;
+
 fstHandle facidx = GLOBALS->mvlfacs_fst_rvs_alias[--txidx];
 struct HistEnt *htemp;
 struct lx2_entry *l2e = GLOBALS->fst_table_fst_c_1+facidx;
@@ -1626,7 +1628,8 @@ if(np->mv.mvlfac->flags&VZT_RD_SYM_F_ALIAS)
 
 void fst_import_masked(void)
 {
-int txidxi, i, cnt;
+unsigned int txidxi;
+int i, cnt;
 hptr htempx = NULL;
 
 cnt = 0;
diff --git a/src/gconf.c b/src/gconf.c
index 2b50d3f..e38a215 100644
--- a/src/gconf.c
+++ b/src/gconf.c
@@ -26,6 +26,10 @@ open_callback(GConfClient* gclient,
                      GConfEntry *entry,
                      gpointer user_data)
 {
+(void)gclient;
+(void)cnxn_id;
+(void)user_data;
+
   if (gconf_entry_get_value (entry) == NULL)
     {
       /* value is unset */
@@ -53,6 +57,10 @@ quit_callback(GConfClient* gclient,
                      GConfEntry *entry,
                      gpointer user_data)
 {
+(void)gclient;
+(void)cnxn_id;
+(void)user_data;
+
   if (gconf_entry_get_value (entry) == NULL)
     {
       /* value is unset */
@@ -81,6 +89,10 @@ reload_callback(GConfClient* gclient,
                      GConfEntry *entry,
                      gpointer user_data)
 {
+(void)gclient;
+(void)cnxn_id;
+(void)user_data;
+
   if (gconf_entry_get_value (entry) == NULL)
     {
       /* value is unset */
@@ -107,6 +119,10 @@ writesave_callback(GConfClient* gclient,
                      GConfEntry *entry,
                      gpointer user_data)
 {
+(void)gclient;
+(void)cnxn_id;
+(void)user_data;
+
   if (gconf_entry_get_value (entry) == NULL)
     {
       /* value is unset */
@@ -267,15 +283,26 @@ if(dumpfile && savefile && rcfile && wave_pwd && opt_vcd)
 
 void wave_gconf_init(int argc, char **argv)
 {
+(void)argc;
+(void)argv;
 }
 
 gboolean wave_gconf_client_set_string(const gchar *key, const gchar *val)
 {
+(void)key;
+(void)val;
+
 return(FALSE);
 }
 
 void wave_gconf_restore(char **dumpfile, char **savefile, char **rcfile, char **wave_pwd, int *opt_vcd)
 {
+(void)dumpfile;
+(void)savefile;
+(void)rcfile;
+(void)wave_pwd;
+(void)opt_vcd;
+
 /* nothing */
 }
 
diff --git a/src/ghwlib.c b/src/ghwlib.c
index 8617a52..cc081b6 100644
--- a/src/ghwlib.c
+++ b/src/ghwlib.c
@@ -568,7 +568,7 @@ ghw_read_type (struct ghw_handler *h)
 	      ph->nbr_units = 0;
 	    else
 	      {
-		int ix;
+		unsigned int ix;
 
 		if (ghw_read_uleb128 (h, &ph->nbr_units) != 0)
 			{
@@ -729,6 +729,8 @@ ghw_read_wk_types (struct ghw_handler *h)
 void
 ghw_disp_typename (struct ghw_handler *h, union ghw_type *t)
 {
+(void) h;
+
   printf ("%s", t->common.name);
 }
 
@@ -748,7 +750,7 @@ ghw_read_signal (struct ghw_handler *h, unsigned int *sigs, union ghw_type *t)
 	if (ghw_read_uleb128 (h, &sig_el) < 0)
 	  return -1;
 	*sigs = sig_el;
-	if (sig_el >= h->nbr_sigs)
+	if (((int)sig_el) >= h->nbr_sigs)
 	  abort ();
 	if (h->sigs[sig_el].type == NULL)
 	  h->sigs[sig_el].type = ghw_get_base_type (t);
@@ -1136,6 +1138,8 @@ ghw_disp_hie (struct ghw_handler *h, struct ghw_hie *top)
 int
 ghw_read_eoh (struct ghw_handler *h)
 {
+(void) h;
+
   return 0;
 }
 
@@ -1652,7 +1656,7 @@ int
 ghw_read_section (struct ghw_handler *h)
 {
   unsigned char hdr[4];
-  int i;
+  unsigned int i;
 
   if (fread (hdr, sizeof (hdr), 1, h->stream) != 1)
     {
@@ -1749,7 +1753,7 @@ ghw_disp_type (struct ghw_handler *h, union ghw_type *t)
     case ghdl_rtik_type_p32:
     case ghdl_rtik_type_p64:
       {
-	int i;
+	unsigned int i;
 
 	struct ghw_type_physical *p = &t->ph;
 	printf ("type %s is range <> units\n", p->name);
diff --git a/src/globals.c b/src/globals.c
index 2c8731e..45e1d3f 100644
--- a/src/globals.c
+++ b/src/globals.c
@@ -589,12 +589,12 @@ NULL, /* ftext_main_main_c_1 226 */
  * markerbox.c
  */
 NULL, /* window_markerbox_c_4 231 */
-{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, /* entries_markerbox_c_1 232 */
+{0}, /* entries_markerbox_c_1 232 */
 NULL, /* cleanup_markerbox_c_4 233 */
 0, /* dirty_markerbox_c_1 234 */
-{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, /* shadow_markers_markerbox_c_1 235 */
-{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, /* marker_names */
-{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, /* shadow_marker_names */
+{0}, /* shadow_markers_markerbox_c_1 235 */
+{NULL}, /* marker_names */
+{NULL}, /* shadow_marker_names */
 
 
 /*
@@ -1328,7 +1328,7 @@ NULL, /* hscroll_wavewindow_c_2 620 */
 NULL, /* wavepixmap_wavewindow_c_1 621 */
 NULL, /* wave_vslider 622 */
 NULL, /* wave_hslider */
-{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, /* named_markers 623 */
+{0}, /* named_markers 623 */
 -1, /* named_marker_lock_idx */
 0, /* made_gc_contexts_wavewindow_c_1 624 */
 0, /* which_t_color */
diff --git a/src/globals.h b/src/globals.h
index 34e4b46..0886f93 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -586,12 +586,12 @@ char use_toolbutton_interface; /* from main.c */
  * markerbox.c
  */
 GtkWidget *window_markerbox_c_4; /* from markerbox.c 248 */
-GtkWidget *entries_markerbox_c_1[26]; /* from markerbox.c 249 */
+GtkWidget *entries_markerbox_c_1[WAVE_NUM_NAMED_MARKERS]; /* from markerbox.c 249 */
 void (*cleanup_markerbox_c_4)(void); /* from markerbox.c 250 */
 int dirty_markerbox_c_1; /* from markerbox.c 251 */
-TimeType shadow_markers_markerbox_c_1[26]; /* from markerbox.c 252 */
-char *marker_names[26]; /* from markerbox.c */
-char *shadow_marker_names[26]; /* from markerbox.c */
+TimeType shadow_markers_markerbox_c_1[WAVE_NUM_NAMED_MARKERS]; /* from markerbox.c 252 */
+char *marker_names[WAVE_NUM_NAMED_MARKERS]; /* from markerbox.c */
+char *shadow_marker_names[WAVE_NUM_NAMED_MARKERS]; /* from markerbox.c */
 
 /*
  * menu.c
@@ -1281,7 +1281,7 @@ char use_roundcaps; /* from wavewindow.c 652 */
 char show_base; /* from wavewindow.c 653 */
 char wave_scrolling; /* from wavewindow.c 654 */
 int vector_padding; /* from wavewindow.c 655 */
-int in_button_press_wavewindow_c_1; /* from wavewindow.c 656 */
+unsigned int in_button_press_wavewindow_c_1; /* from wavewindow.c 656 */
 char left_justify_sigs; /* from wavewindow.c 657 */
 char zoom_pow10_snap; /* from wavewindow.c 658 */
 char zoom_dyn; /* from menu.c */
@@ -1310,7 +1310,7 @@ GtkWidget *hscroll_wavewindow_c_2; /* from wavewindow.c 679 */
 GdkDrawable *wavepixmap_wavewindow_c_1; /* from wavewindow.c 680 */
 GtkObject *wave_vslider; /* from wavewindow.c 681 */
 GtkObject *wave_hslider; /* from wavewindow.c 682 */
-TimeType named_markers[26]; /* from wavewindow.c 683 */
+TimeType named_markers[WAVE_NUM_NAMED_MARKERS]; /* from wavewindow.c 683 */
 int named_marker_lock_idx; /* from menu.c */
 char made_gc_contexts_wavewindow_c_1; /* from wavewindow.c 684 */
 int which_t_color;
diff --git a/src/help.c b/src/help.c
index ab92678..c7a5919 100644
--- a/src/help.c
+++ b/src/help.c
@@ -47,6 +47,9 @@ gdk_window_raise(GLOBALS->window_help_c_2->window);
 static void
 help_realize_text (GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 if(GLOBALS->loaded_file_type == MISSING_FILE)
 	{
 	help_text("To load a dumpfile into the viewer, either drag the icon"
@@ -120,6 +123,9 @@ return(table);
 
 static void ok_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   GLOBALS->helpbox_is_active=0;
   DEBUG(printf("OK\n"));
   gtk_widget_destroy(GLOBALS->window_help_c_2);
diff --git a/src/helpers/evcd2vcd.c b/src/helpers/evcd2vcd.c
index d79f2dd..b08a39b 100644
--- a/src/helpers/evcd2vcd.c
+++ b/src/helpers/evcd2vcd.c
@@ -37,7 +37,7 @@
 #endif
 #include <unistd.h>
 
-size_t getline_replace(char **buf, size_t *len, FILE *f)
+ssize_t getline_replace(char **buf, size_t *len, FILE *f)
 {
 char *fgets_rc;
 
@@ -141,7 +141,7 @@ FILE *f;
 char *buf = NULL;
 size_t glen;
 int line = 0;
-size_t ss;
+ssize_t ss;
 JRB node;
 char bin_fixbuff[32769];
 char bin_fixbuff2[32769];
diff --git a/src/helpers/fst/fstapi.c b/src/helpers/fst/fstapi.c
index 3318797..b0d7dfc 100644
--- a/src/helpers/fst/fstapi.c
+++ b/src/helpers/fst/fstapi.c
@@ -26,7 +26,6 @@
  * FST_DYNAMIC_ALIAS_DISABLE : dynamic aliases are not processed
  * FST_DYNAMIC_ALIAS2_DISABLE : new encoding for dynamic aliases is not generated
  * FST_WRITEX_DISABLE : fast write I/O routines are disabled
- * FST_DISABLE_DUFFS_DEVICE : only if indirect branches are incredibly bad on host arch
  *
  * possible enables:
  *
@@ -82,7 +81,7 @@
 #include <Judy.h>
 #else
 /* should be more than enough for fstWriterSetSourceStem() */
-#define FST_PATH_HASHMASK 		((1UL << 16) - 1)
+#define FST_PATH_HASHMASK               ((1UL << 16) - 1)
 typedef const void *Pcvoid_t;
 typedef void *Pvoid_t;
 typedef void **PPvoid_t;
@@ -94,7 +93,7 @@ void **JenkinsIns(void *base_i, const unsigned char *mem, uint32_t length, uint3
 
 
 #ifndef FST_WRITEX_DISABLE
-#define FST_WRITEX_MAX			(64 * 1024)
+#define FST_WRITEX_MAX                  (64 * 1024)
 #else
 #define fstWritex(a,b,c) fstFwrite((b), (c), 1, fv)
 #endif
@@ -103,22 +102,22 @@ void **JenkinsIns(void *base_i, const unsigned char *mem, uint32_t length, uint3
 /* these defines have a large impact on writer speed when a model has a */
 /* huge number of symbols.  as a default, use 128MB and increment when  */
 /* every 1M signals are defined.                                        */
-#define FST_BREAK_SIZE 			(1UL << 27)
-#define FST_BREAK_ADD_SIZE		(1UL << 22)
-#define FST_BREAK_SIZE_MAX		(1UL << 31)
-#define FST_ACTIVATE_HUGE_BREAK		(1000000)
-#define FST_ACTIVATE_HUGE_INC		(1000000)
-
-#define FST_WRITER_STR 			"fstWriter"
-#define FST_ID_NAM_SIZ 			(512)
-#define FST_ID_NAM_ATTR_SIZ		(65536+4096)
-#define FST_DOUBLE_ENDTEST 		(2.7182818284590452354)
-#define FST_HDR_SIM_VERSION_SIZE 	(128)
-#define FST_HDR_DATE_SIZE 		(119)
-#define FST_HDR_FILETYPE_SIZE		(1)
-#define FST_HDR_TIMEZERO_SIZE		(8)
-#define FST_GZIO_LEN			(32768)
-#define FST_HDR_FOURPACK_DUO_SIZE	(4*1024*1024)
+#define FST_BREAK_SIZE                  (1UL << 27)
+#define FST_BREAK_ADD_SIZE              (1UL << 22)
+#define FST_BREAK_SIZE_MAX              (1UL << 31)
+#define FST_ACTIVATE_HUGE_BREAK         (1000000)
+#define FST_ACTIVATE_HUGE_INC           (1000000)
+
+#define FST_WRITER_STR                  "fstWriter"
+#define FST_ID_NAM_SIZ                  (512)
+#define FST_ID_NAM_ATTR_SIZ             (65536+4096)
+#define FST_DOUBLE_ENDTEST              (2.7182818284590452354)
+#define FST_HDR_SIM_VERSION_SIZE        (128)
+#define FST_HDR_DATE_SIZE               (119)
+#define FST_HDR_FILETYPE_SIZE           (1)
+#define FST_HDR_TIMEZERO_SIZE           (8)
+#define FST_GZIO_LEN                    (32768)
+#define FST_HDR_FOURPACK_DUO_SIZE       (4*1024*1024)
 
 #if defined(__i386__) || defined(__x86_64__) || defined(_AIX)
 #define FST_DO_MISALIGNED_OPS
@@ -190,33 +189,33 @@ UINT uRetVal = 0;
 FILE *fh = NULL;
 
 if(nam) /* cppcheck warning fix: nam is always defined, so this is not needed */
-	{
-	dwRetVal = GetTempPath(MAX_PATH, lpTempPathBuffer);
-	if((dwRetVal > MAX_PATH) || (dwRetVal == 0))
-	        {
-	        fprintf(stderr, "GetTempPath() failed in "__FILE__" line %d, exiting.\n", __LINE__);
-		exit(255);
-	        }
-	        else
-	        {
-	        uRetVal = GetTempFileName(lpTempPathBuffer, TEXT("FSTW"), 0, szTempFileName);
-	        if (uRetVal == 0)
-	                {
-	                fprintf(stderr, "GetTempFileName() failed in "__FILE__" line %d, exiting.\n", __LINE__);
-			exit(255);
-	                }
-	                else
-	                {
-	                fname = strdup(szTempFileName);
-	                }
-	        }
-
-	if(fname)
-		{
-		*nam = fname;
-		fh = unlink_fopen(fname, "w+b");
-		}
-	}
+        {
+        dwRetVal = GetTempPath(MAX_PATH, lpTempPathBuffer);
+        if((dwRetVal > MAX_PATH) || (dwRetVal == 0))
+                {
+                fprintf(stderr, "GetTempPath() failed in "__FILE__" line %d, exiting.\n", __LINE__);
+                exit(255);
+                }
+                else
+                {
+                uRetVal = GetTempFileName(lpTempPathBuffer, TEXT("FSTW"), 0, szTempFileName);
+                if (uRetVal == 0)
+                        {
+                        fprintf(stderr, "GetTempFileName() failed in "__FILE__" line %d, exiting.\n", __LINE__);
+                        exit(255);
+                        }
+                        else
+                        {
+                        fname = strdup(szTempFileName);
+                        }
+                }
+
+        if(fname)
+                {
+                *nam = fname;
+                fh = unlink_fopen(fname, "w+b");
+                }
+        }
 
 return(fh);
 }
@@ -236,19 +235,19 @@ return(f);
 static void tmpfile_close(FILE **f, char **nam)
 {
 if(f)
-	{
-	if(*f) { fclose(*f); *f = NULL; }
-	}
+        {
+        if(*f) { fclose(*f); *f = NULL; }
+        }
 
 if(nam)
-	{
-	if(*nam)
-		{
-		unlink(*nam);
-		free(*nam);
-		*nam = NULL;
-		}
-	}
+        {
+        if(*nam)
+                {
+                unlink(*nam);
+                free(*nam);
+                *nam = NULL;
+                }
+        }
 }
 
 /*****************************************/
@@ -310,19 +309,21 @@ return(NULL);
 #if defined __CYGWIN__ || defined __MINGW32__
 #include <limits.h>
 #define fstMmap(__addr,__len,__prot,__flags,__fd,__off) fstMmap2((__len), (__fd), (__off))
-#define fstMunmap(__addr,__len)				free(__addr)
+#define fstMunmap(__addr,__len)                         free(__addr)
 
 static void *fstMmap2(size_t __len, int __fd, off_t __off)
 {
+(void)__off;
+
 unsigned char *pnt = malloc(__len);
 off_t cur_offs = lseek(__fd, 0, SEEK_CUR);
 size_t i;
 
 lseek(__fd, 0, SEEK_SET);
 for(i=0;i<__len;i+=SSIZE_MAX)
-	{
-	read(__fd, pnt + i, ((__len - i) >= SSIZE_MAX) ? SSIZE_MAX : (__len - i));
-	}
+        {
+        read(__fd, pnt + i, ((__len - i) >= SSIZE_MAX) ? SSIZE_MAX : (__len - i));
+        }
 lseek(__fd, cur_offs, SEEK_SET);
 return(pnt);
 }
@@ -334,7 +335,7 @@ return(pnt);
 #define FST_CADDR_T_CAST
 #endif
 #define fstMmap(__addr,__len,__prot,__flags,__fd,__off) (void*)mmap(FST_CADDR_T_CAST (__addr),(__len),(__prot),(__flags),(__fd),(__off))
-#define fstMunmap(__addr,__len) 			{ if(__addr) munmap(FST_CADDR_T_CAST (__addr),(__len)); }
+#define fstMunmap(__addr,__len)                         { if(__addr) munmap(FST_CADDR_T_CAST (__addr),(__len)); }
 #endif
 
 
@@ -365,10 +366,10 @@ unsigned char buf[8];
 int i;
 
 for(i=7;i>=0;i--)
-	{
-	buf[i] = v & 0xff;
-	v >>= 8;
-	}
+        {
+        buf[i] = v & 0xff;
+        v >>= 8;
+        }
 
 fstFwrite(buf, 8, 1, handle);
 return(8);
@@ -379,14 +380,14 @@ static uint64_t fstReaderUint64(FILE *f)
 {
 uint64_t val = 0;
 unsigned char buf[sizeof(uint64_t)];
-int i;
+unsigned int i;
 
 fstFread(buf, sizeof(uint64_t), 1, f);
 for(i=0;i<sizeof(uint64_t);i++)
-	{
-	val <<= 8;
-	val |= buf[i];
-	}
+        {
+        val <<= 8;
+        val |= buf[i];
+        }
 
 return(val);
 }
@@ -397,21 +398,21 @@ static uint32_t fstGetVarint32(unsigned char *mem, int *skiplen)
 unsigned char *mem_orig = mem;
 uint32_t rc = 0;
 while(*mem & 0x80)
-	{
-	mem++;
-	}
+        {
+        mem++;
+        }
 
 *skiplen = mem - mem_orig + 1;
 for(;;)
-	{
-	rc <<= 7;
-	rc |= (uint32_t)(*mem & 0x7f);
-	if(mem == mem_orig)
-		{
-		break;
-		}
-	mem--;
-	}
+        {
+        rc <<= 7;
+        rc |= (uint32_t)(*mem & 0x7f);
+        if(mem == mem_orig)
+                {
+                break;
+                }
+        mem--;
+        }
 
 return(rc);
 }
@@ -422,9 +423,9 @@ static uint32_t fstGetVarint32Length(unsigned char *mem)
 unsigned char *mem_orig = mem;
 
 while(*mem & 0x80)
-	{
-	mem++;
-	}
+        {
+        mem++;
+        }
 
 return(mem - mem_orig + 1);
 }
@@ -463,7 +464,7 @@ int i;
 
 while((nxt = nxt>>7)) /* determine len to avoid temp buffer copying to cut down on load-hit-store */
         {
-	cnt++;
+        cnt++;
         }
 
 pnt -= cnt;
@@ -472,7 +473,7 @@ cnt--;
 
 for(i=0;i<cnt;i++) /* now generate left to right as normal */
         {
-	nxt = v>>7;
+        nxt = v>>7;
         *(spnt++) = ((unsigned char)v) | 0x80;
         v = nxt;
         }
@@ -530,10 +531,10 @@ uint32_t rc = 0;
 int ch;
 
 do
-	{
-	ch = fgetc(f);
-	*(mem++) = ch;
-	} while(ch & 0x80);
+        {
+        ch = fgetc(f);
+        *(mem++) = ch;
+        } while(ch & 0x80);
 mem--;
 
 for(;;)
@@ -559,10 +560,10 @@ uint32_t rc = 0;
 int ch;
 
 do
-	{
-	ch = fgetc(f);
-	*(mem++) = ch;
-	} while(ch & 0x80);
+        {
+        ch = fgetc(f);
+        *(mem++) = ch;
+        } while(ch & 0x80);
 *skiplen = mem - buf;
 mem--;
 
@@ -589,10 +590,10 @@ uint64_t rc = 0;
 int ch;
 
 do
-	{
-	ch = fgetc(f);
-	*(mem++) = ch;
-	} while(ch & 0x80);
+        {
+        ch = fgetc(f);
+        *(mem++) = ch;
+        } while(ch & 0x80);
 mem--;
 
 for(;;)
@@ -798,13 +799,13 @@ static int fstWriterFseeko(struct fstWriterContext *xc, FILE *stream, off_t offs
 int rc = fseeko(stream, offset, whence);
 
 if(rc<0)
-	{
-	xc->fseek_failed = 1;
+        {
+        xc->fseek_failed = 1;
 #ifdef FST_DEBUG
-	fprintf(stderr, "Seek to #%"PRId64" (whence = %d) failed!\n", offset, whence);
-	perror("Why");
+        fprintf(stderr, "Seek to #%"PRId64" (whence = %d) failed!\n", offset, whence);
+        perror("Why");
 #endif
-	}
+        }
 
 return(rc);
 }
@@ -884,60 +885,60 @@ char dbuf[FST_HDR_DATE_SIZE];
 double endtest = FST_DOUBLE_ENDTEST;
 time_t walltime;
 
-#define FST_HDR_OFFS_TAG 			(0)
-fputc(FST_BL_HDR, xc->handle);			/* +0 tag */
+#define FST_HDR_OFFS_TAG                        (0)
+fputc(FST_BL_HDR, xc->handle);                  /* +0 tag */
 
-#define FST_HDR_OFFS_SECLEN 			(FST_HDR_OFFS_TAG + 1)
-fstWriterUint64(xc->handle, 329);		/* +1 section length */
+#define FST_HDR_OFFS_SECLEN                     (FST_HDR_OFFS_TAG + 1)
+fstWriterUint64(xc->handle, 329);               /* +1 section length */
 
-#define FST_HDR_OFFS_START_TIME			(FST_HDR_OFFS_SECLEN + 8)
-fstWriterUint64(xc->handle, 0);			/* +9 start time */
+#define FST_HDR_OFFS_START_TIME                 (FST_HDR_OFFS_SECLEN + 8)
+fstWriterUint64(xc->handle, 0);                 /* +9 start time */
 
-#define FST_HDR_OFFS_END_TIME			(FST_HDR_OFFS_START_TIME + 8)
-fstWriterUint64(xc->handle, 0);  		/* +17 end time */
+#define FST_HDR_OFFS_END_TIME                   (FST_HDR_OFFS_START_TIME + 8)
+fstWriterUint64(xc->handle, 0);                 /* +17 end time */
 
-#define FST_HDR_OFFS_ENDIAN_TEST		(FST_HDR_OFFS_END_TIME + 8)
-fstFwrite(&endtest, 8, 1, xc->handle); 		/* +25 endian test for reals */
+#define FST_HDR_OFFS_ENDIAN_TEST                (FST_HDR_OFFS_END_TIME + 8)
+fstFwrite(&endtest, 8, 1, xc->handle);          /* +25 endian test for reals */
 
-#define FST_HDR_OFFS_MEM_USED			(FST_HDR_OFFS_ENDIAN_TEST + 8)
+#define FST_HDR_OFFS_MEM_USED                   (FST_HDR_OFFS_ENDIAN_TEST + 8)
 fstWriterUint64(xc->handle, xc->fst_break_size);/* +33 memory used by writer */
 
-#define FST_HDR_OFFS_NUM_SCOPES			(FST_HDR_OFFS_MEM_USED + 8)
-fstWriterUint64(xc->handle, 0);			/* +41 scope creation count */
+#define FST_HDR_OFFS_NUM_SCOPES                 (FST_HDR_OFFS_MEM_USED + 8)
+fstWriterUint64(xc->handle, 0);                 /* +41 scope creation count */
 
-#define FST_HDR_OFFS_NUM_VARS			(FST_HDR_OFFS_NUM_SCOPES + 8)
-fstWriterUint64(xc->handle, 0);			/* +49 var creation count */
+#define FST_HDR_OFFS_NUM_VARS                   (FST_HDR_OFFS_NUM_SCOPES + 8)
+fstWriterUint64(xc->handle, 0);                 /* +49 var creation count */
 
-#define FST_HDR_OFFS_MAXHANDLE			(FST_HDR_OFFS_NUM_VARS + 8)
-fstWriterUint64(xc->handle, 0);			/* +57 max var idcode */
+#define FST_HDR_OFFS_MAXHANDLE                  (FST_HDR_OFFS_NUM_VARS + 8)
+fstWriterUint64(xc->handle, 0);                 /* +57 max var idcode */
 
-#define FST_HDR_OFFS_SECTION_CNT		(FST_HDR_OFFS_MAXHANDLE + 8)
-fstWriterUint64(xc->handle, 0);			/* +65 vc section count */
+#define FST_HDR_OFFS_SECTION_CNT                (FST_HDR_OFFS_MAXHANDLE + 8)
+fstWriterUint64(xc->handle, 0);                 /* +65 vc section count */
 
-#define FST_HDR_OFFS_TIMESCALE			(FST_HDR_OFFS_SECTION_CNT + 8)
-fputc((-9)&255, xc->handle);			/* +73 timescale 1ns */
+#define FST_HDR_OFFS_TIMESCALE                  (FST_HDR_OFFS_SECTION_CNT + 8)
+fputc((-9)&255, xc->handle);                    /* +73 timescale 1ns */
 
-#define FST_HDR_OFFS_SIM_VERSION		(FST_HDR_OFFS_TIMESCALE + 1)
+#define FST_HDR_OFFS_SIM_VERSION                (FST_HDR_OFFS_TIMESCALE + 1)
 memset(vbuf, 0, FST_HDR_SIM_VERSION_SIZE);
 strcpy(vbuf, FST_WRITER_STR);
 fstFwrite(vbuf, FST_HDR_SIM_VERSION_SIZE, 1, xc->handle); /* +74 version */
 
-#define FST_HDR_OFFS_DATE			(FST_HDR_OFFS_SIM_VERSION + FST_HDR_SIM_VERSION_SIZE)
+#define FST_HDR_OFFS_DATE                       (FST_HDR_OFFS_SIM_VERSION + FST_HDR_SIM_VERSION_SIZE)
 memset(dbuf, 0, FST_HDR_DATE_SIZE);
 time(&walltime);
 strcpy(dbuf, asctime(localtime(&walltime)));
-fstFwrite(dbuf, FST_HDR_DATE_SIZE, 1, xc->handle);	/* +202 date */
+fstFwrite(dbuf, FST_HDR_DATE_SIZE, 1, xc->handle);      /* +202 date */
 
 /* date size is deliberately overspecified at 119 bytes (originally 128) in order to provide backfill for new args */
 
-#define FST_HDR_OFFS_FILETYPE			(FST_HDR_OFFS_DATE + FST_HDR_DATE_SIZE)
-fputc(xc->filetype, xc->handle);		/* +321 filetype */
+#define FST_HDR_OFFS_FILETYPE                   (FST_HDR_OFFS_DATE + FST_HDR_DATE_SIZE)
+fputc(xc->filetype, xc->handle);                /* +321 filetype */
 
-#define FST_HDR_OFFS_TIMEZERO			(FST_HDR_OFFS_FILETYPE + FST_HDR_FILETYPE_SIZE)
-fstWriterUint64(xc->handle, xc->timezero);	/* +322 timezero */
+#define FST_HDR_OFFS_TIMEZERO                   (FST_HDR_OFFS_FILETYPE + FST_HDR_FILETYPE_SIZE)
+fstWriterUint64(xc->handle, xc->timezero);      /* +322 timezero */
 
-#define FST_HDR_LENGTH				(FST_HDR_OFFS_TIMEZERO + FST_HDR_TIMEZERO_SIZE)
-						/* +330 next section starts here */
+#define FST_HDR_LENGTH                          (FST_HDR_OFFS_TIMEZERO + FST_HDR_TIMEZERO_SIZE)
+                                                /* +330 next section starts here */
 fflush(xc->handle);
 }
 
@@ -965,42 +966,44 @@ fflush(xc->handle);
 
 /* do mappings */
 if(!xc->valpos_mem)
-	{
-	fflush(xc->valpos_handle);
-	xc->valpos_mem = fstMmap(NULL, xc->maxhandle * 4 * sizeof(uint32_t), PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->valpos_handle), 0);
-	}
+        {
+        fflush(xc->valpos_handle);
+        xc->valpos_mem = fstMmap(NULL, xc->maxhandle * 4 * sizeof(uint32_t), PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->valpos_handle), 0);
+        }
 if(!xc->curval_mem)
-	{
-	fflush(xc->curval_handle);
-	xc->curval_mem = fstMmap(NULL, xc->maxvalpos, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->curval_handle), 0);
-	}
+        {
+        fflush(xc->curval_handle);
+        xc->curval_mem = fstMmap(NULL, xc->maxvalpos, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->curval_handle), 0);
+        }
 }
 
 
 static void fstDestroyMmaps(struct fstWriterContext *xc, int is_closing)
 {
+(void)is_closing;
+
 fstMunmap(xc->valpos_mem, xc->maxhandle * 4 * sizeof(uint32_t));
 xc->valpos_mem = NULL;
 
 #if defined __CYGWIN__ || defined __MINGW32__
 if(xc->curval_mem)
-	{
-	if(!is_closing) /* need to flush out for next emulated mmap() read */
-		{
-		unsigned char *pnt = xc->curval_mem;
-		int __fd = fileno(xc->curval_handle);
-		off_t cur_offs = lseek(__fd, 0, SEEK_CUR);
-		size_t i;
-		size_t __len = xc->maxvalpos;
-
-		lseek(__fd, 0, SEEK_SET);
-		for(i=0;i<__len;i+=SSIZE_MAX)
-		        {
-		        write(__fd, pnt + i, ((__len - i) >= SSIZE_MAX) ? SSIZE_MAX : (__len - i));
-		        }
-		lseek(__fd, cur_offs, SEEK_SET);
-		}
-	}
+        {
+        if(!is_closing) /* need to flush out for next emulated mmap() read */
+                {
+                unsigned char *pnt = xc->curval_mem;
+                int __fd = fileno(xc->curval_handle);
+                off_t cur_offs = lseek(__fd, 0, SEEK_CUR);
+                size_t i;
+                size_t __len = xc->maxvalpos;
+
+                lseek(__fd, 0, SEEK_SET);
+                for(i=0;i<__len;i+=SSIZE_MAX)
+                        {
+                        write(__fd, pnt + i, ((__len - i) >= SSIZE_MAX) ? SSIZE_MAX : (__len - i));
+                        }
+                lseek(__fd, cur_offs, SEEK_SET);
+                }
+        }
 #endif
 
 fstMunmap(xc->curval_mem, xc->maxvalpos);
@@ -1021,42 +1024,42 @@ int was_set = 0;
 FILE *f = fopen("/proc/meminfo", "rb");
 
 if(f)
-	{
-	char buf[257];
-	char *s;
-	while(!feof(f))
-		{
-		buf[0] = 0;
-		s = fgets(buf, 256, f);
-		if(s && *s)
-			{
-			if(!strncmp(s, "MemTotal:", 9))
-				{
-				size_t v = atol(s+10);
-				v *= 1024; /* convert to bytes */
-				v /= 8; /* chop down to 1/8 physical memory */
-				if(v > FST_BREAK_SIZE)
-					{
-					if(v > FST_BREAK_SIZE_MAX)
-						{
-						v = FST_BREAK_SIZE_MAX;
-						}
-
-					xc->fst_huge_break_size = v;
-					was_set = 1;
-					break;
-					}
-				}
-			}
-		}
-
-	fclose(f);
-	}
+        {
+        char buf[257];
+        char *s;
+        while(!feof(f))
+                {
+                buf[0] = 0;
+                s = fgets(buf, 256, f);
+                if(s && *s)
+                        {
+                        if(!strncmp(s, "MemTotal:", 9))
+                                {
+                                size_t v = atol(s+10);
+                                v *= 1024; /* convert to bytes */
+                                v /= 8; /* chop down to 1/8 physical memory */
+                                if(v > FST_BREAK_SIZE)
+                                        {
+                                        if(v > FST_BREAK_SIZE_MAX)
+                                                {
+                                                v = FST_BREAK_SIZE_MAX;
+                                                }
+
+                                        xc->fst_huge_break_size = v;
+                                        was_set = 1;
+                                        break;
+                                        }
+                                }
+                        }
+                }
+
+        fclose(f);
+        }
 
 if(!was_set)
-	{
-	xc->fst_huge_break_size = FST_BREAK_SIZE;
-	}
+        {
+        xc->fst_huge_break_size = FST_BREAK_SIZE;
+        }
 #else
 int mib[2];
 int64_t v;
@@ -1066,25 +1069,25 @@ mib[0] = CTL_HW;
 mib[1] = HW_MEMSIZE;
 length = sizeof(int64_t);
 if(!sysctl(mib, 2, &v, &length, NULL, 0))
-	{
-	v /= 8;
+        {
+        v /= 8;
 
-	if(v > FST_BREAK_SIZE)
-		{
-		if(v > FST_BREAK_SIZE_MAX)
-			{
-			v = FST_BREAK_SIZE_MAX;
-			}
+        if(v > (int64_t)FST_BREAK_SIZE)
+                {
+                if(v > (int64_t)FST_BREAK_SIZE_MAX)
+                        {
+                        v = FST_BREAK_SIZE_MAX;
+                        }
 
-		xc->fst_huge_break_size = v;
-		was_set = 1;
-		}
-	}
+                xc->fst_huge_break_size = v;
+                was_set = 1;
+                }
+        }
 
 if(!was_set)
-	{
-	xc->fst_huge_break_size = FST_BREAK_SIZE;
-	}
+        {
+        xc->fst_huge_break_size = FST_BREAK_SIZE;
+        }
 #endif
 #else
 xc->fst_huge_break_size = FST_BREAK_SIZE;
@@ -1107,55 +1110,55 @@ xc->compress_hier = use_compressed_hier;
 fstDetermineBreakSize(xc);
 
 if((!nam)||
-	(!(xc->handle=unlink_fopen(nam, "w+b"))))
+        (!(xc->handle=unlink_fopen(nam, "w+b"))))
         {
         free(xc);
         xc=NULL;
         }
         else
         {
-	int flen = strlen(nam);
-	char *hf = calloc(1, flen + 6);
+        int flen = strlen(nam);
+        char *hf = calloc(1, flen + 6);
 
-	memcpy(hf, nam, flen);
-	strcpy(hf + flen, ".hier");
-	xc->hier_handle = unlink_fopen(hf, "w+b");
+        memcpy(hf, nam, flen);
+        strcpy(hf + flen, ".hier");
+        xc->hier_handle = unlink_fopen(hf, "w+b");
 
-	xc->geom_handle = tmpfile_open(&xc->geom_handle_nam);		/* .geom */
-	xc->valpos_handle = tmpfile_open(&xc->valpos_handle_nam);	/* .offs */
-	xc->curval_handle = tmpfile_open(&xc->curval_handle_nam);	/* .bits */
-	xc->tchn_handle = tmpfile_open(&xc->tchn_handle_nam);		/* .tchn */
-	xc->vchg_alloc_siz = xc->fst_break_size + xc->fst_break_add_size;
-	xc->vchg_mem = malloc(xc->vchg_alloc_siz);
+        xc->geom_handle = tmpfile_open(&xc->geom_handle_nam);           /* .geom */
+        xc->valpos_handle = tmpfile_open(&xc->valpos_handle_nam);       /* .offs */
+        xc->curval_handle = tmpfile_open(&xc->curval_handle_nam);       /* .bits */
+        xc->tchn_handle = tmpfile_open(&xc->tchn_handle_nam);           /* .tchn */
+        xc->vchg_alloc_siz = xc->fst_break_size + xc->fst_break_add_size;
+        xc->vchg_mem = malloc(xc->vchg_alloc_siz);
 
-	if(xc->hier_handle && xc->geom_handle && xc->valpos_handle && xc->curval_handle && xc->vchg_mem && xc->tchn_handle)
-		{
-	        xc->filename = strdup(nam);
-		xc->is_initial_time = 1;
+        if(xc->hier_handle && xc->geom_handle && xc->valpos_handle && xc->curval_handle && xc->vchg_mem && xc->tchn_handle)
+                {
+                xc->filename = strdup(nam);
+                xc->is_initial_time = 1;
 
-		fstWriterEmitHdrBytes(xc);
-		xc->nan = strtod("NaN", NULL);
+                fstWriterEmitHdrBytes(xc);
+                xc->nan = strtod("NaN", NULL);
 #ifdef FST_WRITER_PARALLEL
-		pthread_mutex_init(&xc->mutex, NULL);
-		pthread_attr_init(&xc->thread_attr);
-		pthread_attr_setdetachstate(&xc->thread_attr, PTHREAD_CREATE_DETACHED);
+                pthread_mutex_init(&xc->mutex, NULL);
+                pthread_attr_init(&xc->thread_attr);
+                pthread_attr_setdetachstate(&xc->thread_attr, PTHREAD_CREATE_DETACHED);
 #endif
-		}
-		else
-		{
-		fclose(xc->handle);
-		if(xc->hier_handle) { fclose(xc->hier_handle); unlink(hf); }
-		tmpfile_close(&xc->geom_handle, &xc->geom_handle_nam);
-		tmpfile_close(&xc->valpos_handle, &xc->valpos_handle_nam);
-		tmpfile_close(&xc->curval_handle, &xc->curval_handle_nam);
-		tmpfile_close(&xc->tchn_handle, &xc->tchn_handle_nam);
-		free(xc->vchg_mem);
-	        free(xc);
-	        xc=NULL;
-		}
-
-	free(hf);
-	}
+                }
+                else
+                {
+                fclose(xc->handle);
+                if(xc->hier_handle) { fclose(xc->hier_handle); unlink(hf); }
+                tmpfile_close(&xc->geom_handle, &xc->geom_handle_nam);
+                tmpfile_close(&xc->valpos_handle, &xc->valpos_handle_nam);
+                tmpfile_close(&xc->curval_handle, &xc->curval_handle_nam);
+                tmpfile_close(&xc->tchn_handle, &xc->tchn_handle_nam);
+                free(xc->vchg_mem);
+                free(xc);
+                xc=NULL;
+                }
+
+        free(hf);
+        }
 
 return(xc);
 }
@@ -1169,48 +1172,48 @@ static void fstWriterEmitSectionHeader(void *ctx)
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 
 if(xc)
-	{
-	unsigned long destlen;
-	unsigned char *dmem;
+        {
+        unsigned long destlen;
+        unsigned char *dmem;
         int rc;
 
-	destlen = xc->maxvalpos;
-	dmem = malloc(compressBound(destlen));
+        destlen = xc->maxvalpos;
+        dmem = malloc(compressBound(destlen));
         rc = compress2(dmem, &destlen, xc->curval_mem, xc->maxvalpos, 4); /* was 9...which caused performance drag on traces with many signals */
 
-	fputc(FST_BL_SKIP, xc->handle);			/* temporarily tag the section, use FST_BL_VCDATA on finalize */
-	xc->section_start = ftello(xc->handle);
+        fputc(FST_BL_SKIP, xc->handle);                 /* temporarily tag the section, use FST_BL_VCDATA on finalize */
+        xc->section_start = ftello(xc->handle);
 #ifdef FST_WRITER_PARALLEL
-	if(xc->xc_parent) xc->xc_parent->section_start = xc->section_start;
+        if(xc->xc_parent) xc->xc_parent->section_start = xc->section_start;
 #endif
-	xc->section_header_only = 1;			/* indicates truncate might be needed */
-	fstWriterUint64(xc->handle, 0); 		/* placeholder = section length */
-	fstWriterUint64(xc->handle, xc->is_initial_time ? xc->firsttime : xc->curtime); 	/* begin time of section */
-	fstWriterUint64(xc->handle, xc->curtime); 	/* end time of section (placeholder) */
-	fstWriterUint64(xc->handle, 0);			/* placeholder = amount of buffer memory required in reader for full vc traversal */
-	fstWriterVarint(xc->handle, xc->maxvalpos);	/* maxvalpos = length of uncompressed data */
-
-	if((rc == Z_OK) && (destlen < xc->maxvalpos))
-		{
-		fstWriterVarint(xc->handle, destlen);	/* length of compressed data */
-		}
-		else
-		{
-		fstWriterVarint(xc->handle, xc->maxvalpos); /* length of (unable to be) compressed data */
-		}
-	fstWriterVarint(xc->handle, xc->maxhandle);	/* max handle associated with this data (in case of dynamic facility adds) */
-
-	if((rc == Z_OK) && (destlen < xc->maxvalpos))
-		{
-		fstFwrite(dmem, destlen, 1, xc->handle);
-		}
-		else /* comparison between compressed / decompressed len tells if compressed */
-		{
-		fstFwrite(xc->curval_mem, xc->maxvalpos, 1, xc->handle);
-		}
-
-	free(dmem);
-	}
+        xc->section_header_only = 1;                    /* indicates truncate might be needed */
+        fstWriterUint64(xc->handle, 0);                 /* placeholder = section length */
+        fstWriterUint64(xc->handle, xc->is_initial_time ? xc->firsttime : xc->curtime);         /* begin time of section */
+        fstWriterUint64(xc->handle, xc->curtime);       /* end time of section (placeholder) */
+        fstWriterUint64(xc->handle, 0);                 /* placeholder = amount of buffer memory required in reader for full vc traversal */
+        fstWriterVarint(xc->handle, xc->maxvalpos);     /* maxvalpos = length of uncompressed data */
+
+        if((rc == Z_OK) && (destlen < xc->maxvalpos))
+                {
+                fstWriterVarint(xc->handle, destlen);   /* length of compressed data */
+                }
+                else
+                {
+                fstWriterVarint(xc->handle, xc->maxvalpos); /* length of (unable to be) compressed data */
+                }
+        fstWriterVarint(xc->handle, xc->maxhandle);     /* max handle associated with this data (in case of dynamic facility adds) */
+
+        if((rc == Z_OK) && (destlen < xc->maxvalpos))
+                {
+                fstFwrite(dmem, destlen, 1, xc->handle);
+                }
+                else /* comparison between compressed / decompressed len tells if compressed */
+                {
+                fstFwrite(xc->curval_mem, xc->maxvalpos, 1, xc->handle);
+                }
+
+        free(dmem);
+        }
 }
 
 
@@ -1227,7 +1230,7 @@ static void fstWriterFlushContextPrivate(void *ctx)
 #ifdef FST_DEBUG
 int cnt = 0;
 #endif
-int i;
+unsigned int i;
 unsigned char *vchg_mem;
 FILE *f;
 off_t fpos, indxpos, endpos;
@@ -1269,142 +1272,127 @@ scratchpad = malloc(xc->vchg_siz);
 vchg_mem = xc->vchg_mem;
 
 f = xc->handle;
-fstWriterVarint(f, xc->maxhandle);	/* emit current number of handles */
+fstWriterVarint(f, xc->maxhandle);      /* emit current number of handles */
 fputc(xc->fourpack ? '4' : (xc->fastpack ? 'F' : 'Z'), f);
 fpos = 1;
 
-packmemlen = 1024;			/* maintain a running "longest" allocation to */
-packmem = malloc(packmemlen);		/* prevent continual malloc...free every loop iter */
+packmemlen = 1024;                      /* maintain a running "longest" allocation to */
+packmem = malloc(packmemlen);           /* prevent continual malloc...free every loop iter */
 
 for(i=0;i<xc->maxhandle;i++)
-	{
-	vm4ip = &(xc->valpos_mem[4*i]);
-
-	if(vm4ip[2])
-		{
-		uint32_t offs = vm4ip[2];
-		uint32_t next_offs;
-		int wrlen;
-
-		vm4ip[2] = fpos;
-
-		scratchpnt = scratchpad + xc->vchg_siz;		/* build this buffer backwards */
-		if(vm4ip[1] <= 1)
-			{
-			if(vm4ip[1] == 1)
-				{
-				wrlen = fstGetVarint32Length(vchg_mem + offs + 4); /* used to advance and determine wrlen */
+        {
+        vm4ip = &(xc->valpos_mem[4*i]);
+
+        if(vm4ip[2])
+                {
+                uint32_t offs = vm4ip[2];
+                uint32_t next_offs;
+                unsigned int wrlen;
+
+                vm4ip[2] = fpos;
+
+                scratchpnt = scratchpad + xc->vchg_siz;         /* build this buffer backwards */
+                if(vm4ip[1] <= 1)
+                        {
+                        if(vm4ip[1] == 1)
+                                {
+                                wrlen = fstGetVarint32Length(vchg_mem + offs + 4); /* used to advance and determine wrlen */
 #ifndef FST_REMOVE_DUPLICATE_VC
-				xc->curval_mem[vm4ip[0]] = vchg_mem[offs + 4 + wrlen]; /* checkpoint variable */
+                                xc->curval_mem[vm4ip[0]] = vchg_mem[offs + 4 + wrlen]; /* checkpoint variable */
 #endif
-	                        while(offs)
-	                                {
-	                                unsigned char val;
-	                                uint32_t time_delta, rcv;
-	                                next_offs = fstGetUint32(vchg_mem + offs);
-	                                offs += 4;
-
-	                                time_delta = fstGetVarint32(vchg_mem + offs, &wrlen);
-	                                val = vchg_mem[offs+wrlen];
-					offs = next_offs;
-
-	                                switch(val)
-	                                        {
-	                                        case '0':
-	                                        case '1':               rcv = ((val&1)<<1) | (time_delta<<2);
-	                                                                break; /* pack more delta bits in for 0/1 vchs */
-
-	                                        case 'x': case 'X':     rcv = FST_RCV_X | (time_delta<<4); break;
-	                                        case 'z': case 'Z':     rcv = FST_RCV_Z | (time_delta<<4); break;
-	                                        case 'h': case 'H':     rcv = FST_RCV_H | (time_delta<<4); break;
-	                                        case 'u': case 'U':     rcv = FST_RCV_U | (time_delta<<4); break;
-	                                        case 'w': case 'W':     rcv = FST_RCV_W | (time_delta<<4); break;
-	                                        case 'l': case 'L':     rcv = FST_RCV_L | (time_delta<<4); break;
-	                                        default:                rcv = FST_RCV_D | (time_delta<<4); break;
-	                                        }
-
-	                                scratchpnt = fstCopyVarint32ToLeft(scratchpnt, rcv);
-					}
-				}
-				else
-				{
-				/* variable length */
-				/* fstGetUint32 (next_offs) + fstGetVarint32 (time_delta) + fstGetVarint32 (len) + payload */
-				unsigned char *pnt;
-				uint32_t record_len;
-				uint32_t time_delta;
-
-				while(offs)
-					{
-					next_offs = fstGetUint32(vchg_mem + offs);
-					offs += 4;
-					pnt = vchg_mem + offs;
-					offs = next_offs;
-					time_delta = fstGetVarint32(pnt, &wrlen);
-					pnt += wrlen;
-					record_len = fstGetVarint32(pnt, &wrlen);
-					pnt += wrlen;
-
-					scratchpnt -= record_len;
-					memcpy(scratchpnt, pnt, record_len);
-
-					scratchpnt = fstCopyVarint32ToLeft(scratchpnt, record_len);
-					scratchpnt = fstCopyVarint32ToLeft(scratchpnt, (time_delta << 1)); /* reserve | 1 case for future expansion */
-					}
-				}
-			}
-			else
-			{
-			wrlen = fstGetVarint32Length(vchg_mem + offs + 4); /* used to advance and determine wrlen */
+                                while(offs)
+                                        {
+                                        unsigned char val;
+                                        uint32_t time_delta, rcv;
+                                        next_offs = fstGetUint32(vchg_mem + offs);
+                                        offs += 4;
+
+                                        time_delta = fstGetVarint32(vchg_mem + offs, (int *)&wrlen);
+                                        val = vchg_mem[offs+wrlen];
+                                        offs = next_offs;
+
+                                        switch(val)
+                                                {
+                                                case '0':
+                                                case '1':               rcv = ((val&1)<<1) | (time_delta<<2);
+                                                                        break; /* pack more delta bits in for 0/1 vchs */
+
+                                                case 'x': case 'X':     rcv = FST_RCV_X | (time_delta<<4); break;
+                                                case 'z': case 'Z':     rcv = FST_RCV_Z | (time_delta<<4); break;
+                                                case 'h': case 'H':     rcv = FST_RCV_H | (time_delta<<4); break;
+                                                case 'u': case 'U':     rcv = FST_RCV_U | (time_delta<<4); break;
+                                                case 'w': case 'W':     rcv = FST_RCV_W | (time_delta<<4); break;
+                                                case 'l': case 'L':     rcv = FST_RCV_L | (time_delta<<4); break;
+                                                default:                rcv = FST_RCV_D | (time_delta<<4); break;
+                                                }
+
+                                        scratchpnt = fstCopyVarint32ToLeft(scratchpnt, rcv);
+                                        }
+                                }
+                                else
+                                {
+                                /* variable length */
+                                /* fstGetUint32 (next_offs) + fstGetVarint32 (time_delta) + fstGetVarint32 (len) + payload */
+                                unsigned char *pnt;
+                                uint32_t record_len;
+                                uint32_t time_delta;
+
+                                while(offs)
+                                        {
+                                        next_offs = fstGetUint32(vchg_mem + offs);
+                                        offs += 4;
+                                        pnt = vchg_mem + offs;
+                                        offs = next_offs;
+                                        time_delta = fstGetVarint32(pnt, (int *)&wrlen);
+                                        pnt += wrlen;
+                                        record_len = fstGetVarint32(pnt, (int *)&wrlen);
+                                        pnt += wrlen;
+
+                                        scratchpnt -= record_len;
+                                        memcpy(scratchpnt, pnt, record_len);
+
+                                        scratchpnt = fstCopyVarint32ToLeft(scratchpnt, record_len);
+                                        scratchpnt = fstCopyVarint32ToLeft(scratchpnt, (time_delta << 1)); /* reserve | 1 case for future expansion */
+                                        }
+                                }
+                        }
+                        else
+                        {
+                        wrlen = fstGetVarint32Length(vchg_mem + offs + 4); /* used to advance and determine wrlen */
 #ifndef FST_REMOVE_DUPLICATE_VC
-			memcpy(xc->curval_mem + vm4ip[0], vchg_mem + offs + 4 + wrlen, vm4ip[1]); /* checkpoint variable */
+                        memcpy(xc->curval_mem + vm4ip[0], vchg_mem + offs + 4 + wrlen, vm4ip[1]); /* checkpoint variable */
 #endif
-			while(offs)
-				{
-				int idx;
-				char is_binary = 1;
-				unsigned char *pnt;
-				uint32_t time_delta;
-
-				next_offs = fstGetUint32(vchg_mem + offs);
-				offs += 4;
-
-				time_delta = fstGetVarint32(vchg_mem + offs, &wrlen);
-
-				pnt = vchg_mem+offs+wrlen;
-				offs = next_offs;
-
-				for(idx=0;idx<vm4ip[1];idx++)
-					{
-					if((pnt[idx] == '0') || (pnt[idx] == '1'))
-						{
-						continue;
-						}
-						else
-						{
-						is_binary = 0;
-						break;
-						}
-					}
-
-				if(is_binary)
-					{
-					unsigned char acc = 0;
-#ifdef FST_DISABLE_DUFFS_DEVICE
-					/* old algorithm */
-					int shift = 7 - ((vm4ip[1]-1) & 7);
-					for(idx=vm4ip[1]-1;idx>=0;idx--)
-						{
-						acc |= (pnt[idx] & 1) << shift;
-						shift++;
-						if(shift == 8)
-							{
-							*(--scratchpnt) = acc;
-							shift = 0;
-							acc = 0;
-							}
-						}
-#else
+                        while(offs)
+                                {
+                                unsigned int idx;
+                                char is_binary = 1;
+                                unsigned char *pnt;
+                                uint32_t time_delta;
+
+                                next_offs = fstGetUint32(vchg_mem + offs);
+                                offs += 4;
+
+                                time_delta = fstGetVarint32(vchg_mem + offs, (int *)&wrlen);
+
+                                pnt = vchg_mem+offs+wrlen;
+                                offs = next_offs;
+
+                                for(idx=0;idx<vm4ip[1];idx++)
+                                        {
+                                        if((pnt[idx] == '0') || (pnt[idx] == '1'))
+                                                {
+                                                continue;
+                                                }
+                                                else
+                                                {
+                                                is_binary = 0;
+                                                break;
+                                                }
+                                        }
+
+                                if(is_binary)
+                                        {
+                                        unsigned char acc = 0;
                                         /* new algorithm */
                                         idx = ((vm4ip[1]+7) & ~7);
                                         switch(vm4ip[1] & 7)
@@ -1421,165 +1409,164 @@ for(i=0;i<xc->maxhandle;i++)
                                                                 idx -= 8;
                                                         } while(idx);
                                                 }
-#endif
 
-	                                scratchpnt = fstCopyVarint32ToLeft(scratchpnt, (time_delta << 1));
-					}
-					else
-					{
-					scratchpnt -= vm4ip[1];
-					memcpy(scratchpnt, pnt, vm4ip[1]);
-
-	                                scratchpnt = fstCopyVarint32ToLeft(scratchpnt, (time_delta << 1) | 1);
-					}
-				}
-			}
-
-		wrlen = scratchpad + xc->vchg_siz - scratchpnt;
-		unc_memreq += wrlen;
-		if(wrlen > 32)
-			{
-			unsigned long destlen = wrlen;
-			unsigned char *dmem;
-		        int rc;
-
-			if(!xc->fastpack)
-				{
-				if(wrlen <= packmemlen)
-					{
-					dmem = packmem;
-					}
-					else
-					{
-					free(packmem);
-					dmem = packmem = malloc(compressBound(packmemlen = wrlen));
-					}
-
-		        	rc = compress2(dmem, &destlen, scratchpnt, wrlen, 4);
-				if(rc == Z_OK)
-					{
+                                        scratchpnt = fstCopyVarint32ToLeft(scratchpnt, (time_delta << 1));
+                                        }
+                                        else
+                                        {
+                                        scratchpnt -= vm4ip[1];
+                                        memcpy(scratchpnt, pnt, vm4ip[1]);
+
+                                        scratchpnt = fstCopyVarint32ToLeft(scratchpnt, (time_delta << 1) | 1);
+                                        }
+                                }
+                        }
+
+                wrlen = scratchpad + xc->vchg_siz - scratchpnt;
+                unc_memreq += wrlen;
+                if(wrlen > 32)
+                        {
+                        unsigned long destlen = wrlen;
+                        unsigned char *dmem;
+                        unsigned int rc;
+
+                        if(!xc->fastpack)
+                                {
+                                if(wrlen <= packmemlen)
+                                        {
+                                        dmem = packmem;
+                                        }
+                                        else
+                                        {
+                                        free(packmem);
+                                        dmem = packmem = malloc(compressBound(packmemlen = wrlen));
+                                        }
+
+                                rc = compress2(dmem, &destlen, scratchpnt, wrlen, 4);
+                                if(rc == Z_OK)
+                                        {
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
-					PPvoid_t pv = JudyHSIns(&PJHSArray, dmem, destlen, NULL);
-					if(*pv)
-						{
-						uint32_t pvi = (long)(*pv);
-						vm4ip[2] = -pvi;
-						}
-						else
-						{
-						*pv = (void *)(long)(i+1);
+                                        PPvoid_t pv = JudyHSIns(&PJHSArray, dmem, destlen, NULL);
+                                        if(*pv)
+                                                {
+                                                uint32_t pvi = (long)(*pv);
+                                                vm4ip[2] = -pvi;
+                                                }
+                                                else
+                                                {
+                                                *pv = (void *)(long)(i+1);
 #endif
-						fpos += fstWriterVarint(f, wrlen);
-						fpos += destlen;
-						fstFwrite(dmem, destlen, 1, f);
+                                                fpos += fstWriterVarint(f, wrlen);
+                                                fpos += destlen;
+                                                fstFwrite(dmem, destlen, 1, f);
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
-						}
+                                                }
 #endif
-					}
-					else
-					{
+                                        }
+                                        else
+                                        {
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
-					PPvoid_t pv = JudyHSIns(&PJHSArray, scratchpnt, wrlen, NULL);
-					if(*pv)
-						{
-						uint32_t pvi = (long)(*pv);
-						vm4ip[2] = -pvi;
-						}
-						else
-						{
-						*pv = (void *)(long)(i+1);
+                                        PPvoid_t pv = JudyHSIns(&PJHSArray, scratchpnt, wrlen, NULL);
+                                        if(*pv)
+                                                {
+                                                uint32_t pvi = (long)(*pv);
+                                                vm4ip[2] = -pvi;
+                                                }
+                                                else
+                                                {
+                                                *pv = (void *)(long)(i+1);
 #endif
-						fpos += fstWriterVarint(f, 0);
-						fpos += wrlen;
-						fstFwrite(scratchpnt, wrlen, 1, f);
+                                                fpos += fstWriterVarint(f, 0);
+                                                fpos += wrlen;
+                                                fstFwrite(scratchpnt, wrlen, 1, f);
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
-						}
+                                                }
 #endif
-					}
-				}
-				else
-				{
-				/* this is extremely conservative: fastlz needs +5% for worst case, lz4 needs siz+(siz/255)+16 */
-				if(((wrlen * 2) + 2) <= packmemlen)
-					{
-					dmem = packmem;
-					}
-					else
-					{
-					free(packmem);
-					dmem = packmem = malloc(packmemlen = (wrlen * 2) + 2);
-					}
-
-				rc = (xc->fourpack) ? LZ4_compress((char *)scratchpnt, (char *)dmem, wrlen) : fastlz_compress(scratchpnt, wrlen, dmem);
-				if(rc < destlen)
-        				{
+                                        }
+                                }
+                                else
+                                {
+                                /* this is extremely conservative: fastlz needs +5% for worst case, lz4 needs siz+(siz/255)+16 */
+                                if(((wrlen * 2) + 2) <= packmemlen)
+                                        {
+                                        dmem = packmem;
+                                        }
+                                        else
+                                        {
+                                        free(packmem);
+                                        dmem = packmem = malloc(packmemlen = (wrlen * 2) + 2);
+                                        }
+
+                                rc = (xc->fourpack) ? LZ4_compress((char *)scratchpnt, (char *)dmem, wrlen) : fastlz_compress(scratchpnt, wrlen, dmem);
+                                if(rc < destlen)
+                                        {
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
-					PPvoid_t pv = JudyHSIns(&PJHSArray, dmem, rc, NULL);
-					if(*pv)
-						{
-						uint32_t pvi = (long)(*pv);
-						vm4ip[2] = -pvi;
-						}
-						else
-						{
-						*pv = (void *)(long)(i+1);
+                                        PPvoid_t pv = JudyHSIns(&PJHSArray, dmem, rc, NULL);
+                                        if(*pv)
+                                                {
+                                                uint32_t pvi = (long)(*pv);
+                                                vm4ip[2] = -pvi;
+                                                }
+                                                else
+                                                {
+                                                *pv = (void *)(long)(i+1);
 #endif
-						fpos += fstWriterVarint(f, wrlen);
-						fpos += rc;
-						fstFwrite(dmem, rc, 1, f);
+                                                fpos += fstWriterVarint(f, wrlen);
+                                                fpos += rc;
+                                                fstFwrite(dmem, rc, 1, f);
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
-						}
+                                                }
 #endif
-        				}
-        				else
-        				{
+                                        }
+                                        else
+                                        {
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
-					PPvoid_t pv = JudyHSIns(&PJHSArray, scratchpnt, wrlen, NULL);
-					if(*pv)
-						{
-						uint32_t pvi = (long)(*pv);
-						vm4ip[2] = -pvi;
-						}
-						else
-						{
-						*pv = (void *)(long)(i+1);
+                                        PPvoid_t pv = JudyHSIns(&PJHSArray, scratchpnt, wrlen, NULL);
+                                        if(*pv)
+                                                {
+                                                uint32_t pvi = (long)(*pv);
+                                                vm4ip[2] = -pvi;
+                                                }
+                                                else
+                                                {
+                                                *pv = (void *)(long)(i+1);
 #endif
-						fpos += fstWriterVarint(f, 0);
-						fpos += wrlen;
-						fstFwrite(scratchpnt, wrlen, 1, f);
+                                                fpos += fstWriterVarint(f, 0);
+                                                fpos += wrlen;
+                                                fstFwrite(scratchpnt, wrlen, 1, f);
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
-						}
+                                                }
 #endif
-        				}
-				}
-			}
-			else
-			{
+                                        }
+                                }
+                        }
+                        else
+                        {
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
-			PPvoid_t pv = JudyHSIns(&PJHSArray, scratchpnt, wrlen, NULL);
-			if(*pv)
-				{
-				uint32_t pvi = (long)(*pv);
-				vm4ip[2] = -pvi;
-				}
-				else
-				{
-				*pv = (void *)(long)(i+1);
+                        PPvoid_t pv = JudyHSIns(&PJHSArray, scratchpnt, wrlen, NULL);
+                        if(*pv)
+                                {
+                                uint32_t pvi = (long)(*pv);
+                                vm4ip[2] = -pvi;
+                                }
+                                else
+                                {
+                                *pv = (void *)(long)(i+1);
 #endif
-				fpos += fstWriterVarint(f, 0);
-				fpos += wrlen;
-				fstFwrite(scratchpnt, wrlen, 1, f);
+                                fpos += fstWriterVarint(f, 0);
+                                fpos += wrlen;
+                                fstFwrite(scratchpnt, wrlen, 1, f);
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
-				}
+                                }
 #endif
-			}
+                        }
 
-		/* vm4ip[3] = 0; ...redundant with clearing below */
+                /* vm4ip[3] = 0; ...redundant with clearing below */
 #ifdef FST_DEBUG
-		cnt++;
+                cnt++;
 #endif
-		}
-	}
+                }
+        }
 
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
 JudyHSFreeArray(&PJHSArray, NULL);
@@ -1595,85 +1582,85 @@ xc->secnum++;
 
 #ifndef FST_DYNAMIC_ALIAS2_DISABLE
 if(1)
-	{
-	uint32_t prev_alias = 0;
-
-	for(i=0;i<xc->maxhandle;i++)
-		{
-		vm4ip = &(xc->valpos_mem[4*i]);
-
-		if(vm4ip[2])
-			{
-			if(zerocnt)
-				{
-				fpos += fstWriterVarint(f, (zerocnt << 1));
-				zerocnt = 0;
-				}
-
-			if(vm4ip[2] & 0x80000000)
-				{
-				if(vm4ip[2] != prev_alias)
-					{
-					fpos += fstWriterSVarint(f, (((int64_t)((int32_t)(prev_alias = vm4ip[2]))) << 1) | 1);
-					}
-					else
-					{
-					fpos += fstWriterSVarint(f, (0 << 1) | 1);
-					}
-				}
-				else
-				{
-				fpos += fstWriterSVarint(f, ((vm4ip[2] - prevpos) << 1) | 1);
-				prevpos = vm4ip[2];
-				}
-			vm4ip[2] = 0;
-			vm4ip[3] = 0; /* clear out tchn idx */
-			}
-			else
-			{
-			zerocnt++;
-			}
-		}
-	}
-	else
+        {
+        uint32_t prev_alias = 0;
+
+        for(i=0;i<xc->maxhandle;i++)
+                {
+                vm4ip = &(xc->valpos_mem[4*i]);
+
+                if(vm4ip[2])
+                        {
+                        if(zerocnt)
+                                {
+                                fpos += fstWriterVarint(f, (zerocnt << 1));
+                                zerocnt = 0;
+                                }
+
+                        if(vm4ip[2] & 0x80000000)
+                                {
+                                if(vm4ip[2] != prev_alias)
+                                        {
+                                        fpos += fstWriterSVarint(f, (((int64_t)((int32_t)(prev_alias = vm4ip[2]))) << 1) | 1);
+                                        }
+                                        else
+                                        {
+                                        fpos += fstWriterSVarint(f, (0 << 1) | 1);
+                                        }
+                                }
+                                else
+                                {
+                                fpos += fstWriterSVarint(f, ((vm4ip[2] - prevpos) << 1) | 1);
+                                prevpos = vm4ip[2];
+                                }
+                        vm4ip[2] = 0;
+                        vm4ip[3] = 0; /* clear out tchn idx */
+                        }
+                        else
+                        {
+                        zerocnt++;
+                        }
+                }
+        }
+        else
 #endif
-	{
-	for(i=0;i<xc->maxhandle;i++)
-		{
-		vm4ip = &(xc->valpos_mem[4*i]);
-
-		if(vm4ip[2])
-			{
-			if(zerocnt)
-				{
-				fpos += fstWriterVarint(f, (zerocnt << 1));
-				zerocnt = 0;
-				}
-
-			if(vm4ip[2] & 0x80000000)
-				{
-				fpos += fstWriterVarint(f, 0); /* signal, note that using a *signed* varint would be more efficient than this byte escape! */
-				fpos += fstWriterVarint(f, (-(int32_t)vm4ip[2]));
-				}
-				else
-				{
-				fpos += fstWriterVarint(f, ((vm4ip[2] - prevpos) << 1) | 1);
-				prevpos = vm4ip[2];
-				}
-			vm4ip[2] = 0;
-			vm4ip[3] = 0; /* clear out tchn idx */
-			}
-			else
-			{
-			zerocnt++;
-			}
-		}
-	}
+        {
+        for(i=0;i<xc->maxhandle;i++)
+                {
+                vm4ip = &(xc->valpos_mem[4*i]);
+
+                if(vm4ip[2])
+                        {
+                        if(zerocnt)
+                                {
+                                fpos += fstWriterVarint(f, (zerocnt << 1));
+                                zerocnt = 0;
+                                }
+
+                        if(vm4ip[2] & 0x80000000)
+                                {
+                                fpos += fstWriterVarint(f, 0); /* signal, note that using a *signed* varint would be more efficient than this byte escape! */
+                                fpos += fstWriterVarint(f, (-(int32_t)vm4ip[2]));
+                                }
+                                else
+                                {
+                                fpos += fstWriterVarint(f, ((vm4ip[2] - prevpos) << 1) | 1);
+                                prevpos = vm4ip[2];
+                                }
+                        vm4ip[2] = 0;
+                        vm4ip[3] = 0; /* clear out tchn idx */
+                        }
+                        else
+                        {
+                        zerocnt++;
+                        }
+                }
+        }
 
 if(zerocnt)
-	{
-	/* fpos += */ fstWriterVarint(f, (zerocnt << 1)); /* scan-build */
-	}
+        {
+        /* fpos += */ fstWriterVarint(f, (zerocnt << 1)); /* scan-build */
+        }
 #ifdef FST_DEBUG
 fprintf(stderr, "value chains: %d\n", cnt);
 #endif
@@ -1682,7 +1669,7 @@ xc->vchg_mem[0] = '!';
 xc->vchg_siz = 1;
 
 endpos = ftello(xc->handle);
-fstWriterUint64(xc->handle, endpos-indxpos);		/* write delta index position at very end of block */
+fstWriterUint64(xc->handle, endpos-indxpos);            /* write delta index position at very end of block */
 
 /*emit time changes for block */
 fflush(xc->tchn_handle);
@@ -1691,26 +1678,26 @@ fstWriterFseeko(xc, xc->tchn_handle, 0, SEEK_SET);
 
 tmem = fstMmap(NULL, tlen, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->tchn_handle), 0);
 if(tmem)
-	{
-	unsigned long destlen = tlen;
-	unsigned char *dmem = malloc(compressBound(destlen));
+        {
+        unsigned long destlen = tlen;
+        unsigned char *dmem = malloc(compressBound(destlen));
         int rc = compress2(dmem, &destlen, tmem, tlen, 9);
 
-	if((rc == Z_OK) && (destlen < tlen))
-		{
-		fstFwrite(dmem, destlen, 1, xc->handle);
-		}
-		else /* comparison between compressed / decompressed len tells if compressed */
-		{
-		fstFwrite(tmem, tlen, 1, xc->handle);
-		destlen = tlen;
-		}
-	free(dmem);
-	fstMunmap(tmem, tlen);
-	fstWriterUint64(xc->handle, tlen);		/* uncompressed */
-	fstWriterUint64(xc->handle, destlen);		/* compressed */
-	fstWriterUint64(xc->handle, xc->tchn_cnt); 	/* number of time items */
-	}
+        if((rc == Z_OK) && (((off_t)destlen) < tlen))
+                {
+                fstFwrite(dmem, destlen, 1, xc->handle);
+                }
+                else /* comparison between compressed / decompressed len tells if compressed */
+                {
+                fstFwrite(tmem, tlen, 1, xc->handle);
+                destlen = tlen;
+                }
+        free(dmem);
+        fstMunmap(tmem, tlen);
+        fstWriterUint64(xc->handle, tlen);              /* uncompressed */
+        fstWriterUint64(xc->handle, destlen);           /* compressed */
+        fstWriterUint64(xc->handle, xc->tchn_cnt);      /* number of time items */
+        }
 
 xc->tchn_cnt = xc->tchn_idx = 0;
 fstWriterFseeko(xc, xc->tchn_handle, 0, SEEK_SET);
@@ -1719,13 +1706,13 @@ fstFtruncate(fileno(xc->tchn_handle), 0);
 /* write block trailer */
 endpos = ftello(xc->handle);
 fstWriterFseeko(xc, xc->handle, xc->section_start, SEEK_SET);
-fstWriterUint64(xc->handle, endpos - xc->section_start); 	/* write block length */
-fstWriterFseeko(xc, xc->handle, 8, SEEK_CUR);				/* skip begin time */
-fstWriterUint64(xc->handle, xc->curtime); 			/* write end time for section */
-fstWriterUint64(xc->handle, unc_memreq);			/* amount of buffer memory required in reader for full traversal */
+fstWriterUint64(xc->handle, endpos - xc->section_start);        /* write block length */
+fstWriterFseeko(xc, xc->handle, 8, SEEK_CUR);                           /* skip begin time */
+fstWriterUint64(xc->handle, xc->curtime);                       /* write end time for section */
+fstWriterUint64(xc->handle, unc_memreq);                        /* amount of buffer memory required in reader for full traversal */
 fflush(xc->handle);
 
-fstWriterFseeko(xc, xc->handle, xc->section_start-1, SEEK_SET);		/* write out FST_BL_VCDATA over FST_BL_SKIP */
+fstWriterFseeko(xc, xc->handle, xc->section_start-1, SEEK_SET);         /* write out FST_BL_VCDATA over FST_BL_SKIP */
 
 #ifndef FST_DYNAMIC_ALIAS_DISABLE
 #ifndef FST_DYNAMIC_ALIAS2_DISABLE
@@ -1739,26 +1726,26 @@ fputc(FST_BL_VCDATA, xc->handle);
 
 fflush(xc->handle);
 
-fstWriterFseeko(xc, xc->handle, endpos, SEEK_SET);				/* seek to end of file */
+fstWriterFseeko(xc, xc->handle, endpos, SEEK_SET);                              /* seek to end of file */
 
-xc2->section_header_truncpos = endpos;				/* cache in case of need to truncate */
+xc2->section_header_truncpos = endpos;                          /* cache in case of need to truncate */
 if(xc->dump_size_limit)
-	{
-	if(endpos >= xc->dump_size_limit)
-		{
-		xc2->skip_writing_section_hdr = 1;
-		xc2->size_limit_locked = 1;
-		xc2->is_initial_time = 1; /* to trick emit value and emit time change */
+        {
+        if(endpos >= ((off_t)xc->dump_size_limit))
+                {
+                xc2->skip_writing_section_hdr = 1;
+                xc2->size_limit_locked = 1;
+                xc2->is_initial_time = 1; /* to trick emit value and emit time change */
 #ifdef FST_DEBUG
-		fprintf(stderr, "<< dump file size limit reached, stopping dumping >>\n");
+                fprintf(stderr, "<< dump file size limit reached, stopping dumping >>\n");
 #endif
-		}
-	}
+                }
+        }
 
 if(!xc2->skip_writing_section_hdr)
-	{
-	fstWriterEmitSectionHeader(xc);				/* emit next section header */
-	}
+        {
+        fstWriterEmitSectionHeader(xc);                         /* emit next section header */
+        }
 fflush(xc->handle);
 
 xc->already_in_flush = 0;
@@ -1791,59 +1778,59 @@ static void fstWriterFlushContextPrivate(void *ctx)
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 
 if(xc->parallel_enabled)
-	{
-	struct fstWriterContext *xc2 = malloc(sizeof(struct fstWriterContext));
-	int i;
+        {
+        struct fstWriterContext *xc2 = malloc(sizeof(struct fstWriterContext));
+        unsigned int i;
 
-	pthread_mutex_lock(&xc->mutex);
-	pthread_mutex_unlock(&xc->mutex);
+        pthread_mutex_lock(&xc->mutex);
+        pthread_mutex_unlock(&xc->mutex);
 
-	xc->xc_parent = xc;
-	memcpy(xc2, xc, sizeof(struct fstWriterContext));
+        xc->xc_parent = xc;
+        memcpy(xc2, xc, sizeof(struct fstWriterContext));
 
-	xc2->valpos_mem = malloc(xc->maxhandle * 4 * sizeof(uint32_t));
-	memcpy(xc2->valpos_mem, xc->valpos_mem, xc->maxhandle * 4 * sizeof(uint32_t));
+        xc2->valpos_mem = malloc(xc->maxhandle * 4 * sizeof(uint32_t));
+        memcpy(xc2->valpos_mem, xc->valpos_mem, xc->maxhandle * 4 * sizeof(uint32_t));
 
-	/* curval mem is updated in the thread */
+        /* curval mem is updated in the thread */
 #ifdef FST_REMOVE_DUPLICATE_VC
-	xc2->curval_mem = malloc(xc->maxvalpos);
-	memcpy(xc2->curval_mem, xc->curval_mem, xc->maxvalpos);
+        xc2->curval_mem = malloc(xc->maxvalpos);
+        memcpy(xc2->curval_mem, xc->curval_mem, xc->maxvalpos);
 #endif
 
-	xc->vchg_mem = malloc(xc->vchg_alloc_siz);
-	xc->vchg_mem[0] = '!';
-	xc->vchg_siz = 1;
-
-	for(i=0;i<xc->maxhandle;i++)
-		{
-		uint32_t *vm4ip = &(xc->valpos_mem[4*i]);
-	        vm4ip[2] = 0; /* zero out offset val */
-	        vm4ip[3] = 0; /* zero out last time change val */
-	        }
-
-	xc->tchn_cnt = xc->tchn_idx = 0;
-	xc->tchn_handle = tmpfile_open(&xc->tchn_handle_nam); /* child thread will deallocate file/name */
-	fstWriterFseeko(xc, xc->tchn_handle, 0, SEEK_SET);
-	fstFtruncate(fileno(xc->tchn_handle), 0);
-
-	xc->section_header_only = 0;
-	xc->secnum++;
-
-	pthread_mutex_lock(&xc->mutex);
-
-	pthread_create(&xc->thread, &xc->thread_attr, fstWriterFlushContextPrivate1, xc2);
-	}
-	else
-	{
-	if(xc->parallel_was_enabled) /* conservatively block */
-		{
-		pthread_mutex_lock(&xc->mutex);
-		pthread_mutex_unlock(&xc->mutex);
-		}
-
-	xc->xc_parent = xc;
-	fstWriterFlushContextPrivate2(xc);
-	}
+        xc->vchg_mem = malloc(xc->vchg_alloc_siz);
+        xc->vchg_mem[0] = '!';
+        xc->vchg_siz = 1;
+
+        for(i=0;i<xc->maxhandle;i++)
+                {
+                uint32_t *vm4ip = &(xc->valpos_mem[4*i]);
+                vm4ip[2] = 0; /* zero out offset val */
+                vm4ip[3] = 0; /* zero out last time change val */
+                }
+
+        xc->tchn_cnt = xc->tchn_idx = 0;
+        xc->tchn_handle = tmpfile_open(&xc->tchn_handle_nam); /* child thread will deallocate file/name */
+        fstWriterFseeko(xc, xc->tchn_handle, 0, SEEK_SET);
+        fstFtruncate(fileno(xc->tchn_handle), 0);
+
+        xc->section_header_only = 0;
+        xc->secnum++;
+
+        pthread_mutex_lock(&xc->mutex);
+
+        pthread_create(&xc->thread, &xc->thread_attr, fstWriterFlushContextPrivate1, xc2);
+        }
+        else
+        {
+        if(xc->parallel_was_enabled) /* conservatively block */
+                {
+                pthread_mutex_lock(&xc->mutex);
+                pthread_mutex_unlock(&xc->mutex);
+                }
+
+        xc->xc_parent = xc;
+        fstWriterFlushContextPrivate2(xc);
+        }
 }
 #endif
 
@@ -1856,11 +1843,11 @@ void fstWriterFlushContext(void *ctx)
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 if(xc)
         {
-	if(xc->tchn_idx > 1)
-		{
-		xc->flush_context_pending = 1;
-		}
-	}
+        if(xc->tchn_idx > 1)
+                {
+                xc->flush_context_pending = 1;
+                }
+        }
 }
 
 
@@ -1873,411 +1860,411 @@ struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 
 #ifdef FST_WRITER_PARALLEL
 if(xc)
-	{
-	pthread_mutex_lock(&xc->mutex);
-	pthread_mutex_unlock(&xc->mutex);
-	}
+        {
+        pthread_mutex_lock(&xc->mutex);
+        pthread_mutex_unlock(&xc->mutex);
+        }
 #endif
 
 if(xc && !xc->already_in_close && !xc->already_in_flush)
-	{
-	unsigned char *tmem;
-	off_t fixup_offs, tlen, hlen;
-
-	xc->already_in_close = 1; /* never need to zero this out as it is freed at bottom */
-
-	if(xc->section_header_only && xc->section_header_truncpos && (xc->vchg_siz <= 1) && (!xc->is_initial_time))
-		{
-		fstFtruncate(fileno(xc->handle), xc->section_header_truncpos);
-		fstWriterFseeko(xc, xc->handle, xc->section_header_truncpos, SEEK_SET);
-		xc->section_header_only = 0;
-		}
-		else
-		{
-		xc->skip_writing_section_hdr = 1;
-		if(!xc->size_limit_locked)
-			{
-			if(xc->is_initial_time) /* simulation time never advanced so mock up the changes as time zero ones */
-				{
-				fstHandle dupe_idx;
-
-				fstWriterEmitTimeChange(xc, 0); /* emit some time change just to have one */
-				for(dupe_idx = 0; dupe_idx < xc->maxhandle; dupe_idx++) /* now clone the values */
-					{
-					fstWriterEmitValueChange(xc, dupe_idx+1, xc->curval_mem + xc->valpos_mem[4*dupe_idx]);
-					}
-				}
-			fstWriterFlushContextPrivate(xc);
-#ifdef FST_WRITER_PARALLEL
-			pthread_mutex_lock(&xc->mutex);
-			pthread_mutex_unlock(&xc->mutex);
-#endif
-			}
-		}
-	fstDestroyMmaps(xc, 1);
-
-	/* write out geom section */
-	fflush(xc->geom_handle);
-	tlen = ftello(xc->geom_handle);
-	tmem = fstMmap(NULL, tlen, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->geom_handle), 0);
-	if(tmem)
-		{
-		unsigned long destlen = tlen;
-		unsigned char *dmem = malloc(compressBound(destlen));
-	        int rc = compress2(dmem, &destlen, tmem, tlen, 9);
-
-		if((rc != Z_OK) || (destlen > tlen))
-			{
-			destlen = tlen;
-			}
-
-		fixup_offs = ftello(xc->handle);
-		fputc(FST_BL_SKIP, xc->handle);			/* temporary tag */
-		fstWriterUint64(xc->handle, destlen + 24);	/* section length */
-		fstWriterUint64(xc->handle, tlen);		/* uncompressed */
-								/* compressed len is section length - 24 */
-		fstWriterUint64(xc->handle, xc->maxhandle);	/* maxhandle */
-		fstFwrite((destlen != tlen) ? dmem : tmem, destlen, 1, xc->handle);
-		fflush(xc->handle);
-
-		fstWriterFseeko(xc, xc->handle, fixup_offs, SEEK_SET);
-		fputc(FST_BL_GEOM, xc->handle);			/* actual tag */
-
-		fstWriterFseeko(xc, xc->handle, 0, SEEK_END);		/* move file pointer to end for any section adds */
-		fflush(xc->handle);
-
-		free(dmem);
-		fstMunmap(tmem, tlen);
-		}
-
-	if(xc->num_blackouts)
-		{
-		uint64_t cur_bl = 0;
-		off_t bpos, eos;
-		uint32_t i;
-
-		fixup_offs = ftello(xc->handle);
-		fputc(FST_BL_SKIP, xc->handle);			/* temporary tag */
-		bpos = fixup_offs + 1;
-		fstWriterUint64(xc->handle, 0);			/* section length */
-		fstWriterVarint(xc->handle, xc->num_blackouts);
-
-		for(i=0;i<xc->num_blackouts;i++)
-			{
-			fputc(xc->blackout_head->active, xc->handle);
-			fstWriterVarint(xc->handle, xc->blackout_head->tim - cur_bl);
-			cur_bl = xc->blackout_head->tim;
-			xc->blackout_curr = xc->blackout_head->next;
-			free(xc->blackout_head);
-			xc->blackout_head = xc->blackout_curr;
-			}
-
-		eos = ftello(xc->handle);
-		fstWriterFseeko(xc, xc->handle, bpos, SEEK_SET);
-		fstWriterUint64(xc->handle, eos - bpos);
-		fflush(xc->handle);
-
-		fstWriterFseeko(xc, xc->handle, fixup_offs, SEEK_SET);
-		fputc(FST_BL_BLACKOUT, xc->handle);	/* actual tag */
-
-		fstWriterFseeko(xc, xc->handle, 0, SEEK_END);	/* move file pointer to end for any section adds */
-		fflush(xc->handle);
-		}
-
-	if(xc->compress_hier)
-		{
-		off_t hl, eos;
-		gzFile zhandle;
-		int zfd;
-		int fourpack_duo = 0;
-#ifndef __MINGW32__
-		char *fnam = malloc(strlen(xc->filename) + 5 + 1);
-#endif
-
-		fixup_offs = ftello(xc->handle);
-		fputc(FST_BL_SKIP, xc->handle);			/* temporary tag */
-		hlen = ftello(xc->handle);
-		fstWriterUint64(xc->handle, 0);			/* section length */
-		fstWriterUint64(xc->handle, xc->hier_file_len);	/* uncompressed length */
-
-		if(!xc->fourpack)
-			{
-			unsigned char *mem = malloc(FST_GZIO_LEN);
-			zfd = dup(fileno(xc->handle));
-			fflush(xc->handle);
-			zhandle = gzdopen(zfd, "wb4");
-			if(zhandle)
-				{
-				fstWriterFseeko(xc, xc->hier_handle, 0, SEEK_SET);
-				for(hl = 0; hl < xc->hier_file_len; hl += FST_GZIO_LEN)
-					{
-					unsigned len = ((xc->hier_file_len - hl) > FST_GZIO_LEN) ? FST_GZIO_LEN : (xc->hier_file_len - hl);
-					fstFread(mem, len, 1, xc->hier_handle);
-					gzwrite(zhandle, mem, len);
-					}
-				gzclose(zhandle);
-				}
-				else
-				{
-				close(zfd);
-				}
-			free(mem);
-			}
-			else
-			{
-			int lz4_maxlen;
-			unsigned char *mem;
-			unsigned char *hmem;
-			int packed_len;
-
-			fflush(xc->handle);
-
-			lz4_maxlen = LZ4_compressBound(xc->hier_file_len);
-			mem = malloc(lz4_maxlen);
-			hmem = fstMmap(NULL, xc->hier_file_len, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->hier_handle), 0);
-			packed_len = LZ4_compress((char *)hmem, (char *)mem, xc->hier_file_len);
-			fstMunmap(hmem, xc->hier_file_len);
-
-			fourpack_duo = (!xc->repack_on_close) && (xc->hier_file_len > FST_HDR_FOURPACK_DUO_SIZE); /* double pack when hierarchy is large */
-
-			if(fourpack_duo)	/* double packing with LZ4 is faster than gzip */
-				{
-				unsigned char *mem_duo;
-				int lz4_maxlen_duo;
-				int packed_len_duo;
-
-				lz4_maxlen_duo = LZ4_compressBound(packed_len);
-				mem_duo = malloc(lz4_maxlen_duo);
-				packed_len_duo = LZ4_compress((char *)mem, (char *)mem_duo, packed_len);
-
-				fstWriterVarint(xc->handle, packed_len); /* 1st round compressed length */
-				fstFwrite(mem_duo, packed_len_duo, 1, xc->handle);
-				free(mem_duo);
-				}
-				else
-				{
-				fstFwrite(mem, packed_len, 1, xc->handle);
-				}
-
-			free(mem);
-			}
-
-		fstWriterFseeko(xc, xc->handle, 0, SEEK_END);
-		eos = ftello(xc->handle);
-		fstWriterFseeko(xc, xc->handle, hlen, SEEK_SET);
-		fstWriterUint64(xc->handle, eos - hlen);
-		fflush(xc->handle);
-
-		fstWriterFseeko(xc, xc->handle, fixup_offs, SEEK_SET);
-		fputc(xc->fourpack ?
-			( fourpack_duo ? FST_BL_HIER_LZ4DUO : FST_BL_HIER_LZ4) :
-			FST_BL_HIER, xc->handle); /* actual tag now also == compression type */
-
-		fstWriterFseeko(xc, xc->handle, 0, SEEK_END);	/* move file pointer to end for any section adds */
-		fflush(xc->handle);
-
-#ifndef __MINGW32__
-		sprintf(fnam, "%s.hier", xc->filename);
-		unlink(fnam);
-		free(fnam);
-#endif
-		}
-
-	/* finalize out header */
-	fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_START_TIME, SEEK_SET);
-	fstWriterUint64(xc->handle, xc->firsttime);
-	fstWriterUint64(xc->handle, xc->curtime);
-	fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_NUM_SCOPES, SEEK_SET);
-	fstWriterUint64(xc->handle, xc->numscopes);
-	fstWriterUint64(xc->handle, xc->numsigs);
-	fstWriterUint64(xc->handle, xc->maxhandle);
-	fstWriterUint64(xc->handle, xc->secnum);
-	fflush(xc->handle);
-
-	tmpfile_close(&xc->tchn_handle, &xc->tchn_handle_nam);
-	free(xc->vchg_mem); xc->vchg_mem = NULL;
-	tmpfile_close(&xc->curval_handle, &xc->curval_handle_nam);
-	tmpfile_close(&xc->valpos_handle, &xc->valpos_handle_nam);
-	tmpfile_close(&xc->geom_handle, &xc->geom_handle_nam);
-	if(xc->hier_handle) { fclose(xc->hier_handle); xc->hier_handle = NULL; }
-	if(xc->handle)
-		{
-		if(xc->repack_on_close)
-			{
-			FILE *fp;
-			off_t offpnt, uclen;
-			int flen = strlen(xc->filename);
-			char *hf = calloc(1, flen + 5);
-
-			strcpy(hf, xc->filename);
-			strcpy(hf+flen, ".pak");
-			fp = fopen(hf, "wb");
-
-			if(fp)
-				{
-				void *dsth;
-				int zfd;
-				char gz_membuf[FST_GZIO_LEN];
-
-				fstWriterFseeko(xc, xc->handle, 0, SEEK_END);
-				uclen = ftello(xc->handle);
-
-				fputc(FST_BL_ZWRAPPER, fp);
-				fstWriterUint64(fp, 0);
-				fstWriterUint64(fp, uclen);
-				fflush(fp);
-
-				fstWriterFseeko(xc, xc->handle, 0, SEEK_SET);
-				zfd = dup(fileno(fp));
-				dsth = gzdopen(zfd, "wb4");
-				if(dsth)
-					{
-					for(offpnt = 0; offpnt < uclen; offpnt += FST_GZIO_LEN)
-						{
-						size_t this_len = ((uclen - offpnt) > FST_GZIO_LEN) ? FST_GZIO_LEN : (uclen - offpnt);
-						fstFread(gz_membuf, this_len, 1, xc->handle);
-						gzwrite(dsth, gz_membuf, this_len);
-						}
-					gzclose(dsth);
-					}
-					else
-					{
-					close(zfd);
-					}
-				fstWriterFseeko(xc, fp, 0, SEEK_END);
-				offpnt = ftello(fp);
-				fstWriterFseeko(xc, fp, 1, SEEK_SET);
-				fstWriterUint64(fp, offpnt - 1);
-				fclose(fp);
-				fclose(xc->handle); xc->handle = NULL;
-
-				unlink(xc->filename);
-				rename(hf, xc->filename);
-				}
-				else
-				{
-				xc->repack_on_close = 0;
-				fclose(xc->handle); xc->handle = NULL;
-				}
-
-			free(hf);
-			}
-			else
-			{
-			fclose(xc->handle); xc->handle = NULL;
-			}
-		}
+        {
+        unsigned char *tmem;
+        off_t fixup_offs, tlen, hlen;
 
-#ifdef __MINGW32__
-	{
-	int flen = strlen(xc->filename);
-	char *hf = calloc(1, flen + 6);
-	strcpy(hf, xc->filename);
-
-	if(xc->compress_hier)
-		{
-		strcpy(hf + flen, ".hier");
-		unlink(hf); /* no longer needed as a section now exists for this */
-		}
-
-	free(hf);
-	}
-#endif
+        xc->already_in_close = 1; /* never need to zero this out as it is freed at bottom */
 
+        if(xc->section_header_only && xc->section_header_truncpos && (xc->vchg_siz <= 1) && (!xc->is_initial_time))
+                {
+                fstFtruncate(fileno(xc->handle), xc->section_header_truncpos);
+                fstWriterFseeko(xc, xc->handle, xc->section_header_truncpos, SEEK_SET);
+                xc->section_header_only = 0;
+                }
+                else
+                {
+                xc->skip_writing_section_hdr = 1;
+                if(!xc->size_limit_locked)
+                        {
+                        if(xc->is_initial_time) /* simulation time never advanced so mock up the changes as time zero ones */
+                                {
+                                fstHandle dupe_idx;
+
+                                fstWriterEmitTimeChange(xc, 0); /* emit some time change just to have one */
+                                for(dupe_idx = 0; dupe_idx < xc->maxhandle; dupe_idx++) /* now clone the values */
+                                        {
+                                        fstWriterEmitValueChange(xc, dupe_idx+1, xc->curval_mem + xc->valpos_mem[4*dupe_idx]);
+                                        }
+                                }
+                        fstWriterFlushContextPrivate(xc);
 #ifdef FST_WRITER_PARALLEL
-	pthread_mutex_destroy(&xc->mutex);
-	pthread_attr_destroy(&xc->thread_attr);
+                        pthread_mutex_lock(&xc->mutex);
+                        pthread_mutex_unlock(&xc->mutex);
 #endif
+                        }
+                }
+        fstDestroyMmaps(xc, 1);
 
-	if(xc->path_array)
-		{
-#ifndef _WAVE_HAVE_JUDY
-		const uint32_t hashmask = FST_PATH_HASHMASK;
-#endif
-		JudyHSFreeArray(&(xc->path_array), NULL);
-		}
+        /* write out geom section */
+        fflush(xc->geom_handle);
+        tlen = ftello(xc->geom_handle);
+        tmem = fstMmap(NULL, tlen, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->geom_handle), 0);
+        if(tmem)
+                {
+                unsigned long destlen = tlen;
+                unsigned char *dmem = malloc(compressBound(destlen));
+                int rc = compress2(dmem, &destlen, tmem, tlen, 9);
 
-	free(xc->filename); xc->filename = NULL;
-	free(xc);
-	}
-}
+                if((rc != Z_OK) || (((off_t)destlen) > tlen))
+                        {
+                        destlen = tlen;
+                        }
 
+                fixup_offs = ftello(xc->handle);
+                fputc(FST_BL_SKIP, xc->handle);                 /* temporary tag */
+                fstWriterUint64(xc->handle, destlen + 24);      /* section length */
+                fstWriterUint64(xc->handle, tlen);              /* uncompressed */
+                                                                /* compressed len is section length - 24 */
+                fstWriterUint64(xc->handle, xc->maxhandle);     /* maxhandle */
+                fstFwrite((((off_t)destlen) != tlen) ? dmem : tmem, destlen, 1, xc->handle);
+                fflush(xc->handle);
 
-/*
- * functions to set miscellaneous header/block information
- */
-void fstWriterSetDate(void *ctx, const char *dat)
-{
-struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
-if(xc)
-        {
-	char s[FST_HDR_DATE_SIZE];
-	off_t fpos = ftello(xc->handle);
-	int len = strlen(dat);
-
-	fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_DATE, SEEK_SET);
-	memset(s, 0, FST_HDR_DATE_SIZE);
-	memcpy(s, dat, (len < FST_HDR_DATE_SIZE) ? len : FST_HDR_DATE_SIZE);
-	fstFwrite(s, FST_HDR_DATE_SIZE, 1, xc->handle);
-	fflush(xc->handle);
-	fstWriterFseeko(xc, xc->handle, fpos, SEEK_SET);
-	}
-}
+                fstWriterFseeko(xc, xc->handle, fixup_offs, SEEK_SET);
+                fputc(FST_BL_GEOM, xc->handle);                 /* actual tag */
 
+                fstWriterFseeko(xc, xc->handle, 0, SEEK_END);           /* move file pointer to end for any section adds */
+                fflush(xc->handle);
 
-void fstWriterSetVersion(void *ctx, const char *vers)
-{
-struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
-if(xc && vers)
-        {
-	char s[FST_HDR_SIM_VERSION_SIZE];
-	off_t fpos = ftello(xc->handle);
-	int len = strlen(vers);
-
-	fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_SIM_VERSION, SEEK_SET);
-	memset(s, 0, FST_HDR_SIM_VERSION_SIZE);
-	memcpy(s, vers, (len < FST_HDR_SIM_VERSION_SIZE) ? len : FST_HDR_SIM_VERSION_SIZE);
-	fstFwrite(s, FST_HDR_SIM_VERSION_SIZE, 1, xc->handle);
-	fflush(xc->handle);
-	fstWriterFseeko(xc, xc->handle, fpos, SEEK_SET);
-	}
-}
+                free(dmem);
+                fstMunmap(tmem, tlen);
+                }
 
+        if(xc->num_blackouts)
+                {
+                uint64_t cur_bl = 0;
+                off_t bpos, eos;
+                uint32_t i;
 
-void fstWriterSetFileType(void *ctx, enum fstFileType filetype)
-{
-struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
-if(xc)
-        {
-	if((filetype >= FST_FT_MIN) && (filetype <= FST_FT_MAX))
-		{
-	        off_t fpos = ftello(xc->handle);
+                fixup_offs = ftello(xc->handle);
+                fputc(FST_BL_SKIP, xc->handle);                 /* temporary tag */
+                bpos = fixup_offs + 1;
+                fstWriterUint64(xc->handle, 0);                 /* section length */
+                fstWriterVarint(xc->handle, xc->num_blackouts);
 
-		xc->filetype = filetype;
+                for(i=0;i<xc->num_blackouts;i++)
+                        {
+                        fputc(xc->blackout_head->active, xc->handle);
+                        fstWriterVarint(xc->handle, xc->blackout_head->tim - cur_bl);
+                        cur_bl = xc->blackout_head->tim;
+                        xc->blackout_curr = xc->blackout_head->next;
+                        free(xc->blackout_head);
+                        xc->blackout_head = xc->blackout_curr;
+                        }
 
-	        fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_FILETYPE, SEEK_SET);
-		fputc(xc->filetype, xc->handle);
-	        fflush(xc->handle);
-	        fstWriterFseeko(xc, xc->handle, fpos, SEEK_SET);
-		}
-	}
-}
+                eos = ftello(xc->handle);
+                fstWriterFseeko(xc, xc->handle, bpos, SEEK_SET);
+                fstWriterUint64(xc->handle, eos - bpos);
+                fflush(xc->handle);
 
+                fstWriterFseeko(xc, xc->handle, fixup_offs, SEEK_SET);
+                fputc(FST_BL_BLACKOUT, xc->handle);     /* actual tag */
 
-static void fstWriterSetAttrDoubleArgGeneric(void *ctx, int typ, uint64_t arg1, uint64_t arg2)
-{
+                fstWriterFseeko(xc, xc->handle, 0, SEEK_END);   /* move file pointer to end for any section adds */
+                fflush(xc->handle);
+                }
+
+        if(xc->compress_hier)
+                {
+                off_t hl, eos;
+                gzFile zhandle;
+                int zfd;
+                int fourpack_duo = 0;
+#ifndef __MINGW32__
+                char *fnam = malloc(strlen(xc->filename) + 5 + 1);
+#endif
+
+                fixup_offs = ftello(xc->handle);
+                fputc(FST_BL_SKIP, xc->handle);                 /* temporary tag */
+                hlen = ftello(xc->handle);
+                fstWriterUint64(xc->handle, 0);                 /* section length */
+                fstWriterUint64(xc->handle, xc->hier_file_len); /* uncompressed length */
+
+                if(!xc->fourpack)
+                        {
+                        unsigned char *mem = malloc(FST_GZIO_LEN);
+                        zfd = dup(fileno(xc->handle));
+                        fflush(xc->handle);
+                        zhandle = gzdopen(zfd, "wb4");
+                        if(zhandle)
+                                {
+                                fstWriterFseeko(xc, xc->hier_handle, 0, SEEK_SET);
+                                for(hl = 0; hl < xc->hier_file_len; hl += FST_GZIO_LEN)
+                                        {
+                                        unsigned len = ((xc->hier_file_len - hl) > FST_GZIO_LEN) ? FST_GZIO_LEN : (xc->hier_file_len - hl);
+                                        fstFread(mem, len, 1, xc->hier_handle);
+                                        gzwrite(zhandle, mem, len);
+                                        }
+                                gzclose(zhandle);
+                                }
+                                else
+                                {
+                                close(zfd);
+                                }
+                        free(mem);
+                        }
+                        else
+                        {
+                        int lz4_maxlen;
+                        unsigned char *mem;
+                        unsigned char *hmem;
+                        int packed_len;
+
+                        fflush(xc->handle);
+
+                        lz4_maxlen = LZ4_compressBound(xc->hier_file_len);
+                        mem = malloc(lz4_maxlen);
+                        hmem = fstMmap(NULL, xc->hier_file_len, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->hier_handle), 0);
+                        packed_len = LZ4_compress((char *)hmem, (char *)mem, xc->hier_file_len);
+                        fstMunmap(hmem, xc->hier_file_len);
+
+                        fourpack_duo = (!xc->repack_on_close) && (xc->hier_file_len > FST_HDR_FOURPACK_DUO_SIZE); /* double pack when hierarchy is large */
+
+                        if(fourpack_duo)        /* double packing with LZ4 is faster than gzip */
+                                {
+                                unsigned char *mem_duo;
+                                int lz4_maxlen_duo;
+                                int packed_len_duo;
+
+                                lz4_maxlen_duo = LZ4_compressBound(packed_len);
+                                mem_duo = malloc(lz4_maxlen_duo);
+                                packed_len_duo = LZ4_compress((char *)mem, (char *)mem_duo, packed_len);
+
+                                fstWriterVarint(xc->handle, packed_len); /* 1st round compressed length */
+                                fstFwrite(mem_duo, packed_len_duo, 1, xc->handle);
+                                free(mem_duo);
+                                }
+                                else
+                                {
+                                fstFwrite(mem, packed_len, 1, xc->handle);
+                                }
+
+                        free(mem);
+                        }
+
+                fstWriterFseeko(xc, xc->handle, 0, SEEK_END);
+                eos = ftello(xc->handle);
+                fstWriterFseeko(xc, xc->handle, hlen, SEEK_SET);
+                fstWriterUint64(xc->handle, eos - hlen);
+                fflush(xc->handle);
+
+                fstWriterFseeko(xc, xc->handle, fixup_offs, SEEK_SET);
+                fputc(xc->fourpack ?
+                        ( fourpack_duo ? FST_BL_HIER_LZ4DUO : FST_BL_HIER_LZ4) :
+                        FST_BL_HIER, xc->handle); /* actual tag now also == compression type */
+
+                fstWriterFseeko(xc, xc->handle, 0, SEEK_END);   /* move file pointer to end for any section adds */
+                fflush(xc->handle);
+
+#ifndef __MINGW32__
+                sprintf(fnam, "%s.hier", xc->filename);
+                unlink(fnam);
+                free(fnam);
+#endif
+                }
+
+        /* finalize out header */
+        fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_START_TIME, SEEK_SET);
+        fstWriterUint64(xc->handle, xc->firsttime);
+        fstWriterUint64(xc->handle, xc->curtime);
+        fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_NUM_SCOPES, SEEK_SET);
+        fstWriterUint64(xc->handle, xc->numscopes);
+        fstWriterUint64(xc->handle, xc->numsigs);
+        fstWriterUint64(xc->handle, xc->maxhandle);
+        fstWriterUint64(xc->handle, xc->secnum);
+        fflush(xc->handle);
+
+        tmpfile_close(&xc->tchn_handle, &xc->tchn_handle_nam);
+        free(xc->vchg_mem); xc->vchg_mem = NULL;
+        tmpfile_close(&xc->curval_handle, &xc->curval_handle_nam);
+        tmpfile_close(&xc->valpos_handle, &xc->valpos_handle_nam);
+        tmpfile_close(&xc->geom_handle, &xc->geom_handle_nam);
+        if(xc->hier_handle) { fclose(xc->hier_handle); xc->hier_handle = NULL; }
+        if(xc->handle)
+                {
+                if(xc->repack_on_close)
+                        {
+                        FILE *fp;
+                        off_t offpnt, uclen;
+                        int flen = strlen(xc->filename);
+                        char *hf = calloc(1, flen + 5);
+
+                        strcpy(hf, xc->filename);
+                        strcpy(hf+flen, ".pak");
+                        fp = fopen(hf, "wb");
+
+                        if(fp)
+                                {
+                                void *dsth;
+                                int zfd;
+                                char gz_membuf[FST_GZIO_LEN];
+
+                                fstWriterFseeko(xc, xc->handle, 0, SEEK_END);
+                                uclen = ftello(xc->handle);
+
+                                fputc(FST_BL_ZWRAPPER, fp);
+                                fstWriterUint64(fp, 0);
+                                fstWriterUint64(fp, uclen);
+                                fflush(fp);
+
+                                fstWriterFseeko(xc, xc->handle, 0, SEEK_SET);
+                                zfd = dup(fileno(fp));
+                                dsth = gzdopen(zfd, "wb4");
+                                if(dsth)
+                                        {
+                                        for(offpnt = 0; offpnt < uclen; offpnt += FST_GZIO_LEN)
+                                                {
+                                                size_t this_len = ((uclen - offpnt) > FST_GZIO_LEN) ? FST_GZIO_LEN : (uclen - offpnt);
+                                                fstFread(gz_membuf, this_len, 1, xc->handle);
+                                                gzwrite(dsth, gz_membuf, this_len);
+                                                }
+                                        gzclose(dsth);
+                                        }
+                                        else
+                                        {
+                                        close(zfd);
+                                        }
+                                fstWriterFseeko(xc, fp, 0, SEEK_END);
+                                offpnt = ftello(fp);
+                                fstWriterFseeko(xc, fp, 1, SEEK_SET);
+                                fstWriterUint64(fp, offpnt - 1);
+                                fclose(fp);
+                                fclose(xc->handle); xc->handle = NULL;
+
+                                unlink(xc->filename);
+                                rename(hf, xc->filename);
+                                }
+                                else
+                                {
+                                xc->repack_on_close = 0;
+                                fclose(xc->handle); xc->handle = NULL;
+                                }
+
+                        free(hf);
+                        }
+                        else
+                        {
+                        fclose(xc->handle); xc->handle = NULL;
+                        }
+                }
+
+#ifdef __MINGW32__
+        {
+        int flen = strlen(xc->filename);
+        char *hf = calloc(1, flen + 6);
+        strcpy(hf, xc->filename);
+
+        if(xc->compress_hier)
+                {
+                strcpy(hf + flen, ".hier");
+                unlink(hf); /* no longer needed as a section now exists for this */
+                }
+
+        free(hf);
+        }
+#endif
+
+#ifdef FST_WRITER_PARALLEL
+        pthread_mutex_destroy(&xc->mutex);
+        pthread_attr_destroy(&xc->thread_attr);
+#endif
+
+        if(xc->path_array)
+                {
+#ifndef _WAVE_HAVE_JUDY
+                const uint32_t hashmask = FST_PATH_HASHMASK;
+#endif
+                JudyHSFreeArray(&(xc->path_array), NULL);
+                }
+
+        free(xc->filename); xc->filename = NULL;
+        free(xc);
+        }
+}
+
+
+/*
+ * functions to set miscellaneous header/block information
+ */
+void fstWriterSetDate(void *ctx, const char *dat)
+{
+struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
+if(xc)
+        {
+        char s[FST_HDR_DATE_SIZE];
+        off_t fpos = ftello(xc->handle);
+        int len = strlen(dat);
+
+        fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_DATE, SEEK_SET);
+        memset(s, 0, FST_HDR_DATE_SIZE);
+        memcpy(s, dat, (len < FST_HDR_DATE_SIZE) ? len : FST_HDR_DATE_SIZE);
+        fstFwrite(s, FST_HDR_DATE_SIZE, 1, xc->handle);
+        fflush(xc->handle);
+        fstWriterFseeko(xc, xc->handle, fpos, SEEK_SET);
+        }
+}
+
+
+void fstWriterSetVersion(void *ctx, const char *vers)
+{
+struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
+if(xc && vers)
+        {
+        char s[FST_HDR_SIM_VERSION_SIZE];
+        off_t fpos = ftello(xc->handle);
+        int len = strlen(vers);
+
+        fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_SIM_VERSION, SEEK_SET);
+        memset(s, 0, FST_HDR_SIM_VERSION_SIZE);
+        memcpy(s, vers, (len < FST_HDR_SIM_VERSION_SIZE) ? len : FST_HDR_SIM_VERSION_SIZE);
+        fstFwrite(s, FST_HDR_SIM_VERSION_SIZE, 1, xc->handle);
+        fflush(xc->handle);
+        fstWriterFseeko(xc, xc->handle, fpos, SEEK_SET);
+        }
+}
+
+
+void fstWriterSetFileType(void *ctx, enum fstFileType filetype)
+{
+struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
+if(xc)
+        {
+        if(/*(filetype >= FST_FT_MIN) &&*/ (filetype <= FST_FT_MAX))
+                {
+                off_t fpos = ftello(xc->handle);
+
+                xc->filetype = filetype;
+
+                fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_FILETYPE, SEEK_SET);
+                fputc(xc->filetype, xc->handle);
+                fflush(xc->handle);
+                fstWriterFseeko(xc, xc->handle, fpos, SEEK_SET);
+                }
+        }
+}
+
+
+static void fstWriterSetAttrDoubleArgGeneric(void *ctx, int typ, uint64_t arg1, uint64_t arg2)
+{
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 if(xc)
         {
-	unsigned char buf[11]; /* ceil(64/7) = 10 + null term */
-	unsigned char *pnt = fstCopyVarint64ToRight(buf, arg1);
-	if(arg1)
-		{
-		*pnt = 0; /* this converts any *nonzero* arg1 when made a varint into a null-term string */
-		}
+        unsigned char buf[11]; /* ceil(64/7) = 10 + null term */
+        unsigned char *pnt = fstCopyVarint64ToRight(buf, arg1);
+        if(arg1)
+                {
+                *pnt = 0; /* this converts any *nonzero* arg1 when made a varint into a null-term string */
+                }
 
-	fstWriterSetAttrBegin(xc, FST_AT_MISC, typ, (char *)buf, arg2);
-	}
+        fstWriterSetAttrBegin(xc, FST_AT_MISC, typ, (char *)buf, arg2);
+        }
 }
 
 
@@ -2286,18 +2273,18 @@ static void fstWriterSetAttrGeneric(void *ctx, const char *comm, int typ, uint64
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 if(xc && comm)
         {
-	char *s = strdup(comm);
-	char *sf = s;
+        char *s = strdup(comm);
+        char *sf = s;
 
-	while(*s)
-		{
-		if((*s == '\n') || (*s == '\r')) *s = ' ';
-		s++;
-		}
+        while(*s)
+                {
+                if((*s == '\n') || (*s == '\r')) *s = ' ';
+                s++;
+                }
 
-	fstWriterSetAttrBegin(xc, FST_AT_MISC, typ, sf, arg);
-	free(sf);
-	}
+        fstWriterSetAttrBegin(xc, FST_AT_MISC, typ, sf, arg);
+        free(sf);
+        }
 }
 
 
@@ -2306,52 +2293,52 @@ static void fstWriterSetSourceStem_2(void *ctx, const char *path, unsigned int l
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 
 if(xc && path && path[0])
-	{
-	uint64_t sidx = 0;
-	int slen = strlen(path);
+        {
+        uint64_t sidx = 0;
+        int slen = strlen(path);
 #ifndef _WAVE_HAVE_JUDY
-	const uint32_t hashmask = FST_PATH_HASHMASK;
-	const unsigned char *path2 = (const unsigned char *)path;
+        const uint32_t hashmask = FST_PATH_HASHMASK;
+        const unsigned char *path2 = (const unsigned char *)path;
 #else
-	char *path2 = alloca(slen + 1); /* judy lacks const qualifier in its JudyHSIns definition */
-	strcpy(path2, path);
+        char *path2 = alloca(slen + 1); /* judy lacks const qualifier in its JudyHSIns definition */
+        strcpy(path2, path);
 #endif
 
-	PPvoid_t pv = JudyHSIns(&(xc->path_array), path2, slen, NULL);
+        PPvoid_t pv = JudyHSIns(&(xc->path_array), path2, slen, NULL);
         if(*pv)
-        	{
+                {
                 sidx = (long)(*pv);
                 }
                 else
-               	{
-		char *rp = NULL;
+                {
+                char *rp = NULL;
 
-		sidx = ++xc->path_array_count;
-               	*pv = (void *)(long)(xc->path_array_count);
+                sidx = ++xc->path_array_count;
+                *pv = (void *)(long)(xc->path_array_count);
 
-		if(use_realpath)
-			{
-			rp = fstRealpath(
+                if(use_realpath)
+                        {
+                        rp = fstRealpath(
 #ifndef _WAVE_HAVE_JUDY
-				(const char *)
+                                (const char *)
 #endif
-				path2, NULL);
-			}
+                                path2, NULL);
+                        }
 
-		fstWriterSetAttrGeneric(xc, rp ? rp :
+                fstWriterSetAttrGeneric(xc, rp ? rp :
 #ifndef _WAVE_HAVE_JUDY
-			(const char *)
+                        (const char *)
 #endif
-			path2, FST_MT_PATHNAME, sidx);
+                        path2, FST_MT_PATHNAME, sidx);
 
-		if(rp)
-			{
-			free(rp);
-			}
-		}
+                if(rp)
+                        {
+                        free(rp);
+                        }
+                }
 
-	fstWriterSetAttrDoubleArgGeneric(xc, typ, sidx, line);
-	}
+        fstWriterSetAttrDoubleArgGeneric(xc, typ, sidx, line);
+        }
 }
 
 
@@ -2384,12 +2371,12 @@ void fstWriterSetTimescale(void *ctx, int ts)
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 if(xc)
         {
-	off_t fpos = ftello(xc->handle);
-	fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_TIMESCALE, SEEK_SET);
-	fputc(ts & 255, xc->handle);
-	fflush(xc->handle);
-	fstWriterFseeko(xc, xc->handle, fpos, SEEK_SET);
-	}
+        off_t fpos = ftello(xc->handle);
+        fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_TIMESCALE, SEEK_SET);
+        fputc(ts & 255, xc->handle);
+        fflush(xc->handle);
+        fstWriterFseeko(xc, xc->handle, fpos, SEEK_SET);
+        }
 }
 
 
@@ -2399,14 +2386,14 @@ struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 if(xc && s)
         {
         int mat = 0;
-	int seconds_exp = -9;
-	int tv = atoi(s);
-	const char *pnt = s;
+        int seconds_exp = -9;
+        int tv = atoi(s);
+        const char *pnt = s;
 
-	while(*pnt)
-        	{
+        while(*pnt)
+                {
                 switch(*pnt)
-                	{
+                        {
                         case 'm': seconds_exp =  -3; mat = 1; break;
                         case 'u': seconds_exp =  -6; mat = 1; break;
                         case 'n': seconds_exp =  -9; mat = 1; break;
@@ -2418,21 +2405,21 @@ if(xc && s)
                         default: break;
                         }
 
-		if(mat) break;
+                if(mat) break;
                 pnt++;
                 }
 
-	if(tv == 10)
-        	{
+        if(tv == 10)
+                {
                 seconds_exp++;
                 }
         else
         if(tv == 100)
-        	{
+                {
                 seconds_exp+=2;
                 }
 
-	fstWriterSetTimescale(ctx, seconds_exp);
+        fstWriterSetTimescale(ctx, seconds_exp);
         }
 }
 
@@ -2442,12 +2429,12 @@ void fstWriterSetTimezero(void *ctx, int64_t tim)
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 if(xc)
         {
-	off_t fpos = ftello(xc->handle);
-	fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_TIMEZERO, SEEK_SET);
-	fstWriterUint64(xc->handle, (xc->timezero = tim));
-	fflush(xc->handle);
-	fstWriterFseeko(xc, xc->handle, fpos, SEEK_SET);
-	}
+        off_t fpos = ftello(xc->handle);
+        fstWriterFseeko(xc, xc->handle, FST_HDR_OFFS_TIMEZERO, SEEK_SET);
+        fstWriterUint64(xc->handle, (xc->timezero = tim));
+        fflush(xc->handle);
+        fstWriterFseeko(xc, xc->handle, fpos, SEEK_SET);
+        }
 }
 
 
@@ -2455,10 +2442,10 @@ void fstWriterSetPackType(void *ctx, enum fstWriterPackType typ)
 {
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 if(xc)
-	{
-	xc->fastpack     = (typ != FST_WR_PT_ZLIB);
-	xc->fourpack     = (typ == FST_WR_PT_LZ4);
-	}
+        {
+        xc->fastpack     = (typ != FST_WR_PT_ZLIB);
+        xc->fourpack     = (typ == FST_WR_PT_LZ4);
+        }
 }
 
 
@@ -2466,9 +2453,9 @@ void fstWriterSetRepackOnClose(void *ctx, int enable)
 {
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 if(xc)
-	{
-	xc->repack_on_close = (enable != 0);
-	}
+        {
+        xc->repack_on_close = (enable != 0);
+        }
 }
 
 
@@ -2476,17 +2463,17 @@ void fstWriterSetParallelMode(void *ctx, int enable)
 {
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 if(xc)
-	{
-	xc->parallel_was_enabled |= xc->parallel_enabled; /* make sticky */
-	xc->parallel_enabled = (enable != 0);
+        {
+        xc->parallel_was_enabled |= xc->parallel_enabled; /* make sticky */
+        xc->parallel_enabled = (enable != 0);
 #ifndef FST_WRITER_PARALLEL
-	if(xc->parallel_enabled)
-		{
-		fprintf(stderr, "ERROR: fstWriterSetParallelMode(), FST_WRITER_PARALLEL not enabled during compile, exiting.\n");
-		exit(255);
-		}
+        if(xc->parallel_enabled)
+                {
+                fprintf(stderr, "ERROR: fstWriterSetParallelMode(), FST_WRITER_PARALLEL not enabled during compile, exiting.\n");
+                exit(255);
+                }
 #endif
-	}
+        }
 }
 
 
@@ -2494,9 +2481,9 @@ void fstWriterSetDumpSizeLimit(void *ctx, uint64_t numbytes)
 {
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 if(xc)
-	{
-	xc->dump_size_limit = numbytes;
-	}
+        {
+        xc->dump_size_limit = numbytes;
+        }
 }
 
 
@@ -2542,96 +2529,97 @@ fstHandle fstWriterCreateVar(void *ctx, enum fstVarType vt, enum fstVarDir vd,
         uint32_t len, const char *nam, fstHandle aliasHandle)
 {
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
-int i, nlen, is_real;
+unsigned int i;
+int nlen, is_real;
 
 if(xc && nam)
         {
-	if(xc->valpos_mem)
-		{
-		fstDestroyMmaps(xc, 0);
-		}
-
-	fputc(vt, xc->hier_handle);
-	fputc(vd, xc->hier_handle);
-	nlen = strlen(nam);
-	fstFwrite(nam, nlen, 1, xc->hier_handle);
-	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) || (vt == FST_VT_SV_SHORTREAL))
-		{
-		is_real = 1;
-		len = 8; /* recast number of bytes to that of what a double is */
-		}
-		else
-		{
-		is_real = 0;
-		if(vt == FST_VT_GEN_STRING)
-			{
-			len = 0;
-			}
-		}
-
-	xc->hier_file_len += fstWriterVarint(xc->hier_handle, len);
-
-	if(aliasHandle > xc->maxhandle) aliasHandle = 0;
-	xc->hier_file_len += fstWriterVarint(xc->hier_handle, aliasHandle);
-	xc->numsigs++;
-	if(xc->numsigs == xc->next_huge_break)
-		{
-		if(xc->fst_break_size < xc->fst_huge_break_size)
-			{
-			xc->next_huge_break += FST_ACTIVATE_HUGE_INC;
-			xc->fst_break_size += xc->fst_orig_break_size;
-			xc->fst_break_add_size += xc->fst_orig_break_add_size;
-
-			xc->vchg_alloc_siz = xc->fst_break_size + xc->fst_break_add_size;
-			if(xc->vchg_mem)
-				{
-				xc->vchg_mem = realloc(xc->vchg_mem, xc->vchg_alloc_siz);
-				}
-			}
-		}
-
-	if(!aliasHandle)
-		{
-		uint32_t zero = 0;
-
-		if(len)
-			{
-			fstWriterVarint(xc->geom_handle, !is_real ? len : 0); /* geom section encodes reals as zero byte */
-			}
-			else
-			{
-			fstWriterVarint(xc->geom_handle, 0xFFFFFFFF);         /* geom section encodes zero len as 32b -1 */
-			}
-
-		fstFwrite(&xc->maxvalpos, sizeof(uint32_t), 1, xc->valpos_handle);
-		fstFwrite(&len, sizeof(uint32_t), 1, xc->valpos_handle);
-		fstFwrite(&zero, sizeof(uint32_t), 1, xc->valpos_handle);
-		fstFwrite(&zero, sizeof(uint32_t), 1, xc->valpos_handle);
-
-		if(!is_real)
-			{
-			for(i=0;i<len;i++)
-				{
-				fputc('x', xc->curval_handle);
-				}
-			}
-			else
-			{
-			fstFwrite(&xc->nan, 8, 1, xc->curval_handle); /* initialize doubles to NaN rather than x */
-			}
-
-		xc->maxvalpos+=len;
-		xc->maxhandle++;
-		return(xc->maxhandle);
-		}
-		else
-		{
-		return(aliasHandle);
-		}
-	}
+        if(xc->valpos_mem)
+                {
+                fstDestroyMmaps(xc, 0);
+                }
+
+        fputc(vt, xc->hier_handle);
+        fputc(vd, xc->hier_handle);
+        nlen = strlen(nam);
+        fstFwrite(nam, nlen, 1, xc->hier_handle);
+        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) || (vt == FST_VT_SV_SHORTREAL))
+                {
+                is_real = 1;
+                len = 8; /* recast number of bytes to that of what a double is */
+                }
+                else
+                {
+                is_real = 0;
+                if(vt == FST_VT_GEN_STRING)
+                        {
+                        len = 0;
+                        }
+                }
+
+        xc->hier_file_len += fstWriterVarint(xc->hier_handle, len);
+
+        if(aliasHandle > xc->maxhandle) aliasHandle = 0;
+        xc->hier_file_len += fstWriterVarint(xc->hier_handle, aliasHandle);
+        xc->numsigs++;
+        if(xc->numsigs == xc->next_huge_break)
+                {
+                if(xc->fst_break_size < xc->fst_huge_break_size)
+                        {
+                        xc->next_huge_break += FST_ACTIVATE_HUGE_INC;
+                        xc->fst_break_size += xc->fst_orig_break_size;
+                        xc->fst_break_add_size += xc->fst_orig_break_add_size;
+
+                        xc->vchg_alloc_siz = xc->fst_break_size + xc->fst_break_add_size;
+                        if(xc->vchg_mem)
+                                {
+                                xc->vchg_mem = realloc(xc->vchg_mem, xc->vchg_alloc_siz);
+                                }
+                        }
+                }
+
+        if(!aliasHandle)
+                {
+                uint32_t zero = 0;
+
+                if(len)
+                        {
+                        fstWriterVarint(xc->geom_handle, !is_real ? len : 0); /* geom section encodes reals as zero byte */
+                        }
+                        else
+                        {
+                        fstWriterVarint(xc->geom_handle, 0xFFFFFFFF);         /* geom section encodes zero len as 32b -1 */
+                        }
+
+                fstFwrite(&xc->maxvalpos, sizeof(uint32_t), 1, xc->valpos_handle);
+                fstFwrite(&len, sizeof(uint32_t), 1, xc->valpos_handle);
+                fstFwrite(&zero, sizeof(uint32_t), 1, xc->valpos_handle);
+                fstFwrite(&zero, sizeof(uint32_t), 1, xc->valpos_handle);
+
+                if(!is_real)
+                        {
+                        for(i=0;i<len;i++)
+                                {
+                                fputc('x', xc->curval_handle);
+                                }
+                        }
+                        else
+                        {
+                        fstFwrite(&xc->nan, 8, 1, xc->curval_handle); /* initialize doubles to NaN rather than x */
+                        }
+
+                xc->maxvalpos+=len;
+                xc->maxhandle++;
+                return(xc->maxhandle);
+                }
+                else
+                {
+                return(aliasHandle);
+                }
+        }
 
 return(0);
 }
@@ -2643,26 +2631,26 @@ void fstWriterSetScope(void *ctx, enum fstScopeType scopetype,
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 
 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; }
-	fputc(scopetype, xc->hier_handle);
-	fprintf(xc->hier_handle, "%s%c%s%c",
-		scopename ? scopename : "", 0,
-		scopecomp ? scopecomp : "", 0);
-
-	if(scopename)
-		{
-		xc->hier_file_len += strlen(scopename);
-		}
-	if(scopecomp)
-		{
-		xc->hier_file_len += strlen(scopecomp);
-		}
-
-	xc->hier_file_len += 4; /* FST_ST_VCD_SCOPE + scopetype + two string terminating zeros */
-	xc->numscopes++;
-	}
+        {
+        fputc(FST_ST_VCD_SCOPE, xc->hier_handle);
+        if(/*(scopetype < FST_ST_VCD_MODULE) ||*/ (scopetype > FST_ST_MAX)) { scopetype = FST_ST_VCD_MODULE; }
+        fputc(scopetype, xc->hier_handle);
+        fprintf(xc->hier_handle, "%s%c%s%c",
+                scopename ? scopename : "", 0,
+                scopecomp ? scopecomp : "", 0);
+
+        if(scopename)
+                {
+                xc->hier_file_len += strlen(scopename);
+                }
+        if(scopecomp)
+                {
+                xc->hier_file_len += strlen(scopecomp);
+                }
+
+        xc->hier_file_len += 4; /* FST_ST_VCD_SCOPE + scopetype + two string terminating zeros */
+        xc->numscopes++;
+        }
 }
 
 
@@ -2671,10 +2659,10 @@ void fstWriterSetUpscope(void *ctx)
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 
 if(xc)
-	{
-	fputc(FST_ST_VCD_UPSCOPE, xc->hier_handle);
-	xc->hier_file_len++;
-	}
+        {
+        fputc(FST_ST_VCD_UPSCOPE, xc->hier_handle);
+        xc->hier_file_len++;
+        }
 }
 
 
@@ -2684,33 +2672,33 @@ void fstWriterSetAttrBegin(void *ctx, enum fstAttrType attrtype, int subtype,
 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);
-	}
+        {
+        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);
+        }
 }
 
 
@@ -2719,10 +2707,10 @@ void fstWriterSetAttrEnd(void *ctx)
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 
 if(xc)
-	{
-	fputc(FST_ST_GEN_ATTREND, xc->hier_handle);
-	xc->hier_file_len++;
-	}
+        {
+        fputc(FST_ST_GEN_ATTREND, xc->hier_handle);
+        xc->hier_file_len++;
+        }
 }
 
 
@@ -2737,113 +2725,113 @@ uint32_t offs;
 int len;
 
 if((xc) && (handle <= xc->maxhandle))
-	{
-	uint32_t fpos;
-	uint32_t *vm4ip;
-
-	if(!xc->valpos_mem)
-		{
-		xc->vc_emitted = 1;
-		fstWriterCreateMmaps(xc);
-		}
-
-	handle--; /* move starting at 1 index to starting at 0 */
-	vm4ip = &(xc->valpos_mem[4*handle]);
-
-	len  = vm4ip[1];
-	if(len) /* len of zero = variable length, use fstWriterEmitVariableLengthValueChange */
-		{
-		if(!xc->is_initial_time)
-			{
-			fpos = xc->vchg_siz;
-
-			if((fpos + len + 10) > xc->vchg_alloc_siz)
-				{
-				xc->vchg_alloc_siz += (xc->fst_break_add_size + len); /* +len added in the case of extremely long vectors and small break add sizes */
-				xc->vchg_mem = realloc(xc->vchg_mem, xc->vchg_alloc_siz);
-				if(!xc->vchg_mem)
-					{
-					fprintf(stderr, "FATAL ERROR, could not realloc() in fstWriterEmitValueChange, exiting.\n");
-					exit(255);
-					}
-				}
+        {
+        uint32_t fpos;
+        uint32_t *vm4ip;
+
+        if(!xc->valpos_mem)
+                {
+                xc->vc_emitted = 1;
+                fstWriterCreateMmaps(xc);
+                }
+
+        handle--; /* move starting at 1 index to starting at 0 */
+        vm4ip = &(xc->valpos_mem[4*handle]);
+
+        len  = vm4ip[1];
+        if(len) /* len of zero = variable length, use fstWriterEmitVariableLengthValueChange */
+                {
+                if(!xc->is_initial_time)
+                        {
+                        fpos = xc->vchg_siz;
+
+                        if((fpos + len + 10) > xc->vchg_alloc_siz)
+                                {
+                                xc->vchg_alloc_siz += (xc->fst_break_add_size + len); /* +len added in the case of extremely long vectors and small break add sizes */
+                                xc->vchg_mem = realloc(xc->vchg_mem, xc->vchg_alloc_siz);
+                                if(!xc->vchg_mem)
+                                        {
+                                        fprintf(stderr, "FATAL ERROR, could not realloc() in fstWriterEmitValueChange, exiting.\n");
+                                        exit(255);
+                                        }
+                                }
 #ifdef FST_REMOVE_DUPLICATE_VC
-			offs = vm4ip[0];
-
-			if(len != 1)
-				{
-				if((vm4ip[3]==xc->tchn_idx)&&(vm4ip[2]))
-					{
-					unsigned char *old_value = xc->vchg_mem + vm4ip[2] + 4; /* the +4 skips old vm4ip[2] value */
-					while(*(old_value++) & 0x80) { /* skips over varint encoded "xc->tchn_idx - vm4ip[3]" */ }
-					memcpy(old_value, buf, len); /* overlay new value */
-
-					memcpy(xc->curval_mem + offs, buf, len);
-					return;
-					}
-				else
-					{
-					if(!memcmp(xc->curval_mem + offs, buf, len))
-						{
-						if(!xc->curtime)
-							{
-							int i;
-							for(i=0;i<len;i++)
-								{
-								if(buf[i]!='x') break;
-								}
-
-							if(i<len) return;
-							}
-							else
-							{
-							return;
-							}
-						}
-					}
-
-				memcpy(xc->curval_mem + offs, buf, len);
-				}
-				else
-				{
-				if((vm4ip[3]==xc->tchn_idx)&&(vm4ip[2]))
-					{
-					unsigned char *old_value = xc->vchg_mem + vm4ip[2] + 4; /* the +4 skips old vm4ip[2] value */
-					while(*(old_value++) & 0x80) { /* skips over varint encoded "xc->tchn_idx - vm4ip[3]" */ }
-					*old_value = *buf; /* overlay new value */
-
-					*(xc->curval_mem + offs) = *buf;
-					return;
-					}
-				else
-					{
-					if((*(xc->curval_mem + offs)) == (*buf))
-						{
-						if(!xc->curtime)
-							{
-							if(*buf != 'x') return;
-							}
-							else
-							{
-							return;
-							}
-						}
-					}
-
-				*(xc->curval_mem + offs) = *buf;
-				}
+                        offs = vm4ip[0];
+
+                        if(len != 1)
+                                {
+                                if((vm4ip[3]==xc->tchn_idx)&&(vm4ip[2]))
+                                        {
+                                        unsigned char *old_value = xc->vchg_mem + vm4ip[2] + 4; /* the +4 skips old vm4ip[2] value */
+                                        while(*(old_value++) & 0x80) { /* skips over varint encoded "xc->tchn_idx - vm4ip[3]" */ }
+                                        memcpy(old_value, buf, len); /* overlay new value */
+
+                                        memcpy(xc->curval_mem + offs, buf, len);
+                                        return;
+                                        }
+                                else
+                                        {
+                                        if(!memcmp(xc->curval_mem + offs, buf, len))
+                                                {
+                                                if(!xc->curtime)
+                                                        {
+                                                        int i;
+                                                        for(i=0;i<len;i++)
+                                                                {
+                                                                if(buf[i]!='x') break;
+                                                                }
+
+                                                        if(i<len) return;
+                                                        }
+                                                        else
+                                                        {
+                                                        return;
+                                                        }
+                                                }
+                                        }
+
+                                memcpy(xc->curval_mem + offs, buf, len);
+                                }
+                                else
+                                {
+                                if((vm4ip[3]==xc->tchn_idx)&&(vm4ip[2]))
+                                        {
+                                        unsigned char *old_value = xc->vchg_mem + vm4ip[2] + 4; /* the +4 skips old vm4ip[2] value */
+                                        while(*(old_value++) & 0x80) { /* skips over varint encoded "xc->tchn_idx - vm4ip[3]" */ }
+                                        *old_value = *buf; /* overlay new value */
+
+                                        *(xc->curval_mem + offs) = *buf;
+                                        return;
+                                        }
+                                else
+                                        {
+                                        if((*(xc->curval_mem + offs)) == (*buf))
+                                                {
+                                                if(!xc->curtime)
+                                                        {
+                                                        if(*buf != 'x') return;
+                                                        }
+                                                        else
+                                                        {
+                                                        return;
+                                                        }
+                                                }
+                                        }
+
+                                *(xc->curval_mem + offs) = *buf;
+                                }
 #endif
-			xc->vchg_siz += fstWriterUint32WithVarint32(xc, &vm4ip[2], xc->tchn_idx - vm4ip[3], buf, len); /* do one fwrite op only */
-			vm4ip[3] = xc->tchn_idx;
-			vm4ip[2] = fpos;
-			}
-			else
-			{
-			offs = vm4ip[0];
-			memcpy(xc->curval_mem + offs, buf, len);
-			}
-		}
-	}
+                        xc->vchg_siz += fstWriterUint32WithVarint32(xc, &vm4ip[2], xc->tchn_idx - vm4ip[3], buf, len); /* do one fwrite op only */
+                        vm4ip[3] = xc->tchn_idx;
+                        vm4ip[2] = fpos;
+                        }
+                        else
+                        {
+                        offs = vm4ip[0];
+                        memcpy(xc->curval_mem + offs, buf, len);
+                        }
+                }
+        }
 }
 
 
@@ -2853,95 +2841,95 @@ struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 const unsigned char *buf = (const unsigned char *)val;
 
 if((xc) && (handle <= xc->maxhandle))
-	{
-	uint32_t fpos;
-	uint32_t *vm4ip;
-
-	if(!xc->valpos_mem)
-		{
-		xc->vc_emitted = 1;
-		fstWriterCreateMmaps(xc);
-		}
-
-	handle--; /* move starting at 1 index to starting at 0 */
-	vm4ip = &(xc->valpos_mem[4*handle]);
-
-	/* there is no initial time dump for variable length value changes */
-	if(!vm4ip[1]) /* len of zero = variable length */
-		{
-		fpos = xc->vchg_siz;
-
-		if((fpos + len + 10 + 5) > xc->vchg_alloc_siz)
-			{
-			xc->vchg_alloc_siz += (xc->fst_break_add_size + len + 5); /* +len added in the case of extremely long vectors and small break add sizes */
-			xc->vchg_mem = realloc(xc->vchg_mem, xc->vchg_alloc_siz);
-			if(!xc->vchg_mem)
-				{
-				fprintf(stderr, "FATAL ERROR, could not realloc() in fstWriterEmitVariableLengthValueChange, exiting.\n");
-				exit(255);
-				}
-			}
-
-		xc->vchg_siz += fstWriterUint32WithVarint32AndLength(xc, &vm4ip[2], xc->tchn_idx - vm4ip[3], buf, len); /* do one fwrite op only */
-		vm4ip[3] = xc->tchn_idx;
-		vm4ip[2] = fpos;
-		}
-	}
+        {
+        uint32_t fpos;
+        uint32_t *vm4ip;
+
+        if(!xc->valpos_mem)
+                {
+                xc->vc_emitted = 1;
+                fstWriterCreateMmaps(xc);
+                }
+
+        handle--; /* move starting at 1 index to starting at 0 */
+        vm4ip = &(xc->valpos_mem[4*handle]);
+
+        /* there is no initial time dump for variable length value changes */
+        if(!vm4ip[1]) /* len of zero = variable length */
+                {
+                fpos = xc->vchg_siz;
+
+                if((fpos + len + 10 + 5) > xc->vchg_alloc_siz)
+                        {
+                        xc->vchg_alloc_siz += (xc->fst_break_add_size + len + 5); /* +len added in the case of extremely long vectors and small break add sizes */
+                        xc->vchg_mem = realloc(xc->vchg_mem, xc->vchg_alloc_siz);
+                        if(!xc->vchg_mem)
+                                {
+                                fprintf(stderr, "FATAL ERROR, could not realloc() in fstWriterEmitVariableLengthValueChange, exiting.\n");
+                                exit(255);
+                                }
+                        }
+
+                xc->vchg_siz += fstWriterUint32WithVarint32AndLength(xc, &vm4ip[2], xc->tchn_idx - vm4ip[3], buf, len); /* do one fwrite op only */
+                vm4ip[3] = xc->tchn_idx;
+                vm4ip[2] = fpos;
+                }
+        }
 }
 
 
 void fstWriterEmitTimeChange(void *ctx, uint64_t tim)
 {
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
-int i;
+unsigned int i;
 int skip = 0;
 if(xc)
-	{
-	if(xc->is_initial_time)
-		{
-		if(xc->size_limit_locked)	/* this resets xc->is_initial_time to one */
-			{
-			return;
-			}
-
-		if(!xc->valpos_mem)
-			{
-			fstWriterCreateMmaps(xc);
-			}
-
-		skip = 1;
-
-		xc->firsttime = (xc->vc_emitted) ? 0: tim;
-		xc->curtime = 0;
-		xc->vchg_mem[0] = '!';
-		xc->vchg_siz = 1;
-		fstWriterEmitSectionHeader(xc);
-		for(i=0;i<xc->maxhandle;i++)
-			{
-			xc->valpos_mem[4*i+2] = 0; /* zero out offset val */
-			xc->valpos_mem[4*i+3] = 0; /* zero out last time change val */
-			}
-		xc->is_initial_time = 0;
-		}
-		else
-		{
-		if((xc->vchg_siz >= xc->fst_break_size) || (xc->flush_context_pending))
-			{
-			xc->flush_context_pending = 0;
-			fstWriterFlushContextPrivate(xc);
-			xc->tchn_cnt++;
-			fstWriterVarint(xc->tchn_handle, xc->curtime);
-			}
-		}
-
-	if(!skip)
-		{
-		xc->tchn_idx++;
-		}
-	fstWriterVarint(xc->tchn_handle, tim - xc->curtime);
-	xc->tchn_cnt++;
-	xc->curtime = tim;
-	}
+        {
+        if(xc->is_initial_time)
+                {
+                if(xc->size_limit_locked)       /* this resets xc->is_initial_time to one */
+                        {
+                        return;
+                        }
+
+                if(!xc->valpos_mem)
+                        {
+                        fstWriterCreateMmaps(xc);
+                        }
+
+                skip = 1;
+
+                xc->firsttime = (xc->vc_emitted) ? 0: tim;
+                xc->curtime = 0;
+                xc->vchg_mem[0] = '!';
+                xc->vchg_siz = 1;
+                fstWriterEmitSectionHeader(xc);
+                for(i=0;i<xc->maxhandle;i++)
+                        {
+                        xc->valpos_mem[4*i+2] = 0; /* zero out offset val */
+                        xc->valpos_mem[4*i+3] = 0; /* zero out last time change val */
+                        }
+                xc->is_initial_time = 0;
+                }
+                else
+                {
+                if((xc->vchg_siz >= xc->fst_break_size) || (xc->flush_context_pending))
+                        {
+                        xc->flush_context_pending = 0;
+                        fstWriterFlushContextPrivate(xc);
+                        xc->tchn_cnt++;
+                        fstWriterVarint(xc->tchn_handle, xc->curtime);
+                        }
+                }
+
+        if(!skip)
+                {
+                xc->tchn_idx++;
+                }
+        fstWriterVarint(xc->tchn_handle, tim - xc->curtime);
+        xc->tchn_cnt++;
+        xc->curtime = tim;
+        }
 }
 
 
@@ -2950,24 +2938,24 @@ void fstWriterEmitDumpActive(void *ctx, int enable)
 struct fstWriterContext *xc = (struct fstWriterContext *)ctx;
 
 if(xc)
-	{
-	struct fstBlackoutChain *b = calloc(1, sizeof(struct fstBlackoutChain));
-
-	b->tim = xc->curtime;
-	b->active = (enable != 0);
-
-	xc->num_blackouts++;
-	if(xc->blackout_curr)
-		{
-		xc->blackout_curr->next = b;
-		xc->blackout_curr = b;
-		}
-		else
-		{
-		xc->blackout_head = b;
-		xc->blackout_curr = b;
-		}
-	}
+        {
+        struct fstBlackoutChain *b = calloc(1, sizeof(struct fstBlackoutChain));
+
+        b->tim = xc->curtime;
+        b->active = (enable != 0);
+
+        xc->num_blackouts++;
+        if(xc->blackout_curr)
+                {
+                xc->blackout_curr->next = b;
+                xc->blackout_curr = b;
+                }
+                else
+                {
+                xc->blackout_head = b;
+                xc->blackout_curr = b;
+                }
+        }
 }
 
 
@@ -2981,35 +2969,35 @@ if(xc)
  * private structs
  */
 static const char *vartypes[] = {
-	"event", "integer", "parameter", "real", "real_parameter",
-	"reg", "supply0", "supply1", "time", "tri",
-	"triand", "trior", "trireg", "tri0", "tri1",
-	"wand", "wire", "wor", "port", "sparray", "realtime",
-	"string",
-	"bit", "logic", "int", "shortint", "longint", "byte", "enum", "shortreal"
-	};
+        "event", "integer", "parameter", "real", "real_parameter",
+        "reg", "supply0", "supply1", "time", "tri",
+        "triand", "trior", "trireg", "tri0", "tri1",
+        "wand", "wire", "wor", "port", "sparray", "realtime",
+        "string",
+        "bit", "logic", "int", "shortint", "longint", "byte", "enum", "shortreal"
+        };
 
 static const char *modtypes[] = {
-	"module", "task", "function", "begin", "fork", "generate", "struct", "union", "class", "interface", "package", "program",
+        "module", "task", "function", "begin", "fork", "generate", "struct", "union", "class", "interface", "package", "program",
         "vhdl_architecture", "vhdl_procedure", "vhdl_function", "vhdl_record", "vhdl_process", "vhdl_block", "vhdl_for_generate", "vhdl_if_generate", "vhdl_generate", "vhdl_package"
-	};
+        };
 
 static const char *attrtypes[] = {
-	"misc", "array", "enum", "class"
-	};
+        "misc", "array", "enum", "class"
+        };
 
 static const char *arraytypes[] = {
-	"none", "unpacked", "packed", "sparse"
-	};
+        "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"
-	};
+        "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"
-	};
+        "none", "unpacked", "packed", "tagged_packed"
+        };
 
 
 struct fstCurrHier
@@ -3034,11 +3022,11 @@ fstHandle maxhandle;
 uint64_t num_alias;
 uint64_t vc_section_count;
 
-uint32_t *signal_lens;			/* maxhandle sized */
-unsigned char *signal_typs;		/* maxhandle sized */
-unsigned char *process_mask;		/* maxhandle-based, bitwise sized */
-uint32_t longest_signal_value_len;	/* longest len value encountered */
-unsigned char *temp_signal_value_buf;	/* malloced for len in longest_signal_value_len */
+uint32_t *signal_lens;                  /* maxhandle sized */
+unsigned char *signal_typs;             /* maxhandle sized */
+unsigned char *process_mask;            /* maxhandle-based, bitwise sized */
+uint32_t longest_signal_value_len;      /* longest len value encountered */
+unsigned char *temp_signal_value_buf;   /* malloced for len in longest_signal_value_len */
 
 signed char timescale;
 unsigned char filetype;
@@ -3047,10 +3035,10 @@ unsigned use_vcd_extensions : 1;
 unsigned double_endian_match : 1;
 unsigned native_doubles_for_cb : 1;
 unsigned contains_geom_section : 1;
-unsigned contains_hier_section : 1;	   /* valid for hier_pos */
+unsigned contains_hier_section : 1;        /* valid for hier_pos */
 unsigned contains_hier_section_lz4duo : 1; /* valid for hier_pos (contains_hier_section_lz4 always also set) */
-unsigned contains_hier_section_lz4 : 1;	   /* valid for hier_pos */
-unsigned limit_range_valid : 1;		   /* valid for limit_range_start, limit_range_end */
+unsigned contains_hier_section_lz4 : 1;    /* valid for hier_pos */
+unsigned limit_range_valid : 1;            /* valid for limit_range_start, limit_range_end */
 
 char version[FST_HDR_SIM_VERSION_SIZE + 1];
 char date[FST_HDR_DATE_SIZE + 1];
@@ -3118,13 +3106,13 @@ int fstReaderFseeko(struct fstReaderContext *xc, FILE *stream, off_t offset, int
 int rc = fseeko(stream, offset, whence);
 
 if(rc<0)
-	{
-	xc->fseek_failed = 1;
+        {
+        xc->fseek_failed = 1;
 #ifdef FST_DEBUG
-	fprintf(stderr, "Seek to #%"PRId64" (whence = %d) failed!\n", offset, whence);
-	perror("Why");
+        fprintf(stderr, "Seek to #%"PRId64" (whence = %d) failed!\n", offset, whence);
+        perror("Why");
 #endif
-	}
+        }
 
 return(rc);
 }
@@ -3136,31 +3124,31 @@ static void fstWritex(struct fstReaderContext *xc, void *v, int len)
 unsigned char *s = (unsigned char *)v;
 
 if(len)
-	{
-	if(len < FST_WRITEX_MAX)
-		{
-		if(xc->writex_pos + len >= FST_WRITEX_MAX)
-			{
-			fstWritex(xc, NULL, 0);
-			}
-
-		memcpy(xc->writex_buf + xc->writex_pos, s, len);
-		xc->writex_pos += len;
-		}
-		else
-		{
-		fstWritex(xc, NULL, 0);
-		if (write(xc->writex_fd, s, len)) { };
-		}
-	}
-	else
-	{
-	if(xc->writex_pos)
-		{
-		if(write(xc->writex_fd, xc->writex_buf, xc->writex_pos)) { };
-		xc->writex_pos = 0;
-		}
-	}
+        {
+        if(len < FST_WRITEX_MAX)
+                {
+                if(xc->writex_pos + len >= FST_WRITEX_MAX)
+                        {
+                        fstWritex(xc, NULL, 0);
+                        }
+
+                memcpy(xc->writex_buf + xc->writex_pos, s, len);
+                xc->writex_pos += len;
+                }
+                else
+                {
+                fstWritex(xc, NULL, 0);
+                if (write(xc->writex_fd, s, len)) { };
+                }
+        }
+        else
+        {
+        if(xc->writex_pos)
+                {
+                if(write(xc->writex_fd, xc->writex_buf, xc->writex_pos)) { };
+                xc->writex_pos = 0;
+                }
+        }
 }
 #endif
 
@@ -3174,11 +3162,11 @@ struct fstCurrHier *chp;
 
 free(xc->curr_flat_hier_nam); xc->curr_flat_hier_nam = NULL;
 while(xc->curr_hier)
-	{
-	chp = xc->curr_hier->prev;
-	free(xc->curr_hier);
-	xc->curr_hier = chp;
-	}
+        {
+        chp = xc->curr_hier->prev;
+        free(xc->curr_hier);
+        xc->curr_hier = chp;
+        }
 }
 
 
@@ -3186,13 +3174,13 @@ const char *fstReaderGetCurrentFlatScope(void *ctx)
 {
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 if(xc)
-	{
-	return(xc->curr_flat_hier_nam ? xc->curr_flat_hier_nam : "");
-	}
-	else
-	{
-	return(NULL);
-	}
+        {
+        return(xc->curr_flat_hier_nam ? xc->curr_flat_hier_nam : "");
+        }
+        else
+        {
+        return(NULL);
+        }
 }
 
 
@@ -3200,13 +3188,13 @@ void *fstReaderGetCurrentScopeUserInfo(void *ctx)
 {
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 if(xc)
-	{
-	return(xc->curr_hier ? xc->curr_hier->user_info : NULL);
-	}
-	else
-	{
-	return(NULL);
-	}
+        {
+        return(xc->curr_hier ? xc->curr_hier->user_info : NULL);
+        }
+        else
+        {
+        return(NULL);
+        }
 }
 
 
@@ -3215,19 +3203,19 @@ const char *fstReaderPopScope(void *ctx)
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 if(xc && xc->curr_hier)
         {
-	struct fstCurrHier *ch = xc->curr_hier;
-	if(xc->curr_hier->prev)
-		{
-		xc->curr_flat_hier_nam[xc->curr_hier->prev->len] = 0;
-		}
-		else
-		{
-		*xc->curr_flat_hier_nam = 0;
-		}
-	xc->curr_hier = xc->curr_hier->prev;
-	free(ch);
-	return(xc->curr_flat_hier_nam ? xc->curr_flat_hier_nam : "");
-	}
+        struct fstCurrHier *ch = xc->curr_hier;
+        if(xc->curr_hier->prev)
+                {
+                xc->curr_flat_hier_nam[xc->curr_hier->prev->len] = 0;
+                }
+                else
+                {
+                *xc->curr_flat_hier_nam = 0;
+                }
+        xc->curr_hier = xc->curr_hier->prev;
+        free(ch);
+        return(xc->curr_flat_hier_nam ? xc->curr_flat_hier_nam : "");
+        }
 
 return(NULL);
 }
@@ -3238,9 +3226,9 @@ void fstReaderResetScope(void *ctx)
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc)
-	{
-	while(fstReaderPopScope(xc)); /* remove any already-built scoping info */
-	}
+        {
+        while(fstReaderPopScope(xc)); /* remove any already-built scoping info */
+        }
 }
 
 
@@ -3248,32 +3236,32 @@ const char *fstReaderPushScope(void *ctx, const char *nam, void *user_info)
 {
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 if(xc)
-	{
-	struct fstCurrHier *ch = malloc(sizeof(struct fstCurrHier));
-	int chl = xc->curr_hier ? xc->curr_hier->len : 0;
-	int len = chl + 1 + strlen(nam);
-	if(len >= xc->flat_hier_alloc_len)
-		{
-		xc->curr_flat_hier_nam = xc->curr_flat_hier_nam ? realloc(xc->curr_flat_hier_nam, len+1) : malloc(len+1);
-		}
-
-	if(chl)
-		{
-		xc->curr_flat_hier_nam[chl] = '.';
-		strcpy(xc->curr_flat_hier_nam + chl + 1, nam);
-		}
-		else
-		{
-		strcpy(xc->curr_flat_hier_nam, nam);
-		len--;
-		}
-
-	ch->len = len;
-	ch->prev = xc->curr_hier;
-	ch->user_info = user_info;
-	xc->curr_hier = ch;
-	return(xc->curr_flat_hier_nam);
-	}
+        {
+        struct fstCurrHier *ch = malloc(sizeof(struct fstCurrHier));
+        int chl = xc->curr_hier ? xc->curr_hier->len : 0;
+        int len = chl + 1 + strlen(nam);
+        if(len >= xc->flat_hier_alloc_len)
+                {
+                xc->curr_flat_hier_nam = xc->curr_flat_hier_nam ? realloc(xc->curr_flat_hier_nam, len+1) : malloc(len+1);
+                }
+
+        if(chl)
+                {
+                xc->curr_flat_hier_nam[chl] = '.';
+                strcpy(xc->curr_flat_hier_nam + chl + 1, nam);
+                }
+                else
+                {
+                strcpy(xc->curr_flat_hier_nam, nam);
+                len--;
+                }
+
+        ch->len = len;
+        ch->prev = xc->curr_hier;
+        ch->user_info = user_info;
+        xc->curr_hier = ch;
+        return(xc->curr_flat_hier_nam);
+        }
 
 return(NULL);
 }
@@ -3284,9 +3272,9 @@ int fstReaderGetCurrentScopeLen(void *ctx)
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc && xc->curr_hier)
-	{
-	return(xc->curr_hier->len);
-	}
+        {
+        return(xc->curr_hier->len);
+        }
 
 return(0);
 }
@@ -3313,15 +3301,15 @@ struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc)
         {
-	facidx--;
-	if(facidx<xc->maxhandle)
-		{
-		int process_idx = facidx/8;
-		int process_bit = facidx&7;
+        facidx--;
+        if(facidx<xc->maxhandle)
+                {
+                int process_idx = facidx/8;
+                int process_bit = facidx&7;
 
-		return( (xc->process_mask[process_idx]&(1<<process_bit)) != 0 );
-		}
-	}
+                return( (xc->process_mask[process_idx]&(1<<process_bit)) != 0 );
+                }
+        }
 return(0);
 }
 
@@ -3332,15 +3320,15 @@ struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc)
         {
-	facidx--;
-	if(facidx<xc->maxhandle)
-		{
-		int idx = facidx/8;
-		int bitpos = facidx&7;
+        facidx--;
+        if(facidx<xc->maxhandle)
+                {
+                int idx = facidx/8;
+                int bitpos = facidx&7;
 
-		xc->process_mask[idx] |= (1<<bitpos);
-		}
-	}
+                xc->process_mask[idx] |= (1<<bitpos);
+                }
+        }
 }
 
 
@@ -3350,15 +3338,15 @@ struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc)
         {
-	facidx--;
-	if(facidx<xc->maxhandle)
-		{
-		int idx = facidx/8;
-		int bitpos = facidx&7;
+        facidx--;
+        if(facidx<xc->maxhandle)
+                {
+                int idx = facidx/8;
+                int bitpos = facidx&7;
 
-		xc->process_mask[idx] &= (~(1<<bitpos));
-		}
-	}
+                xc->process_mask[idx] &= (~(1<<bitpos));
+                }
+        }
 }
 
 
@@ -3368,8 +3356,8 @@ struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc)
         {
-	memset(xc->process_mask, 0xff, (xc->maxhandle+7)/8);
-	}
+        memset(xc->process_mask, 0xff, (xc->maxhandle+7)/8);
+        }
 }
 
 
@@ -3379,8 +3367,8 @@ struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc)
         {
-	memset(xc->process_mask, 0x00, (xc->maxhandle+7)/8);
-	}
+        memset(xc->process_mask, 0x00, (xc->maxhandle+7)/8);
+        }
 }
 
 
@@ -3497,13 +3485,13 @@ uint64_t fstReaderGetDumpActivityChangeTime(void *ctx, uint32_t idx)
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc && (idx < xc->num_blackouts) && (xc->blackout_times))
-	{
-	return(xc->blackout_times[idx]);
-	}
-	else
-	{
-	return(0);
-	}
+        {
+        return(xc->blackout_times[idx]);
+        }
+        else
+        {
+        return(0);
+        }
 }
 
 
@@ -3512,13 +3500,13 @@ unsigned char fstReaderGetDumpActivityChangeValue(void *ctx, uint32_t idx)
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc && (idx < xc->num_blackouts) && (xc->blackout_activity))
-	{
-	return(xc->blackout_activity[idx]);
-	}
-	else
-	{
-	return(0);
-	}
+        {
+        return(xc->blackout_activity[idx]);
+        }
+        else
+        {
+        return(0);
+        }
 }
 
 
@@ -3527,11 +3515,11 @@ void fstReaderSetLimitTimeRange(void *ctx, uint64_t start_time, uint64_t end_tim
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc)
-	{
-	xc->limit_range_valid = 1;
-	xc->limit_range_start = start_time;
-	xc->limit_range_end = end_time;
-	}
+        {
+        xc->limit_range_valid = 1;
+        xc->limit_range_start = start_time;
+        xc->limit_range_end = end_time;
+        }
 }
 
 
@@ -3540,9 +3528,9 @@ void fstReaderSetUnlimitedTimeRange(void *ctx)
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc)
-	{
-	xc->limit_range_valid = 0;
-	}
+        {
+        xc->limit_range_valid = 0;
+        }
 }
 
 
@@ -3551,9 +3539,9 @@ void fstReaderSetVcdExtensions(void *ctx, int enable)
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc)
-	{
-	xc->use_vcd_extensions = (enable != 0);
-	}
+        {
+        xc->use_vcd_extensions = (enable != 0);
+        }
 }
 
 
@@ -3561,9 +3549,9 @@ void fstReaderIterBlocksSetNativeDoublesOnCallback(void *ctx, int enable)
 {
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 if(xc)
-	{
-	xc->native_doubles_for_cb = (enable != 0);
-	}
+        {
+        xc->native_doubles_for_cb = (enable != 0);
+        }
 }
 
 /*
@@ -3605,158 +3593,158 @@ static int fstReaderRecreateHierFile(struct fstReaderContext *xc)
 int pass_status = 1;
 
 if(!xc->fh)
-	{
-	off_t offs_cache = ftello(xc->f);
-	char *fnam = malloc(strlen(xc->filename) + 6 + 16 + 32 + 1);
-	unsigned char *mem = malloc(FST_GZIO_LEN);
-	off_t hl, uclen;
-	off_t clen = 0;
-	gzFile zhandle = NULL;
-	int zfd;
-	int htyp = FST_BL_SKIP;
-
-	/* can't handle both set at once should never happen in a real file */
-	if(!xc->contains_hier_section_lz4 && xc->contains_hier_section)
-		{
-		htyp = FST_BL_HIER;
-		}
-	else
-	if(xc->contains_hier_section_lz4 && !xc->contains_hier_section)
-		{
-		htyp = xc->contains_hier_section_lz4duo ? FST_BL_HIER_LZ4DUO : FST_BL_HIER_LZ4;
-		}
-
-	sprintf(fnam, "%s.hier_%d_%p", xc->filename, getpid(), (void *)xc);
-	fstReaderFseeko(xc, xc->f, xc->hier_pos, SEEK_SET);
-	uclen = fstReaderUint64(xc->f);
+        {
+        off_t offs_cache = ftello(xc->f);
+        char *fnam = malloc(strlen(xc->filename) + 6 + 16 + 32 + 1);
+        unsigned char *mem = malloc(FST_GZIO_LEN);
+        off_t hl, uclen;
+        off_t clen = 0;
+        gzFile zhandle = NULL;
+        int zfd;
+        int htyp = FST_BL_SKIP;
+
+        /* can't handle both set at once should never happen in a real file */
+        if(!xc->contains_hier_section_lz4 && xc->contains_hier_section)
+                {
+                htyp = FST_BL_HIER;
+                }
+        else
+        if(xc->contains_hier_section_lz4 && !xc->contains_hier_section)
+                {
+                htyp = xc->contains_hier_section_lz4duo ? FST_BL_HIER_LZ4DUO : FST_BL_HIER_LZ4;
+                }
+
+        sprintf(fnam, "%s.hier_%d_%p", xc->filename, getpid(), (void *)xc);
+        fstReaderFseeko(xc, xc->f, xc->hier_pos, SEEK_SET);
+        uclen = fstReaderUint64(xc->f);
 #ifndef __MINGW32__
-	fflush(xc->f);
+        fflush(xc->f);
 #endif
-	if(htyp == FST_BL_HIER)
-		{
-		fstReaderFseeko(xc, xc->f, xc->hier_pos, SEEK_SET);
-		uclen = fstReaderUint64(xc->f);
+        if(htyp == FST_BL_HIER)
+                {
+                fstReaderFseeko(xc, xc->f, xc->hier_pos, SEEK_SET);
+                uclen = fstReaderUint64(xc->f);
 #ifndef __MINGW32__
-		fflush(xc->f);
+                fflush(xc->f);
 #endif
-		zfd = dup(fileno(xc->f));
-		zhandle = gzdopen(zfd, "rb");
-		if(!zhandle)
-			{
-			close(zfd);
-			free(mem);
-			free(fnam);
-			return(0);
-			}
-		}
-	else
-	if((htyp == FST_BL_HIER_LZ4) || (htyp == FST_BL_HIER_LZ4DUO))
-		{
-		fstReaderFseeko(xc, xc->f, xc->hier_pos - 8, SEEK_SET); /* get section len */
-		clen =  fstReaderUint64(xc->f) - 16;
-		uclen = fstReaderUint64(xc->f);
+                zfd = dup(fileno(xc->f));
+                zhandle = gzdopen(zfd, "rb");
+                if(!zhandle)
+                        {
+                        close(zfd);
+                        free(mem);
+                        free(fnam);
+                        return(0);
+                        }
+                }
+        else
+        if((htyp == FST_BL_HIER_LZ4) || (htyp == FST_BL_HIER_LZ4DUO))
+                {
+                fstReaderFseeko(xc, xc->f, xc->hier_pos - 8, SEEK_SET); /* get section len */
+                clen =  fstReaderUint64(xc->f) - 16;
+                uclen = fstReaderUint64(xc->f);
 #ifndef __MINGW32__
-		fflush(xc->f);
+                fflush(xc->f);
 #endif
-		}
+                }
 
 #ifndef __MINGW32__
-	xc->fh = fopen(fnam, "w+b");
+        xc->fh = fopen(fnam, "w+b");
         if(!xc->fh)
 #endif
                 {
                 xc->fh = tmpfile_open(&xc->fh_nam);
                 free(fnam); fnam = NULL;
                 if(!xc->fh)
-			{
-			tmpfile_close(&xc->fh, &xc->fh_nam);
-			free(mem);
-			return(0);
-			}
+                        {
+                        tmpfile_close(&xc->fh, &xc->fh_nam);
+                        free(mem);
+                        return(0);
+                        }
                 }
 
 #ifndef __MINGW32__
-	if(fnam) unlink(fnam);
+        if(fnam) unlink(fnam);
 #endif
 
-	if(htyp == FST_BL_HIER)
-		{
-	        for(hl = 0; hl < uclen; hl += FST_GZIO_LEN)
-			{
-	                size_t len = ((uclen - hl) > FST_GZIO_LEN) ? FST_GZIO_LEN : (uclen - hl);
-			size_t gzreadlen = gzread(zhandle, mem, len); /* rc should equal len... */
-			size_t fwlen;
-
-			if(gzreadlen != len)
-				{
-				pass_status = 0;
-				break;
-				}
-
-			fwlen = fstFwrite(mem, len, 1, xc->fh);
-			if(fwlen != 1)
-				{
-				pass_status = 0;
-				break;
-				}
-	                }
-	        gzclose(zhandle);
-		}
-	else
-	if(htyp == FST_BL_HIER_LZ4DUO)
-		{
-		unsigned char *lz4_cmem  = malloc(clen);
-		unsigned char *lz4_ucmem = malloc(uclen);
-		unsigned char *lz4_ucmem2;
-		uint64_t uclen2;
-		int skiplen2 = 0;
-
-		fstFread(lz4_cmem, clen, 1, xc->f);
-
-		uclen2 = fstGetVarint64(lz4_cmem, &skiplen2);
-		lz4_ucmem2 = malloc(uclen2);
-		pass_status = (uclen2 == LZ4_decompress_safe_partial ((char *)lz4_cmem + skiplen2, (char *)lz4_ucmem2, clen - skiplen2, uclen2, uclen2));
-		if(pass_status)
-			{
-			pass_status = (uclen == LZ4_decompress_safe_partial ((char *)lz4_ucmem2, (char *)lz4_ucmem, uclen2, uclen, uclen));
-
-			if(fstFwrite(lz4_ucmem, uclen, 1, xc->fh) != 1)
-				{
-				pass_status = 0;
-				}
-			}
-
-		free(lz4_ucmem2);
-		free(lz4_ucmem);
-		free(lz4_cmem);
-		}
-	else
-	if(htyp == FST_BL_HIER_LZ4)
-		{
-		unsigned char *lz4_cmem  = malloc(clen);
-		unsigned char *lz4_ucmem = malloc(uclen);
-
-		fstFread(lz4_cmem, clen, 1, xc->f);
-		pass_status = (uclen == LZ4_decompress_safe_partial ((char *)lz4_cmem, (char *)lz4_ucmem, clen, uclen, uclen));
-
-		if(fstFwrite(lz4_ucmem, uclen, 1, xc->fh) != 1)
-			{
-			pass_status = 0;
-			}
-
-		free(lz4_ucmem);
-		free(lz4_cmem);
-		}
-	else /* FST_BL_SKIP */
-		{
-		pass_status = 0;
-		}
-
-	free(mem);
-	free(fnam);
-
-	fstReaderFseeko(xc, xc->f, offs_cache, SEEK_SET);
-	}
+        if(htyp == FST_BL_HIER)
+                {
+                for(hl = 0; hl < uclen; hl += FST_GZIO_LEN)
+                        {
+                        size_t len = ((uclen - hl) > FST_GZIO_LEN) ? FST_GZIO_LEN : (uclen - hl);
+                        size_t gzreadlen = gzread(zhandle, mem, len); /* rc should equal len... */
+                        size_t fwlen;
+
+                        if(gzreadlen != len)
+                                {
+                                pass_status = 0;
+                                break;
+                                }
+
+                        fwlen = fstFwrite(mem, len, 1, xc->fh);
+                        if(fwlen != 1)
+                                {
+                                pass_status = 0;
+                                break;
+                                }
+                        }
+                gzclose(zhandle);
+                }
+        else
+        if(htyp == FST_BL_HIER_LZ4DUO)
+                {
+                unsigned char *lz4_cmem  = malloc(clen);
+                unsigned char *lz4_ucmem = malloc(uclen);
+                unsigned char *lz4_ucmem2;
+                uint64_t uclen2;
+                int skiplen2 = 0;
+
+                fstFread(lz4_cmem, clen, 1, xc->f);
+
+                uclen2 = fstGetVarint64(lz4_cmem, &skiplen2);
+                lz4_ucmem2 = malloc(uclen2);
+                pass_status = (uclen2 == (uint64_t)LZ4_decompress_safe_partial ((char *)lz4_cmem + skiplen2, (char *)lz4_ucmem2, clen - skiplen2, uclen2, uclen2));
+                if(pass_status)
+                        {
+                        pass_status = (uclen == LZ4_decompress_safe_partial ((char *)lz4_ucmem2, (char *)lz4_ucmem, uclen2, uclen, uclen));
+
+                        if(fstFwrite(lz4_ucmem, uclen, 1, xc->fh) != 1)
+                                {
+                                pass_status = 0;
+                                }
+                        }
+
+                free(lz4_ucmem2);
+                free(lz4_ucmem);
+                free(lz4_cmem);
+                }
+        else
+        if(htyp == FST_BL_HIER_LZ4)
+                {
+                unsigned char *lz4_cmem  = malloc(clen);
+                unsigned char *lz4_ucmem = malloc(uclen);
+
+                fstFread(lz4_cmem, clen, 1, xc->f);
+                pass_status = (uclen == LZ4_decompress_safe_partial ((char *)lz4_cmem, (char *)lz4_ucmem, clen, uclen, uclen));
+
+                if(fstFwrite(lz4_ucmem, uclen, 1, xc->fh) != 1)
+                        {
+                        pass_status = 0;
+                        }
+
+                free(lz4_ucmem);
+                free(lz4_cmem);
+                }
+        else /* FST_BL_SKIP */
+                {
+                pass_status = 0;
+                }
+
+        free(mem);
+        free(fnam);
+
+        fstReaderFseeko(xc, xc->f, offs_cache, SEEK_SET);
+        }
 
 return(pass_status);
 }
@@ -3768,15 +3756,15 @@ struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 int pass_status = 0;
 
 if(xc)
-	{
-	pass_status = 1;
-	if(!xc->fh)
-		{
-		pass_status = fstReaderRecreateHierFile(xc);
-		}
+        {
+        pass_status = 1;
+        if(!xc->fh)
+                {
+                pass_status = fstReaderRecreateHierFile(xc);
+                }
 
-	xc->do_rewind = 1;
-	}
+        xc->do_rewind = 1;
+        }
 
 return(pass_status);
 }
@@ -3793,149 +3781,149 @@ int ch;
 if(!xc) return(NULL);
 
 if(!xc->fh)
-	{
-	if(!fstReaderRecreateHierFile(xc))
-		{
-		return(NULL);
-		}
-	}
+        {
+        if(!fstReaderRecreateHierFile(xc))
+                {
+                return(NULL);
+                }
+        }
 
 if(xc->do_rewind)
-	{
-	xc->do_rewind = 0;
-	xc->current_handle = 0;
-	fstReaderFseeko(xc, xc->fh, 0, SEEK_SET);
-	clearerr(xc->fh);
-	}
+        {
+        xc->do_rewind = 0;
+        xc->current_handle = 0;
+        fstReaderFseeko(xc, xc->fh, 0, SEEK_SET);
+        clearerr(xc->fh);
+        }
 
 if(!(isfeof=feof(xc->fh)))
-	{
-	int tag = fgetc(xc->fh);
-	switch(tag)
-		{
-		case FST_ST_VCD_SCOPE:
-			xc->hier.htyp = FST_HT_SCOPE;
-			xc->hier.u.scope.typ = fgetc(xc->fh);
-			xc->hier.u.scope.name = pnt = xc->str_scope_nam;
-			while((ch = fgetc(xc->fh)))
-				{
-				*(pnt++) = ch;
-				}; /* scopename */
-			*pnt = 0;
-			xc->hier.u.scope.name_length = pnt - xc->hier.u.scope.name;
-
-			xc->hier.u.scope.component = pnt = xc->str_scope_comp;
-			while((ch = fgetc(xc->fh)))
-				{
-				*(pnt++) = ch;
-				}; /* scopecomp */
-			*pnt = 0;
-			xc->hier.u.scope.component_length = pnt - xc->hier.u.scope.component;
-			break;
-
-		case FST_ST_VCD_UPSCOPE:
-			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);
-
-			if(xc->hier.u.attr.typ == FST_AT_MISC)
-				{
-				if((xc->hier.u.attr.subtype == FST_MT_SOURCESTEM)||(xc->hier.u.attr.subtype == FST_MT_SOURCEISTEM))
-					{
-					int sidx_skiplen_dummy = 0;
-	                                xc->hier.u.attr.arg_from_name = fstGetVarint64((unsigned char *)xc->str_scope_nam, &sidx_skiplen_dummy);
-					}
-				}
-			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:
-		case FST_VT_VCD_REAL:
-		case FST_VT_VCD_REAL_PARAMETER:
-		case FST_VT_VCD_REG:
-		case FST_VT_VCD_SUPPLY0:
-		case FST_VT_VCD_SUPPLY1:
-		case FST_VT_VCD_TIME:
-		case FST_VT_VCD_TRI:
-		case FST_VT_VCD_TRIAND:
-		case FST_VT_VCD_TRIOR:
-		case FST_VT_VCD_TRIREG:
-		case FST_VT_VCD_TRI0:
-		case FST_VT_VCD_TRI1:
-		case FST_VT_VCD_WAND:
-		case FST_VT_VCD_WIRE:
-		case FST_VT_VCD_WOR:
-		case FST_VT_VCD_PORT:
-		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.svt_workspace = FST_SVT_NONE;
-			xc->hier.u.var.sdt_workspace = FST_SDT_NONE;
-			xc->hier.u.var.sxt_workspace = 0;
-			xc->hier.u.var.typ = tag;
-			xc->hier.u.var.direction = fgetc(xc->fh);
-			xc->hier.u.var.name = pnt = xc->str_scope_nam;
-			while((ch = fgetc(xc->fh)))
-				{
-				*(pnt++) = ch;
-				}; /* varname */
-			*pnt = 0;
-			xc->hier.u.var.name_length = pnt - xc->hier.u.var.name;
-			xc->hier.u.var.length = fstReaderVarint32(xc->fh);
-			if(tag == FST_VT_VCD_PORT)
-				{
-				xc->hier.u.var.length -= 2; /* removal of delimiting spaces */
-				xc->hier.u.var.length /= 3; /* port -> signal size adjust */
-				}
-
-			alias = fstReaderVarint32(xc->fh);
-
-			if(!alias)
-				{
-                		xc->current_handle++;
-				xc->hier.u.var.handle = xc->current_handle;
-				xc->hier.u.var.is_alias = 0;
-				}
-				else
-				{
-				xc->hier.u.var.handle = alias;
-				xc->hier.u.var.is_alias = 1;
-				}
-
-			break;
-
-		default:
-			isfeof = 1;
-			break;
-		}
-	}
+        {
+        int tag = fgetc(xc->fh);
+        switch(tag)
+                {
+                case FST_ST_VCD_SCOPE:
+                        xc->hier.htyp = FST_HT_SCOPE;
+                        xc->hier.u.scope.typ = fgetc(xc->fh);
+                        xc->hier.u.scope.name = pnt = xc->str_scope_nam;
+                        while((ch = fgetc(xc->fh)))
+                                {
+                                *(pnt++) = ch;
+                                }; /* scopename */
+                        *pnt = 0;
+                        xc->hier.u.scope.name_length = pnt - xc->hier.u.scope.name;
+
+                        xc->hier.u.scope.component = pnt = xc->str_scope_comp;
+                        while((ch = fgetc(xc->fh)))
+                                {
+                                *(pnt++) = ch;
+                                }; /* scopecomp */
+                        *pnt = 0;
+                        xc->hier.u.scope.component_length = pnt - xc->hier.u.scope.component;
+                        break;
+
+                case FST_ST_VCD_UPSCOPE:
+                        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);
+
+                        if(xc->hier.u.attr.typ == FST_AT_MISC)
+                                {
+                                if((xc->hier.u.attr.subtype == FST_MT_SOURCESTEM)||(xc->hier.u.attr.subtype == FST_MT_SOURCEISTEM))
+                                        {
+                                        int sidx_skiplen_dummy = 0;
+                                        xc->hier.u.attr.arg_from_name = fstGetVarint64((unsigned char *)xc->str_scope_nam, &sidx_skiplen_dummy);
+                                        }
+                                }
+                        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:
+                case FST_VT_VCD_REAL:
+                case FST_VT_VCD_REAL_PARAMETER:
+                case FST_VT_VCD_REG:
+                case FST_VT_VCD_SUPPLY0:
+                case FST_VT_VCD_SUPPLY1:
+                case FST_VT_VCD_TIME:
+                case FST_VT_VCD_TRI:
+                case FST_VT_VCD_TRIAND:
+                case FST_VT_VCD_TRIOR:
+                case FST_VT_VCD_TRIREG:
+                case FST_VT_VCD_TRI0:
+                case FST_VT_VCD_TRI1:
+                case FST_VT_VCD_WAND:
+                case FST_VT_VCD_WIRE:
+                case FST_VT_VCD_WOR:
+                case FST_VT_VCD_PORT:
+                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.svt_workspace = FST_SVT_NONE;
+                        xc->hier.u.var.sdt_workspace = FST_SDT_NONE;
+                        xc->hier.u.var.sxt_workspace = 0;
+                        xc->hier.u.var.typ = tag;
+                        xc->hier.u.var.direction = fgetc(xc->fh);
+                        xc->hier.u.var.name = pnt = xc->str_scope_nam;
+                        while((ch = fgetc(xc->fh)))
+                                {
+                                *(pnt++) = ch;
+                                }; /* varname */
+                        *pnt = 0;
+                        xc->hier.u.var.name_length = pnt - xc->hier.u.var.name;
+                        xc->hier.u.var.length = fstReaderVarint32(xc->fh);
+                        if(tag == FST_VT_VCD_PORT)
+                                {
+                                xc->hier.u.var.length -= 2; /* removal of delimiting spaces */
+                                xc->hier.u.var.length /= 3; /* port -> signal size adjust */
+                                }
+
+                        alias = fstReaderVarint32(xc->fh);
+
+                        if(!alias)
+                                {
+                                xc->current_handle++;
+                                xc->hier.u.var.handle = xc->current_handle;
+                                xc->hier.u.var.is_alias = 0;
+                                }
+                                else
+                                {
+                                xc->hier.u.var.handle = alias;
+                                xc->hier.u.var.is_alias = 1;
+                                }
+
+                        break;
+
+                default:
+                        isfeof = 1;
+                        break;
+                }
+        }
 
 return(!isfeof ? &xc->hier : NULL);
 }
@@ -3950,7 +3938,7 @@ int ch, scopetype;
 int vartype;
 uint32_t len, alias;
 /* uint32_t maxvalpos=0; */
-int num_signal_dyn = 65536;
+unsigned int num_signal_dyn = 65536;
 int attrtype, subtype;
 uint64_t attrarg;
 fstHandle maxhandle_scanbuild;
@@ -3960,23 +3948,23 @@ if(!xc) return(0);
 xc->longest_signal_value_len = 32; /* arbitrarily set at 32...this is much longer than an expanded double */
 
 if(!xc->fh)
-	{
-	if(!fstReaderRecreateHierFile(xc))
-		{
-		return(0);
-		}
-	}
+        {
+        if(!fstReaderRecreateHierFile(xc))
+                {
+                return(0);
+                }
+        }
 
 str = malloc(FST_ID_NAM_ATTR_SIZ+1);
 
 if(fv)
-	{
-	char time_dimension[2] = {0, 0};
-	int time_scale = 1;
+        {
+        char time_dimension[2] = {0, 0};
+        int time_scale = 1;
 
-	fprintf(fv, "$date\n\t%s\n$end\n", xc->date);
-	fprintf(fv, "$version\n\t%s\n$end\n", xc->version);
-	if(xc->timezero) fprintf(fv, "$timezero\n\t%"PRId64"\n$end\n", xc->timezero);
+        fprintf(fv, "$date\n\t%s\n$end\n", xc->date);
+        fprintf(fv, "$version\n\t%s\n$end\n", xc->version);
+        if(xc->timezero) fprintf(fv, "$timezero\n\t%"PRId64"\n$end\n", xc->timezero);
 
         switch(xc->timescale)
                 {
@@ -4014,8 +4002,8 @@ if(fv)
                 default:                                        time_dimension[0] = 'n'; break;
                 }
 
-	if(fv) fprintf(fv, "$timescale\n\t%d%ss\n$end\n", time_scale, time_dimension);
-	}
+        if(fv) fprintf(fv, "$timescale\n\t%d%ss\n$end\n", time_scale, time_dimension);
+        }
 
 xc->maxhandle = 0;
 xc->num_alias = 0;
@@ -4028,179 +4016,179 @@ xc->signal_typs = malloc(num_signal_dyn*sizeof(unsigned char));
 
 fstReaderFseeko(xc, xc->fh, 0, SEEK_SET);
 while(!feof(xc->fh))
-	{
-	int tag = fgetc(xc->fh);
-	switch(tag)
-		{
-		case FST_ST_VCD_SCOPE:
-			scopetype = fgetc(xc->fh);
-			if((scopetype < FST_ST_MIN) || (scopetype > FST_ST_MAX)) scopetype = FST_ST_VCD_MODULE;
-			pnt = str;
-			while((ch = fgetc(xc->fh)))
-				{
-				*(pnt++) = ch;
-				}; /* scopename */
-			*pnt = 0;
-			while(fgetc(xc->fh)) { }; /* scopecomp */
-
-			if(fv) fprintf(fv, "$scope %s %s $end\n", modtypes[scopetype], str);
-			break;
-
-		case FST_ST_VCD_UPSCOPE:
-			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;
-
-			if(!str[0]) { strcpy(str, "\"\""); }
-
-			attrarg = fstReaderVarint64(xc->fh);
-
-			if(fv && xc->use_vcd_extensions)
-				{
-				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
-									{
-									if((subtype == FST_MT_SOURCESTEM)||(subtype == FST_MT_SOURCEISTEM))
-										{
-										int sidx_skiplen_dummy = 0;
-										uint64_t sidx = fstGetVarint64((unsigned char *)str, &sidx_skiplen_dummy);
-
-										fprintf(fv, "$attrbegin %s %02x %"PRId64" %"PRId64" $end\n", attrtypes[attrtype], subtype, sidx, attrarg);
-										}
-										else
-										{
-										fprintf(fv, "$attrbegin %s %02x %s %"PRId64" $end\n", attrtypes[attrtype], subtype, str, attrarg);
-										}
-									}
-								break;
-					}
-				}
-			break;
-
-		case FST_ST_GEN_ATTREND:
-			if(fv && xc->use_vcd_extensions) fprintf(fv, "$attrend $end\n");
-			break;
-
-		case FST_VT_VCD_EVENT:
-		case FST_VT_VCD_INTEGER:
-		case FST_VT_VCD_PARAMETER:
-		case FST_VT_VCD_REAL:
-		case FST_VT_VCD_REAL_PARAMETER:
-		case FST_VT_VCD_REG:
-		case FST_VT_VCD_SUPPLY0:
-		case FST_VT_VCD_SUPPLY1:
-		case FST_VT_VCD_TIME:
-		case FST_VT_VCD_TRI:
-		case FST_VT_VCD_TRIAND:
-		case FST_VT_VCD_TRIOR:
-		case FST_VT_VCD_TRIREG:
-		case FST_VT_VCD_TRI0:
-		case FST_VT_VCD_TRI1:
-		case FST_VT_VCD_WAND:
-		case FST_VT_VCD_WIRE:
-		case FST_VT_VCD_WOR:
-		case FST_VT_VCD_PORT:
-		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;
-			while((ch = fgetc(xc->fh)))
-				{
-				*(pnt++) = ch;
-				}; /* varname */
-			*pnt = 0;
-			len = fstReaderVarint32(xc->fh);
-			alias = fstReaderVarint32(xc->fh);
-
-			if(!alias)
-				{
-				if(xc->maxhandle == num_signal_dyn)
-					{
-					num_signal_dyn *= 2;
-					xc->signal_lens = realloc(xc->signal_lens, num_signal_dyn*sizeof(uint32_t));
-					xc->signal_typs = realloc(xc->signal_typs, num_signal_dyn*sizeof(unsigned char));
-					}
-				xc->signal_lens[xc->maxhandle] = len;
-				xc->signal_typs[xc->maxhandle] = vartype;
-
-		                /* maxvalpos+=len; */
-				if(len > xc->longest_signal_value_len)
-					{
-					xc->longest_signal_value_len = len;
-					}
-
-				if((vartype == FST_VT_VCD_REAL) || (vartype == FST_VT_VCD_REAL_PARAMETER) || (vartype == FST_VT_VCD_REALTIME) || (vartype == FST_VT_SV_SHORTREAL))
-					{
-					len = (vartype != FST_VT_SV_SHORTREAL) ? 64 : 32;
-					xc->signal_typs[xc->maxhandle] = FST_VT_VCD_REAL;
-					}
-				if(fv)
-					{
-					char vcdid_buf[16];
-					uint32_t modlen = (vartype != FST_VT_VCD_PORT) ? len : ((len - 2) / 3);
-					fstVcdID(vcdid_buf, xc->maxhandle+1);
-					fprintf(fv, "$var %s %"PRIu32" %s %s $end\n", vartypes[vartype], modlen, vcdid_buf, str);
-					}
-                		xc->maxhandle++;
-				}
-				else
-				{
-				if((vartype == FST_VT_VCD_REAL) || (vartype == FST_VT_VCD_REAL_PARAMETER) || (vartype == FST_VT_VCD_REALTIME) || (vartype == FST_VT_SV_SHORTREAL))
-					{
-					len = (vartype != FST_VT_SV_SHORTREAL) ? 64 : 32;
-					xc->signal_typs[xc->maxhandle] = FST_VT_VCD_REAL;
-					}
-				if(fv)
-					{
-					char vcdid_buf[16];
-					uint32_t modlen = (vartype != FST_VT_VCD_PORT) ? len : ((len - 2) / 3);
-					fstVcdID(vcdid_buf, alias);
-					fprintf(fv, "$var %s %"PRIu32" %s %s $end\n", vartypes[vartype], modlen, vcdid_buf, str);
-					}
-				xc->num_alias++;
-				}
-
-			break;
-
-		default:
-			break;
-		}
-	}
+        {
+        int tag = fgetc(xc->fh);
+        switch(tag)
+                {
+                case FST_ST_VCD_SCOPE:
+                        scopetype = fgetc(xc->fh);
+                        if((scopetype < FST_ST_MIN) || (scopetype > FST_ST_MAX)) scopetype = FST_ST_VCD_MODULE;
+                        pnt = str;
+                        while((ch = fgetc(xc->fh)))
+                                {
+                                *(pnt++) = ch;
+                                }; /* scopename */
+                        *pnt = 0;
+                        while(fgetc(xc->fh)) { }; /* scopecomp */
+
+                        if(fv) fprintf(fv, "$scope %s %s $end\n", modtypes[scopetype], str);
+                        break;
+
+                case FST_ST_VCD_UPSCOPE:
+                        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;
+
+                        if(!str[0]) { strcpy(str, "\"\""); }
+
+                        attrarg = fstReaderVarint64(xc->fh);
+
+                        if(fv && xc->use_vcd_extensions)
+                                {
+                                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
+                                                                        {
+                                                                        if((subtype == FST_MT_SOURCESTEM)||(subtype == FST_MT_SOURCEISTEM))
+                                                                                {
+                                                                                int sidx_skiplen_dummy = 0;
+                                                                                uint64_t sidx = fstGetVarint64((unsigned char *)str, &sidx_skiplen_dummy);
+
+                                                                                fprintf(fv, "$attrbegin %s %02x %"PRId64" %"PRId64" $end\n", attrtypes[attrtype], subtype, sidx, attrarg);
+                                                                                }
+                                                                                else
+                                                                                {
+                                                                                fprintf(fv, "$attrbegin %s %02x %s %"PRId64" $end\n", attrtypes[attrtype], subtype, str, attrarg);
+                                                                                }
+                                                                        }
+                                                                break;
+                                        }
+                                }
+                        break;
+
+                case FST_ST_GEN_ATTREND:
+                        if(fv && xc->use_vcd_extensions) fprintf(fv, "$attrend $end\n");
+                        break;
+
+                case FST_VT_VCD_EVENT:
+                case FST_VT_VCD_INTEGER:
+                case FST_VT_VCD_PARAMETER:
+                case FST_VT_VCD_REAL:
+                case FST_VT_VCD_REAL_PARAMETER:
+                case FST_VT_VCD_REG:
+                case FST_VT_VCD_SUPPLY0:
+                case FST_VT_VCD_SUPPLY1:
+                case FST_VT_VCD_TIME:
+                case FST_VT_VCD_TRI:
+                case FST_VT_VCD_TRIAND:
+                case FST_VT_VCD_TRIOR:
+                case FST_VT_VCD_TRIREG:
+                case FST_VT_VCD_TRI0:
+                case FST_VT_VCD_TRI1:
+                case FST_VT_VCD_WAND:
+                case FST_VT_VCD_WIRE:
+                case FST_VT_VCD_WOR:
+                case FST_VT_VCD_PORT:
+                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;
+                        while((ch = fgetc(xc->fh)))
+                                {
+                                *(pnt++) = ch;
+                                }; /* varname */
+                        *pnt = 0;
+                        len = fstReaderVarint32(xc->fh);
+                        alias = fstReaderVarint32(xc->fh);
+
+                        if(!alias)
+                                {
+                                if(xc->maxhandle == num_signal_dyn)
+                                        {
+                                        num_signal_dyn *= 2;
+                                        xc->signal_lens = realloc(xc->signal_lens, num_signal_dyn*sizeof(uint32_t));
+                                        xc->signal_typs = realloc(xc->signal_typs, num_signal_dyn*sizeof(unsigned char));
+                                        }
+                                xc->signal_lens[xc->maxhandle] = len;
+                                xc->signal_typs[xc->maxhandle] = vartype;
+
+                                /* maxvalpos+=len; */
+                                if(len > xc->longest_signal_value_len)
+                                        {
+                                        xc->longest_signal_value_len = len;
+                                        }
+
+                                if((vartype == FST_VT_VCD_REAL) || (vartype == FST_VT_VCD_REAL_PARAMETER) || (vartype == FST_VT_VCD_REALTIME) || (vartype == FST_VT_SV_SHORTREAL))
+                                        {
+                                        len = (vartype != FST_VT_SV_SHORTREAL) ? 64 : 32;
+                                        xc->signal_typs[xc->maxhandle] = FST_VT_VCD_REAL;
+                                        }
+                                if(fv)
+                                        {
+                                        char vcdid_buf[16];
+                                        uint32_t modlen = (vartype != FST_VT_VCD_PORT) ? len : ((len - 2) / 3);
+                                        fstVcdID(vcdid_buf, xc->maxhandle+1);
+                                        fprintf(fv, "$var %s %"PRIu32" %s %s $end\n", vartypes[vartype], modlen, vcdid_buf, str);
+                                        }
+                                xc->maxhandle++;
+                                }
+                                else
+                                {
+                                if((vartype == FST_VT_VCD_REAL) || (vartype == FST_VT_VCD_REAL_PARAMETER) || (vartype == FST_VT_VCD_REALTIME) || (vartype == FST_VT_SV_SHORTREAL))
+                                        {
+                                        len = (vartype != FST_VT_SV_SHORTREAL) ? 64 : 32;
+                                        xc->signal_typs[xc->maxhandle] = FST_VT_VCD_REAL;
+                                        }
+                                if(fv)
+                                        {
+                                        char vcdid_buf[16];
+                                        uint32_t modlen = (vartype != FST_VT_VCD_PORT) ? len : ((len - 2) / 3);
+                                        fstVcdID(vcdid_buf, alias);
+                                        fprintf(fv, "$var %s %"PRIu32" %s %s $end\n", vartypes[vartype], modlen, vcdid_buf, str);
+                                        }
+                                xc->num_alias++;
+                                }
+
+                        break;
+
+                default:
+                        break;
+                }
+        }
 if(fv) fprintf(fv, "$enddefinitions $end\n");
 
 maxhandle_scanbuild = xc->maxhandle ? xc->maxhandle : 1; /*scan-build warning suppression, in reality we have at least one signal */
@@ -4237,306 +4225,306 @@ int gzread_pass_status = 1;
 
 sectype = fgetc(xc->f);
 if(sectype == FST_BL_ZWRAPPER)
-	{
-	FILE *fcomp;
-	off_t offpnt, uclen;
-	char gz_membuf[FST_GZIO_LEN];
-	void *zhandle;
-	int zfd;
+        {
+        FILE *fcomp;
+        off_t offpnt, uclen;
+        char gz_membuf[FST_GZIO_LEN];
+        void *zhandle;
+        int zfd;
         int flen = strlen(xc->filename);
         char *hf;
 
-	seclen = fstReaderUint64(xc->f);
-	uclen = fstReaderUint64(xc->f);
+        seclen = fstReaderUint64(xc->f);
+        uclen = fstReaderUint64(xc->f);
 
-	if(!seclen) return(0); /* not finished compressing, this is a failed read */
+        if(!seclen) return(0); /* not finished compressing, this is a failed read */
 
         hf = calloc(1, flen + 16 + 32 + 1);
 
-	sprintf(hf, "%s.upk_%d_%p", xc->filename, getpid(), (void *)xc);
-	fcomp = fopen(hf, "w+b");
-	if(!fcomp)
-		{
-		fcomp = tmpfile_open(&xc->f_nam);
-		free(hf); hf = NULL;
-		if(!fcomp) { tmpfile_close(&fcomp, &xc->f_nam); return(0); }
-		}
+        sprintf(hf, "%s.upk_%d_%p", xc->filename, getpid(), (void *)xc);
+        fcomp = fopen(hf, "w+b");
+        if(!fcomp)
+                {
+                fcomp = tmpfile_open(&xc->f_nam);
+                free(hf); hf = NULL;
+                if(!fcomp) { tmpfile_close(&fcomp, &xc->f_nam); return(0); }
+                }
 
 #if defined(FST_MACOSX)
-	setvbuf(fcomp, (char *)NULL, _IONBF, 0);   /* keeps gzip from acting weird in tandem with fopen */
+        setvbuf(fcomp, (char *)NULL, _IONBF, 0);   /* keeps gzip from acting weird in tandem with fopen */
 #endif
 
 #ifdef __MINGW32__
-	setvbuf(fcomp, (char *)NULL, _IONBF, 0);   /* keeps gzip from acting weird in tandem with fopen */
-	xc->filename_unpacked = hf;
+        setvbuf(fcomp, (char *)NULL, _IONBF, 0);   /* keeps gzip from acting weird in tandem with fopen */
+        xc->filename_unpacked = hf;
 #else
-	if(hf)
-		{
-		unlink(hf);
-		free(hf);
-		}
+        if(hf)
+                {
+                unlink(hf);
+                free(hf);
+                }
 #endif
 
-	fstReaderFseeko(xc, xc->f, 1+8+8, SEEK_SET);
+        fstReaderFseeko(xc, xc->f, 1+8+8, SEEK_SET);
 #ifndef __MINGW32__
-	fflush(xc->f);
+        fflush(xc->f);
 #endif
 
-	zfd = dup(fileno(xc->f));
-	zhandle = gzdopen(zfd, "rb");
-	if(zhandle)
-		{
-		for(offpnt = 0; offpnt < uclen; offpnt += FST_GZIO_LEN)
-			{
-			size_t this_len = ((uclen - offpnt) > FST_GZIO_LEN) ? FST_GZIO_LEN : (uclen - offpnt);
-			size_t gzreadlen = gzread(zhandle, gz_membuf, this_len);
-			size_t fwlen;
-
-	                if(gzreadlen != this_len)
-	                        {
-	                        gzread_pass_status = 0;
-	                        break;
-	                        }
-			fwlen = fstFwrite(gz_membuf, this_len, 1, fcomp);
-			if(fwlen != 1)
-				{
-				gzread_pass_status = 0;
-				break;
-				}
-			}
-		gzclose(zhandle);
-		}
-		else
-		{
-		close(zfd);
-		}
-	fflush(fcomp);
-	fclose(xc->f);
-	xc->f = fcomp;
-	}
+        zfd = dup(fileno(xc->f));
+        zhandle = gzdopen(zfd, "rb");
+        if(zhandle)
+                {
+                for(offpnt = 0; offpnt < uclen; offpnt += FST_GZIO_LEN)
+                        {
+                        size_t this_len = ((uclen - offpnt) > FST_GZIO_LEN) ? FST_GZIO_LEN : (uclen - offpnt);
+                        size_t gzreadlen = gzread(zhandle, gz_membuf, this_len);
+                        size_t fwlen;
+
+                        if(gzreadlen != this_len)
+                                {
+                                gzread_pass_status = 0;
+                                break;
+                                }
+                        fwlen = fstFwrite(gz_membuf, this_len, 1, fcomp);
+                        if(fwlen != 1)
+                                {
+                                gzread_pass_status = 0;
+                                break;
+                                }
+                        }
+                gzclose(zhandle);
+                }
+                else
+                {
+                close(zfd);
+                }
+        fflush(fcomp);
+        fclose(xc->f);
+        xc->f = fcomp;
+        }
 
 if(gzread_pass_status)
-	{
-	fstReaderFseeko(xc, xc->f, 0, SEEK_END);
-	endfile = ftello(xc->f);
+        {
+        fstReaderFseeko(xc, xc->f, 0, SEEK_END);
+        endfile = ftello(xc->f);
 
-	while(blkpos < endfile)
-		{
-		fstReaderFseeko(xc, xc->f, blkpos, SEEK_SET);
+        while(blkpos < endfile)
+                {
+                fstReaderFseeko(xc, xc->f, blkpos, SEEK_SET);
 
-		sectype = fgetc(xc->f);
-		seclen = fstReaderUint64(xc->f);
+                sectype = fgetc(xc->f);
+                seclen = fstReaderUint64(xc->f);
 
-		if(sectype == EOF)
-			{
-			break;
-			}
+                if(sectype == EOF)
+                        {
+                        break;
+                        }
 
                 if((hdr_incomplete) && (!seclen))
                         {
                         break;
                         }
 
-		if(!hdr_seen && (sectype != FST_BL_HDR))
-			{
-			break;
-			}
-
-		blkpos++;
-		if(sectype == FST_BL_HDR)
-			{
-			if(!hdr_seen)
-				{
-				int ch;
-				double dcheck;
-
-				xc->start_time = fstReaderUint64(xc->f);
-				xc->end_time = fstReaderUint64(xc->f);
-
-				hdr_incomplete = (xc->start_time == 0) && (xc->end_time == 0);
-
-				fstFread(&dcheck, 8, 1, xc->f);
-				xc->double_endian_match = (dcheck == FST_DOUBLE_ENDTEST);
-				if(!xc->double_endian_match)
-					{
-					union	{
-	  					unsigned char rvs_buf[8];
-	  					double d;
-	  					} vu;
-
-					unsigned char *dcheck_alias = (unsigned char *)&dcheck;
-					int rvs_idx;
-
-					for(rvs_idx=0;rvs_idx<8;rvs_idx++)
-						{
-						vu.rvs_buf[rvs_idx] = dcheck_alias[7-rvs_idx];
-						}
-					if(vu.d != FST_DOUBLE_ENDTEST)
-						{
-						break; /* either corrupt file or wrong architecture (offset +33 also functions as matchword) */
-						}
-					}
-
-				hdr_seen = 1;
-
-				xc->mem_used_by_writer = fstReaderUint64(xc->f);
-				xc->scope_count = fstReaderUint64(xc->f);
-				xc->var_count = fstReaderUint64(xc->f);
-				xc->maxhandle = fstReaderUint64(xc->f);
-				xc->num_alias = xc->var_count - xc->maxhandle;
-				xc->vc_section_count = fstReaderUint64(xc->f);
-				ch = fgetc(xc->f);
-				xc->timescale = (signed char)ch;
-				fstFread(xc->version, FST_HDR_SIM_VERSION_SIZE, 1, xc->f);
-				xc->version[FST_HDR_SIM_VERSION_SIZE] = 0;
-				fstFread(xc->date, FST_HDR_DATE_SIZE, 1, xc->f);
-				xc->date[FST_HDR_DATE_SIZE] = 0;
-				ch = fgetc(xc->f);
-				xc->filetype = (unsigned char)ch;
-				xc->timezero = fstReaderUint64(xc->f);
-				}
-			}
-		else if((sectype == FST_BL_VCDATA) || (sectype == FST_BL_VCDATA_DYN_ALIAS) || (sectype == FST_BL_VCDATA_DYN_ALIAS2))
-			{
-			if(hdr_incomplete)
-				{
-				uint64_t bt = fstReaderUint64(xc->f);
-				xc->end_time = fstReaderUint64(xc->f);
-
-				if(!vc_section_count_actual) { xc->start_time = bt; }
-				}
-
-			vc_section_count_actual++;
-			}
-		else if(sectype == FST_BL_GEOM)
-			{
-			if(!hdr_incomplete)
-				{
-				uint64_t clen = seclen - 24;
-				uint64_t uclen = fstReaderUint64(xc->f);
-				unsigned char *ucdata = malloc(uclen);
-				unsigned char *pnt = ucdata;
-				int i;
-
-				xc->contains_geom_section = 1;
-				xc->maxhandle = fstReaderUint64(xc->f);
-				xc->longest_signal_value_len = 32; /* arbitrarily set at 32...this is much longer than an expanded double */
-
-				free(xc->process_mask);
-				xc->process_mask = calloc(1, (xc->maxhandle+7)/8);
-
-				if(clen != uclen)
-					{
-					unsigned char *cdata = malloc(clen);
-				        unsigned long destlen = uclen;
-				        unsigned long sourcelen = clen;
-					int rc;
-
-					fstFread(cdata, clen, 1, xc->f);
-					rc = uncompress(ucdata, &destlen, cdata, sourcelen);
-
-					if(rc != Z_OK)
-						{
-						printf("geom uncompress rc = %d\n", rc);
-						exit(255);
-						}
-
-					free(cdata);
-					}
-					else
-					{
-					fstFread(ucdata, uclen, 1, xc->f);
-					}
-
-				free(xc->signal_lens);
-				xc->signal_lens = malloc(sizeof(uint32_t) * xc->maxhandle);
-				free(xc->signal_typs);
-				xc->signal_typs = malloc(sizeof(unsigned char) * xc->maxhandle);
-
-				for(i=0;i<xc->maxhandle;i++)
-					{
-			                int skiplen;
-		               		uint64_t val = fstGetVarint32(pnt, &skiplen);
-
-					pnt += skiplen;
-
-					if(val)
-						{
-						xc->signal_lens[i] = (val != 0xFFFFFFFF) ? val : 0;
-						xc->signal_typs[i] = FST_VT_VCD_WIRE;
-						if(xc->signal_lens[i] > xc->longest_signal_value_len)
-	                                        	{
-	                                        	xc->longest_signal_value_len = xc->signal_lens[i];
-	                                        	}
-						}
-						else
-						{
-						xc->signal_lens[i] = 8; /* backpatch in real */
-						xc->signal_typs[i] = FST_VT_VCD_REAL;
-						/* xc->longest_signal_value_len handled above by overly large init size */
-						}
-					}
-
-				free(xc->temp_signal_value_buf);
-				xc->temp_signal_value_buf = malloc(xc->longest_signal_value_len + 1);
-
-				free(ucdata);
-				}
-			}
-		else if(sectype == FST_BL_HIER)
-			{
-			xc->contains_hier_section = 1;
-			xc->hier_pos = ftello(xc->f);
-			}
-		else if(sectype == FST_BL_HIER_LZ4DUO)
-			{
-			xc->contains_hier_section_lz4    = 1;
-			xc->contains_hier_section_lz4duo = 1;
-			xc->hier_pos = ftello(xc->f);
-			}
-		else if(sectype == FST_BL_HIER_LZ4)
-			{
-			xc->contains_hier_section_lz4 = 1;
-			xc->hier_pos = ftello(xc->f);
-			}
-		else if(sectype == FST_BL_BLACKOUT)
-			{
-			uint32_t i;
-			uint64_t cur_bl = 0;
-			uint64_t delta;
-
-			xc->num_blackouts = fstReaderVarint32(xc->f);
-			free(xc->blackout_times);
-			xc->blackout_times = calloc(xc->num_blackouts, sizeof(uint64_t));
-			free(xc->blackout_activity);
-			xc->blackout_activity = calloc(xc->num_blackouts, sizeof(unsigned char));
-
-			for(i=0;i<xc->num_blackouts;i++)
-				{
-				xc->blackout_activity[i] = fgetc(xc->f) != 0;
-				delta = fstReaderVarint64(xc->f);
-				cur_bl += delta;
-				xc->blackout_times[i] = cur_bl;
-				}
-			}
-
-		blkpos += seclen;
-		if(!hdr_seen) break;
-		}
-
-	if(hdr_seen)
-		{
-		if(xc->vc_section_count != vc_section_count_actual)
-			{
-			xc->vc_section_count = vc_section_count_actual;
-			}
-
-		if(!xc->contains_geom_section)
-			{
-			fstReaderProcessHier(xc, NULL); /* recreate signal_lens/signal_typs info */
-			}
-		}
-	}
+                if(!hdr_seen && (sectype != FST_BL_HDR))
+                        {
+                        break;
+                        }
+
+                blkpos++;
+                if(sectype == FST_BL_HDR)
+                        {
+                        if(!hdr_seen)
+                                {
+                                int ch;
+                                double dcheck;
+
+                                xc->start_time = fstReaderUint64(xc->f);
+                                xc->end_time = fstReaderUint64(xc->f);
+
+                                hdr_incomplete = (xc->start_time == 0) && (xc->end_time == 0);
+
+                                fstFread(&dcheck, 8, 1, xc->f);
+                                xc->double_endian_match = (dcheck == FST_DOUBLE_ENDTEST);
+                                if(!xc->double_endian_match)
+                                        {
+                                        union   {
+                                                unsigned char rvs_buf[8];
+                                                double d;
+                                                } vu;
+
+                                        unsigned char *dcheck_alias = (unsigned char *)&dcheck;
+                                        int rvs_idx;
+
+                                        for(rvs_idx=0;rvs_idx<8;rvs_idx++)
+                                                {
+                                                vu.rvs_buf[rvs_idx] = dcheck_alias[7-rvs_idx];
+                                                }
+                                        if(vu.d != FST_DOUBLE_ENDTEST)
+                                                {
+                                                break; /* either corrupt file or wrong architecture (offset +33 also functions as matchword) */
+                                                }
+                                        }
+
+                                hdr_seen = 1;
+
+                                xc->mem_used_by_writer = fstReaderUint64(xc->f);
+                                xc->scope_count = fstReaderUint64(xc->f);
+                                xc->var_count = fstReaderUint64(xc->f);
+                                xc->maxhandle = fstReaderUint64(xc->f);
+                                xc->num_alias = xc->var_count - xc->maxhandle;
+                                xc->vc_section_count = fstReaderUint64(xc->f);
+                                ch = fgetc(xc->f);
+                                xc->timescale = (signed char)ch;
+                                fstFread(xc->version, FST_HDR_SIM_VERSION_SIZE, 1, xc->f);
+                                xc->version[FST_HDR_SIM_VERSION_SIZE] = 0;
+                                fstFread(xc->date, FST_HDR_DATE_SIZE, 1, xc->f);
+                                xc->date[FST_HDR_DATE_SIZE] = 0;
+                                ch = fgetc(xc->f);
+                                xc->filetype = (unsigned char)ch;
+                                xc->timezero = fstReaderUint64(xc->f);
+                                }
+                        }
+                else if((sectype == FST_BL_VCDATA) || (sectype == FST_BL_VCDATA_DYN_ALIAS) || (sectype == FST_BL_VCDATA_DYN_ALIAS2))
+                        {
+                        if(hdr_incomplete)
+                                {
+                                uint64_t bt = fstReaderUint64(xc->f);
+                                xc->end_time = fstReaderUint64(xc->f);
+
+                                if(!vc_section_count_actual) { xc->start_time = bt; }
+                                }
+
+                        vc_section_count_actual++;
+                        }
+                else if(sectype == FST_BL_GEOM)
+                        {
+                        if(!hdr_incomplete)
+                                {
+                                uint64_t clen = seclen - 24;
+                                uint64_t uclen = fstReaderUint64(xc->f);
+                                unsigned char *ucdata = malloc(uclen);
+                                unsigned char *pnt = ucdata;
+                                unsigned int i;
+
+                                xc->contains_geom_section = 1;
+                                xc->maxhandle = fstReaderUint64(xc->f);
+                                xc->longest_signal_value_len = 32; /* arbitrarily set at 32...this is much longer than an expanded double */
+
+                                free(xc->process_mask);
+                                xc->process_mask = calloc(1, (xc->maxhandle+7)/8);
+
+                                if(clen != uclen)
+                                        {
+                                        unsigned char *cdata = malloc(clen);
+                                        unsigned long destlen = uclen;
+                                        unsigned long sourcelen = clen;
+                                        int rc;
+
+                                        fstFread(cdata, clen, 1, xc->f);
+                                        rc = uncompress(ucdata, &destlen, cdata, sourcelen);
+
+                                        if(rc != Z_OK)
+                                                {
+                                                printf("geom uncompress rc = %d\n", rc);
+                                                exit(255);
+                                                }
+
+                                        free(cdata);
+                                        }
+                                        else
+                                        {
+                                        fstFread(ucdata, uclen, 1, xc->f);
+                                        }
+
+                                free(xc->signal_lens);
+                                xc->signal_lens = malloc(sizeof(uint32_t) * xc->maxhandle);
+                                free(xc->signal_typs);
+                                xc->signal_typs = malloc(sizeof(unsigned char) * xc->maxhandle);
+
+                                for(i=0;i<xc->maxhandle;i++)
+                                        {
+                                        int skiplen;
+                                        uint64_t val = fstGetVarint32(pnt, &skiplen);
+
+                                        pnt += skiplen;
+
+                                        if(val)
+                                                {
+                                                xc->signal_lens[i] = (val != 0xFFFFFFFF) ? val : 0;
+                                                xc->signal_typs[i] = FST_VT_VCD_WIRE;
+                                                if(xc->signal_lens[i] > xc->longest_signal_value_len)
+                                                        {
+                                                        xc->longest_signal_value_len = xc->signal_lens[i];
+                                                        }
+                                                }
+                                                else
+                                                {
+                                                xc->signal_lens[i] = 8; /* backpatch in real */
+                                                xc->signal_typs[i] = FST_VT_VCD_REAL;
+                                                /* xc->longest_signal_value_len handled above by overly large init size */
+                                                }
+                                        }
+
+                                free(xc->temp_signal_value_buf);
+                                xc->temp_signal_value_buf = malloc(xc->longest_signal_value_len + 1);
+
+                                free(ucdata);
+                                }
+                        }
+                else if(sectype == FST_BL_HIER)
+                        {
+                        xc->contains_hier_section = 1;
+                        xc->hier_pos = ftello(xc->f);
+                        }
+                else if(sectype == FST_BL_HIER_LZ4DUO)
+                        {
+                        xc->contains_hier_section_lz4    = 1;
+                        xc->contains_hier_section_lz4duo = 1;
+                        xc->hier_pos = ftello(xc->f);
+                        }
+                else if(sectype == FST_BL_HIER_LZ4)
+                        {
+                        xc->contains_hier_section_lz4 = 1;
+                        xc->hier_pos = ftello(xc->f);
+                        }
+                else if(sectype == FST_BL_BLACKOUT)
+                        {
+                        uint32_t i;
+                        uint64_t cur_bl = 0;
+                        uint64_t delta;
+
+                        xc->num_blackouts = fstReaderVarint32(xc->f);
+                        free(xc->blackout_times);
+                        xc->blackout_times = calloc(xc->num_blackouts, sizeof(uint64_t));
+                        free(xc->blackout_activity);
+                        xc->blackout_activity = calloc(xc->num_blackouts, sizeof(unsigned char));
+
+                        for(i=0;i<xc->num_blackouts;i++)
+                                {
+                                xc->blackout_activity[i] = fgetc(xc->f) != 0;
+                                delta = fstReaderVarint64(xc->f);
+                                cur_bl += delta;
+                                xc->blackout_times[i] = cur_bl;
+                                }
+                        }
+
+                blkpos += seclen;
+                if(!hdr_seen) break;
+                }
+
+        if(hdr_seen)
+                {
+                if(xc->vc_section_count != vc_section_count_actual)
+                        {
+                        xc->vc_section_count = vc_section_count_actual;
+                        }
+
+                if(!xc->contains_geom_section)
+                        {
+                        fstReaderProcessHier(xc, NULL); /* recreate signal_lens/signal_typs info */
+                        }
+                }
+        }
 
 return(hdr_seen);
 }
@@ -4563,31 +4551,31 @@ if((!nam)||(!(xc->f=fopen(nam, "rb"))))
         {
         int flen = strlen(nam);
         char *hf = calloc(1, flen + 6);
-	int rc;
+        int rc;
 
 #if defined(__MINGW32__) || defined(FST_MACOSX)
-	setvbuf(xc->f, (char *)NULL, _IONBF, 0);   /* keeps gzip from acting weird in tandem with fopen */
+        setvbuf(xc->f, (char *)NULL, _IONBF, 0);   /* keeps gzip from acting weird in tandem with fopen */
 #endif
 
         memcpy(hf, nam, flen);
         strcpy(hf + flen, ".hier");
         xc->fh = fopen(hf, "rb");
 
-	free(hf);
-	xc->filename = strdup(nam);
-	rc = fstReaderInit(xc);
-
-	if((rc) && (xc->vc_section_count) && (xc->maxhandle) && ((xc->fh)||(xc->contains_hier_section||(xc->contains_hier_section_lz4))))
-		{
-		/* more init */
-		xc->do_rewind = 1;
-		}
-		else
-		{
-		fstReaderClose(xc);
-		xc = NULL;
-		}
-	}
+        free(hf);
+        xc->filename = strdup(nam);
+        rc = fstReaderInit(xc);
+
+        if((rc) && (xc->vc_section_count) && (xc->maxhandle) && ((xc->fh)||(xc->contains_hier_section||(xc->contains_hier_section_lz4))))
+                {
+                /* more init */
+                xc->do_rewind = 1;
+                }
+                else
+                {
+                fstReaderClose(xc);
+                xc = NULL;
+                }
+        }
 
 return(xc);
 }
@@ -4597,15 +4585,15 @@ static void fstReaderDeallocateRvatData(void *ctx)
 {
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 if(xc)
-	{
-	free(xc->rvat_chain_mem); xc->rvat_chain_mem = NULL;
-	free(xc->rvat_frame_data); xc->rvat_frame_data = NULL;
-	free(xc->rvat_time_table); xc->rvat_time_table = NULL;
-	free(xc->rvat_chain_table); xc->rvat_chain_table = NULL;
-	free(xc->rvat_chain_table_lengths); xc->rvat_chain_table_lengths = NULL;
-
-	xc->rvat_data_valid = 0;
-	}
+        {
+        free(xc->rvat_chain_mem); xc->rvat_chain_mem = NULL;
+        free(xc->rvat_frame_data); xc->rvat_frame_data = NULL;
+        free(xc->rvat_time_table); xc->rvat_time_table = NULL;
+        free(xc->rvat_chain_table); xc->rvat_chain_table = NULL;
+        free(xc->rvat_chain_table_lengths); xc->rvat_chain_table_lengths = NULL;
+
+        xc->rvat_data_valid = 0;
+        }
 }
 
 
@@ -4614,36 +4602,36 @@ void fstReaderClose(void *ctx)
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 
 if(xc)
-	{
-	fstReaderDeallocateScopeData(xc);
-	fstReaderDeallocateRvatData(xc);
-	free(xc->rvat_sig_offs); xc->rvat_sig_offs = NULL;
-
-	free(xc->process_mask); xc->process_mask = NULL;
-	free(xc->blackout_times); xc->blackout_times = NULL;
-	free(xc->blackout_activity); xc->blackout_activity = NULL;
-	free(xc->temp_signal_value_buf); xc->temp_signal_value_buf = NULL;
-	free(xc->signal_typs); xc->signal_typs = NULL;
-	free(xc->signal_lens); xc->signal_lens = NULL;
-	free(xc->filename); xc->filename = NULL;
-
-	if(xc->fh)
-		{
-		tmpfile_close(&xc->fh, &xc->fh_nam);
-		}
-
-	if(xc->f)
-		{
-		tmpfile_close(&xc->f, &xc->f_nam);
-		if(xc->filename_unpacked)
-			{
-			unlink(xc->filename_unpacked);
-			free(xc->filename_unpacked);
-			}
-		}
-
-	free(xc);
-	}
+        {
+        fstReaderDeallocateScopeData(xc);
+        fstReaderDeallocateRvatData(xc);
+        free(xc->rvat_sig_offs); xc->rvat_sig_offs = NULL;
+
+        free(xc->process_mask); xc->process_mask = NULL;
+        free(xc->blackout_times); xc->blackout_times = NULL;
+        free(xc->blackout_activity); xc->blackout_activity = NULL;
+        free(xc->temp_signal_value_buf); xc->temp_signal_value_buf = NULL;
+        free(xc->signal_typs); xc->signal_typs = NULL;
+        free(xc->signal_lens); xc->signal_lens = NULL;
+        free(xc->filename); xc->filename = NULL;
+
+        if(xc->fh)
+                {
+                tmpfile_close(&xc->fh, &xc->fh_nam);
+                }
+
+        if(xc->f)
+                {
+                tmpfile_close(&xc->f, &xc->f_nam);
+                if(xc->filename_unpacked)
+                        {
+                        unlink(xc->filename_unpacked);
+                        free(xc->filename_unpacked);
+                        }
+                }
+
+        free(xc);
+        }
 }
 
 
@@ -4662,7 +4650,7 @@ return(fstReaderIterBlocks2(ctx, value_change_callback, NULL, user_callback_data
 
 int fstReaderIterBlocks2(void *ctx,
         void (*value_change_callback)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value),
-	void (*value_change_callback_varlen)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value, uint32_t len),
+        void (*value_change_callback_varlen)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value, uint32_t len),
         void *user_callback_data_pointer, FILE *fv)
 {
 struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
@@ -4670,7 +4658,7 @@ struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 uint64_t previous_time = UINT64_MAX;
 uint64_t *time_table = NULL;
 uint64_t tsec_nitems;
-int secnum = 0;
+unsigned int secnum = 0;
 int blocks_skipped = 0;
 off_t blkpos = 0;
 uint64_t seclen, beg_tim;
@@ -4699,921 +4687,921 @@ int packtype;
 unsigned char *mc_mem = NULL;
 uint32_t mc_mem_len; /* corresponds to largest value encountered in chain_table_lengths[i] */
 
-if(!xc) return(0);
+if(!xc) return(0);
+
+scatterptr = calloc(xc->maxhandle, sizeof(uint32_t));
+headptr = calloc(xc->maxhandle, sizeof(uint32_t));
+length_remaining = calloc(xc->maxhandle, sizeof(uint32_t));
+
+if(fv)
+        {
+        fprintf(fv, "$dumpvars\n");
+#ifndef FST_WRITEX_DISABLE
+        fflush(fv);
+        setvbuf(fv, (char *) NULL, _IONBF, 0); /* even buffered IO is slow so disable it and use our own routines that don't need seeking */
+        xc->writex_fd = fileno(fv);
+#endif
+        }
+
+for(;;)
+        {
+        uint32_t *tc_head = NULL;
+        traversal_mem_offs = 0;
+
+        fstReaderFseeko(xc, xc->f, blkpos, SEEK_SET);
+
+        sectype = fgetc(xc->f);
+        seclen = fstReaderUint64(xc->f);
+
+        if((sectype == EOF) || (sectype == FST_BL_SKIP))
+                {
+#ifdef FST_DEBUG
+                fprintf(stderr, "<< EOF >>\n");
+#endif
+                break;
+                }
+
+        blkpos++;
+        if((sectype != FST_BL_VCDATA) && (sectype != FST_BL_VCDATA_DYN_ALIAS) && (sectype != FST_BL_VCDATA_DYN_ALIAS2))
+                {
+                blkpos += seclen;
+                continue;
+                }
+
+        if(!seclen) break;
+
+        beg_tim = fstReaderUint64(xc->f);
+#ifdef FST_DEBUG
+        end_tim =
+#endif
+        fstReaderUint64(xc->f);
+
+        if(xc->limit_range_valid)
+                {
+                if(beg_tim < xc->limit_range_start)
+                        {
+                        blocks_skipped++;
+                        blkpos += seclen;
+                        continue;
+                        }
+
+                if(beg_tim > xc->limit_range_end) /* likely the compare in for(i=0;i<tsec_nitems;i++) below would do this earlier */
+                        {
+                        break;
+                        }
+                }
+
+
+        mem_required_for_traversal = fstReaderUint64(xc->f);
+        mem_for_traversal = malloc(mem_required_for_traversal + 66); /* add in potential fastlz overhead */
+#ifdef FST_DEBUG
+        fprintf(stderr, "sec: %u seclen: %d begtim: %d endtim: %d\n",
+                secnum, (int)seclen, (int)beg_tim, (int)end_tim);
+        fprintf(stderr, "\tmem_required_for_traversal: %d\n", (int)mem_required_for_traversal);
+#endif
+        /* process time block */
+        {
+        unsigned char *ucdata;
+        unsigned char *cdata;
+        unsigned long destlen /* = tsec_uclen */; /* scan-build */
+        unsigned long sourcelen /*= tsec_clen */; /* scan-build */
+        int rc;
+        unsigned char *tpnt;
+        uint64_t tpval;
+        unsigned int ti;
+
+        if(fstReaderFseeko(xc, xc->f, blkpos + seclen - 24, SEEK_SET) != 0) break;
+        tsec_uclen = fstReaderUint64(xc->f);
+        tsec_clen = fstReaderUint64(xc->f);
+        tsec_nitems = fstReaderUint64(xc->f);
+#ifdef FST_DEBUG
+        fprintf(stderr, "\ttime section unc: %d, com: %d (%d items)\n",
+                (int)tsec_uclen, (int)tsec_clen, (int)tsec_nitems);
+#endif
+        if(tsec_clen > seclen) break; /* corrupted tsec_clen: by definition it can't be larger than size of section */
+        ucdata = malloc(tsec_uclen);
+        if(!ucdata) break; /* malloc fail as tsec_uclen out of range from corrupted file */
+        destlen = tsec_uclen;
+        sourcelen = tsec_clen;
+
+        fstReaderFseeko(xc, xc->f, -24 - ((off_t)tsec_clen), SEEK_CUR);
+
+        if(tsec_uclen != tsec_clen)
+                {
+                cdata = malloc(tsec_clen);
+                fstFread(cdata, tsec_clen, 1, xc->f);
+
+                rc = uncompress(ucdata, &destlen, cdata, sourcelen);
+
+                if(rc != Z_OK)
+                        {
+                        printf("tsec uncompress rc = %d\n", rc);
+                        exit(255);
+                        }
+
+                free(cdata);
+                }
+                else
+                {
+                fstFread(ucdata, tsec_uclen, 1, xc->f);
+                }
+
+        free(time_table);
+        time_table = calloc(tsec_nitems, sizeof(uint64_t));
+        tpnt = ucdata;
+        tpval = 0;
+        for(ti=0;ti<tsec_nitems;ti++)
+                {
+                int skiplen;
+                uint64_t val = fstGetVarint64(tpnt, &skiplen);
+                tpval = time_table[ti] = tpval + val;
+                tpnt += skiplen;
+                }
+
+        tc_head = calloc(tsec_nitems /* scan-build */ ? tsec_nitems : 1, sizeof(uint32_t));
+        free(ucdata);
+        }
+
+        fstReaderFseeko(xc, xc->f, blkpos+32, SEEK_SET);
+
+        frame_uclen = fstReaderVarint64(xc->f);
+        frame_clen = fstReaderVarint64(xc->f);
+        frame_maxhandle = fstReaderVarint64(xc->f);
+
+        if(secnum == 0)
+                {
+                if((beg_tim != time_table[0]) || (blocks_skipped))
+                        {
+                        unsigned char *mu = malloc(frame_uclen);
+                        uint32_t sig_offs = 0;
+
+                        if(fv)
+                                {
+                                char wx_buf[32];
+                                int wx_len;
+
+                                if(beg_tim)
+                                        {
+                                        wx_len = sprintf(wx_buf, "#%"PRIu64"\n", beg_tim);
+                                        fstWritex(xc, wx_buf, wx_len);
+                                        }
+                                if((xc->num_blackouts)&&(cur_blackout != xc->num_blackouts))
+                                        {
+                                        if(beg_tim == xc->blackout_times[cur_blackout])
+                                                {
+                                                wx_len = sprintf(wx_buf, "$dump%s $end\n", (xc->blackout_activity[cur_blackout++]) ? "on" : "off");
+                                                fstWritex(xc, wx_buf, wx_len);
+                                                }
+                                        }
+                                }
+
+                        if(frame_uclen == frame_clen)
+                                {
+                                fstFread(mu, frame_uclen, 1, xc->f);
+                                }
+                                else
+                                {
+                                unsigned char *mc = malloc(frame_clen);
+                                int rc;
+
+                                unsigned long destlen = frame_uclen;
+                                unsigned long sourcelen = frame_clen;
+
+                                fstFread(mc, sourcelen, 1, xc->f);
+                                rc = uncompress(mu, &destlen, mc, sourcelen);
+                                if(rc != Z_OK)
+                                        {
+                                        printf("rc: %d\n", rc);
+                                        exit(255);
+                                        }
+                                free(mc);
+                                }
+
+
+                        for(idx=0;idx<frame_maxhandle;idx++)
+                                {
+                                int process_idx = idx/8;
+                                int process_bit = idx&7;
+
+                                if(xc->process_mask[process_idx]&(1<<process_bit))
+                                        {
+                                        if(xc->signal_lens[idx] <= 1)
+                                                {
+                                                if(xc->signal_lens[idx] == 1)
+                                                        {
+                                                        unsigned char val = mu[sig_offs];
+                                                        if(value_change_callback)
+                                                                {
+                                                                xc->temp_signal_value_buf[0] = val;
+                                                                xc->temp_signal_value_buf[1] = 0;
+                                                                value_change_callback(user_callback_data_pointer, beg_tim, idx+1, xc->temp_signal_value_buf);
+                                                                }
+                                                                else
+                                                                {
+                                                                if(fv)
+                                                                        {
+                                                                        char vcd_id[16];
+
+                                                                        int vcdid_len = fstVcdIDForFwrite(vcd_id+1, idx+1);
+                                                                        vcd_id[0] = val; /* collapse 3 writes into one I/O call */
+                                                                        vcd_id[vcdid_len + 1] = '\n';
+                                                                        fstWritex(xc, vcd_id, vcdid_len + 2);
+                                                                        }
+                                                                }
+                                                        }
+                                                        else
+                                                        {
+                                                        /* variable-length ("0" length) records have no initial state */
+                                                        }
+                                                }
+                                                else
+                                                {
+                                                if(xc->signal_typs[idx] != FST_VT_VCD_REAL)
+                                                        {
+                                                        if(value_change_callback)
+                                                                {
+                                                                memcpy(xc->temp_signal_value_buf, mu+sig_offs, xc->signal_lens[idx]);
+                                                                xc->temp_signal_value_buf[xc->signal_lens[idx]] = 0;
+                                                                value_change_callback(user_callback_data_pointer, beg_tim, idx+1, xc->temp_signal_value_buf);
+                                                                }
+                                                                else
+                                                                {
+                                                                if(fv)
+                                                                        {
+                                                                        char vcd_id[16];
+                                                                        int vcdid_len = fstVcdIDForFwrite(vcd_id+1, idx+1);
+
+                                                                        vcd_id[0] = (xc->signal_typs[idx] != FST_VT_VCD_PORT) ? 'b' : 'p';
+                                                                        fstWritex(xc, vcd_id, 1);
+                                                                        fstWritex(xc,mu+sig_offs, xc->signal_lens[idx]);
+
+                                                                        vcd_id[0] = ' '; /* collapse 3 writes into one I/O call */
+                                                                        vcd_id[vcdid_len + 1] = '\n';
+                                                                        fstWritex(xc, vcd_id, vcdid_len + 2);
+                                                                        }
+                                                                }
+                                                        }
+                                                        else
+                                                        {
+                                                        double d;
+                                                        unsigned char *clone_d;
+                                                        unsigned char *srcdata = mu+sig_offs;
+
+                                                        if(value_change_callback)
+                                                                {
+                                                                if(xc->native_doubles_for_cb)
+                                                                        {
+                                                                        if(xc->double_endian_match)
+                                                                                {
+                                                                                clone_d = srcdata;
+                                                                                }
+                                                                                else
+                                                                                {
+                                                                                int j;
+
+                                                                                clone_d = (unsigned char *)&d;
+                                                                                for(j=0;j<8;j++)
+                                                                                        {
+                                                                                        clone_d[j] = srcdata[7-j];
+                                                                                        }
+                                                                                }
+                                                                        value_change_callback(user_callback_data_pointer, beg_tim, idx+1, clone_d);
+                                                                        }
+                                                                        else
+                                                                        {
+                                                                        clone_d = (unsigned char *)&d;
+                                                                        if(xc->double_endian_match)
+                                                                                {
+                                                                                memcpy(clone_d, srcdata, 8);
+                                                                                }
+                                                                                else
+                                                                                {
+                                                                                int j;
+
+                                                                                for(j=0;j<8;j++)
+                                                                                        {
+                                                                                        clone_d[j] = srcdata[7-j];
+                                                                                        }
+                                                                                }
+                                                                        sprintf((char *)xc->temp_signal_value_buf, "%.16g", d);
+                                                                        value_change_callback(user_callback_data_pointer, beg_tim, idx+1, xc->temp_signal_value_buf);
+                                                                        }
+                                                                }
+                                                                else
+                                                                {
+                                                                if(fv)
+                                                                        {
+                                                                        char vcdid_buf[16];
+                                                                        char wx_buf[64];
+                                                                        int wx_len;
+
+                                                                        clone_d = (unsigned char *)&d;
+                                                                        if(xc->double_endian_match)
+                                                                                {
+                                                                                memcpy(clone_d, srcdata, 8);
+                                                                                }
+                                                                                else
+                                                                                {
+                                                                                int j;
+
+                                                                                for(j=0;j<8;j++)
+                                                                                        {
+                                                                                        clone_d[j] = srcdata[7-j];
+                                                                                        }
+                                                                                }
+
+                                                                        fstVcdID(vcdid_buf, idx+1);
+                                                                        wx_len = sprintf(wx_buf, "r%.16g %s\n", d, vcdid_buf);
+                                                                        fstWritex(xc, wx_buf, wx_len);
+                                                                        }
+                                                                }
+                                                        }
+                                                }
+                                        }
+
+                                sig_offs += xc->signal_lens[idx];
+                                }
+
+                        free(mu);
+                        fstReaderFseeko(xc, xc->f, -((off_t)frame_clen), SEEK_CUR);
+                        }
+                }
+
+        fstReaderFseeko(xc, xc->f, (off_t)frame_clen, SEEK_CUR); /* skip past compressed data */
+
+        vc_maxhandle = fstReaderVarint64(xc->f);
+        vc_start = ftello(xc->f);       /* points to '!' character */
+        packtype = fgetc(xc->f);
+
+#ifdef FST_DEBUG
+        fprintf(stderr, "\tframe_uclen: %d, frame_clen: %d, frame_maxhandle: %d\n",
+                (int)frame_uclen, (int)frame_clen, (int)frame_maxhandle);
+        fprintf(stderr, "\tvc_maxhandle: %d, packtype: %c\n", (int)vc_maxhandle, packtype);
+#endif
+
+        indx_pntr = blkpos + seclen - 24 -tsec_clen -8;
+        fstReaderFseeko(xc, xc->f, indx_pntr, SEEK_SET);
+        chain_clen = fstReaderUint64(xc->f);
+        indx_pos = indx_pntr - chain_clen;
+#ifdef FST_DEBUG
+        fprintf(stderr, "\tindx_pos: %d (%d bytes)\n", (int)indx_pos, (int)chain_clen);
+#endif
+        chain_cmem = malloc(chain_clen);
+        if(!chain_cmem) goto block_err;
+        fstReaderFseeko(xc, xc->f, indx_pos, SEEK_SET);
+        fstFread(chain_cmem, chain_clen, 1, xc->f);
+
+        if(vc_maxhandle > vc_maxhandle_largest)
+                {
+                free(chain_table);
+                free(chain_table_lengths);
+
+                vc_maxhandle_largest = vc_maxhandle;
+                chain_table = calloc((vc_maxhandle+1), sizeof(off_t));
+                chain_table_lengths = calloc((vc_maxhandle+1), sizeof(uint32_t));
+                }
+
+        if(!chain_table || !chain_table_lengths) goto block_err;
+
+        pnt = chain_cmem;
+        idx = 0;
+        pval = 0;
+
+        if(sectype == FST_BL_VCDATA_DYN_ALIAS2)
+                {
+                uint32_t prev_alias = 0;
+
+                do      {
+                        int skiplen;
+
+                        if(*pnt & 0x01)
+                                {
+                                int64_t shval = fstGetSVarint64(pnt, &skiplen) >> 1;
+                                if(shval > 0)
+                                        {
+                                        pval = chain_table[idx] = pval + shval;
+                                        if(idx) { chain_table_lengths[pidx] = pval - chain_table[pidx]; }
+                                        pidx = idx++;
+                                        }
+                                else if(shval < 0)
+                                        {
+                                        chain_table[idx] = 0;                                   /* need to explicitly zero as calloc above might not run */
+                                        chain_table_lengths[idx] = prev_alias = shval;          /* because during this loop iter would give stale data! */
+                                        idx++;
+                                        }
+                                else
+                                        {
+                                        chain_table[idx] = 0;                                   /* need to explicitly zero as calloc above might not run */
+                                        chain_table_lengths[idx] = prev_alias;                  /* because during this loop iter would give stale data! */
+                                        idx++;
+                                        }
+                                }
+                                else
+                                {
+                                uint64_t val = fstGetVarint32(pnt, &skiplen);
+
+                                fstHandle loopcnt = val >> 1;
+                                for(i=0;i<loopcnt;i++)
+                                        {
+                                        chain_table[idx++] = 0;
+                                        }
+                                }
+
+                        pnt += skiplen;
+                        } while (pnt != (chain_cmem + chain_clen));
+                }
+                else
+                {
+                do      {
+                        int skiplen;
+                        uint64_t val = fstGetVarint32(pnt, &skiplen);
+
+                        if(!val)
+                                {
+                                pnt += skiplen;
+                                val = fstGetVarint32(pnt, &skiplen);
+                                chain_table[idx] = 0;                   /* need to explicitly zero as calloc above might not run */
+                                chain_table_lengths[idx] = -val;        /* because during this loop iter would give stale data! */
+                                idx++;
+                                }
+                        else
+                        if(val&1)
+                                {
+                                pval = chain_table[idx] = pval + (val >> 1);
+                                if(idx) { chain_table_lengths[pidx] = pval - chain_table[pidx]; }
+                                pidx = idx++;
+                                }
+                        else
+                                {
+                                fstHandle loopcnt = val >> 1;
+                                for(i=0;i<loopcnt;i++)
+                                        {
+                                        chain_table[idx++] = 0;
+                                        }
+                                }
+
+                        pnt += skiplen;
+                        } while (pnt != (chain_cmem + chain_clen));
+                }
+
+        chain_table[idx] = indx_pos - vc_start;
+        chain_table_lengths[pidx] = chain_table[idx] - chain_table[pidx];
+
+        for(i=0;i<idx;i++)
+                {
+                int32_t v32 = chain_table_lengths[i];
+                if((v32 < 0) && (!chain_table[i]))
+                        {
+                        v32 = -v32;
+                        v32--;
+                        if(((uint32_t)v32) < i) /* sanity check */
+                                {
+                                chain_table[i] = chain_table[v32];
+                                chain_table_lengths[i] = chain_table_lengths[v32];
+                                }
+                        }
+                }
+
+#ifdef FST_DEBUG
+        fprintf(stderr, "\tdecompressed chain idx len: %"PRIu32"\n", idx);
+#endif
 
-scatterptr = calloc(xc->maxhandle, sizeof(uint32_t));
-headptr = calloc(xc->maxhandle, sizeof(uint32_t));
-length_remaining = calloc(xc->maxhandle, sizeof(uint32_t));
+        mc_mem_len = 16384;
+        mc_mem = malloc(mc_mem_len); /* buffer for compressed reads */
 
-if(fv)
-	{
-	fprintf(fv, "$dumpvars\n");
-#ifndef FST_WRITEX_DISABLE
-	fflush(fv);
-	setvbuf(fv, (char *) NULL, _IONBF, 0); /* even buffered IO is slow so disable it and use our own routines that don't need seeking */
-	xc->writex_fd = fileno(fv);
-#endif
-	}
+        /* check compressed VC data */
+        if(idx > xc->maxhandle) idx = xc->maxhandle;
+        for(i=0;i<idx;i++)
+                {
+                if(chain_table[i])
+                        {
+                        int process_idx = i/8;
+                        int process_bit = i&7;
+
+                        if(xc->process_mask[process_idx]&(1<<process_bit))
+                                {
+                                int rc = Z_OK;
+                                uint32_t val;
+                                uint32_t skiplen;
+                                uint32_t tdelta;
+
+                                fstReaderFseeko(xc, xc->f, vc_start + chain_table[i], SEEK_SET);
+                                val = fstReaderVarint32WithSkip(xc->f, &skiplen);
+                                if(val)
+                                        {
+                                        unsigned char *mu = mem_for_traversal + traversal_mem_offs; /* uncomp: dst */
+                                        unsigned char *mc;                                          /* comp:   src */
+                                        unsigned long destlen = val;
+                                        unsigned long sourcelen = chain_table_lengths[i];
+
+                                        if(mc_mem_len < chain_table_lengths[i])
+                                                {
+                                                free(mc_mem);
+                                                mc_mem = malloc(mc_mem_len = chain_table_lengths[i]);
+                                                }
+                                        mc = mc_mem;
 
-for(;;)
-	{
-	uint32_t *tc_head = NULL;
-	traversal_mem_offs = 0;
+                                        fstFread(mc, chain_table_lengths[i], 1, xc->f);
 
-	fstReaderFseeko(xc, xc->f, blkpos, SEEK_SET);
+                                        switch(packtype)
+                                                {
+                                                case '4': rc = (destlen == (unsigned long)LZ4_decompress_safe_partial((char *)mc, (char *)mu, sourcelen, destlen, destlen)) ? Z_OK : Z_DATA_ERROR;
+                                                          break;
+                                                case 'F': fastlz_decompress(mc, sourcelen, mu, destlen); /* rc appears unreliable */
+                                                          break;
+                                                default:  rc = uncompress(mu, &destlen, mc, sourcelen);
+                                                          break;
+                                                }
 
-	sectype = fgetc(xc->f);
-	seclen = fstReaderUint64(xc->f);
+                                        /* data to process is for(j=0;j<destlen;j++) in mu[j] */
+                                        headptr[i] = traversal_mem_offs;
+                                        length_remaining[i] = val;
+                                        traversal_mem_offs += val;
+                                        }
+                                        else
+                                        {
+                                        int destlen = chain_table_lengths[i] - skiplen;
+                                        unsigned char *mu = mem_for_traversal + traversal_mem_offs;
+                                        fstFread(mu, destlen, 1, xc->f);
+                                        /* data to process is for(j=0;j<destlen;j++) in mu[j] */
+                                        headptr[i] = traversal_mem_offs;
+                                        length_remaining[i] = destlen;
+                                        traversal_mem_offs += destlen;
+                                        }
+
+                                if(rc != Z_OK)
+                                        {
+                                        printf("\tfac: %d clen: %d (rc=%d)\n", (int)i, (int)val, rc);
+                                        exit(255);
+                                        }
+
+                                if(xc->signal_lens[i] == 1)
+                                        {
+                                        uint32_t vli = fstGetVarint32NoSkip(mem_for_traversal + headptr[i]);
+                                        uint32_t shcnt = 2 << (vli & 1);
+                                        tdelta = vli >> shcnt;
+                                        }
+                                        else
+                                        {
+                                        uint32_t vli = fstGetVarint32NoSkip(mem_for_traversal + headptr[i]);
+                                        tdelta = vli >> 1;
+                                        }
+
+                                scatterptr[i] = tc_head[tdelta];
+                                tc_head[tdelta] = i+1;
+                                }
+                        }
+                }
 
-	if((sectype == EOF) || (sectype == FST_BL_SKIP))
-		{
-#ifdef FST_DEBUG
-		fprintf(stderr, "<< EOF >>\n");
-#endif
-		break;
-		}
+        free(mc_mem); /* there is no usage below for this, no real need to clear out mc_mem or mc_mem_len */
 
-	blkpos++;
-	if((sectype != FST_BL_VCDATA) && (sectype != FST_BL_VCDATA_DYN_ALIAS) && (sectype != FST_BL_VCDATA_DYN_ALIAS2))
-		{
-		blkpos += seclen;
-		continue;
-		}
+        for(i=0;i<tsec_nitems;i++)
+                {
+                uint32_t tdelta;
+                int skiplen, skiplen2;
+                uint32_t vli;
 
-	if(!seclen) break;
+                if(fv)
+                        {
+                        char wx_buf[32];
+                        int wx_len;
+
+                        if(time_table[i] != previous_time)
+                                {
+                                if(xc->limit_range_valid)
+                                        {
+                                        if(time_table[i] > xc->limit_range_end)
+                                                {
+                                                break;
+                                                }
+                                        }
 
-	beg_tim = fstReaderUint64(xc->f);
-#ifdef FST_DEBUG
-	end_tim =
-#endif
-	fstReaderUint64(xc->f);
-
-	if(xc->limit_range_valid)
-		{
-		if(beg_tim < xc->limit_range_start)
-			{
-			blocks_skipped++;
-			blkpos += seclen;
-			continue;
-			}
-
-		if(beg_tim > xc->limit_range_end) /* likely the compare in for(i=0;i<tsec_nitems;i++) below would do this earlier */
-			{
-			break;
-			}
-		}
-
-
-	mem_required_for_traversal = fstReaderUint64(xc->f);
-	mem_for_traversal = malloc(mem_required_for_traversal + 66); /* add in potential fastlz overhead */
-#ifdef FST_DEBUG
-	fprintf(stderr, "sec: %d seclen: %d begtim: %d endtim: %d\n",
-		secnum, (int)seclen, (int)beg_tim, (int)end_tim);
-	fprintf(stderr, "\tmem_required_for_traversal: %d\n", (int)mem_required_for_traversal);
-#endif
-	/* process time block */
-	{
-	unsigned char *ucdata;
-	unsigned char *cdata;
-	unsigned long destlen /* = tsec_uclen */; /* scan-build */
-	unsigned long sourcelen /*= tsec_clen */; /* scan-build */
-	int rc;
-	unsigned char *tpnt;
-	uint64_t tpval;
-	int ti;
-
-	if(fstReaderFseeko(xc, xc->f, blkpos + seclen - 24, SEEK_SET) != 0) break;
-	tsec_uclen = fstReaderUint64(xc->f);
-	tsec_clen = fstReaderUint64(xc->f);
-	tsec_nitems = fstReaderUint64(xc->f);
-#ifdef FST_DEBUG
-	fprintf(stderr, "\ttime section unc: %d, com: %d (%d items)\n",
-		(int)tsec_uclen, (int)tsec_clen, (int)tsec_nitems);
-#endif
-	if(tsec_clen > seclen) break; /* corrupted tsec_clen: by definition it can't be larger than size of section */
-	ucdata = malloc(tsec_uclen);
-	if(!ucdata) break; /* malloc fail as tsec_uclen out of range from corrupted file */
-	destlen = tsec_uclen;
-	sourcelen = tsec_clen;
-
-	fstReaderFseeko(xc, xc->f, -24 - ((off_t)tsec_clen), SEEK_CUR);
-
-	if(tsec_uclen != tsec_clen)
-		{
-		cdata = malloc(tsec_clen);
-		fstFread(cdata, tsec_clen, 1, xc->f);
-
-		rc = uncompress(ucdata, &destlen, cdata, sourcelen);
-
-		if(rc != Z_OK)
-			{
-			printf("tsec uncompress rc = %d\n", rc);
-			exit(255);
-			}
-
-		free(cdata);
-		}
-		else
-		{
-		fstFread(ucdata, tsec_uclen, 1, xc->f);
-		}
-
-	free(time_table);
-	time_table = calloc(tsec_nitems, sizeof(uint64_t));
-	tpnt = ucdata;
-	tpval = 0;
-	for(ti=0;ti<tsec_nitems;ti++)
-		{
-		int skiplen;
-		uint64_t val = fstGetVarint64(tpnt, &skiplen);
-		tpval = time_table[ti] = tpval + val;
-		tpnt += skiplen;
-		}
-
-	tc_head = calloc(tsec_nitems /* scan-build */ ? tsec_nitems : 1, sizeof(uint32_t));
-	free(ucdata);
-	}
-
-	fstReaderFseeko(xc, xc->f, blkpos+32, SEEK_SET);
-
-	frame_uclen = fstReaderVarint64(xc->f);
-	frame_clen = fstReaderVarint64(xc->f);
-	frame_maxhandle = fstReaderVarint64(xc->f);
-
-	if(secnum == 0)
-		{
-		if((beg_tim != time_table[0]) || (blocks_skipped))
-			{
-			unsigned char *mu = malloc(frame_uclen);
-			uint32_t sig_offs = 0;
-
-			if(fv)
-				{
-				char wx_buf[32];
-				int wx_len;
-
-				if(beg_tim)
-					{
-					wx_len = sprintf(wx_buf, "#%"PRIu64"\n", beg_tim);
-					fstWritex(xc, wx_buf, wx_len);
-					}
-				if((xc->num_blackouts)&&(cur_blackout != xc->num_blackouts))
-					{
-					if(beg_tim == xc->blackout_times[cur_blackout])
-						{
-						wx_len = sprintf(wx_buf, "$dump%s $end\n", (xc->blackout_activity[cur_blackout++]) ? "on" : "off");
-						fstWritex(xc, wx_buf, wx_len);
-						}
-					}
-				}
-
-			if(frame_uclen == frame_clen)
-				{
-				fstFread(mu, frame_uclen, 1, xc->f);
-				}
-				else
-				{
-				unsigned char *mc = malloc(frame_clen);
-				int rc;
-
-				unsigned long destlen = frame_uclen;
-				unsigned long sourcelen = frame_clen;
-
-				fstFread(mc, sourcelen, 1, xc->f);
-				rc = uncompress(mu, &destlen, mc, sourcelen);
-				if(rc != Z_OK)
-					{
-					printf("rc: %d\n", rc);
-					exit(255);
-					}
-				free(mc);
-				}
-
-
-			for(idx=0;idx<frame_maxhandle;idx++)
-				{
-		                int process_idx = idx/8;
-		                int process_bit = idx&7;
-
-		                if(xc->process_mask[process_idx]&(1<<process_bit))
-					{
-					if(xc->signal_lens[idx] <= 1)
-						{
-						if(xc->signal_lens[idx] == 1)
-							{
-							unsigned char val = mu[sig_offs];
-							if(value_change_callback)
-								{
-								xc->temp_signal_value_buf[0] = val;
-								xc->temp_signal_value_buf[1] = 0;
-								value_change_callback(user_callback_data_pointer, beg_tim, idx+1, xc->temp_signal_value_buf);
-								}
-								else
-								{
-								if(fv)
-									{
-									char vcd_id[16];
-
-									int vcdid_len = fstVcdIDForFwrite(vcd_id+1, idx+1);
-									vcd_id[0] = val; /* collapse 3 writes into one I/O call */
-									vcd_id[vcdid_len + 1] = '\n';
-									fstWritex(xc, vcd_id, vcdid_len + 2);
-									}
-								}
-							}
-							else
-							{
-							/* variable-length ("0" length) records have no initial state */
-							}
-						}
-						else
-						{
-						if(xc->signal_typs[idx] != FST_VT_VCD_REAL)
-							{
-							if(value_change_callback)
-								{
-								memcpy(xc->temp_signal_value_buf, mu+sig_offs, xc->signal_lens[idx]);
-								xc->temp_signal_value_buf[xc->signal_lens[idx]] = 0;
-								value_change_callback(user_callback_data_pointer, beg_tim, idx+1, xc->temp_signal_value_buf);
-								}
-								else
-								{
-								if(fv)
-									{
-									char vcd_id[16];
-									int vcdid_len = fstVcdIDForFwrite(vcd_id+1, idx+1);
-
-									vcd_id[0] = (xc->signal_typs[idx] != FST_VT_VCD_PORT) ? 'b' : 'p';
-									fstWritex(xc, vcd_id, 1);
-									fstWritex(xc,mu+sig_offs, xc->signal_lens[idx]);
-
-									vcd_id[0] = ' '; /* collapse 3 writes into one I/O call */
-									vcd_id[vcdid_len + 1] = '\n';
-									fstWritex(xc, vcd_id, vcdid_len + 2);
-									}
-								}
-							}
-							else
-							{
-							double d;
-							unsigned char *clone_d;
-							unsigned char *srcdata = mu+sig_offs;
-
-							if(value_change_callback)
-								{
-								if(xc->native_doubles_for_cb)
-									{
-									if(xc->double_endian_match)
-										{
-										clone_d = srcdata;
-										}
-										else
-										{
-										int j;
-
-										clone_d = (unsigned char *)&d;
-										for(j=0;j<8;j++)
-											{
-											clone_d[j] = srcdata[7-j];
-											}
-										}
-									value_change_callback(user_callback_data_pointer, beg_tim, idx+1, clone_d);
-									}
-									else
-									{
-									clone_d = (unsigned char *)&d;
-									if(xc->double_endian_match)
-										{
-										memcpy(clone_d, srcdata, 8);
-										}
-										else
-										{
-										int j;
-
-										for(j=0;j<8;j++)
-											{
-											clone_d[j] = srcdata[7-j];
-											}
-										}
-									sprintf((char *)xc->temp_signal_value_buf, "%.16g", d);
-									value_change_callback(user_callback_data_pointer, beg_tim, idx+1, xc->temp_signal_value_buf);
-									}
-								}
-								else
-								{
-								if(fv)
-									{
-									char vcdid_buf[16];
-									char wx_buf[64];
-									int wx_len;
-
-									clone_d = (unsigned char *)&d;
-									if(xc->double_endian_match)
-										{
-										memcpy(clone_d, srcdata, 8);
-										}
-										else
-										{
-										int j;
-
-										for(j=0;j<8;j++)
-											{
-											clone_d[j] = srcdata[7-j];
-											}
-										}
-
-									fstVcdID(vcdid_buf, idx+1);
-									wx_len = sprintf(wx_buf, "r%.16g %s\n", d, vcdid_buf);
-									fstWritex(xc, wx_buf, wx_len);
-									}
-								}
-							}
-						}
-					}
-
-				sig_offs += xc->signal_lens[idx];
-				}
-
-			free(mu);
-			fstReaderFseeko(xc, xc->f, -((off_t)frame_clen), SEEK_CUR);
-			}
-		}
-
-	fstReaderFseeko(xc, xc->f, (off_t)frame_clen, SEEK_CUR); /* skip past compressed data */
-
-	vc_maxhandle = fstReaderVarint64(xc->f);
-	vc_start = ftello(xc->f);	/* points to '!' character */
-	packtype = fgetc(xc->f);
+                                wx_len = sprintf(wx_buf, "#%"PRIu64"\n", time_table[i]);
+                                fstWritex(xc, wx_buf, wx_len);
 
-#ifdef FST_DEBUG
-	fprintf(stderr, "\tframe_uclen: %d, frame_clen: %d, frame_maxhandle: %d\n",
-		(int)frame_uclen, (int)frame_clen, (int)frame_maxhandle);
-	fprintf(stderr, "\tvc_maxhandle: %d, packtype: %c\n", (int)vc_maxhandle, packtype);
-#endif
+                                if((xc->num_blackouts)&&(cur_blackout != xc->num_blackouts))
+                                        {
+                                        if(time_table[i] == xc->blackout_times[cur_blackout])
+                                                {
+                                                wx_len = sprintf(wx_buf, "$dump%s $end\n", (xc->blackout_activity[cur_blackout++]) ? "on" : "off");
+                                                fstWritex(xc, wx_buf, wx_len);
+                                                }
+                                        }
+                                previous_time = time_table[i];
+                                }
+                        }
 
-	indx_pntr = blkpos + seclen - 24 -tsec_clen -8;
-	fstReaderFseeko(xc, xc->f, indx_pntr, SEEK_SET);
-	chain_clen = fstReaderUint64(xc->f);
-	indx_pos = indx_pntr - chain_clen;
-#ifdef FST_DEBUG
-	fprintf(stderr, "\tindx_pos: %d (%d bytes)\n", (int)indx_pos, (int)chain_clen);
-#endif
-	chain_cmem = malloc(chain_clen);
-	if(!chain_cmem) goto block_err;
-	fstReaderFseeko(xc, xc->f, indx_pos, SEEK_SET);
-	fstFread(chain_cmem, chain_clen, 1, xc->f);
-
-	if(vc_maxhandle > vc_maxhandle_largest)
-		{
-		free(chain_table);
-		free(chain_table_lengths);
-
-		vc_maxhandle_largest = vc_maxhandle;
-		chain_table = calloc((vc_maxhandle+1), sizeof(off_t));
-		chain_table_lengths = calloc((vc_maxhandle+1), sizeof(uint32_t));
-		}
-
-	if(!chain_table || !chain_table_lengths) goto block_err;
-
-	pnt = chain_cmem;
-	idx = 0;
-	pval = 0;
-
-	if(sectype == FST_BL_VCDATA_DYN_ALIAS2)
-		{
-		uint32_t prev_alias = 0;
-
-		do	{
-			int skiplen;
-
-			if(*pnt & 0x01)
-				{
-				int64_t shval = fstGetSVarint64(pnt, &skiplen) >> 1;
-				if(shval > 0)
-					{
-					pval = chain_table[idx] = pval + shval;
-					if(idx) { chain_table_lengths[pidx] = pval - chain_table[pidx]; }
-					pidx = idx++;
-					}
-				else if(shval < 0)
-					{
-					chain_table[idx] = 0;					/* need to explicitly zero as calloc above might not run */
-					chain_table_lengths[idx] = prev_alias = shval;		/* because during this loop iter would give stale data! */
-					idx++;
-					}
-				else
-					{
-					chain_table[idx] = 0;					/* need to explicitly zero as calloc above might not run */
-					chain_table_lengths[idx] = prev_alias;			/* because during this loop iter would give stale data! */
-					idx++;
-					}
-				}
-				else
-				{
-				uint64_t val = fstGetVarint32(pnt, &skiplen);
-
-				int loopcnt = val >> 1;
-				for(i=0;i<loopcnt;i++)
-					{
-					chain_table[idx++] = 0;
-					}
-				}
-
-			pnt += skiplen;
-			} while (pnt != (chain_cmem + chain_clen));
-		}
-		else
-		{
-		do	{
-			int skiplen;
-			uint64_t val = fstGetVarint32(pnt, &skiplen);
-
-			if(!val)
-				{
-				pnt += skiplen;
-				val = fstGetVarint32(pnt, &skiplen);
-				chain_table[idx] = 0;			/* need to explicitly zero as calloc above might not run */
-				chain_table_lengths[idx] = -val;	/* because during this loop iter would give stale data! */
-				idx++;
-				}
-			else
-			if(val&1)
-				{
-				pval = chain_table[idx] = pval + (val >> 1);
-				if(idx) { chain_table_lengths[pidx] = pval - chain_table[pidx]; }
-				pidx = idx++;
-				}
-			else
-				{
-				int loopcnt = val >> 1;
-				for(i=0;i<loopcnt;i++)
-					{
-					chain_table[idx++] = 0;
-					}
-				}
-
-			pnt += skiplen;
-			} while (pnt != (chain_cmem + chain_clen));
-		}
-
-	chain_table[idx] = indx_pos - vc_start;
-	chain_table_lengths[pidx] = chain_table[idx] - chain_table[pidx];
-
-	for(i=0;i<idx;i++)
-		{
-		int32_t v32 = chain_table_lengths[i];
-		if((v32 < 0) && (!chain_table[i]))
-			{
-			v32 = -v32;
-			v32--;
-			if(((uint32_t)v32) < i) /* sanity check */
-				{
-				chain_table[i] = chain_table[v32];
-				chain_table_lengths[i] = chain_table_lengths[v32];
-				}
-			}
-		}
+                while(tc_head[i])
+                        {
+                        idx = tc_head[i] - 1;
+                        vli = fstGetVarint32(mem_for_traversal + headptr[idx], &skiplen);
+
+                        if(xc->signal_lens[idx] <= 1)
+                                {
+                                if(xc->signal_lens[idx] == 1)
+                                        {
+                                        unsigned char val;
+                                        if(!(vli & 1))
+                                                {
+                                                /* tdelta = vli >> 2; */ /* scan-build */
+                                                val = ((vli >> 1) & 1) | '0';
+                                                }
+                                                else
+                                                {
+                                                /* tdelta = vli >> 4; */ /* scan-build */
+                                                val = FST_RCV_STR[((vli >> 1) & 7)];
+                                                }
 
-#ifdef FST_DEBUG
-	fprintf(stderr, "\tdecompressed chain idx len: %"PRIu32"\n", idx);
-#endif
+                                        if(value_change_callback)
+                                                {
+                                                xc->temp_signal_value_buf[0] = val;
+                                                xc->temp_signal_value_buf[1] = 0;
+                                                value_change_callback(user_callback_data_pointer, time_table[i], idx+1, xc->temp_signal_value_buf);
+                                                }
+                                                else
+                                                {
+                                                if(fv)
+                                                        {
+                                                        char vcd_id[16];
+                                                        int vcdid_len = fstVcdIDForFwrite(vcd_id+1, idx+1);
+
+                                                        vcd_id[0] = val;
+                                                        vcd_id[vcdid_len+1] = '\n';
+                                                        fstWritex(xc, vcd_id, vcdid_len+2);
+                                                        }
+                                                }
+                                        headptr[idx] += skiplen;
+                                        length_remaining[idx] -= skiplen;
+
+                                        tc_head[i] = scatterptr[idx];
+                                        scatterptr[idx] = 0;
+
+                                        if(length_remaining[idx])
+                                                {
+                                                int shamt;
+                                                vli = fstGetVarint32NoSkip(mem_for_traversal + headptr[idx]);
+                                                shamt = 2 << (vli & 1);
+                                                tdelta = vli >> shamt;
+
+                                                scatterptr[idx] = tc_head[i+tdelta];
+                                                tc_head[i+tdelta] = idx+1;
+                                                }
+                                        }
+                                        else
+                                        {
+                                        unsigned char *vdata;
+                                        uint32_t len;
+
+                                        vli = fstGetVarint32(mem_for_traversal + headptr[idx], &skiplen);
+                                        len = fstGetVarint32(mem_for_traversal + headptr[idx] + skiplen, &skiplen2);
+                                        /* tdelta = vli >> 1; */ /* scan-build */
+                                        skiplen += skiplen2;
+                                        vdata = mem_for_traversal + headptr[idx] + skiplen;
+
+                                        if(!(vli & 1))
+                                                {
+                                                if(value_change_callback_varlen)
+                                                        {
+                                                        value_change_callback_varlen(user_callback_data_pointer, time_table[i], idx+1, vdata, len);
+                                                        }
+                                                        else
+                                                        {
+                                                        if(fv)
+                                                                {
+                                                                char vcd_id[16];
+                                                                int vcdid_len;
+
+                                                                vcd_id[0] = 's';
+                                                                fstWritex(xc, vcd_id, 1);
+
+                                                                vcdid_len = fstVcdIDForFwrite(vcd_id+1, idx+1);
+                                                                {
+                                                                unsigned char *vesc = malloc(len*4 + 1);
+                                                                int vlen = fstUtilityBinToEsc(vesc, vdata, len);
+                                                                fstWritex(xc, vesc, vlen);
+                                                                free(vesc);
+                                                                }
+
+                                                                vcd_id[0] = ' ';
+                                                                vcd_id[vcdid_len + 1] = '\n';
+                                                                fstWritex(xc, vcd_id, vcdid_len+2);
+                                                                }
+                                                        }
+                                                }
+
+                                        skiplen += len;
+                                        headptr[idx] += skiplen;
+                                        length_remaining[idx] -= skiplen;
+
+                                        tc_head[i] = scatterptr[idx];
+                                        scatterptr[idx] = 0;
+
+                                        if(length_remaining[idx])
+                                                {
+                                                vli = fstGetVarint32NoSkip(mem_for_traversal + headptr[idx]);
+                                                tdelta = vli >> 1;
+
+                                                scatterptr[idx] = tc_head[i+tdelta];
+                                                tc_head[i+tdelta] = idx+1;
+                                                }
+                                        }
+                                }
+                                else
+                                {
+                                uint32_t len = xc->signal_lens[idx];
+                                unsigned char *vdata;
+
+                                vli = fstGetVarint32(mem_for_traversal + headptr[idx], &skiplen);
+                                /* tdelta = vli >> 1; */ /* scan-build */
+                                vdata = mem_for_traversal + headptr[idx] + skiplen;
+
+                                if(xc->signal_typs[idx] != FST_VT_VCD_REAL)
+                                        {
+                                        if(!(vli & 1))
+                                                {
+                                                int byte = 0;
+                                                int bit;
+                                                unsigned int j;
+
+                                                for(j=0;j<len;j++)
+                                                        {
+                                                        unsigned char ch;
+                                                        byte = j/8;
+                                                        bit = 7 - (j & 7);
+                                                        ch = ((vdata[byte] >> bit) & 1) | '0';
+                                                        xc->temp_signal_value_buf[j] = ch;
+                                                        }
+                                                xc->temp_signal_value_buf[j] = 0;
+
+                                                if(value_change_callback)
+                                                        {
+                                                        value_change_callback(user_callback_data_pointer, time_table[i], idx+1, xc->temp_signal_value_buf);
+                                                        }
+                                                        else
+                                                        {
+                                                        if(fv)  {
+                                                                unsigned char ch_bp = (xc->signal_typs[idx] != FST_VT_VCD_PORT) ? 'b' : 'p';
+
+                                                                fstWritex(xc, &ch_bp, 1);
+                                                                fstWritex(xc, xc->temp_signal_value_buf, len);
+                                                                }
+                                                        }
+
+                                                len = byte+1;
+                                                }
+                                                else
+                                                {
+                                                if(value_change_callback)
+                                                        {
+                                                        memcpy(xc->temp_signal_value_buf, vdata, len);
+                                                        xc->temp_signal_value_buf[len] = 0;
+                                                        value_change_callback(user_callback_data_pointer, time_table[i], idx+1, xc->temp_signal_value_buf);
+                                                        }
+                                                        else
+                                                        {
+                                                        if(fv)
+                                                                {
+                                                                unsigned char ch_bp =  (xc->signal_typs[idx] != FST_VT_VCD_PORT) ? 'b' : 'p';
+
+                                                                fstWritex(xc, &ch_bp, 1);
+                                                                fstWritex(xc, vdata, len);
+                                                                }
+                                                        }
+                                                }
+                                        }
+                                        else
+                                        {
+                                        double d;
+                                        unsigned char *clone_d /*= (unsigned char *)&d */; /* scan-build */
+                                        unsigned char buf[8];
+                                        unsigned char *srcdata;
+
+                                        if(!(vli & 1))  /* very rare case, but possible */
+                                                {
+                                                int bit;
+                                                int j;
+
+                                                for(j=0;j<8;j++)
+                                                        {
+                                                        unsigned char ch;
+                                                        bit = 7 - (j & 7);
+                                                        ch = ((vdata[0] >> bit) & 1) | '0';
+                                                        buf[j] = ch;
+                                                        }
+
+                                                len = 1;
+                                                srcdata = buf;
+                                                }
+                                                else
+                                                {
+                                                srcdata = vdata;
+                                                }
 
-	mc_mem_len = 16384;
-	mc_mem = malloc(mc_mem_len); /* buffer for compressed reads */
-
-	/* check compressed VC data */
-	if(idx > xc->maxhandle) idx = xc->maxhandle;
-	for(i=0;i<idx;i++)
-		{
-		if(chain_table[i])
-			{
-	                int process_idx = i/8;
-	                int process_bit = i&7;
-
-	                if(xc->process_mask[process_idx]&(1<<process_bit))
-				{
-				int rc = Z_OK;
-				uint32_t val;
-				uint32_t skiplen;
-				uint32_t tdelta;
-
-				fstReaderFseeko(xc, xc->f, vc_start + chain_table[i], SEEK_SET);
-				val = fstReaderVarint32WithSkip(xc->f, &skiplen);
-				if(val)
-					{
-					unsigned char *mu = mem_for_traversal + traversal_mem_offs; /* uncomp: dst */
-					unsigned char *mc;					    /* comp:   src */
-					unsigned long destlen = val;
-					unsigned long sourcelen = chain_table_lengths[i];
-
-					if(mc_mem_len < chain_table_lengths[i])
-						{
-						free(mc_mem);
-						mc_mem = malloc(mc_mem_len = chain_table_lengths[i]);
-						}
-					mc = mc_mem;
-
-					fstFread(mc, chain_table_lengths[i], 1, xc->f);
-
-					switch(packtype)
-						{
-						case '4': rc = (destlen == LZ4_decompress_safe_partial((char *)mc, (char *)mu, sourcelen, destlen, destlen)) ? Z_OK : Z_DATA_ERROR;
-							  break;
-						case 'F': fastlz_decompress(mc, sourcelen, mu, destlen); /* rc appears unreliable */
-							  break;
-						default:  rc = uncompress(mu, &destlen, mc, sourcelen);
-							  break;
-						}
-
-					/* data to process is for(j=0;j<destlen;j++) in mu[j] */
-					headptr[i] = traversal_mem_offs;
-					length_remaining[i] = val;
-					traversal_mem_offs += val;
-					}
-					else
-					{
-					int destlen = chain_table_lengths[i] - skiplen;
-					unsigned char *mu = mem_for_traversal + traversal_mem_offs;
-					fstFread(mu, destlen, 1, xc->f);
-					/* data to process is for(j=0;j<destlen;j++) in mu[j] */
-					headptr[i] = traversal_mem_offs;
-					length_remaining[i] = destlen;
-					traversal_mem_offs += destlen;
-					}
-
-				if(rc != Z_OK)
-					{
-					printf("\tfac: %d clen: %d (rc=%d)\n", (int)i, (int)val, rc);
-					exit(255);
-					}
-
-				if(xc->signal_lens[i] == 1)
-					{
-					uint32_t vli = fstGetVarint32NoSkip(mem_for_traversal + headptr[i]);
-					uint32_t shcnt = 2 << (vli & 1);
-					tdelta = vli >> shcnt;
-					}
-					else
-					{
-					uint32_t vli = fstGetVarint32NoSkip(mem_for_traversal + headptr[i]);
-					tdelta = vli >> 1;
-					}
-
-				scatterptr[i] = tc_head[tdelta];
-				tc_head[tdelta] = i+1;
-				}
-			}
-		}
-
-	free(mc_mem); /* there is no usage below for this, no real need to clear out mc_mem or mc_mem_len */
-
-	for(i=0;i<tsec_nitems;i++)
-		{
-		uint32_t tdelta;
-		int skiplen, skiplen2;
-		uint32_t vli;
-
-		if(fv)
-			{
-			char wx_buf[32];
-			int wx_len;
-
-			if(time_table[i] != previous_time)
-				{
-				if(xc->limit_range_valid)
-					{
-					if(time_table[i] > xc->limit_range_end)
-						{
-						break;
-						}
-					}
-
-				wx_len = sprintf(wx_buf, "#%"PRIu64"\n", time_table[i]);
-				fstWritex(xc, wx_buf, wx_len);
-
-				if((xc->num_blackouts)&&(cur_blackout != xc->num_blackouts))
-					{
-					if(time_table[i] == xc->blackout_times[cur_blackout])
-						{
-						wx_len = sprintf(wx_buf, "$dump%s $end\n", (xc->blackout_activity[cur_blackout++]) ? "on" : "off");
-						fstWritex(xc, wx_buf, wx_len);
-						}
-					}
-				previous_time = time_table[i];
-				}
-			}
-
-		while(tc_head[i])
-			{
-			idx = tc_head[i] - 1;
-			vli = fstGetVarint32(mem_for_traversal + headptr[idx], &skiplen);
-
-			if(xc->signal_lens[idx] <= 1)
-				{
-				if(xc->signal_lens[idx] == 1)
-					{
-					unsigned char val;
-					if(!(vli & 1))
-						{
-						/* tdelta = vli >> 2; */ /* scan-build */
-						val = ((vli >> 1) & 1) | '0';
-						}
-						else
-						{
-						/* tdelta = vli >> 4; */ /* scan-build */
-						val = FST_RCV_STR[((vli >> 1) & 7)];
-						}
-
-					if(value_change_callback)
-						{
-						xc->temp_signal_value_buf[0] = val;
-						xc->temp_signal_value_buf[1] = 0;
-						value_change_callback(user_callback_data_pointer, time_table[i], idx+1, xc->temp_signal_value_buf);
-						}
-						else
-						{
-						if(fv)
-							{
-							char vcd_id[16];
-							int vcdid_len = fstVcdIDForFwrite(vcd_id+1, idx+1);
-
-							vcd_id[0] = val;
-							vcd_id[vcdid_len+1] = '\n';
-							fstWritex(xc, vcd_id, vcdid_len+2);
-							}
-						}
-					headptr[idx] += skiplen;
-					length_remaining[idx] -= skiplen;
-
-					tc_head[i] = scatterptr[idx];
-					scatterptr[idx] = 0;
-
-					if(length_remaining[idx])
-						{
-						int shamt;
-						vli = fstGetVarint32NoSkip(mem_for_traversal + headptr[idx]);
-						shamt = 2 << (vli & 1);
-						tdelta = vli >> shamt;
-
-						scatterptr[idx] = tc_head[i+tdelta];
-						tc_head[i+tdelta] = idx+1;
-						}
-					}
-					else
-					{
-					unsigned char *vdata;
-					uint32_t len;
-
-					vli = fstGetVarint32(mem_for_traversal + headptr[idx], &skiplen);
-					len = fstGetVarint32(mem_for_traversal + headptr[idx] + skiplen, &skiplen2);
-					/* tdelta = vli >> 1; */ /* scan-build */
-					skiplen += skiplen2;
-					vdata = mem_for_traversal + headptr[idx] + skiplen;
-
-					if(!(vli & 1))
-						{
-						if(value_change_callback_varlen)
-							{
-							value_change_callback_varlen(user_callback_data_pointer, time_table[i], idx+1, vdata, len);
-							}
-							else
-							{
-							if(fv)
-								{
-								char vcd_id[16];
-								int vcdid_len;
-
-								vcd_id[0] = 's';
-								fstWritex(xc, vcd_id, 1);
-
-								vcdid_len = fstVcdIDForFwrite(vcd_id+1, idx+1);
-								{
-								unsigned char *vesc = malloc(len*4 + 1);
-								int vlen = fstUtilityBinToEsc(vesc, vdata, len);
-								fstWritex(xc, vesc, vlen);
-								free(vesc);
-								}
-
-								vcd_id[0] = ' ';
-								vcd_id[vcdid_len + 1] = '\n';
-								fstWritex(xc, vcd_id, vcdid_len+2);
-								}
-							}
-						}
-
-					skiplen += len;
-					headptr[idx] += skiplen;
-					length_remaining[idx] -= skiplen;
-
-					tc_head[i] = scatterptr[idx];
-					scatterptr[idx] = 0;
-
-					if(length_remaining[idx])
-						{
-						vli = fstGetVarint32NoSkip(mem_for_traversal + headptr[idx]);
-						tdelta = vli >> 1;
-
-						scatterptr[idx] = tc_head[i+tdelta];
-						tc_head[i+tdelta] = idx+1;
-						}
-					}
-				}
-				else
-				{
-				uint32_t len = xc->signal_lens[idx];
-				unsigned char *vdata;
-
-				vli = fstGetVarint32(mem_for_traversal + headptr[idx], &skiplen);
-				/* tdelta = vli >> 1; */ /* scan-build */
-				vdata = mem_for_traversal + headptr[idx] + skiplen;
-
-				if(xc->signal_typs[idx] != FST_VT_VCD_REAL)
-					{
-					if(!(vli & 1))
-						{
-						int byte = 0;
-						int bit;
-						int j;
-
-						for(j=0;j<len;j++)
-							{
-							unsigned char ch;
-							byte = j/8;
-							bit = 7 - (j & 7);
-							ch = ((vdata[byte] >> bit) & 1) | '0';
-							xc->temp_signal_value_buf[j] = ch;
-							}
-						xc->temp_signal_value_buf[j] = 0;
-
-						if(value_change_callback)
-							{
-							value_change_callback(user_callback_data_pointer, time_table[i], idx+1, xc->temp_signal_value_buf);
-							}
-							else
-							{
-							if(fv)	{
-								unsigned char ch_bp = (xc->signal_typs[idx] != FST_VT_VCD_PORT) ? 'b' : 'p';
-
-								fstWritex(xc, &ch_bp, 1);
-								fstWritex(xc, xc->temp_signal_value_buf, len);
-								}
-							}
-
-						len = byte+1;
-						}
-						else
-						{
-						if(value_change_callback)
-							{
-							memcpy(xc->temp_signal_value_buf, vdata, len);
-							xc->temp_signal_value_buf[len] = 0;
-							value_change_callback(user_callback_data_pointer, time_table[i], idx+1, xc->temp_signal_value_buf);
-							}
-							else
-							{
-							if(fv)
-								{
-								unsigned char ch_bp =  (xc->signal_typs[idx] != FST_VT_VCD_PORT) ? 'b' : 'p';
-
-								fstWritex(xc, &ch_bp, 1);
-								fstWritex(xc, vdata, len);
-								}
-							}
-						}
-					}
-					else
-					{
-					double d;
-					unsigned char *clone_d /*= (unsigned char *)&d */; /* scan-build */
-					unsigned char buf[8];
-					unsigned char *srcdata;
-
-					if(!(vli & 1))	/* very rare case, but possible */
-						{
-						int bit;
-						int j;
-
-						for(j=0;j<8;j++)
-							{
-							unsigned char ch;
-							bit = 7 - (j & 7);
-							ch = ((vdata[0] >> bit) & 1) | '0';
-							buf[j] = ch;
-							}
-
-						len = 1;
-						srcdata = buf;
-						}
-						else
-						{
-						srcdata = vdata;
-						}
-
-					if(value_change_callback)
-						{
-						if(xc->native_doubles_for_cb)
-							{
-							if(xc->double_endian_match)
-								{
-								clone_d = srcdata;
-								}
-								else
-								{
-								int j;
-
-								clone_d = (unsigned char *)&d;
-								for(j=0;j<8;j++)
-									{
-									clone_d[j] = srcdata[7-j];
-									}
-								}
-							value_change_callback(user_callback_data_pointer, time_table[i], idx+1, clone_d);
-							}
-							else
-							{
-							clone_d = (unsigned char *)&d;
-							if(xc->double_endian_match)
-								{
-								memcpy(clone_d, srcdata, 8);
-								}
-								else
-								{
-								int j;
-
-								for(j=0;j<8;j++)
-									{
-									clone_d[j] = srcdata[7-j];
-									}
-								}
-							sprintf((char *)xc->temp_signal_value_buf, "%.16g", d);
-							value_change_callback(user_callback_data_pointer, time_table[i], idx+1, xc->temp_signal_value_buf);
-							}
-						}
-						else
-						{
-						if(fv)
-							{
-							char wx_buf[32];
-							int wx_len;
-
-							clone_d = (unsigned char *)&d;
-							if(xc->double_endian_match)
-								{
-								memcpy(clone_d, srcdata, 8);
-								}
-								else
-								{
-								int j;
-
-								for(j=0;j<8;j++)
-									{
-									clone_d[j] = srcdata[7-j];
-									}
-								}
-
-							wx_len = sprintf(wx_buf, "r%.16g", d);
-							fstWritex(xc, wx_buf, wx_len);
-							}
-						}
-					}
-
-				if(fv)
-					{
-					char vcd_id[16];
-					int vcdid_len = fstVcdIDForFwrite(vcd_id+1, idx+1);
-					vcd_id[0] = ' ';
-					vcd_id[vcdid_len+1] = '\n';
-					fstWritex(xc, vcd_id, vcdid_len+2);
-					}
-
-				skiplen += len;
-				headptr[idx] += skiplen;
-				length_remaining[idx] -= skiplen;
-
-				tc_head[i] = scatterptr[idx];
-				scatterptr[idx] = 0;
-
-				if(length_remaining[idx])
-					{
-					vli = fstGetVarint32NoSkip(mem_for_traversal + headptr[idx]);
-					tdelta = vli >> 1;
-
-					scatterptr[idx] = tc_head[i+tdelta];
-					tc_head[i+tdelta] = idx+1;
-					}
-				}
-			}
-		}
+                                        if(value_change_callback)
+                                                {
+                                                if(xc->native_doubles_for_cb)
+                                                        {
+                                                        if(xc->double_endian_match)
+                                                                {
+                                                                clone_d = srcdata;
+                                                                }
+                                                                else
+                                                                {
+                                                                int j;
+
+                                                                clone_d = (unsigned char *)&d;
+                                                                for(j=0;j<8;j++)
+                                                                        {
+                                                                        clone_d[j] = srcdata[7-j];
+                                                                        }
+                                                                }
+                                                        value_change_callback(user_callback_data_pointer, time_table[i], idx+1, clone_d);
+                                                        }
+                                                        else
+                                                        {
+                                                        clone_d = (unsigned char *)&d;
+                                                        if(xc->double_endian_match)
+                                                                {
+                                                                memcpy(clone_d, srcdata, 8);
+                                                                }
+                                                                else
+                                                                {
+                                                                int j;
+
+                                                                for(j=0;j<8;j++)
+                                                                        {
+                                                                        clone_d[j] = srcdata[7-j];
+                                                                        }
+                                                                }
+                                                        sprintf((char *)xc->temp_signal_value_buf, "%.16g", d);
+                                                        value_change_callback(user_callback_data_pointer, time_table[i], idx+1, xc->temp_signal_value_buf);
+                                                        }
+                                                }
+                                                else
+                                                {
+                                                if(fv)
+                                                        {
+                                                        char wx_buf[32];
+                                                        int wx_len;
+
+                                                        clone_d = (unsigned char *)&d;
+                                                        if(xc->double_endian_match)
+                                                                {
+                                                                memcpy(clone_d, srcdata, 8);
+                                                                }
+                                                                else
+                                                                {
+                                                                int j;
+
+                                                                for(j=0;j<8;j++)
+                                                                        {
+                                                                        clone_d[j] = srcdata[7-j];
+                                                                        }
+                                                                }
+
+                                                        wx_len = sprintf(wx_buf, "r%.16g", d);
+                                                        fstWritex(xc, wx_buf, wx_len);
+                                                        }
+                                                }
+                                        }
+
+                                if(fv)
+                                        {
+                                        char vcd_id[16];
+                                        int vcdid_len = fstVcdIDForFwrite(vcd_id+1, idx+1);
+                                        vcd_id[0] = ' ';
+                                        vcd_id[vcdid_len+1] = '\n';
+                                        fstWritex(xc, vcd_id, vcdid_len+2);
+                                        }
+
+                                skiplen += len;
+                                headptr[idx] += skiplen;
+                                length_remaining[idx] -= skiplen;
+
+                                tc_head[i] = scatterptr[idx];
+                                scatterptr[idx] = 0;
+
+                                if(length_remaining[idx])
+                                        {
+                                        vli = fstGetVarint32NoSkip(mem_for_traversal + headptr[idx]);
+                                        tdelta = vli >> 1;
+
+                                        scatterptr[idx] = tc_head[i+tdelta];
+                                        tc_head[i+tdelta] = idx+1;
+                                        }
+                                }
+                        }
+                }
 
 block_err:
-	free(tc_head);
-	free(chain_cmem);
-	free(mem_for_traversal); mem_for_traversal = NULL;
+        free(tc_head);
+        free(chain_cmem);
+        free(mem_for_traversal); mem_for_traversal = NULL;
 
-	secnum++;
-	if(secnum == xc->vc_section_count) break; /* in case file is growing, keep with original block count */
-	blkpos += seclen;
-	}
+        secnum++;
+        if(secnum == xc->vc_section_count) break; /* in case file is growing, keep with original block count */
+        blkpos += seclen;
+        }
 
 if(mem_for_traversal) free(mem_for_traversal); /* scan-build */
 free(length_remaining);
@@ -5621,15 +5609,15 @@ free(headptr);
 free(scatterptr);
 
 if(chain_table) free(chain_table);
-if(chain_table_lengths)	free(chain_table_lengths);
+if(chain_table_lengths) free(chain_table_lengths);
 
 free(time_table);
 
 #ifndef FST_WRITEX_DISABLE
 if(fv)
-	{
-	fstWritex(xc, NULL, 0);
-	}
+        {
+        fstWritex(xc, NULL, 0);
+        }
 #endif
 
 return(1);
@@ -5641,45 +5629,45 @@ return(1);
 static char *fstExtractRvatDataFromFrame(struct fstReaderContext *xc, fstHandle facidx, char *buf)
 {
 if(facidx >= xc->rvat_frame_maxhandle)
-	{
-	return(NULL);
-	}
+        {
+        return(NULL);
+        }
 
 if(xc->signal_lens[facidx] == 1)
-	{
-	buf[0] = (char)xc->rvat_frame_data[xc->rvat_sig_offs[facidx]];
-	buf[1] = 0;
-	}
-	else
-	{
-	if(xc->signal_typs[facidx] != FST_VT_VCD_REAL)
-		{
-		memcpy(buf, xc->rvat_frame_data + xc->rvat_sig_offs[facidx], xc->signal_lens[facidx]);
-		buf[xc->signal_lens[facidx]] = 0;
-		}
-		else
-		{
-		double d;
-		unsigned char *clone_d = (unsigned char *)&d;
-		unsigned char *srcdata = xc->rvat_frame_data + xc->rvat_sig_offs[facidx];
-
-		if(xc->double_endian_match)
-			{
-			memcpy(clone_d, srcdata, 8);
-			}
-			else
-			{
-			int j;
-
-			for(j=0;j<8;j++)
-				{
-				clone_d[j] = srcdata[7-j];
-				}
-			}
-
-		sprintf((char *)buf, "%.16g", d);
-		}
-	}
+        {
+        buf[0] = (char)xc->rvat_frame_data[xc->rvat_sig_offs[facidx]];
+        buf[1] = 0;
+        }
+        else
+        {
+        if(xc->signal_typs[facidx] != FST_VT_VCD_REAL)
+                {
+                memcpy(buf, xc->rvat_frame_data + xc->rvat_sig_offs[facidx], xc->signal_lens[facidx]);
+                buf[xc->signal_lens[facidx]] = 0;
+                }
+                else
+                {
+                double d;
+                unsigned char *clone_d = (unsigned char *)&d;
+                unsigned char *srcdata = xc->rvat_frame_data + xc->rvat_sig_offs[facidx];
+
+                if(xc->double_endian_match)
+                        {
+                        memcpy(clone_d, srcdata, 8);
+                        }
+                        else
+                        {
+                        int j;
+
+                        for(j=0;j<8;j++)
+                                {
+                                clone_d[j] = srcdata[7-j];
+                                }
+                        }
+
+                sprintf((char *)buf, "%.16g", d);
+                }
+        }
 
 return(buf);
 }
@@ -5691,7 +5679,7 @@ struct fstReaderContext *xc = (struct fstReaderContext *)ctx;
 off_t blkpos = 0, prev_blkpos;
 uint64_t beg_tim, end_tim, beg_tim2, end_tim2;
 int sectype;
-int secnum = 0;
+unsigned int secnum = 0;
 uint64_t seclen;
 uint64_t tsec_uclen = 0, tsec_clen = 0;
 uint64_t tsec_nitems;
@@ -5707,84 +5695,84 @@ fstHandle idx, pidx=0, i;
 uint64_t pval;
 
 if((!xc) || (!facidx) || (facidx > xc->maxhandle) || (!buf) || (!xc->signal_lens[facidx-1]))
-	{
-	return(NULL);
-	}
+        {
+        return(NULL);
+        }
 
 if(!xc->rvat_sig_offs)
-	{
-	uint32_t cur_offs = 0;
+        {
+        uint32_t cur_offs = 0;
 
-	xc->rvat_sig_offs = calloc(xc->maxhandle, sizeof(uint32_t));
-	for(i=0;i<xc->maxhandle;i++)
-		{
-		xc->rvat_sig_offs[i] = cur_offs;
-		cur_offs += xc->signal_lens[i];
-		}
-	}
+        xc->rvat_sig_offs = calloc(xc->maxhandle, sizeof(uint32_t));
+        for(i=0;i<xc->maxhandle;i++)
+                {
+                xc->rvat_sig_offs[i] = cur_offs;
+                cur_offs += xc->signal_lens[i];
+                }
+        }
 
 if(xc->rvat_data_valid)
-	{
-	if((xc->rvat_beg_tim <= tim) && (tim <= xc->rvat_end_tim))
-		{
-		goto process_value;
-		}
+        {
+        if((xc->rvat_beg_tim <= tim) && (tim <= xc->rvat_end_tim))
+                {
+                goto process_value;
+                }
 
-	fstReaderDeallocateRvatData(xc);
-	}
+        fstReaderDeallocateRvatData(xc);
+        }
 
 xc->rvat_chain_pos_valid = 0;
 
 for(;;)
-	{
-	fstReaderFseeko(xc, xc->f, (prev_blkpos = blkpos), SEEK_SET);
-
-	sectype = fgetc(xc->f);
-	seclen = fstReaderUint64(xc->f);
-
-	if((sectype == EOF) || (sectype == FST_BL_SKIP) || (!seclen))
-		{
-		return(NULL); /* if this loop exits on break, it's successful */
-		}
-
-	blkpos++;
-	if((sectype != FST_BL_VCDATA) && (sectype != FST_BL_VCDATA_DYN_ALIAS) && (sectype != FST_BL_VCDATA_DYN_ALIAS2))
-		{
-		blkpos += seclen;
-		continue;
-		}
-
-	beg_tim = fstReaderUint64(xc->f);
-	end_tim = fstReaderUint64(xc->f);
-
-	if((beg_tim <= tim) && (tim <= end_tim))
-		{
-		if((tim == end_tim) && (tim != xc->end_time))
-			{
-			off_t cached_pos = ftello(xc->f);
-			fstReaderFseeko(xc, xc->f, blkpos, SEEK_SET);
-
-			sectype = fgetc(xc->f);
-			seclen = fstReaderUint64(xc->f);
-
-			beg_tim2 = fstReaderUint64(xc->f);
-			end_tim2 = fstReaderUint64(xc->f);
-
-			if(((sectype != FST_BL_VCDATA)&&(sectype != FST_BL_VCDATA_DYN_ALIAS)&&(sectype != FST_BL_VCDATA_DYN_ALIAS2)) || (!seclen) || (beg_tim2 != tim))
-				{
-				blkpos = prev_blkpos;
-				break;
-				}
-			beg_tim = beg_tim2;
-			end_tim = end_tim2;
-			fstReaderFseeko(xc, xc->f, cached_pos, SEEK_SET);
-			}
-		break;
-		}
-
-	blkpos += seclen;
-	secnum++;
-	}
+        {
+        fstReaderFseeko(xc, xc->f, (prev_blkpos = blkpos), SEEK_SET);
+
+        sectype = fgetc(xc->f);
+        seclen = fstReaderUint64(xc->f);
+
+        if((sectype == EOF) || (sectype == FST_BL_SKIP) || (!seclen))
+                {
+                return(NULL); /* if this loop exits on break, it's successful */
+                }
+
+        blkpos++;
+        if((sectype != FST_BL_VCDATA) && (sectype != FST_BL_VCDATA_DYN_ALIAS) && (sectype != FST_BL_VCDATA_DYN_ALIAS2))
+                {
+                blkpos += seclen;
+                continue;
+                }
+
+        beg_tim = fstReaderUint64(xc->f);
+        end_tim = fstReaderUint64(xc->f);
+
+        if((beg_tim <= tim) && (tim <= end_tim))
+                {
+                if((tim == end_tim) && (tim != xc->end_time))
+                        {
+                        off_t cached_pos = ftello(xc->f);
+                        fstReaderFseeko(xc, xc->f, blkpos, SEEK_SET);
+
+                        sectype = fgetc(xc->f);
+                        seclen = fstReaderUint64(xc->f);
+
+                        beg_tim2 = fstReaderUint64(xc->f);
+                        end_tim2 = fstReaderUint64(xc->f);
+
+                        if(((sectype != FST_BL_VCDATA)&&(sectype != FST_BL_VCDATA_DYN_ALIAS)&&(sectype != FST_BL_VCDATA_DYN_ALIAS2)) || (!seclen) || (beg_tim2 != tim))
+                                {
+                                blkpos = prev_blkpos;
+                                break;
+                                }
+                        beg_tim = beg_tim2;
+                        end_tim = end_tim2;
+                        fstReaderFseeko(xc, xc->f, cached_pos, SEEK_SET);
+                        }
+                break;
+                }
+
+        blkpos += seclen;
+        secnum++;
+        }
 
 xc->rvat_beg_tim = beg_tim;
 xc->rvat_end_tim = end_tim;
@@ -5792,11 +5780,11 @@ xc->rvat_end_tim = end_tim;
 #ifdef FST_DEBUG
 mem_required_for_traversal =
 #endif
-	fstReaderUint64(xc->f);
+        fstReaderUint64(xc->f);
 
 #ifdef FST_DEBUG
-fprintf(stderr, "rvat sec: %d seclen: %d begtim: %d endtim: %d\n",
-	secnum, (int)seclen, (int)beg_tim, (int)end_tim);
+fprintf(stderr, "rvat sec: %u seclen: %d begtim: %d endtim: %d\n",
+        secnum, (int)seclen, (int)beg_tim, (int)end_tim);
 fprintf(stderr, "\tmem_required_for_traversal: %d\n", (int)mem_required_for_traversal);
 #endif
 
@@ -5809,7 +5797,7 @@ unsigned long sourcelen /* = tsec_clen */; /* scan-build */
 int rc;
 unsigned char *tpnt;
 uint64_t tpval;
-int ti;
+unsigned int ti;
 
 fstReaderFseeko(xc, xc->f, blkpos + seclen - 24, SEEK_SET);
 tsec_uclen = fstReaderUint64(xc->f);
@@ -5817,7 +5805,7 @@ tsec_clen = fstReaderUint64(xc->f);
 tsec_nitems = fstReaderUint64(xc->f);
 #ifdef FST_DEBUG
 fprintf(stderr, "\ttime section unc: %d, com: %d (%d items)\n",
-	(int)tsec_uclen, (int)tsec_clen, (int)tsec_nitems);
+        (int)tsec_uclen, (int)tsec_clen, (int)tsec_nitems);
 #endif
 ucdata = malloc(tsec_uclen);
 destlen = tsec_uclen;
@@ -5825,35 +5813,35 @@ sourcelen = tsec_clen;
 
 fstReaderFseeko(xc, xc->f, -24 - ((off_t)tsec_clen), SEEK_CUR);
 if(tsec_uclen != tsec_clen)
-	{
-	cdata = malloc(tsec_clen);
-	fstFread(cdata, tsec_clen, 1, xc->f);
+        {
+        cdata = malloc(tsec_clen);
+        fstFread(cdata, tsec_clen, 1, xc->f);
 
-	rc = uncompress(ucdata, &destlen, cdata, sourcelen);
+        rc = uncompress(ucdata, &destlen, cdata, sourcelen);
 
-	if(rc != Z_OK)
-		{
-		printf("tsec uncompress rc = %d\n", rc);
-		exit(255);
-		}
+        if(rc != Z_OK)
+                {
+                printf("tsec uncompress rc = %d\n", rc);
+                exit(255);
+                }
 
-	free(cdata);
-	}
-	else
-	{
-	fstFread(ucdata, tsec_uclen, 1, xc->f);
-	}
+        free(cdata);
+        }
+        else
+        {
+        fstFread(ucdata, tsec_uclen, 1, xc->f);
+        }
 
 xc->rvat_time_table = calloc(tsec_nitems, sizeof(uint64_t));
 tpnt = ucdata;
 tpval = 0;
 for(ti=0;ti<tsec_nitems;ti++)
-	{
-	int skiplen;
-	uint64_t val = fstGetVarint64(tpnt, &skiplen);
-	tpval = xc->rvat_time_table[ti] = tpval + val;
-	tpnt += skiplen;
-	}
+        {
+        int skiplen;
+        uint64_t val = fstGetVarint64(tpnt, &skiplen);
+        tpval = xc->rvat_time_table[ti] = tpval + val;
+        tpnt += skiplen;
+        }
 
 free(ucdata);
 }
@@ -5866,33 +5854,33 @@ xc->rvat_frame_maxhandle = fstReaderVarint64(xc->f);
 xc->rvat_frame_data = malloc(frame_uclen);
 
 if(frame_uclen == frame_clen)
-	{
-	fstFread(xc->rvat_frame_data, frame_uclen, 1, xc->f);
-	}
-	else
-	{
-	unsigned char *mc = malloc(frame_clen);
-	int rc;
-
-	unsigned long destlen = frame_uclen;
-	unsigned long sourcelen = frame_clen;
-
-	fstFread(mc, sourcelen, 1, xc->f);
-	rc = uncompress(xc->rvat_frame_data, &destlen, mc, sourcelen);
-	if(rc != Z_OK)
-		{
-		printf("decompress rc: %d\n", rc);
-		exit(255);
-		}
-	free(mc);
-	}
+        {
+        fstFread(xc->rvat_frame_data, frame_uclen, 1, xc->f);
+        }
+        else
+        {
+        unsigned char *mc = malloc(frame_clen);
+        int rc;
+
+        unsigned long destlen = frame_uclen;
+        unsigned long sourcelen = frame_clen;
+
+        fstFread(mc, sourcelen, 1, xc->f);
+        rc = uncompress(xc->rvat_frame_data, &destlen, mc, sourcelen);
+        if(rc != Z_OK)
+                {
+                printf("decompress rc: %d\n", rc);
+                exit(255);
+                }
+        free(mc);
+        }
 
 xc->rvat_vc_maxhandle = fstReaderVarint64(xc->f);
-xc->rvat_vc_start = ftello(xc->f);	/* points to '!' character */
+xc->rvat_vc_start = ftello(xc->f);      /* points to '!' character */
 
 #ifdef FST_DEBUG
 fprintf(stderr, "\tframe_uclen: %d, frame_clen: %d, frame_maxhandle: %d\n",
-	(int)frame_uclen, (int)frame_clen, (int)xc->rvat_frame_maxhandle);
+        (int)frame_uclen, (int)frame_clen, (int)xc->rvat_frame_maxhandle);
 fprintf(stderr, "\tvc_maxhandle: %d\n", (int)xc->rvat_vc_maxhandle);
 #endif
 
@@ -5914,55 +5902,55 @@ pnt = chain_cmem;
 idx = 0;
 pval = 0;
 do
-	{
-	int skiplen;
-	uint64_t val = fstGetVarint32(pnt, &skiplen);
+        {
+        int skiplen;
+        uint64_t val = fstGetVarint32(pnt, &skiplen);
 
         if(!val)
-		{
-		pnt += skiplen;
-		val = fstGetVarint32(pnt, &skiplen);
-		xc->rvat_chain_table[idx] = 0;
+                {
+                pnt += skiplen;
+                val = fstGetVarint32(pnt, &skiplen);
+                xc->rvat_chain_table[idx] = 0;
                 xc->rvat_chain_table_lengths[idx] = -val;
                 idx++;
                 }
-	else
-	if(val&1)
-		{
-		pval = xc->rvat_chain_table[idx] = pval + (val >> 1);
-		if(idx) { xc->rvat_chain_table_lengths[pidx] = pval - xc->rvat_chain_table[pidx]; }
-		pidx = idx++;
-		}
-		else
-		{
-		int loopcnt = val >> 1;
-		for(i=0;i<loopcnt;i++)
-			{
-			xc->rvat_chain_table[idx++] = 0;
-			}
-		}
-
-	pnt += skiplen;
-	} while (pnt != (chain_cmem + chain_clen));
+        else
+        if(val&1)
+                {
+                pval = xc->rvat_chain_table[idx] = pval + (val >> 1);
+                if(idx) { xc->rvat_chain_table_lengths[pidx] = pval - xc->rvat_chain_table[pidx]; }
+                pidx = idx++;
+                }
+                else
+                {
+                fstHandle loopcnt = val >> 1;
+                for(i=0;i<loopcnt;i++)
+                        {
+                        xc->rvat_chain_table[idx++] = 0;
+                        }
+                }
+
+        pnt += skiplen;
+        } while (pnt != (chain_cmem + chain_clen));
 
 free(chain_cmem);
 xc->rvat_chain_table[idx] = indx_pos - xc->rvat_vc_start;
 xc->rvat_chain_table_lengths[pidx] = xc->rvat_chain_table[idx] - xc->rvat_chain_table[pidx];
 
 for(i=0;i<idx;i++)
-	{
+        {
         int32_t v32 = xc->rvat_chain_table_lengths[i];
-	if((v32 < 0) && (!xc->rvat_chain_table[i]))
-        	{
+        if((v32 < 0) && (!xc->rvat_chain_table[i]))
+                {
                 v32 = -v32;
-		v32--;
-		if(((uint32_t)v32) < i) /* sanity check */
-			{
-	                xc->rvat_chain_table[i] = xc->rvat_chain_table[v32];
-	                xc->rvat_chain_table_lengths[i] = xc->rvat_chain_table_lengths[v32];
-			}
+                v32--;
+                if(((uint32_t)v32) < i) /* sanity check */
+                        {
+                        xc->rvat_chain_table[i] = xc->rvat_chain_table[v32];
+                        xc->rvat_chain_table_lengths[i] = xc->rvat_chain_table_lengths[v32];
+                        }
                 }
-	}
+        }
 
 #ifdef FST_DEBUG
 fprintf(stderr, "\tdecompressed chain idx len: %"PRIu32"\n", idx);
@@ -5973,66 +5961,66 @@ xc->rvat_data_valid = 1;
 /* all data at this point is loaded or resident in fst cache, process and return appropriate value */
 process_value:
 if(facidx > xc->rvat_vc_maxhandle)
-	{
-	return(NULL);
-	}
+        {
+        return(NULL);
+        }
 
 facidx--; /* scale down for array which starts at zero */
 
 
 if(((tim == xc->rvat_beg_tim)&&(!xc->rvat_chain_table[facidx])) || (!xc->rvat_chain_table[facidx]))
-	{
-	return(fstExtractRvatDataFromFrame(xc, facidx, buf));
-	}
+        {
+        return(fstExtractRvatDataFromFrame(xc, facidx, buf));
+        }
 
 if(facidx != xc->rvat_chain_facidx)
-	{
-	if(xc->rvat_chain_mem)
-		{
-		free(xc->rvat_chain_mem);
-		xc->rvat_chain_mem = NULL;
+        {
+        if(xc->rvat_chain_mem)
+                {
+                free(xc->rvat_chain_mem);
+                xc->rvat_chain_mem = NULL;
 
-		xc->rvat_chain_pos_valid = 0;
-		}
-	}
+                xc->rvat_chain_pos_valid = 0;
+                }
+        }
 
 if(!xc->rvat_chain_mem)
-	{
-	uint32_t skiplen;
-	fstReaderFseeko(xc, xc->f, xc->rvat_vc_start + xc->rvat_chain_table[facidx], SEEK_SET);
-	xc->rvat_chain_len = fstReaderVarint32WithSkip(xc->f, &skiplen);
-	if(xc->rvat_chain_len)
-		{
-		unsigned char *mu = malloc(xc->rvat_chain_len);
-		unsigned char *mc = malloc(xc->rvat_chain_table_lengths[facidx]);
-		unsigned long destlen = xc->rvat_chain_len;
-		unsigned long sourcelen = xc->rvat_chain_table_lengths[facidx];
-		int rc;
-
-		fstFread(mc, xc->rvat_chain_table_lengths[facidx], 1, xc->f);
-		rc = uncompress(mu, &destlen, mc, sourcelen);
-		free(mc);
-
-		if(rc != Z_OK)
-			{
-			printf("\tclen: %d (rc=%d)\n", (int)xc->rvat_chain_len, rc);
-			exit(255);
-			}
-
-		/* data to process is for(j=0;j<destlen;j++) in mu[j] */
-		xc->rvat_chain_mem = mu;
-		}
-		else
-		{
-		int destlen = xc->rvat_chain_table_lengths[facidx] - skiplen;
-		unsigned char *mu = malloc(xc->rvat_chain_len = destlen);
-		fstFread(mu, destlen, 1, xc->f);
-		/* data to process is for(j=0;j<destlen;j++) in mu[j] */
-		xc->rvat_chain_mem = mu;
-		}
-
-	xc->rvat_chain_facidx = facidx;
-	}
+        {
+        uint32_t skiplen;
+        fstReaderFseeko(xc, xc->f, xc->rvat_vc_start + xc->rvat_chain_table[facidx], SEEK_SET);
+        xc->rvat_chain_len = fstReaderVarint32WithSkip(xc->f, &skiplen);
+        if(xc->rvat_chain_len)
+                {
+                unsigned char *mu = malloc(xc->rvat_chain_len);
+                unsigned char *mc = malloc(xc->rvat_chain_table_lengths[facidx]);
+                unsigned long destlen = xc->rvat_chain_len;
+                unsigned long sourcelen = xc->rvat_chain_table_lengths[facidx];
+                int rc;
+
+                fstFread(mc, xc->rvat_chain_table_lengths[facidx], 1, xc->f);
+                rc = uncompress(mu, &destlen, mc, sourcelen);
+                free(mc);
+
+                if(rc != Z_OK)
+                        {
+                        printf("\tclen: %d (rc=%d)\n", (int)xc->rvat_chain_len, rc);
+                        exit(255);
+                        }
+
+                /* data to process is for(j=0;j<destlen;j++) in mu[j] */
+                xc->rvat_chain_mem = mu;
+                }
+                else
+                {
+                int destlen = xc->rvat_chain_table_lengths[facidx] - skiplen;
+                unsigned char *mu = malloc(xc->rvat_chain_len = destlen);
+                fstFread(mu, destlen, 1, xc->f);
+                /* data to process is for(j=0;j<destlen;j++) in mu[j] */
+                xc->rvat_chain_mem = mu;
+                }
+
+        xc->rvat_chain_facidx = facidx;
+        }
 
 /* process value chain here */
 
@@ -6040,185 +6028,185 @@ if(!xc->rvat_chain_mem)
 uint32_t tidx = 0, ptidx = 0;
 uint32_t tdelta;
 int skiplen;
-int iprev = xc->rvat_chain_len;
+unsigned int iprev = xc->rvat_chain_len;
 uint32_t pvli = 0;
 int pskip = 0;
 
 if((xc->rvat_chain_pos_valid)&&(tim >= xc->rvat_chain_pos_time))
-	{
-	i = xc->rvat_chain_pos_idx;
-	tidx = xc->rvat_chain_pos_tidx;
-	}
-	else
-	{
-	i = 0;
-	tidx = 0;
-	xc->rvat_chain_pos_time = xc->rvat_beg_tim;
-	}
+        {
+        i = xc->rvat_chain_pos_idx;
+        tidx = xc->rvat_chain_pos_tidx;
+        }
+        else
+        {
+        i = 0;
+        tidx = 0;
+        xc->rvat_chain_pos_time = xc->rvat_beg_tim;
+        }
 
 if(xc->signal_lens[facidx] == 1)
-	{
-	while(i<xc->rvat_chain_len)
-		{
-	        uint32_t vli = fstGetVarint32(xc->rvat_chain_mem + i, &skiplen);
-	        uint32_t shcnt = 2 << (vli & 1);
-	        tdelta = vli >> shcnt;
-
-		if(xc->rvat_time_table[tidx + tdelta] <= tim)
-			{
-			iprev = i;
-			pvli = vli;
-			ptidx = tidx;
-			/* pskip = skiplen; */ /* scan-build */
-
-			tidx += tdelta;
-			i+=skiplen;
-			}
-			else
-			{
-			break;
-			}
-		}
-	if(iprev != xc->rvat_chain_len)
-		{
-		xc->rvat_chain_pos_tidx = ptidx;
-		xc->rvat_chain_pos_idx = iprev;
-		xc->rvat_chain_pos_time = tim;
-		xc->rvat_chain_pos_valid = 1;
-
-		if(!(pvli & 1))
-			{
-			buf[0] = ((pvli >> 1) & 1) | '0';
-			}
-			else
-			{
-			buf[0] = FST_RCV_STR[((pvli >> 1) & 7)];
-			}
-		buf[1] = 0;
-		return(buf);
-		}
-		else
-		{
-		return(fstExtractRvatDataFromFrame(xc, facidx, buf));
-		}
+        {
+        while(i<xc->rvat_chain_len)
+                {
+                uint32_t vli = fstGetVarint32(xc->rvat_chain_mem + i, &skiplen);
+                uint32_t shcnt = 2 << (vli & 1);
+                tdelta = vli >> shcnt;
+
+                if(xc->rvat_time_table[tidx + tdelta] <= tim)
+                        {
+                        iprev = i;
+                        pvli = vli;
+                        ptidx = tidx;
+                        /* pskip = skiplen; */ /* scan-build */
+
+                        tidx += tdelta;
+                        i+=skiplen;
+                        }
+                        else
+                        {
+                        break;
+                        }
+                }
+        if(iprev != xc->rvat_chain_len)
+                {
+                xc->rvat_chain_pos_tidx = ptidx;
+                xc->rvat_chain_pos_idx = iprev;
+                xc->rvat_chain_pos_time = tim;
+                xc->rvat_chain_pos_valid = 1;
+
+                if(!(pvli & 1))
+                        {
+                        buf[0] = ((pvli >> 1) & 1) | '0';
+                        }
+                        else
+                        {
+                        buf[0] = FST_RCV_STR[((pvli >> 1) & 7)];
+                        }
+                buf[1] = 0;
+                return(buf);
+                }
+                else
+                {
+                return(fstExtractRvatDataFromFrame(xc, facidx, buf));
+                }
         }
         else
         {
-	while(i<xc->rvat_chain_len)
-		{
-	        uint32_t vli = fstGetVarint32(xc->rvat_chain_mem + i, &skiplen);
-	        tdelta = vli >> 1;
-
-		if(xc->rvat_time_table[tidx + tdelta] <= tim)
-			{
-			iprev = i;
-			pvli = vli;
-			ptidx = tidx;
-			pskip = skiplen;
-
-			tidx += tdelta;
-			i+=skiplen;
-
-			if(!(pvli & 1))
-				{
-				i+=((xc->signal_lens[facidx]+7)/8);
-				}
-				else
-				{
-				i+=xc->signal_lens[facidx];
-				}
-			}
-			else
-			{
-			break;
-			}
-		}
-
-	if(iprev != xc->rvat_chain_len)
-		{
-		unsigned char *vdata = xc->rvat_chain_mem + iprev + pskip;
-
-		xc->rvat_chain_pos_tidx = ptidx;
-		xc->rvat_chain_pos_idx = iprev;
-		xc->rvat_chain_pos_time = tim;
-		xc->rvat_chain_pos_valid = 1;
-
-		if(xc->signal_typs[facidx] != FST_VT_VCD_REAL)
-			{
-			if(!(pvli & 1))
-				{
-				int byte = 0;
-				int bit;
-				int j;
-
-				for(j=0;j<xc->signal_lens[facidx];j++)
-					{
-					unsigned char ch;
-					byte = j/8;
-					bit = 7 - (j & 7);
-					ch = ((vdata[byte] >> bit) & 1) | '0';
-					buf[j] = ch;
-					}
-				buf[j] = 0;
-
-				return(buf);
-				}
-				else
-				{
-				memcpy(buf, vdata, xc->signal_lens[facidx]);
-				buf[xc->signal_lens[facidx]] = 0;
-				return(buf);
-				}
-			}
-			else
-			{
-			double d;
-			unsigned char *clone_d = (unsigned char *)&d;
-			unsigned char bufd[8];
-			unsigned char *srcdata;
-
-			if(!(pvli & 1))	/* very rare case, but possible */
-				{
-				int bit;
-				int j;
-
-				for(j=0;j<8;j++)
-					{
-					unsigned char ch;
-					bit = 7 - (j & 7);
-					ch = ((vdata[0] >> bit) & 1) | '0';
-					bufd[j] = ch;
-					}
-
-				srcdata = bufd;
-				}
-				else
-				{
-				srcdata = vdata;
-				}
-
-			if(xc->double_endian_match)
-				{
-				memcpy(clone_d, srcdata, 8);
-				}
-				else
-				{
-				int j;
-
-				for(j=0;j<8;j++)
-					{
-					clone_d[j] = srcdata[7-j];
-					}
-				}
-
-			sprintf(buf, "r%.16g", d);
-			return(buf);
-			}
-		}
-		else
-		{
-		return(fstExtractRvatDataFromFrame(xc, facidx, buf));
-		}
+        while(i<xc->rvat_chain_len)
+                {
+                uint32_t vli = fstGetVarint32(xc->rvat_chain_mem + i, &skiplen);
+                tdelta = vli >> 1;
+
+                if(xc->rvat_time_table[tidx + tdelta] <= tim)
+                        {
+                        iprev = i;
+                        pvli = vli;
+                        ptidx = tidx;
+                        pskip = skiplen;
+
+                        tidx += tdelta;
+                        i+=skiplen;
+
+                        if(!(pvli & 1))
+                                {
+                                i+=((xc->signal_lens[facidx]+7)/8);
+                                }
+                                else
+                                {
+                                i+=xc->signal_lens[facidx];
+                                }
+                        }
+                        else
+                        {
+                        break;
+                        }
+                }
+
+        if(iprev != xc->rvat_chain_len)
+                {
+                unsigned char *vdata = xc->rvat_chain_mem + iprev + pskip;
+
+                xc->rvat_chain_pos_tidx = ptidx;
+                xc->rvat_chain_pos_idx = iprev;
+                xc->rvat_chain_pos_time = tim;
+                xc->rvat_chain_pos_valid = 1;
+
+                if(xc->signal_typs[facidx] != FST_VT_VCD_REAL)
+                        {
+                        if(!(pvli & 1))
+                                {
+                                int byte = 0;
+                                int bit;
+                                unsigned int j;
+
+                                for(j=0;j<xc->signal_lens[facidx];j++)
+                                        {
+                                        unsigned char ch;
+                                        byte = j/8;
+                                        bit = 7 - (j & 7);
+                                        ch = ((vdata[byte] >> bit) & 1) | '0';
+                                        buf[j] = ch;
+                                        }
+                                buf[j] = 0;
+
+                                return(buf);
+                                }
+                                else
+                                {
+                                memcpy(buf, vdata, xc->signal_lens[facidx]);
+                                buf[xc->signal_lens[facidx]] = 0;
+                                return(buf);
+                                }
+                        }
+                        else
+                        {
+                        double d;
+                        unsigned char *clone_d = (unsigned char *)&d;
+                        unsigned char bufd[8];
+                        unsigned char *srcdata;
+
+                        if(!(pvli & 1)) /* very rare case, but possible */
+                                {
+                                int bit;
+                                int j;
+
+                                for(j=0;j<8;j++)
+                                        {
+                                        unsigned char ch;
+                                        bit = 7 - (j & 7);
+                                        ch = ((vdata[0] >> bit) & 1) | '0';
+                                        bufd[j] = ch;
+                                        }
+
+                                srcdata = bufd;
+                                }
+                                else
+                                {
+                                srcdata = vdata;
+                                }
+
+                        if(xc->double_endian_match)
+                                {
+                                memcpy(clone_d, srcdata, 8);
+                                }
+                                else
+                                {
+                                int j;
+
+                                for(j=0;j<8;j++)
+                                        {
+                                        clone_d[j] = srcdata[7-j];
+                                        }
+                                }
+
+                        sprintf(buf, "r%.16g", d);
+                        return(buf);
+                        }
+                }
+                else
+                {
+                return(fstExtractRvatDataFromFrame(xc, facidx, buf));
+                }
         }
 }
 
@@ -6370,29 +6358,29 @@ struct collchain_t **ar;
 struct collchain_t *chain, *pchain;
 
 if(!*base)
-	{
-	*base = calloc(1, (hashmask + 1) * sizeof(void *));
-	}
+        {
+        *base = calloc(1, (hashmask + 1) * sizeof(void *));
+        }
 ar = *base;
 
 h = (hf = j_hash(mem, length, length)) & hashmask;
 pchain = chain = ar[h];
 while(chain)
-	{
-	if((chain->fullhash == hf) && (chain->length == length) && !memcmp(chain->mem, mem, length))
-		{
-		if(pchain != chain) /* move hit to front */
-			{
-			pchain->next = chain->next;
-			chain->next = ar[h];
-			ar[h] = chain;
-			}
-		return(&(chain->payload));
-		}
-
-	pchain = chain;
-	chain = chain->next;
-	}
+        {
+        if((chain->fullhash == hf) && (chain->length == length) && !memcmp(chain->mem, mem, length))
+                {
+                if(pchain != chain) /* move hit to front */
+                        {
+                        pchain->next = chain->next;
+                        chain->next = ar[h];
+                        ar[h] = chain;
+                        }
+                return(&(chain->payload));
+                }
+
+        pchain = chain;
+        chain = chain->next;
+        }
 
 chain = calloc(1, sizeof(struct collchain_t) + length - 1);
 memcpy(chain->mem, mem, length);
@@ -6412,22 +6400,22 @@ struct collchain_t **ar;
 struct collchain_t *chain, *chain_next;
 
 if(base && *base)
-	{
-	ar = *base;
-	for(h=0;h<=hashmask;h++)
-		{
-		chain = ar[h];
-		while(chain)
-			{
-			chain_next = chain->next;
-			free(chain);
-			chain = chain_next;
-			}
-		}
-
-	free(*base);
-	*base = NULL;
-	}
+        {
+        ar = *base;
+        for(h=0;h<=hashmask;h++)
+                {
+                chain = ar[h];
+                while(chain)
+                        {
+                        chain_next = chain->next;
+                        free(chain);
+                        chain = chain_next;
+                        }
+                }
+
+        free(*base);
+        *base = NULL;
+        }
 }
 
 #endif
@@ -6448,35 +6436,35 @@ unsigned char val;
 int i;
 
 for(i=0;i<len;i++)
-	{
-	switch(src[i])
-		{
-		case '\a':	*(dst++) = '\\'; *(dst++) = 'a'; break;
-		case '\b':	*(dst++) = '\\'; *(dst++) = 'b'; break;
-		case '\f':	*(dst++) = '\\'; *(dst++) = 'f'; break;
-		case '\n':	*(dst++) = '\\'; *(dst++) = 'n'; break;
-		case '\r':	*(dst++) = '\\'; *(dst++) = 'r'; break;
-		case '\t':	*(dst++) = '\\'; *(dst++) = 't'; break;
-		case '\v':	*(dst++) = '\\'; *(dst++) = 'v'; break;
-		case '\'':	*(dst++) = '\\'; *(dst++) = '\''; break;
-		case '\"':	*(dst++) = '\\'; *(dst++) = '\"'; break;
-		case '\\':	*(dst++) = '\\'; *(dst++) = '\\'; break;
-		case '\?':	*(dst++) = '\\'; *(dst++) = '\?'; break;
-		default:	if((src[i] > ' ') && (src[i] <= '~')) /* no white spaces in output */
-					{
-					*(dst++) = src[i];
-					}
-					else
-					{
-					val = src[i];
-					*(dst++) = '\\';
-					*(dst++) = (val/64) + '0'; val = val & 63;
-					*(dst++) = (val/8)  + '0'; val = val & 7;
-					*(dst++) = (val) + '0';
-					}
-				break;
-		}
-	}
+        {
+        switch(src[i])
+                {
+                case '\a':      *(dst++) = '\\'; *(dst++) = 'a'; break;
+                case '\b':      *(dst++) = '\\'; *(dst++) = 'b'; break;
+                case '\f':      *(dst++) = '\\'; *(dst++) = 'f'; break;
+                case '\n':      *(dst++) = '\\'; *(dst++) = 'n'; break;
+                case '\r':      *(dst++) = '\\'; *(dst++) = 'r'; break;
+                case '\t':      *(dst++) = '\\'; *(dst++) = 't'; break;
+                case '\v':      *(dst++) = '\\'; *(dst++) = 'v'; break;
+                case '\'':      *(dst++) = '\\'; *(dst++) = '\''; break;
+                case '\"':      *(dst++) = '\\'; *(dst++) = '\"'; break;
+                case '\\':      *(dst++) = '\\'; *(dst++) = '\\'; break;
+                case '\?':      *(dst++) = '\\'; *(dst++) = '\?'; break;
+                default:        if((src[i] > ' ') && (src[i] <= '~')) /* no white spaces in output */
+                                        {
+                                        *(dst++) = src[i];
+                                        }
+                                        else
+                                        {
+                                        val = src[i];
+                                        *(dst++) = '\\';
+                                        *(dst++) = (val/64) + '0'; val = val & 63;
+                                        *(dst++) = (val/8)  + '0'; val = val & 7;
+                                        *(dst++) = (val) + '0';
+                                        }
+                                break;
+                }
+        }
 
 return(dst - d);
 }
@@ -6493,51 +6481,51 @@ unsigned char val[3];
 int i;
 
 for(i=0;i<len;i++)
-	{
-	if(src[i] != '\\')
-		{
-		*(dst++) = src[i];
-		}
-		else
-		{
-		switch(src[++i])
-			{
-			case 'a':	*(dst++) = '\a'; break;
-			case 'b':	*(dst++) = '\b'; break;
-			case 'f':	*(dst++) = '\f'; break;
-			case 'n':	*(dst++) = '\n'; break;
-			case 'r':	*(dst++) = '\r'; break;
-			case 't':	*(dst++) = '\t'; break;
-			case 'v':	*(dst++) = '\v'; break;
-			case '\'':	*(dst++) = '\''; break;
-			case '\"':	*(dst++) = '\"'; break;
-			case '\\':	*(dst++) = '\\'; break;
-			case '\?':	*(dst++) = '\?'; break;
-
-			case 'x':	val[0] = toupper(src[++i]);
-					val[1] = toupper(src[++i]);
-					val[0] = ((val[0]>='A')&&(val[0]<='F')) ? (val[0] - 'A' + 10) : (val[0] - '0');
-					val[1] = ((val[1]>='A')&&(val[1]<='F')) ? (val[1] - 'A' + 10) : (val[1] - '0');
-					*(dst++) = val[0] * 16 + val[1];
-					break;
-
-			case '0':
-			case '1':
-			case '2':
-			case '3':
-			case '4':
-			case '5':
-			case '6':
-			case '7':	val[0] = src[  i] - '0';
-					val[1] = src[++i] - '0';
-					val[2] = src[++i] - '0';
-					*(dst++) = val[0] * 64 + val[1] * 8 + val[2];
-					break;
-
-			default:	*(dst++) = src[i]; break;
-			}
-		}
-	}
+        {
+        if(src[i] != '\\')
+                {
+                *(dst++) = src[i];
+                }
+                else
+                {
+                switch(src[++i])
+                        {
+                        case 'a':       *(dst++) = '\a'; break;
+                        case 'b':       *(dst++) = '\b'; break;
+                        case 'f':       *(dst++) = '\f'; break;
+                        case 'n':       *(dst++) = '\n'; break;
+                        case 'r':       *(dst++) = '\r'; break;
+                        case 't':       *(dst++) = '\t'; break;
+                        case 'v':       *(dst++) = '\v'; break;
+                        case '\'':      *(dst++) = '\''; break;
+                        case '\"':      *(dst++) = '\"'; break;
+                        case '\\':      *(dst++) = '\\'; break;
+                        case '\?':      *(dst++) = '\?'; break;
+
+                        case 'x':       val[0] = toupper(src[++i]);
+                                        val[1] = toupper(src[++i]);
+                                        val[0] = ((val[0]>='A')&&(val[0]<='F')) ? (val[0] - 'A' + 10) : (val[0] - '0');
+                                        val[1] = ((val[1]>='A')&&(val[1]<='F')) ? (val[1] - 'A' + 10) : (val[1] - '0');
+                                        *(dst++) = val[0] * 16 + val[1];
+                                        break;
+
+                        case '0':
+                        case '1':
+                        case '2':
+                        case '3':
+                        case '4':
+                        case '5':
+                        case '6':
+                        case '7':       val[0] = src[  i] - '0';
+                                        val[1] = src[++i] - '0';
+                                        val[2] = src[++i] - '0';
+                                        *(dst++) = val[0] * 64 + val[1] * 8 + val[2];
+                                        break;
+
+                        default:        *(dst++) = src[i]; break;
+                        }
+                }
+        }
 
 return(dst - s);
 }
diff --git a/src/helpers/fst/fstapi.h b/src/helpers/fst/fstapi.h
index bc02f66..83daac4 100644
--- a/src/helpers/fst/fstapi.h
+++ b/src/helpers/fst/fstapi.h
@@ -57,9 +57,9 @@ enum fstFileType {
 };
 
 enum fstBlockType {
-    FST_BL_HDR		       = 0,
+    FST_BL_HDR                 = 0,
     FST_BL_VCDATA              = 1,
-    FST_BL_BLACKOUT	       = 2,
+    FST_BL_BLACKOUT            = 2,
     FST_BL_GEOM                = 3,
     FST_BL_HIER                = 4,
     FST_BL_VCDATA_DYN_ALIAS    = 5,
@@ -67,8 +67,8 @@ enum fstBlockType {
     FST_BL_HIER_LZ4DUO         = 7,
     FST_BL_VCDATA_DYN_ALIAS2   = 8,
 
-    FST_BL_ZWRAPPER	       = 254,   /* indicates that whole trace is gz wrapped */
-    FST_BL_SKIP		       = 255	/* used while block is being written */
+    FST_BL_ZWRAPPER            = 254,   /* indicates that whole trace is gz wrapped */
+    FST_BL_SKIP                = 255    /* used while block is being written */
 };
 
 enum fstScopeType {
@@ -108,7 +108,7 @@ enum fstScopeType {
 };
 
 enum fstVarType {
-    FST_VT_MIN                 = 0,	/* start of vartypes */
+    FST_VT_MIN                 = 0,     /* start of vartypes */
 
     FST_VT_VCD_EVENT           = 0,
     FST_VT_VCD_INTEGER         = 1,
@@ -129,21 +129,21 @@ enum fstVarType {
     FST_VT_VCD_WIRE            = 16,
     FST_VT_VCD_WOR             = 17,
     FST_VT_VCD_PORT            = 18,
-    FST_VT_VCD_SPARRAY         = 19,	/* used to define the rownum (index) port for a sparse 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_GEN_STRING          = 21,    /* generic string type   (max len is defined dynamically via fstWriterEmitVariableLengthValueChange) */
 
     FST_VT_SV_BIT              = 22,
     FST_VT_SV_LOGIC            = 23,
-    FST_VT_SV_INT              = 24,	/* declare as size = 32 */
-    FST_VT_SV_SHORTINT         = 25,	/* declare as size = 16 */
-    FST_VT_SV_LONGINT          = 26,	/* declare as size = 64 */
-    FST_VT_SV_BYTE             = 27,	/* declare as size = 8  */
-    FST_VT_SV_ENUM             = 28,	/* declare as appropriate type range */
-    FST_VT_SV_SHORTREAL        = 29,	/* declare and emit same as FST_VT_VCD_REAL (needs to be emitted as double, not a float) */
-
-    FST_VT_MAX                 = 29	/* end of vartypes */
+    FST_VT_SV_INT              = 24,    /* declare as size = 32 */
+    FST_VT_SV_SHORTINT         = 25,    /* declare as size = 16 */
+    FST_VT_SV_LONGINT          = 26,    /* declare as size = 64 */
+    FST_VT_SV_BYTE             = 27,    /* declare as size = 8  */
+    FST_VT_SV_ENUM             = 28,    /* declare as appropriate type range */
+    FST_VT_SV_SHORTREAL        = 29,    /* declare and emit same as FST_VT_VCD_REAL (needs to be emitted as double, not a float) */
+
+    FST_VT_MAX                 = 29     /* end of vartypes */
 };
 
 enum fstVarDir {
@@ -174,7 +174,7 @@ enum fstHierType {
 enum fstAttrType {
     FST_AT_MIN         = 0,
 
-    FST_AT_MISC        = 0,	/* self-contained: does not need matching FST_HT_ATTREND */
+    FST_AT_MISC        = 0,     /* self-contained: does not need matching FST_HT_ATTREND */
     FST_AT_ARRAY       = 1,
     FST_AT_ENUM        = 2,
     FST_AT_PACK        = 3,
@@ -185,9 +185,9 @@ enum fstAttrType {
 enum fstMiscType {
     FST_MT_MIN         = 0,
 
-    FST_MT_COMMENT     = 0,	/* use fstWriterSetComment() to emit */
-    FST_MT_ENVVAR      = 1,	/* use fstWriterSetEnvVar() to emit */
-    FST_MT_SUPVAR      = 2,	/* use fstWriterCreateVar2() to emit */
+    FST_MT_COMMENT     = 0,     /* use fstWriterSetComment() to emit */
+    FST_MT_ENVVAR      = 1,     /* use fstWriterSetEnvVar() to emit */
+    FST_MT_SUPVAR      = 2,     /* use fstWriterCreateVar2() to emit */
     FST_MT_PATHNAME    = 3,     /* reserved for fstWriterSetSourceStem() string -> number management */
     FST_MT_SOURCESTEM  = 4,     /* use fstWriterSetSourceStem() to emit */
     FST_MT_SOURCEISTEM = 5,     /* use fstWriterSetSourceInstantiationStem() to emit */
@@ -274,7 +274,7 @@ enum fstSupplementalDataType {
     FST_SDT_MAX                    = 16,
 
     FST_SDT_SVT_SHIFT_COUNT        = 10, /* FST_SVT_* is ORed in by fstWriterCreateVar2() to the left after shifting FST_SDT_SVT_SHIFT_COUNT */
-    FST_SDT_ABS_MAX		   = ((1<<(FST_SDT_SVT_SHIFT_COUNT))-1)
+    FST_SDT_ABS_MAX                = ((1<<(FST_SDT_SVT_SHIFT_COUNT))-1)
 };
 
 
@@ -283,141 +283,141 @@ struct fstHier
 unsigned char htyp;
 
 union {
-	/* if htyp == FST_HT_SCOPE */
-	struct fstHierScope {
-		unsigned char typ; /* FST_ST_MIN ... FST_ST_MAX */
-		const char *name;
-		const char *component;
-		uint32_t name_length;		/* strlen(u.scope.name) */
-		uint32_t component_length;	/* strlen(u.scope.component) */
-		} scope;
-
-	/* if htyp == FST_HT_VAR */
-	struct fstHierVar {
-		unsigned char typ; /* FST_VT_MIN ... FST_VT_MAX */
-		unsigned char direction; /* FST_VD_MIN ... FST_VD_MAX */
-		unsigned char svt_workspace; /* zeroed out by FST reader, for client code use */
-		unsigned char sdt_workspace; /* zeroed out by FST reader, for client code use */
-		unsigned int  sxt_workspace; /* zeroed out by FST reader, for client code use */
-		const char *name;
-		uint32_t length;
-		fstHandle handle;
-		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_MIN ... FST_AT_MAX */
-		unsigned char subtype; /* from fstMiscType, fstArrayType, fstEnumValueType, fstPackType */
-		const char *name;
-		uint64_t arg; /* number of array elements, struct members, or some other payload (possibly ignored) */
-		uint64_t arg_from_name; /* for when name is overloaded as a variable-length integer (FST_AT_MISC + FST_MT_SOURCESTEM) */
-		uint32_t name_length; /* strlen(u.attr.name) */
-		} attr;
-	} u;
+        /* if htyp == FST_HT_SCOPE */
+        struct fstHierScope {
+                unsigned char typ; /* FST_ST_MIN ... FST_ST_MAX */
+                const char *name;
+                const char *component;
+                uint32_t name_length;           /* strlen(u.scope.name) */
+                uint32_t component_length;      /* strlen(u.scope.component) */
+                } scope;
+
+        /* if htyp == FST_HT_VAR */
+        struct fstHierVar {
+                unsigned char typ; /* FST_VT_MIN ... FST_VT_MAX */
+                unsigned char direction; /* FST_VD_MIN ... FST_VD_MAX */
+                unsigned char svt_workspace; /* zeroed out by FST reader, for client code use */
+                unsigned char sdt_workspace; /* zeroed out by FST reader, for client code use */
+                unsigned int  sxt_workspace; /* zeroed out by FST reader, for client code use */
+                const char *name;
+                uint32_t length;
+                fstHandle handle;
+                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_MIN ... FST_AT_MAX */
+                unsigned char subtype; /* from fstMiscType, fstArrayType, fstEnumValueType, fstPackType */
+                const char *name;
+                uint64_t arg; /* number of array elements, struct members, or some other payload (possibly ignored) */
+                uint64_t arg_from_name; /* for when name is overloaded as a variable-length integer (FST_AT_MISC + FST_MT_SOURCESTEM) */
+                uint32_t name_length; /* strlen(u.attr.name) */
+                } attr;
+        } u;
 };
 
 
 /*
  * writer functions
  */
-void		fstWriterClose(void *ctx);
-void *		fstWriterCreate(const char *nam, int use_compressed_hier);
-		/* used for Verilog/SV */
-fstHandle 	fstWriterCreateVar(void *ctx, enum fstVarType vt, enum fstVarDir vd,
-        		uint32_t len, const char *nam, fstHandle aliasHandle);
-		/* future expansion for VHDL and other languages.  The variable type, data type, etc map onto
-		   the current Verilog/SV one.  The "type" string is optional for a more verbose or custom description */
-fstHandle 	fstWriterCreateVar2(void *ctx, enum fstVarType vt, enum fstVarDir vd,
-        		uint32_t len, const char *nam, fstHandle aliasHandle,
-			const char *type, enum fstSupplementalVarType svt, enum fstSupplementalDataType sdt);
-void 		fstWriterEmitValueChange(void *ctx, fstHandle handle, const void *val);
-void 		fstWriterEmitVariableLengthValueChange(void *ctx, fstHandle handle, const void *val, uint32_t len);
-void 		fstWriterEmitDumpActive(void *ctx, int enable);
-void 		fstWriterEmitTimeChange(void *ctx, uint64_t tim);
-void 		fstWriterFlushContext(void *ctx);
-int 		fstWriterGetDumpSizeLimitReached(void *ctx);
-int 		fstWriterGetFseekFailed(void *ctx);
-void 		fstWriterSetAttrBegin(void *ctx, enum fstAttrType attrtype, int subtype,
-                	const char *attrname, uint64_t arg);
-void 		fstWriterSetAttrEnd(void *ctx);
-void 		fstWriterSetComment(void *ctx, const char *comm);
-void 		fstWriterSetDate(void *ctx, const char *dat);
-void 		fstWriterSetDumpSizeLimit(void *ctx, uint64_t numbytes);
-void 		fstWriterSetEnvVar(void *ctx, const char *envvar);
-void 		fstWriterSetFileType(void *ctx, enum fstFileType filetype);
-void 		fstWriterSetPackType(void *ctx, enum fstWriterPackType typ);
-void 		fstWriterSetParallelMode(void *ctx, int enable);
-void 		fstWriterSetRepackOnClose(void *ctx, int enable); 	/* type = 0 (none), 1 (libz) */
-void 		fstWriterSetScope(void *ctx, enum fstScopeType scopetype,
-                	const char *scopename, const char *scopecomp);
-void		fstWriterSetSourceInstantiationStem(void *ctx, const char *path, unsigned int line, unsigned int use_realpath);
-void		fstWriterSetSourceStem(void *ctx, const char *path, unsigned int line, unsigned int use_realpath);
-void 		fstWriterSetTimescale(void *ctx, int ts);
-void 		fstWriterSetTimescaleFromString(void *ctx, const char *s);
-void 		fstWriterSetTimezero(void *ctx, int64_t tim);
-void 		fstWriterSetUpscope(void *ctx);
-void 		fstWriterSetVersion(void *ctx, const char *vers);
+void            fstWriterClose(void *ctx);
+void *          fstWriterCreate(const char *nam, int use_compressed_hier);
+                /* used for Verilog/SV */
+fstHandle       fstWriterCreateVar(void *ctx, enum fstVarType vt, enum fstVarDir vd,
+                        uint32_t len, const char *nam, fstHandle aliasHandle);
+                /* future expansion for VHDL and other languages.  The variable type, data type, etc map onto
+                   the current Verilog/SV one.  The "type" string is optional for a more verbose or custom description */
+fstHandle       fstWriterCreateVar2(void *ctx, enum fstVarType vt, enum fstVarDir vd,
+                        uint32_t len, const char *nam, fstHandle aliasHandle,
+                        const char *type, enum fstSupplementalVarType svt, enum fstSupplementalDataType sdt);
+void            fstWriterEmitValueChange(void *ctx, fstHandle handle, const void *val);
+void            fstWriterEmitVariableLengthValueChange(void *ctx, fstHandle handle, const void *val, uint32_t len);
+void            fstWriterEmitDumpActive(void *ctx, int enable);
+void            fstWriterEmitTimeChange(void *ctx, uint64_t tim);
+void            fstWriterFlushContext(void *ctx);
+int             fstWriterGetDumpSizeLimitReached(void *ctx);
+int             fstWriterGetFseekFailed(void *ctx);
+void            fstWriterSetAttrBegin(void *ctx, enum fstAttrType attrtype, int subtype,
+                        const char *attrname, uint64_t arg);
+void            fstWriterSetAttrEnd(void *ctx);
+void            fstWriterSetComment(void *ctx, const char *comm);
+void            fstWriterSetDate(void *ctx, const char *dat);
+void            fstWriterSetDumpSizeLimit(void *ctx, uint64_t numbytes);
+void            fstWriterSetEnvVar(void *ctx, const char *envvar);
+void            fstWriterSetFileType(void *ctx, enum fstFileType filetype);
+void            fstWriterSetPackType(void *ctx, enum fstWriterPackType typ);
+void            fstWriterSetParallelMode(void *ctx, int enable);
+void            fstWriterSetRepackOnClose(void *ctx, int enable);       /* type = 0 (none), 1 (libz) */
+void            fstWriterSetScope(void *ctx, enum fstScopeType scopetype,
+                        const char *scopename, const char *scopecomp);
+void            fstWriterSetSourceInstantiationStem(void *ctx, const char *path, unsigned int line, unsigned int use_realpath);
+void            fstWriterSetSourceStem(void *ctx, const char *path, unsigned int line, unsigned int use_realpath);
+void            fstWriterSetTimescale(void *ctx, int ts);
+void            fstWriterSetTimescaleFromString(void *ctx, const char *s);
+void            fstWriterSetTimezero(void *ctx, int64_t tim);
+void            fstWriterSetUpscope(void *ctx);
+void            fstWriterSetVersion(void *ctx, const char *vers);
 
 
 /*
  * reader functions
  */
-void 		fstReaderClose(void *ctx);
-void 		fstReaderClrFacProcessMask(void *ctx, fstHandle facidx);
-void 		fstReaderClrFacProcessMaskAll(void *ctx);
-uint64_t 	fstReaderGetAliasCount(void *ctx);
-const char *	fstReaderGetCurrentFlatScope(void *ctx);
-void *		fstReaderGetCurrentScopeUserInfo(void *ctx);
-int 		fstReaderGetCurrentScopeLen(void *ctx);
-const char *	fstReaderGetDateString(void *ctx);
-int 		fstReaderGetDoubleEndianMatchState(void *ctx);
-uint64_t 	fstReaderGetDumpActivityChangeTime(void *ctx, uint32_t idx);
-unsigned char 	fstReaderGetDumpActivityChangeValue(void *ctx, uint32_t idx);
-uint64_t 	fstReaderGetEndTime(void *ctx);
-int 		fstReaderGetFacProcessMask(void *ctx, fstHandle facidx);
-int 		fstReaderGetFileType(void *ctx);
-int 		fstReaderGetFseekFailed(void *ctx);
-fstHandle 	fstReaderGetMaxHandle(void *ctx);
-uint64_t 	fstReaderGetMemoryUsedByWriter(void *ctx);
-uint32_t 	fstReaderGetNumberDumpActivityChanges(void *ctx);
-uint64_t 	fstReaderGetScopeCount(void *ctx);
-uint64_t 	fstReaderGetStartTime(void *ctx);
-signed char 	fstReaderGetTimescale(void *ctx);
-int64_t 	fstReaderGetTimezero(void *ctx);
-uint64_t 	fstReaderGetValueChangeSectionCount(void *ctx);
-char *		fstReaderGetValueFromHandleAtTime(void *ctx, uint64_t tim, fstHandle facidx, char *buf);
-uint64_t 	fstReaderGetVarCount(void *ctx);
-const char *	fstReaderGetVersionString(void *ctx);
+void            fstReaderClose(void *ctx);
+void            fstReaderClrFacProcessMask(void *ctx, fstHandle facidx);
+void            fstReaderClrFacProcessMaskAll(void *ctx);
+uint64_t        fstReaderGetAliasCount(void *ctx);
+const char *    fstReaderGetCurrentFlatScope(void *ctx);
+void *          fstReaderGetCurrentScopeUserInfo(void *ctx);
+int             fstReaderGetCurrentScopeLen(void *ctx);
+const char *    fstReaderGetDateString(void *ctx);
+int             fstReaderGetDoubleEndianMatchState(void *ctx);
+uint64_t        fstReaderGetDumpActivityChangeTime(void *ctx, uint32_t idx);
+unsigned char   fstReaderGetDumpActivityChangeValue(void *ctx, uint32_t idx);
+uint64_t        fstReaderGetEndTime(void *ctx);
+int             fstReaderGetFacProcessMask(void *ctx, fstHandle facidx);
+int             fstReaderGetFileType(void *ctx);
+int             fstReaderGetFseekFailed(void *ctx);
+fstHandle       fstReaderGetMaxHandle(void *ctx);
+uint64_t        fstReaderGetMemoryUsedByWriter(void *ctx);
+uint32_t        fstReaderGetNumberDumpActivityChanges(void *ctx);
+uint64_t        fstReaderGetScopeCount(void *ctx);
+uint64_t        fstReaderGetStartTime(void *ctx);
+signed char     fstReaderGetTimescale(void *ctx);
+int64_t         fstReaderGetTimezero(void *ctx);
+uint64_t        fstReaderGetValueChangeSectionCount(void *ctx);
+char *          fstReaderGetValueFromHandleAtTime(void *ctx, uint64_t tim, fstHandle facidx, char *buf);
+uint64_t        fstReaderGetVarCount(void *ctx);
+const char *    fstReaderGetVersionString(void *ctx);
 struct fstHier *fstReaderIterateHier(void *ctx);
-int 		fstReaderIterateHierRewind(void *ctx);
-int 		fstReaderIterBlocks(void *ctx,
-        		void (*value_change_callback)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value),
-        		void *user_callback_data_pointer, FILE *vcdhandle);
-int 		fstReaderIterBlocks2(void *ctx,
-        		void (*value_change_callback)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value),
-        		void (*value_change_callback_varlen)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value, uint32_t len),
-        		void *user_callback_data_pointer, FILE *vcdhandle);
-void 		fstReaderIterBlocksSetNativeDoublesOnCallback(void *ctx, int enable);
-void *		fstReaderOpen(const char *nam);
-void *		fstReaderOpenForUtilitiesOnly(void);
-const char *	fstReaderPopScope(void *ctx);
-int 		fstReaderProcessHier(void *ctx, FILE *vcdhandle);
-const char *	fstReaderPushScope(void *ctx, const char *nam, void *user_info);
-void 		fstReaderResetScope(void *ctx);
-void 		fstReaderSetFacProcessMask(void *ctx, fstHandle facidx);
-void 		fstReaderSetFacProcessMaskAll(void *ctx);
-void 		fstReaderSetLimitTimeRange(void *ctx, uint64_t start_time, uint64_t end_time);
-void 		fstReaderSetUnlimitedTimeRange(void *ctx);
-void		fstReaderSetVcdExtensions(void *ctx, int enable);
+int             fstReaderIterateHierRewind(void *ctx);
+int             fstReaderIterBlocks(void *ctx,
+                        void (*value_change_callback)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value),
+                        void *user_callback_data_pointer, FILE *vcdhandle);
+int             fstReaderIterBlocks2(void *ctx,
+                        void (*value_change_callback)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value),
+                        void (*value_change_callback_varlen)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value, uint32_t len),
+                        void *user_callback_data_pointer, FILE *vcdhandle);
+void            fstReaderIterBlocksSetNativeDoublesOnCallback(void *ctx, int enable);
+void *          fstReaderOpen(const char *nam);
+void *          fstReaderOpenForUtilitiesOnly(void);
+const char *    fstReaderPopScope(void *ctx);
+int             fstReaderProcessHier(void *ctx, FILE *vcdhandle);
+const char *    fstReaderPushScope(void *ctx, const char *nam, void *user_info);
+void            fstReaderResetScope(void *ctx);
+void            fstReaderSetFacProcessMask(void *ctx, fstHandle facidx);
+void            fstReaderSetFacProcessMaskAll(void *ctx);
+void            fstReaderSetLimitTimeRange(void *ctx, uint64_t start_time, uint64_t end_time);
+void            fstReaderSetUnlimitedTimeRange(void *ctx);
+void            fstReaderSetVcdExtensions(void *ctx, int enable);
 
 
 /*
  * utility functions
  */
-int 		fstUtilityBinToEsc(unsigned char *d, unsigned char *s, int len);
-int 		fstUtilityEscToBin(unsigned char *d, unsigned char *s, int len);
+int             fstUtilityBinToEsc(unsigned char *d, unsigned char *s, int len);
+int             fstUtilityEscToBin(unsigned char *d, unsigned char *s, int len);
 
 #ifdef __cplusplus
 }
diff --git a/src/helpers/fst/lz4.c b/src/helpers/fst/lz4.c
index ee37895..a1475dc 100644
--- a/src/helpers/fst/lz4.c
+++ b/src/helpers/fst/lz4.c
@@ -35,15 +35,6 @@
    Tuning parameters
 **************************************/
 /*
- * MEMORY_USAGE :
- * Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)
- * Increasing memory usage improves compression ratio
- * Reduced memory usage can improve speed, due to cache effect
- * Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache
- */
-#define MEMORY_USAGE 14
-
-/*
  * HEAPMODE :
  * Select how default compression functions will allocate memory for their hash table,
  * in memory stack (0:default, fastest), or in memory heap (1:requires memory allocation (malloc)).
@@ -56,8 +47,9 @@
 **************************************/
 /* 32 or 64 bits ? */
 #if (defined(__x86_64__) || defined(_M_X64) || defined(_WIN64) \
-  || defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) \
-  || defined(__64BIT__) || defined(_LP64) || defined(__LP64__) \
+  || defined(__powerpc64__) || defined(__powerpc64le__) \
+  || defined(__ppc64__) || defined(__ppc64le__) \
+  || defined(__PPC64__) || defined(__PPC64LE__) \
   || defined(__ia64) || defined(__itanium__) || defined(_M_IA64) )   /* Detects 64 bits mode */
 #  define LZ4_ARCH64 1
 #else
@@ -68,6 +60,7 @@
  * Little Endian or Big Endian ?
  * Overwrite the #define below if you know your architecture endianess
  */
+#include <stdlib.h>   /* Apparently required to detect endianess */
 #if defined (__GLIBC__)
 #  include <endian.h>
 #  if (__BYTE_ORDER == __BIG_ENDIAN)
@@ -224,9 +217,9 @@ typedef struct {size_t v;} _PACKED size_t_S;
 /**************************************
    Constants
 **************************************/
-#define LZ4_HASHLOG   (MEMORY_USAGE-2)
-#define HASHTABLESIZE (1 << MEMORY_USAGE)
-#define HASHNBCELLS4  (1 << LZ4_HASHLOG)
+#define LZ4_HASHLOG   (LZ4_MEMORY_USAGE-2)
+#define HASHTABLESIZE (1 << LZ4_MEMORY_USAGE)
+#define HASH_SIZE_U32 (1 << LZ4_HASHLOG)
 
 #define MINMATCH 4
 
@@ -255,16 +248,19 @@ static const int LZ4_minLength = (MFLIMIT+1);
    Structures and local types
 **************************************/
 typedef struct {
-    U32 hashTable[HASHNBCELLS4];
+    U32  hashTable[HASH_SIZE_U32];
+    U32  currentOffset;
+    U32  initCheck;
+    const BYTE* dictionary;
     const BYTE* bufferStart;
-    const BYTE* base;
-    const BYTE* nextBlock;
-} LZ4_Data_Structure;
+    U32  dictSize;
+} LZ4_stream_t_internal;
 
-typedef enum { notLimited = 0, limited = 1 } limitedOutput_directive;
+typedef enum { notLimited = 0, limitedOutput = 1 } limitedOutput_directive;
 typedef enum { byPtr, byU32, byU16 } tableType_t;
 
-typedef enum { noPrefix = 0, withPrefix = 1 } prefix64k_directive;
+typedef enum { noDict = 0, withPrefix64k, usingExtDict } dict_directive;
+typedef enum { noDictIssue = 0, dictSmall } dictIssue_directive;
 
 typedef enum { endOnOutputSize = 0, endOnInputSize = 1 } endCondition_directive;
 typedef enum { full = 0, partial = 1 } earlyEnd_directive;
@@ -289,12 +285,12 @@ typedef enum { full = 0, partial = 1 } earlyEnd_directive;
 /**************************************
    Macros
 **************************************/
+#define LZ4_STATIC_ASSERT(c)    { enum { LZ4_static_assert = 1/(!!(c)) }; }   /* use only *after* variable declarations */
 #if LZ4_ARCH64 || !defined(__GNUC__)
-#  define LZ4_WILDCOPY(d,s,e)     { do { LZ4_COPY8(d,s) } while (d<e); }           /* at the end, d>=e; */
+#  define LZ4_WILDCOPY(d,s,e)   { do { LZ4_COPY8(d,s) } while (d<e); }        /* at the end, d>=e; */
 #else
-#  define LZ4_WILDCOPY(d,s,e)     { if (likely(e-d <= 8)) LZ4_COPY8(d,s) else do { LZ4_COPY8(d,s) } while (d<e); }
+#  define LZ4_WILDCOPY(d,s,e)   { if (likely(e-d <= 8)) LZ4_COPY8(d,s) else do { LZ4_COPY8(d,s) } while (d<e); }
 #endif
-#define LZ4_SECURECOPY(d,s,e)     { if (d<e) LZ4_WILDCOPY(d,s,e); }
 
 
 /****************************
@@ -302,7 +298,7 @@ typedef enum { full = 0, partial = 1 } earlyEnd_directive;
 ****************************/
 #if LZ4_ARCH64
 
-FORCE_INLINE int LZ4_NbCommonBytes (register U64 val)
+int LZ4_NbCommonBytes (register U64 val)
 {
 # if defined(LZ4_BIG_ENDIAN)
 #   if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT)
@@ -334,7 +330,7 @@ FORCE_INLINE int LZ4_NbCommonBytes (register U64 val)
 
 #else
 
-FORCE_INLINE int LZ4_NbCommonBytes (register U32 val)
+int LZ4_NbCommonBytes (register U32 val)
 {
 # if defined(LZ4_BIG_ENDIAN)
 #   if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT)
@@ -366,10 +362,12 @@ FORCE_INLINE int LZ4_NbCommonBytes (register U32 val)
 #endif
 
 
-/****************************
+/********************************
    Compression functions
-****************************/
-FORCE_INLINE int LZ4_hashSequence(U32 sequence, tableType_t tableType)
+********************************/
+int LZ4_compressBound(int isize)  { return LZ4_COMPRESSBOUND(isize); }
+
+static int LZ4_hashSequence(U32 sequence, tableType_t tableType)
 {
     if (tableType == byU16)
         return (((sequence) * 2654435761U) >> ((MINMATCH*8)-(LZ4_HASHLOG+1)));
@@ -377,9 +375,9 @@ FORCE_INLINE int LZ4_hashSequence(U32 sequence, tableType_t tableType)
         return (((sequence) * 2654435761U) >> ((MINMATCH*8)-LZ4_HASHLOG));
 }
 
-FORCE_INLINE int LZ4_hashPosition(const BYTE* p, tableType_t tableType) { return LZ4_hashSequence(A32(p), tableType); }
+static int LZ4_hashPosition(const BYTE* p, tableType_t tableType) { return LZ4_hashSequence(A32(p), tableType); }
 
-FORCE_INLINE void LZ4_putPositionOnHash(const BYTE* p, U32 h, void* tableBase, tableType_t tableType, const BYTE* srcBase)
+static void LZ4_putPositionOnHash(const BYTE* p, U32 h, void* tableBase, tableType_t tableType, const BYTE* srcBase)
 {
     switch (tableType)
     {
@@ -389,58 +387,97 @@ FORCE_INLINE void LZ4_putPositionOnHash(const BYTE* p, U32 h, void* tableBase, t
     }
 }
 
-FORCE_INLINE void LZ4_putPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase)
+static void LZ4_putPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase)
 {
     U32 h = LZ4_hashPosition(p, tableType);
     LZ4_putPositionOnHash(p, h, tableBase, tableType, srcBase);
 }
 
-FORCE_INLINE const BYTE* LZ4_getPositionOnHash(U32 h, void* tableBase, tableType_t tableType, const BYTE* srcBase)
+static const BYTE* LZ4_getPositionOnHash(U32 h, void* tableBase, tableType_t tableType, const BYTE* srcBase)
 {
     if (tableType == byPtr) { const BYTE** hashTable = (const BYTE**) tableBase; return hashTable[h]; }
     if (tableType == byU32) { U32* hashTable = (U32*) tableBase; return hashTable[h] + srcBase; }
     { U16* hashTable = (U16*) tableBase; return hashTable[h] + srcBase; }   /* default, to ensure a return */
 }
 
-FORCE_INLINE const BYTE* LZ4_getPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase)
+static const BYTE* LZ4_getPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase)
 {
     U32 h = LZ4_hashPosition(p, tableType);
     return LZ4_getPositionOnHash(h, tableBase, tableType, srcBase);
 }
 
+static unsigned LZ4_count(const BYTE* pIn, const BYTE* pRef, const BYTE* pInLimit)
+{
+    const BYTE* const pStart = pIn;
 
-FORCE_INLINE int LZ4_compress_generic(
+    while (likely(pIn<pInLimit-(STEPSIZE-1)))
+    {
+        size_t diff = AARCH(pRef) ^ AARCH(pIn);
+        if (!diff) { pIn+=STEPSIZE; pRef+=STEPSIZE; continue; }
+        pIn += LZ4_NbCommonBytes(diff);
+        return (unsigned)(pIn - pStart);
+    }
+    if (sizeof(void*)==8) if ((pIn<(pInLimit-3)) && (A32(pRef) == A32(pIn))) { pIn+=4; pRef+=4; }
+    if ((pIn<(pInLimit-1)) && (A16(pRef) == A16(pIn))) { pIn+=2; pRef+=2; }
+    if ((pIn<pInLimit) && (*pRef == *pIn)) pIn++;
+
+    return (unsigned)(pIn - pStart);
+}
+
+
+static int LZ4_compress_generic(
                  void* ctx,
                  const char* source,
                  char* dest,
                  int inputSize,
                  int maxOutputSize,
 
-                 limitedOutput_directive limitedOutput,
+                 limitedOutput_directive outputLimited,
                  tableType_t tableType,
-                 prefix64k_directive prefix)
+                 dict_directive dict,
+                 dictIssue_directive dictIssue)
 {
+    LZ4_stream_t_internal* const dictPtr = (LZ4_stream_t_internal*)ctx;
+
     const BYTE* ip = (const BYTE*) source;
-    const BYTE* const base = (prefix==withPrefix) ? ((LZ4_Data_Structure*)ctx)->base : (const BYTE*) source;
-    const BYTE* const lowLimit = ((prefix==withPrefix) ? ((LZ4_Data_Structure*)ctx)->bufferStart : (const BYTE*)source);
+    const BYTE* base;
+    const BYTE* lowLimit;
+    const BYTE* const lowRefLimit = ip - dictPtr->dictSize;
+    const BYTE* const dictionary = dictPtr->dictionary;
+    const BYTE* const dictEnd = dictionary + dictPtr->dictSize;
+    const size_t dictDelta = dictEnd - (const BYTE*)source;
     const BYTE* anchor = (const BYTE*) source;
     const BYTE* const iend = ip + inputSize;
     const BYTE* const mflimit = iend - MFLIMIT;
     const BYTE* const matchlimit = iend - LASTLITERALS;
 
     BYTE* op = (BYTE*) dest;
-    BYTE* const oend = op + maxOutputSize;
+    BYTE* const olimit = op + maxOutputSize;
 
-    int length;
     const int skipStrength = SKIPSTRENGTH;
     U32 forwardH;
+    size_t refDelta=0;
 
     /* Init conditions */
-    if ((U32)inputSize > (U32)LZ4_MAX_INPUT_SIZE) return 0;                                /* Unsupported input size, too large (or negative) */
-    if ((prefix==withPrefix) && (ip != ((LZ4_Data_Structure*)ctx)->nextBlock)) return 0;   /* must continue from end of previous block */
-    if (prefix==withPrefix) ((LZ4_Data_Structure*)ctx)->nextBlock=iend;                    /* do it now, due to potential early exit */
-    if ((tableType == byU16) && (inputSize>=(int)LZ4_64KLIMIT)) return 0;                  /* Size too large (not within 64K limit) */
-    if (inputSize<LZ4_minLength) goto _last_literals;                                      /* Input too small, no compression (all literals) */
+    if ((U32)inputSize > (U32)LZ4_MAX_INPUT_SIZE) return 0;          /* Unsupported input size, too large (or negative) */
+    switch(dict)
+    {
+    case noDict:
+    default:
+        base = (const BYTE*)source;
+        lowLimit = (const BYTE*)source;
+        break;
+    case withPrefix64k:
+        base = (const BYTE*)source - dictPtr->currentOffset;
+        lowLimit = (const BYTE*)source - dictPtr->dictSize;
+        break;
+    case usingExtDict:
+        base = (const BYTE*)source - dictPtr->currentOffset;
+        lowLimit = (const BYTE*)source;
+        break;
+    }
+    if ((tableType == byU16) && (inputSize>=(int)LZ4_64KLIMIT)) return 0;   /* Size too large (not within 64K limit) */
+    if (inputSize<LZ4_minLength) goto _last_literals;                       /* Input too small, no compression (all literals) */
 
     /* First Byte */
     LZ4_putPosition(ip, ctx, tableType, base);
@@ -449,98 +486,148 @@ FORCE_INLINE int LZ4_compress_generic(
     /* Main Loop */
     for ( ; ; )
     {
-        int findMatchAttempts = (1U << skipStrength) + 3;
-        const BYTE* forwardIp = ip;
         const BYTE* ref;
         BYTE* token;
-
-        /* Find a match */
-        do {
-            U32 h = forwardH;
-            int step = findMatchAttempts++ >> skipStrength;
-            ip = forwardIp;
-            forwardIp = ip + step;
-
-            if (unlikely(forwardIp > mflimit)) { goto _last_literals; }
-
-            forwardH = LZ4_hashPosition(forwardIp, tableType);
-            ref = LZ4_getPositionOnHash(h, ctx, tableType, base);
-            LZ4_putPositionOnHash(ip, h, ctx, tableType, base);
-
-        } while ((ref + MAX_DISTANCE < ip) || (A32(ref) != A32(ip)));
+        {
+            const BYTE* forwardIp = ip;
+            unsigned step=1;
+            unsigned searchMatchNb = (1U << skipStrength);
+
+            /* Find a match */
+            do {
+                U32 h = forwardH;
+                ip = forwardIp;
+                forwardIp += step;
+                step = searchMatchNb++ >> skipStrength;
+                //if (step>8) step=8;   // required for valid forwardIp ; slows down uncompressible data a bit
+
+                if (unlikely(forwardIp > mflimit)) goto _last_literals;
+
+                ref = LZ4_getPositionOnHash(h, ctx, tableType, base);
+                if (dict==usingExtDict)
+                {
+                    if (ref<(const BYTE*)source)
+                    {
+                        refDelta = dictDelta;
+                        lowLimit = dictionary;
+                    }
+                    else
+                    {
+                        refDelta = 0;
+                        lowLimit = (const BYTE*)source;
+                    }
+                }
+                forwardH = LZ4_hashPosition(forwardIp, tableType);
+                LZ4_putPositionOnHash(ip, h, ctx, tableType, base);
+
+            } while ( ((dictIssue==dictSmall) ? (ref < lowRefLimit) : 0)
+                || ((tableType==byU16) ? 0 : (ref + MAX_DISTANCE < ip))
+                || (A32(ref+refDelta) != A32(ip)) );
+        }
 
         /* Catch up */
-        while ((ip>anchor) && (ref > lowLimit) && (unlikely(ip[-1]==ref[-1]))) { ip--; ref--; }
+        while ((ip>anchor) && (ref+refDelta > lowLimit) && (unlikely(ip[-1]==ref[refDelta-1]))) { ip--; ref--; }
 
-        /* Encode Literal length */
-        length = (int)(ip - anchor);
-        token = op++;
-        if ((limitedOutput) && (unlikely(op + length + (2 + 1 + LASTLITERALS) + (length/255) > oend))) return 0;   /* Check output limit */
-        if (length>=(int)RUN_MASK)
         {
-            int len = length-RUN_MASK;
-            *token=(RUN_MASK<<ML_BITS);
-            for(; len >= 255 ; len-=255) *op++ = 255;
-            *op++ = (BYTE)len;
-        }
-        else *token = (BYTE)(length<<ML_BITS);
+            /* Encode Literal length */
+            unsigned litLength = (unsigned)(ip - anchor);
+            token = op++;
+            if ((outputLimited) && (unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength/255) > olimit)))
+                return 0;   /* Check output limit */
+            if (litLength>=RUN_MASK)
+            {
+                int len = (int)litLength-RUN_MASK;
+                *token=(RUN_MASK<<ML_BITS);
+                for(; len >= 255 ; len-=255) *op++ = 255;
+                *op++ = (BYTE)len;
+            }
+            else *token = (BYTE)(litLength<<ML_BITS);
 
-        /* Copy Literals */
-        { BYTE* end=(op)+(length); LZ4_WILDCOPY(op,anchor,end); op=end; }
+            /* Copy Literals */
+            { BYTE* end = op+litLength; LZ4_WILDCOPY(op,anchor,end); op=end; }
+        }
 
 _next_match:
         /* Encode Offset */
-        LZ4_WRITE_LITTLEENDIAN_16(op,(U16)(ip-ref));
-
-        /* Start Counting */
-        ip+=MINMATCH; ref+=MINMATCH;    /* MinMatch already verified */
-        anchor = ip;
-        while (likely(ip<matchlimit-(STEPSIZE-1)))
-        {
-            size_t diff = AARCH(ref) ^ AARCH(ip);
-            if (!diff) { ip+=STEPSIZE; ref+=STEPSIZE; continue; }
-            ip += LZ4_NbCommonBytes(diff);
-            goto _endCount;
-        }
-        if (LZ4_ARCH64) if ((ip<(matchlimit-3)) && (A32(ref) == A32(ip))) { ip+=4; ref+=4; }
-        if ((ip<(matchlimit-1)) && (A16(ref) == A16(ip))) { ip+=2; ref+=2; }
-        if ((ip<matchlimit) && (*ref == *ip)) ip++;
-_endCount:
+        LZ4_WRITE_LITTLEENDIAN_16(op, (U16)(ip-ref));
 
         /* Encode MatchLength */
-        length = (int)(ip - anchor);
-        if ((limitedOutput) && (unlikely(op + (1 + LASTLITERALS) + (length>>8) > oend))) return 0;    /* Check output limit */
-        if (length>=(int)ML_MASK)
         {
-            *token += ML_MASK;
-            length -= ML_MASK;
-            for (; length > 509 ; length-=510) { *op++ = 255; *op++ = 255; }
-            if (length >= 255) { length-=255; *op++ = 255; }
-            *op++ = (BYTE)length;
+            unsigned matchLength;
+
+            if ((dict==usingExtDict) && (lowLimit==dictionary))
+            {
+                const BYTE* limit;
+                ref += refDelta;
+                limit = ip + (dictEnd-ref);
+                if (limit > matchlimit) limit = matchlimit;
+                matchLength = LZ4_count(ip+MINMATCH, ref+MINMATCH, limit);
+                ip += MINMATCH + matchLength;
+                if (ip==limit)
+                {
+                    unsigned more = LZ4_count(ip, (const BYTE*)source, matchlimit);
+                    matchLength += more;
+                    ip += more;
+                }
+            }
+            else
+            {
+                matchLength = LZ4_count(ip+MINMATCH, ref+MINMATCH, matchlimit);
+                ip += MINMATCH + matchLength;
+            }
+
+            if (matchLength>=ML_MASK)
+            {
+                if ((outputLimited) && (unlikely(op + (1 + LASTLITERALS) + (matchLength>>8) > olimit)))
+                    return 0;    /* Check output limit */
+                *token += ML_MASK;
+                matchLength -= ML_MASK;
+                for (; matchLength >= 510 ; matchLength-=510) { *op++ = 255; *op++ = 255; }
+                if (matchLength >= 255) { matchLength-=255; *op++ = 255; }
+                *op++ = (BYTE)matchLength;
+            }
+            else *token += (BYTE)(matchLength);
         }
-        else *token += (BYTE)(length);
+
+        anchor = ip;
 
         /* Test end of chunk */
-        if (ip > mflimit) { anchor = ip;  break; }
+        if (ip > mflimit) break;
 
         /* Fill table */
         LZ4_putPosition(ip-2, ctx, tableType, base);
 
         /* Test next position */
         ref = LZ4_getPosition(ip, ctx, tableType, base);
+        if (dict==usingExtDict)
+        {
+            if (ref<(const BYTE*)source)
+            {
+                refDelta = dictDelta;
+                lowLimit = dictionary;
+            }
+            else
+            {
+                refDelta = 0;
+                lowLimit = (const BYTE*)source;
+            }
+        }
         LZ4_putPosition(ip, ctx, tableType, base);
-        if ((ref + MAX_DISTANCE >= ip) && (A32(ref) == A32(ip))) { token = op++; *token=0; goto _next_match; }
+        if ( ((dictIssue==dictSmall) ? (ref>=lowRefLimit) : 1)
+            && (ref+MAX_DISTANCE>=ip)
+            && (A32(ref+refDelta)==A32(ip)) )
+        { token=op++; *token=0; goto _next_match; }
 
         /* Prepare next loop */
-        anchor = ip++;
-        forwardH = LZ4_hashPosition(ip, tableType);
+        forwardH = LZ4_hashPosition(++ip, tableType);
     }
 
 _last_literals:
     /* Encode Last Literals */
     {
         int lastRun = (int)(iend - anchor);
-        if ((limitedOutput) && (((char*)op - dest) + lastRun + 1 + ((lastRun+255-RUN_MASK)/255) > (U32)maxOutputSize)) return 0;   /* Check output limit */
+        if ((outputLimited) && (((char*)op - dest) + lastRun + 1 + ((lastRun+255-RUN_MASK)/255) > (U32)maxOutputSize))
+            return 0;   /* Check output limit */
         if (lastRun>=(int)RUN_MASK) { *op++=(RUN_MASK<<ML_BITS); lastRun-=RUN_MASK; for(; lastRun >= 255 ; lastRun-=255) *op++ = 255; *op++ = (BYTE) lastRun; }
         else *op++ = (BYTE)(lastRun<<ML_BITS);
         memcpy(op, anchor, iend - anchor);
@@ -555,16 +642,16 @@ _last_literals:
 int LZ4_compress(const char* source, char* dest, int inputSize)
 {
 #if (HEAPMODE)
-    void* ctx = ALLOCATOR(HASHNBCELLS4, 4);   /* Aligned on 4-bytes boundaries */
+    void* ctx = ALLOCATOR(LZ4_STREAMSIZE_U32, 4);   /* Aligned on 4-bytes boundaries */
 #else
-    U32 ctx[1U<<(MEMORY_USAGE-2)] = {0};      /* Ensure data is aligned on 4-bytes boundaries */
+    U32 ctx[LZ4_STREAMSIZE_U32] = {0};      /* Ensure data is aligned on 4-bytes boundaries */
 #endif
     int result;
 
     if (inputSize < (int)LZ4_64KLIMIT)
-        result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, 0, notLimited, byU16, noPrefix);
+        result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, 0, notLimited, byU16, noDict, noDictIssue);
     else
-        result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, 0, notLimited, (sizeof(void*)==8) ? byU32 : byPtr, noPrefix);
+        result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, 0, notLimited, (sizeof(void*)==8) ? byU32 : byPtr, noDict, noDictIssue);
 
 #if (HEAPMODE)
     FREEMEM(ctx);
@@ -575,16 +662,16 @@ int LZ4_compress(const char* source, char* dest, int inputSize)
 int LZ4_compress_limitedOutput(const char* source, char* dest, int inputSize, int maxOutputSize)
 {
 #if (HEAPMODE)
-    void* ctx = ALLOCATOR(HASHNBCELLS4, 4);   /* Aligned on 4-bytes boundaries */
+    void* ctx = ALLOCATOR(LZ4_STREAMSIZE_U32, 4);   /* Aligned on 4-bytes boundaries */
 #else
-    U32 ctx[1U<<(MEMORY_USAGE-2)] = {0};      /* Ensure data is aligned on 4-bytes boundaries */
+    U32 ctx[LZ4_STREAMSIZE_U32] = {0};      /* Ensure data is aligned on 4-bytes boundaries */
 #endif
     int result;
 
     if (inputSize < (int)LZ4_64KLIMIT)
-        result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, maxOutputSize, limited, byU16, noPrefix);
+        result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue);
     else
-        result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, maxOutputSize, limited, (sizeof(void*)==8) ? byU32 : byPtr, noPrefix);
+        result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, maxOutputSize, limitedOutput, (sizeof(void*)==8) ? byU32 : byPtr, noDict, noDictIssue);
 
 #if (HEAPMODE)
     FREEMEM(ctx);
@@ -593,123 +680,182 @@ int LZ4_compress_limitedOutput(const char* source, char* dest, int inputSize, in
 }
 
 
-/*****************************
-   Using external allocation
-*****************************/
+/*****************************************
+   Experimental : Streaming functions
+*****************************************/
 
-int LZ4_sizeofState() { return 1 << MEMORY_USAGE; }
-
-
-int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize)
+void* LZ4_createStream()
 {
-    if (((size_t)(state)&3) != 0) return 0;   /* Error : state is not aligned on 4-bytes boundary */
-    MEM_INIT(state, 0, LZ4_sizeofState());
+    void* lz4s = ALLOCATOR(4, LZ4_STREAMSIZE_U32);
+    MEM_INIT(lz4s, 0, LZ4_STREAMSIZE);
+    return lz4s;
+}
 
-    if (inputSize < (int)LZ4_64KLIMIT)
-        return LZ4_compress_generic(state, source, dest, inputSize, 0, notLimited, byU16, noPrefix);
-    else
-        return LZ4_compress_generic(state, source, dest, inputSize, 0, notLimited, (sizeof(void*)==8) ? byU32 : byPtr, noPrefix);
+int LZ4_free (void* LZ4_stream)
+{
+    FREEMEM(LZ4_stream);
+    return (0);
 }
 
 
-int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize)
+int LZ4_loadDict (void* LZ4_dict, const char* dictionary, int dictSize)
 {
-    if (((size_t)(state)&3) != 0) return 0;   /* Error : state is not aligned on 4-bytes boundary */
-    MEM_INIT(state, 0, LZ4_sizeofState());
+    LZ4_stream_t_internal* dict = (LZ4_stream_t_internal*) LZ4_dict;
+    const BYTE* p = (const BYTE*)dictionary;
+    const BYTE* const dictEnd = p + dictSize;
+    const BYTE* base;
 
-    if (inputSize < (int)LZ4_64KLIMIT)
-        return LZ4_compress_generic(state, source, dest, inputSize, maxOutputSize, limited, byU16, noPrefix);
-    else
-        return LZ4_compress_generic(state, source, dest, inputSize, maxOutputSize, limited, (sizeof(void*)==8) ? byU32 : byPtr, noPrefix);
-}
+    LZ4_STATIC_ASSERT(LZ4_STREAMSIZE >= sizeof(LZ4_stream_t_internal));      /* A compilation error here means LZ4_STREAMSIZE is not large enough */
+    if (dict->initCheck) MEM_INIT(dict, 0, sizeof(LZ4_stream_t_internal));   /* Uninitialized structure detected */
 
+    if (dictSize < MINMATCH)
+    {
+        dict->dictionary = NULL;
+        dict->dictSize = 0;
+        return 1;
+    }
 
-/****************************
-   Stream functions
-****************************/
+    if (p <= dictEnd - 64 KB) p = dictEnd - 64 KB;
+    base = p - dict->currentOffset;
+    dict->dictionary = p;
+    dict->dictSize = (U32)(dictEnd - p);
+    dict->currentOffset += dict->dictSize;
 
-int LZ4_sizeofStreamState()
-{
-    return sizeof(LZ4_Data_Structure);
-}
+    while (p <= dictEnd-MINMATCH)
+    {
+        LZ4_putPosition(p, dict, byU32, base);
+        p+=3;
+    }
 
-FORCE_INLINE void LZ4_init(LZ4_Data_Structure* lz4ds, const BYTE* base)
-{
-    MEM_INIT(lz4ds->hashTable, 0, sizeof(lz4ds->hashTable));
-    lz4ds->bufferStart = base;
-    lz4ds->base = base;
-    lz4ds->nextBlock = base;
+    return 1;
 }
 
-int LZ4_resetStreamState(void* state, const char* inputBuffer)
-{
-    if ((((size_t)state) & 3) != 0) return 1;   /* Error : pointer is not aligned on 4-bytes boundary */
-    LZ4_init((LZ4_Data_Structure*)state, (const BYTE*)inputBuffer);
-    return 0;
-}
 
-void* LZ4_create (const char* inputBuffer)
+void LZ4_renormDictT(LZ4_stream_t_internal* LZ4_dict, const BYTE* src)
 {
-    void* lz4ds = ALLOCATOR(1, sizeof(LZ4_Data_Structure));
-    LZ4_init ((LZ4_Data_Structure*)lz4ds, (const BYTE*)inputBuffer);
-    return lz4ds;
+    if ((LZ4_dict->currentOffset > 0x80000000) ||
+        ((size_t)LZ4_dict->currentOffset > (size_t)src))   /* address space overflow */
+    {
+        /* rescale hash table */
+        U32 delta = LZ4_dict->currentOffset - 64 KB;
+        const BYTE* dictEnd = LZ4_dict->dictionary + LZ4_dict->dictSize;
+        int i;
+        for (i=0; i<HASH_SIZE_U32; i++)
+        {
+            if (LZ4_dict->hashTable[i] < delta) LZ4_dict->hashTable[i]=0;
+            else LZ4_dict->hashTable[i] -= delta;
+        }
+        LZ4_dict->currentOffset = 64 KB;
+        if (LZ4_dict->dictSize > 64 KB) LZ4_dict->dictSize = 64 KB;
+        LZ4_dict->dictionary = dictEnd - LZ4_dict->dictSize;
+    }
 }
 
 
-int LZ4_free (void* LZ4_Data)
+FORCE_INLINE int LZ4_compress_continue_generic (void* LZ4_stream, const char* source, char* dest, int inputSize,
+                                                int maxOutputSize, limitedOutput_directive limit)
 {
-    FREEMEM(LZ4_Data);
-    return (0);
-}
+    LZ4_stream_t_internal* streamPtr = (LZ4_stream_t_internal*)LZ4_stream;
+    const BYTE* const dictEnd = streamPtr->dictionary + streamPtr->dictSize;
 
+    const BYTE* smallest = (const BYTE*) source;
+    if (streamPtr->initCheck) return 0;   /* Uninitialized structure detected */
+    if ((streamPtr->dictSize>0) && (smallest>dictEnd)) smallest = dictEnd;
+    LZ4_renormDictT(streamPtr, smallest);
 
-char* LZ4_slideInputBuffer (void* LZ4_Data)
-{
-    LZ4_Data_Structure* lz4ds = (LZ4_Data_Structure*)LZ4_Data;
-    size_t delta = lz4ds->nextBlock - (lz4ds->bufferStart + 64 KB);
-
-    if ( (lz4ds->base - delta > lz4ds->base)                          /* underflow control */
-       || ((size_t)(lz4ds->nextBlock - lz4ds->base) > 0xE0000000) )   /* close to 32-bits limit */
+    /* Check overlapping input/dictionary space */
     {
-        size_t deltaLimit = (lz4ds->nextBlock - 64 KB) - lz4ds->base;
-        int nH;
-
-        for (nH=0; nH < HASHNBCELLS4; nH++)
+        const BYTE* sourceEnd = (const BYTE*) source + inputSize;
+        if ((sourceEnd > streamPtr->dictionary) && (sourceEnd < dictEnd))
         {
-            if ((size_t)(lz4ds->hashTable[nH]) < deltaLimit) lz4ds->hashTable[nH] = 0;
-            else lz4ds->hashTable[nH] -= (U32)deltaLimit;
+            streamPtr->dictSize = (U32)(dictEnd - sourceEnd);
+            if (streamPtr->dictSize > 64 KB) streamPtr->dictSize = 64 KB;
+            if (streamPtr->dictSize < 4) streamPtr->dictSize = 0;
+            streamPtr->dictionary = dictEnd - streamPtr->dictSize;
         }
-        memcpy((void*)(lz4ds->bufferStart), (const void*)(lz4ds->nextBlock - 64 KB), 64 KB);
-        lz4ds->base = lz4ds->bufferStart;
-        lz4ds->nextBlock = lz4ds->base + 64 KB;
     }
-    else
+
+    /* prefix mode : source data follows dictionary */
+    if (dictEnd == (const BYTE*)source)
+    {
+        int result;
+        if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset))
+            result = LZ4_compress_generic(LZ4_stream, source, dest, inputSize, maxOutputSize, limit, byU32, withPrefix64k, dictSmall);
+        else
+            result = LZ4_compress_generic(LZ4_stream, source, dest, inputSize, maxOutputSize, limit, byU32, withPrefix64k, noDictIssue);
+        streamPtr->dictSize += (U32)inputSize;
+        streamPtr->currentOffset += (U32)inputSize;
+        return result;
+    }
+
+    /* external dictionary mode */
     {
-        memcpy((void*)(lz4ds->bufferStart), (const void*)(lz4ds->nextBlock - 64 KB), 64 KB);
-        lz4ds->nextBlock -= delta;
-        lz4ds->base -= delta;
+        int result;
+        if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset))
+            result = LZ4_compress_generic(LZ4_stream, source, dest, inputSize, maxOutputSize, limit, byU32, usingExtDict, dictSmall);
+        else
+            result = LZ4_compress_generic(LZ4_stream, source, dest, inputSize, maxOutputSize, limit, byU32, usingExtDict, noDictIssue);
+        streamPtr->dictionary = (const BYTE*)source;
+        streamPtr->dictSize = (U32)inputSize;
+        streamPtr->currentOffset += (U32)inputSize;
+        return result;
     }
+}
+
+
+int LZ4_compress_continue (void* LZ4_stream, const char* source, char* dest, int inputSize)
+{
+    return LZ4_compress_continue_generic(LZ4_stream, source, dest, inputSize, 0, notLimited);
+}
 
-    return (char*)(lz4ds->nextBlock);
+int LZ4_compress_limitedOutput_continue (void* LZ4_stream, const char* source, char* dest, int inputSize, int maxOutputSize)
+{
+    return LZ4_compress_continue_generic(LZ4_stream, source, dest, inputSize, maxOutputSize, limitedOutput);
 }
 
 
-int LZ4_compress_continue (void* LZ4_Data, const char* source, char* dest, int inputSize)
+// Hidden debug function, to force separate dictionary mode
+int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* dest, int inputSize)
 {
-    return LZ4_compress_generic(LZ4_Data, source, dest, inputSize, 0, notLimited, byU32, withPrefix);
+    LZ4_stream_t_internal* streamPtr = (LZ4_stream_t_internal*)LZ4_dict;
+    int result;
+    const BYTE* const dictEnd = streamPtr->dictionary + streamPtr->dictSize;
+
+    const BYTE* smallest = dictEnd;
+    if (smallest > (const BYTE*) source) smallest = (const BYTE*) source;
+    LZ4_renormDictT((LZ4_stream_t_internal*)LZ4_dict, smallest);
+
+    result = LZ4_compress_generic(LZ4_dict, source, dest, inputSize, 0, notLimited, byU32, usingExtDict, noDictIssue);
+
+    streamPtr->dictionary = (const BYTE*)source;
+    streamPtr->dictSize = (U32)inputSize;
+    streamPtr->currentOffset += (U32)inputSize;
+
+    return result;
 }
 
 
-int LZ4_compress_limitedOutput_continue (void* LZ4_Data, const char* source, char* dest, int inputSize, int maxOutputSize)
+int LZ4_saveDict (void* LZ4_dict, char* safeBuffer, int dictSize)
 {
-    return LZ4_compress_generic(LZ4_Data, source, dest, inputSize, maxOutputSize, limited, byU32, withPrefix);
+    LZ4_stream_t_internal* dict = (LZ4_stream_t_internal*) LZ4_dict;
+    const BYTE* previousDictEnd = dict->dictionary + dict->dictSize;
+
+    if ((U32)dictSize > 64 KB) dictSize = 64 KB;   /* useless to define a dictionary > 64 KB */
+    if ((U32)dictSize > dict->dictSize) dictSize = dict->dictSize;
+
+    memcpy(safeBuffer, previousDictEnd - dictSize, dictSize);
+
+    dict->dictionary = (const BYTE*)safeBuffer;
+    dict->dictSize = (U32)dictSize;
+
+    return 1;
 }
 
 
+
 /****************************
    Decompression functions
 ****************************/
-
 /*
  * This generic decompression function cover all use cases.
  * It shall be instanciated several times, using different sets of directives
@@ -723,9 +869,11 @@ FORCE_INLINE int LZ4_decompress_generic(
                  int outputSize,         /* If endOnInput==endOnInputSize, this value is the max size of Output Buffer. */
 
                  int endOnInput,         /* endOnOutputSize, endOnInputSize */
-                 int prefix64k,          /* noPrefix, withPrefix */
                  int partialDecoding,    /* full, partial */
-                 int targetOutputSize    /* only used if partialDecoding==partial */
+                 int targetOutputSize,   /* only used if partialDecoding==partial */
+                 int dict,               /* noDict, withPrefix64k, usingExtDict */
+                 const char* dictStart,  /* only if dict==usingExtDict */
+                 int dictSize            /* note : = 0 if noDict */
                  )
 {
     /* Local Variables */
@@ -737,11 +885,19 @@ FORCE_INLINE int LZ4_decompress_generic(
     BYTE* const oend = op + outputSize;
     BYTE* cpy;
     BYTE* oexit = op + targetOutputSize;
+    const BYTE* const lowLimit = (const BYTE*)dest - dictSize;
 
-    /*const size_t dec32table[] = {0, 3, 2, 3, 0, 0, 0, 0};   / static reduces speed for LZ4_decompress_safe() on GCC64 */
+    const BYTE* const dictEnd = (const BYTE*)dictStart + dictSize;
+//#define OLD
+#ifdef OLD
+    const size_t dec32table[] = {0, 3, 2, 3, 0, 0, 0, 0};   /* static reduces speed for LZ4_decompress_safe() on GCC64 */
+#else
     const size_t dec32table[] = {4-0, 4-3, 4-2, 4-3, 4-0, 4-0, 4-0, 4-0};   /* static reduces speed for LZ4_decompress_safe() on GCC64 */
+#endif
     static const size_t dec64table[] = {0, 0, 0, (size_t)-1, 0, 1, 2, 3};
 
+    const int checkOffset = (endOnInput) && (dictSize < (int)(64 KB));
+
 
     /* Special cases */
     if ((partialDecoding) && (oexit> oend-MFLIMIT)) oexit = oend-MFLIMIT;                        /* targetOutputSize too high => decode everything */
@@ -759,12 +915,14 @@ FORCE_INLINE int LZ4_decompress_generic(
         token = *ip++;
         if ((length=(token>>ML_BITS)) == RUN_MASK)
         {
-            unsigned s=255;
-            while (((endOnInput)?ip<iend:1) && (s==255))
+            unsigned s;
+            do
             {
                 s = *ip++;
                 length += s;
             }
+            while (likely((endOnInput)?ip<iend-RUN_MASK:1) && (s==255));
+            if ((sizeof(void*)==4) && unlikely(length>LZ4_MAX_INPUT_SIZE)) goto _output_error;   /* overflow detection */
         }
 
         /* copy literals */
@@ -791,18 +949,51 @@ FORCE_INLINE int LZ4_decompress_generic(
 
         /* get offset */
         LZ4_READ_LITTLEENDIAN_16(ref,cpy,ip); ip+=2;
-        if ((prefix64k==noPrefix) && (unlikely(ref < (BYTE* const)dest))) goto _output_error;   /* Error : offset outside destination buffer */
+        if ((checkOffset) && (unlikely(ref < lowLimit))) goto _output_error;   /* Error : offset outside destination buffer */
 
         /* get matchlength */
         if ((length=(token&ML_MASK)) == ML_MASK)
         {
-            while ((!endOnInput) || (ip<iend-(LASTLITERALS+1)))   /* Ensure enough bytes remain for LASTLITERALS + token */
+            unsigned s;
+            do
             {
-                unsigned s = *ip++;
+                if (endOnInput && (ip > iend-LASTLITERALS)) goto _output_error;
+                s = *ip++;
                 length += s;
-                if (s==255) continue;
-                break;
+            } while (s==255);
+            if ((sizeof(void*)==4) && unlikely(length>LZ4_MAX_INPUT_SIZE)) goto _output_error;   /* overflow detection */
+        }
+
+        /* check external dictionary */
+        if ((dict==usingExtDict) && (ref < (BYTE* const)dest))
+        {
+            if (unlikely(op+length+MINMATCH > oend-LASTLITERALS)) goto _output_error;
+
+            if (length+MINMATCH <= (size_t)(dest-(char*)ref))
+            {
+                ref = dictEnd - (dest-(char*)ref);
+                memcpy(op, ref, length+MINMATCH);
+                op += length+MINMATCH;
             }
+            else
+            {
+                size_t copySize = (size_t)(dest-(char*)ref);
+                memcpy(op, dictEnd - copySize, copySize);
+                op += copySize;
+                copySize = length+MINMATCH - copySize;
+                if (copySize > (size_t)((char*)op-dest))   /* overlap */
+                {
+                    BYTE* const cpy = op + copySize;
+                    const BYTE* ref = (BYTE*)dest;
+                    while (op < cpy) *op++ = *ref++;
+                }
+                else
+                {
+                    memcpy(op, dest, copySize);
+                    op += copySize;
+                }
+            }
+            continue;
         }
 
         /* copy repeated sequence */
@@ -813,19 +1004,22 @@ FORCE_INLINE int LZ4_decompress_generic(
             op[1] = ref[1];
             op[2] = ref[2];
             op[3] = ref[3];
-            /*op += 4, ref += 4; ref -= dec32table[op-ref];
+#ifdef OLD
+            op += 4, ref += 4; ref -= dec32table[op-ref];
             A32(op) = A32(ref);
-            op += STEPSIZE-4; ref -= dec64;*/
+            op += STEPSIZE-4; ref -= dec64;
+#else
             ref += dec32table[op-ref];
             A32(op+4) = A32(ref);
             op += STEPSIZE; ref -= dec64;
+#endif
         } else { LZ4_COPYSTEP(op,ref); }
         cpy = op + length - (STEPSIZE-4);
 
         if (unlikely(cpy>oend-COPYLENGTH-(STEPSIZE-4)))
         {
             if (cpy > oend-LASTLITERALS) goto _output_error;    /* Error : last 5 bytes must be literals */
-            LZ4_SECURECOPY(op, ref, (oend-COPYLENGTH));
+            if (op<oend-COPYLENGTH) LZ4_WILDCOPY(op, ref, (oend-COPYLENGTH));
             while(op<cpy) *op++=*ref++;
             op=cpy;
             continue;
@@ -846,32 +1040,205 @@ _output_error:
 }
 
 
-int LZ4_decompress_safe(const char* source, char* dest, int inputSize, int maxOutputSize)
+int LZ4_decompress_safe(const char* source, char* dest, int compressedSize, int maxOutputSize)
 {
-    return LZ4_decompress_generic(source, dest, inputSize, maxOutputSize, endOnInputSize, noPrefix, full, 0);
+    return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, noDict, NULL, 0);
 }
 
-int LZ4_decompress_safe_withPrefix64k(const char* source, char* dest, int inputSize, int maxOutputSize)
+int LZ4_decompress_safe_partial(const char* source, char* dest, int compressedSize, int targetOutputSize, int maxOutputSize)
 {
-    return LZ4_decompress_generic(source, dest, inputSize, maxOutputSize, endOnInputSize, withPrefix, full, 0);
+    return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, partial, targetOutputSize, noDict, NULL, 0);
 }
 
-int LZ4_decompress_safe_partial(const char* source, char* dest, int inputSize, int targetOutputSize, int maxOutputSize)
+int LZ4_decompress_fast(const char* source, char* dest, int originalSize)
 {
-    return LZ4_decompress_generic(source, dest, inputSize, maxOutputSize, endOnInputSize, noPrefix, partial, targetOutputSize);
+    return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, withPrefix64k, NULL, 0);
 }
 
-int LZ4_decompress_fast_withPrefix64k(const char* source, char* dest, int outputSize)
+/* streaming decompression functions */
+
+//#define LZ4_STREAMDECODESIZE_U32 4
+//#define LZ4_STREAMDECODESIZE     (LZ4_STREAMDECODESIZE_U32 * sizeof(unsigned int))
+//typedef struct { unsigned int table[LZ4_STREAMDECODESIZE_U32]; } LZ4_streamDecode_t;
+typedef struct
 {
-    return LZ4_decompress_generic(source, dest, 0, outputSize, endOnOutputSize, withPrefix, full, 0);
+    const char* dictionary;
+    int dictSize;
+} LZ4_streamDecode_t_internal;
+
+/*
+ * If you prefer dynamic allocation methods,
+ * LZ4_createStreamDecode()
+ * provides a pointer (void*) towards an initialized LZ4_streamDecode_t structure.
+ */
+void* LZ4_createStreamDecode()
+{
+    void* lz4s = ALLOCATOR(sizeof(U32), LZ4_STREAMDECODESIZE_U32);
+    MEM_INIT(lz4s, 0, LZ4_STREAMDECODESIZE);
+    return lz4s;
 }
 
-int LZ4_decompress_fast(const char* source, char* dest, int outputSize)
+/*
+ * LZ4_setDictDecode
+ * Use this function to instruct where to find the dictionary
+ * This function is not necessary if previous data is still available where it was decoded.
+ * Loading a size of 0 is allowed (same effect as no dictionary).
+ * Return : 1 if OK, 0 if error
+ */
+int LZ4_setDictDecode (void* LZ4_streamDecode, const char* dictionary, int dictSize)
 {
-#ifdef _MSC_VER   /* This version is faster with Visual */
-    return LZ4_decompress_generic(source, dest, 0, outputSize, endOnOutputSize, noPrefix, full, 0);
-#else
-    return LZ4_decompress_generic(source, dest, 0, outputSize, endOnOutputSize, withPrefix, full, 0);
-#endif
+    LZ4_streamDecode_t_internal* lz4sd = (LZ4_streamDecode_t_internal*) LZ4_streamDecode;
+    lz4sd->dictionary = dictionary;
+    lz4sd->dictSize = dictSize;
+    return 1;
 }
 
+/*
+*_continue() :
+    These decoding functions allow decompression of multiple blocks in "streaming" mode.
+    Previously decoded blocks must still be available at the memory position where they were decoded.
+    If it's not possible, save the relevant part of decoded data into a safe buffer,
+    and indicate where it stands using LZ4_setDictDecode()
+*/
+int LZ4_decompress_safe_continue (void* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxOutputSize)
+{
+    LZ4_streamDecode_t_internal* lz4sd = (LZ4_streamDecode_t_internal*) LZ4_streamDecode;
+    int result;
+
+    result = LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, usingExtDict, lz4sd->dictionary, lz4sd->dictSize);
+    if (result <= 0) return result;
+    if (lz4sd->dictionary + lz4sd->dictSize == dest)
+    {
+        lz4sd->dictSize += result;
+    }
+    else
+    {
+        lz4sd->dictionary = dest;
+        lz4sd->dictSize = result;
+    }
+
+    return result;
+}
+
+int LZ4_decompress_fast_continue (void* LZ4_streamDecode, const char* source, char* dest, int originalSize)
+{
+    LZ4_streamDecode_t_internal* lz4sd = (LZ4_streamDecode_t_internal*) LZ4_streamDecode;
+    int result;
+
+    result = LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, usingExtDict, lz4sd->dictionary, lz4sd->dictSize);
+    if (result <= 0) return result;
+    if (lz4sd->dictionary + lz4sd->dictSize == dest)
+    {
+        lz4sd->dictSize += result;
+    }
+    else
+    {
+        lz4sd->dictionary = dest;
+        lz4sd->dictSize = result;
+    }
+
+    return result;
+}
+
+
+/*
+Advanced decoding functions :
+*_usingDict() :
+    These decoding functions work the same as "_continue" ones,
+    the dictionary must be explicitly provided within parameters
+*/
+
+int LZ4_decompress_safe_usingDict(const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize)
+{
+    return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, usingExtDict, dictStart, dictSize);
+}
+
+int LZ4_decompress_fast_usingDict(const char* source, char* dest, int originalSize, const char* dictStart, int dictSize)
+{
+    return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, usingExtDict, dictStart, dictSize);
+}
+
+
+/***************************************************
+    Obsolete Functions
+***************************************************/
+/*
+These function names are deprecated and should no longer be used.
+They are only provided here for compatibility with older user programs.
+- LZ4_uncompress is totally equivalent to LZ4_decompress_fast
+- LZ4_uncompress_unknownOutputSize is totally equivalent to LZ4_decompress_safe
+*/
+int LZ4_uncompress (const char* source, char* dest, int outputSize) { return LZ4_decompress_fast(source, dest, outputSize); }
+int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize) { return LZ4_decompress_safe(source, dest, isize, maxOutputSize); }
+
+
+/* Obsolete Streaming functions */
+
+int LZ4_sizeofStreamState() { return LZ4_STREAMSIZE; }
+
+void LZ4_init(LZ4_stream_t_internal* lz4ds, const BYTE* base)
+{
+    MEM_INIT(lz4ds, 0, LZ4_STREAMSIZE);
+    lz4ds->bufferStart = base;
+}
+
+int LZ4_resetStreamState(void* state, const char* inputBuffer)
+{
+    if ((((size_t)state) & 3) != 0) return 1;   /* Error : pointer is not aligned on 4-bytes boundary */
+    LZ4_init((LZ4_stream_t_internal*)state, (const BYTE*)inputBuffer);
+    return 0;
+}
+
+void* LZ4_create (const char* inputBuffer)
+{
+    void* lz4ds = ALLOCATOR(4, LZ4_STREAMSIZE_U32);
+    LZ4_init ((LZ4_stream_t_internal*)lz4ds, (const BYTE*)inputBuffer);
+    return lz4ds;
+}
+
+char* LZ4_slideInputBuffer (void* LZ4_Data)
+{
+    LZ4_stream_t_internal* lz4ds = (LZ4_stream_t_internal*)LZ4_Data;
+
+    LZ4_saveDict((LZ4_stream_t*)LZ4_Data, (char*)lz4ds->bufferStart, 64 KB);
+
+    return (char*)(lz4ds->bufferStart + 64 KB);
+}
+
+/*  Obsolete compresson functions using User-allocated state */
+
+int LZ4_sizeofState() { return LZ4_STREAMSIZE; }
+
+int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize)
+{
+    if (((size_t)(state)&3) != 0) return 0;   /* Error : state is not aligned on 4-bytes boundary */
+    MEM_INIT(state, 0, LZ4_STREAMSIZE);
+
+    if (inputSize < (int)LZ4_64KLIMIT)
+        return LZ4_compress_generic(state, source, dest, inputSize, 0, notLimited, byU16, noDict, noDictIssue);
+    else
+        return LZ4_compress_generic(state, source, dest, inputSize, 0, notLimited, (sizeof(void*)==8) ? byU32 : byPtr, noDict, noDictIssue);
+}
+
+int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize)
+{
+    if (((size_t)(state)&3) != 0) return 0;   /* Error : state is not aligned on 4-bytes boundary */
+    MEM_INIT(state, 0, LZ4_STREAMSIZE);
+
+    if (inputSize < (int)LZ4_64KLIMIT)
+        return LZ4_compress_generic(state, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue);
+    else
+        return LZ4_compress_generic(state, source, dest, inputSize, maxOutputSize, limitedOutput, (sizeof(void*)==8) ? byU32 : byPtr, noDict, noDictIssue);
+}
+
+/* Obsolete streaming decompression functions */
+
+int LZ4_decompress_safe_withPrefix64k(const char* source, char* dest, int compressedSize, int maxOutputSize)
+{
+    return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, withPrefix64k, NULL, 64 KB);
+}
+
+int LZ4_decompress_fast_withPrefix64k(const char* source, char* dest, int originalSize)
+{
+    return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, withPrefix64k, NULL, 64 KB);
+}
diff --git a/src/helpers/fst/lz4.h b/src/helpers/fst/lz4.h
index 43a92c3..1064fa1 100644
--- a/src/helpers/fst/lz4.h
+++ b/src/helpers/fst/lz4.h
@@ -1,7 +1,7 @@
 /*
    LZ4 - Fast LZ compression algorithm
    Header File
-   Copyright (C) 2011-2013, Yann Collet.
+   Copyright (C) 2011-2014, Yann Collet.
    BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
 
    Redistribution and use in source and binary forms, with or without
@@ -28,8 +28,8 @@
    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
    You can contact the author at :
-   - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html
    - LZ4 source repository : http://code.google.com/p/lz4/
+   - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c
 */
 #pragma once
 
@@ -42,16 +42,21 @@ extern "C" {
    Version
 **************************************/
 #define LZ4_VERSION_MAJOR    1    /* for major interface/format changes  */
-#define LZ4_VERSION_MINOR    1    /* for minor interface/format changes  */
-#define LZ4_VERSION_RELEASE  3    /* for tweaks, bug-fixes, or development */
+#define LZ4_VERSION_MINOR    2    /* for minor interface/format changes  */
+#define LZ4_VERSION_RELEASE  0    /* for tweaks, bug-fixes, or development */
 
 
 /**************************************
-   Compiler Options
+   Tuning parameter
 **************************************/
-#if (defined(__GNUC__) && defined(__STRICT_ANSI__)) || (defined(_MSC_VER) && !defined(__cplusplus))   /* Visual Studio */
-#  define inline __inline           /* Visual C is not C99, but supports some kind of inline */
-#endif
+/*
+ * LZ4_MEMORY_USAGE :
+ * Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)
+ * Increasing memory usage improves compression ratio
+ * Reduced memory usage can improve speed, due to cache effect
+ * Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache
+ */
+#define LZ4_MEMORY_USAGE 14
 
 
 /**************************************
@@ -59,7 +64,7 @@ extern "C" {
 **************************************/
 
 int LZ4_compress        (const char* source, char* dest, int inputSize);
-int LZ4_decompress_safe (const char* source, char* dest, int inputSize, int maxOutputSize);
+int LZ4_decompress_safe (const char* source, char* dest, int compressedSize, int maxOutputSize);
 
 /*
 LZ4_compress() :
@@ -72,10 +77,21 @@ LZ4_compress() :
              or 0 if the compression fails
 
 LZ4_decompress_safe() :
-    maxOutputSize : is the size of the destination buffer (which must be already allocated)
+    compressedSize : is obviously the source size
+    maxOutputSize : is the size of the destination buffer, which must be already allocated.
     return : the number of bytes decoded in the destination buffer (necessarily <= maxOutputSize)
+             If the destination buffer is not large enough, decoding will stop and output an error code (<0).
              If the source stream is detected malformed, the function will stop decoding and return a negative result.
-             This function is protected against buffer overflow exploits (never writes outside of output buffer, and never reads outside of input buffer). Therefore, it is protected against malicious data packets
+             This function is protected against buffer overflow exploits :
+             it never writes outside of output buffer, and never reads outside of input buffer.
+             Therefore, it is protected against malicious data packets.
+*/
+
+
+/*
+Note :
+    Should you prefer to explicitly allocate compression-table memory using your own allocation method,
+    use the streaming functions provided below, simply reset the memory area between each call to LZ4_compress_continue()
 */
 
 
@@ -84,23 +100,20 @@ LZ4_decompress_safe() :
 **************************************/
 #define LZ4_MAX_INPUT_SIZE        0x7E000000   /* 2 113 929 216 bytes */
 #define LZ4_COMPRESSBOUND(isize)  ((unsigned int)(isize) > (unsigned int)LZ4_MAX_INPUT_SIZE ? 0 : (isize) + ((isize)/255) + 16)
-static inline int LZ4_compressBound(int isize)  { return LZ4_COMPRESSBOUND(isize); }
 
 /*
 LZ4_compressBound() :
     Provides the maximum size that LZ4 may output in a "worst case" scenario (input data not compressible)
     primarily useful for memory allocation of output buffer.
-    inline function is recommended for the general case,
     macro is also provided when result needs to be evaluated at compilation (such as stack memory allocation).
 
     isize  : is the input size. Max supported value is LZ4_MAX_INPUT_SIZE
     return : maximum output size in a "worst case" scenario
              or 0, if input size is too large ( > LZ4_MAX_INPUT_SIZE)
 */
+int LZ4_compressBound(int isize);
 
 
-int LZ4_compress_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize);
-
 /*
 LZ4_compress_limitedOutput() :
     Compress 'inputSize' bytes from 'source' into an output buffer 'dest' of maximum size 'maxOutputSize'.
@@ -112,26 +125,26 @@ LZ4_compress_limitedOutput() :
     return : the number of bytes written in buffer 'dest'
              or 0 if the compression fails
 */
+int LZ4_compress_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize);
 
 
-int LZ4_decompress_fast (const char* source, char* dest, int outputSize);
-
 /*
 LZ4_decompress_fast() :
-    outputSize : is the original (uncompressed) size
+    originalSize : is the original and therefore uncompressed size
     return : the number of bytes read from the source buffer (in other words, the compressed size)
              If the source stream is malformed, the function will stop decoding and return a negative result.
+             Destination buffer must be already allocated. Its size must be a minimum of 'originalSize' bytes.
     note : This function is a bit faster than LZ4_decompress_safe()
-           This function never writes outside of output buffers, but may read beyond input buffer in case of malicious data packet.
-           Use this function preferably into a trusted environment (data to decode comes from a trusted source).
-           Destination buffer must be already allocated. Its size must be a minimum of 'outputSize' bytes.
+           It provides fast decompression and fully respect memory boundaries for properly formed compressed data.
+           It does not provide full protection against intentionnally modified data stream.
+           Use this function in a trusted environment (data to decode comes from a trusted source).
 */
+int LZ4_decompress_fast (const char* source, char* dest, int originalSize);
 
-int LZ4_decompress_safe_partial (const char* source, char* dest, int inputSize, int targetOutputSize, int maxOutputSize);
 
 /*
 LZ4_decompress_safe_partial() :
-    This function decompress a compressed block of size 'inputSize' at position 'source'
+    This function decompress a compressed block of size 'compressedSize' at position 'source'
     into output buffer 'dest' of size 'maxOutputSize'.
     The function tries to stop decompressing operation as soon as 'targetOutputSize' has been reached,
     reducing decompression time.
@@ -141,112 +154,153 @@ LZ4_decompress_safe_partial() :
              If the source stream is detected malformed, the function will stop decoding and return a negative result.
              This function never writes outside of output buffer, and never reads outside of input buffer. It is therefore protected against malicious data packets
 */
+int LZ4_decompress_safe_partial (const char* source, char* dest, int compressedSize, int targetOutputSize, int maxOutputSize);
 
 
-int LZ4_sizeofState();
-int LZ4_compress_withState               (void* state, const char* source, char* dest, int inputSize);
-int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize);
+/***********************************************
+   Experimental Streaming Compression Functions
+***********************************************/
 
+#define LZ4_STREAMSIZE_U32 ((1 << (LZ4_MEMORY_USAGE-2)) + 8)
+#define LZ4_STREAMSIZE     (LZ4_STREAMSIZE_U32 * sizeof(unsigned int))
 /*
-These functions are provided should you prefer to allocate memory for compression tables with your own allocation methods.
-To know how much memory must be allocated for the compression tables, use :
-int LZ4_sizeofState();
-
-Note that tables must be aligned on 4-bytes boundaries, otherwise compression will fail (return code 0).
-
-The allocated memory can be provided to the compressions functions using 'void* state' parameter.
-LZ4_compress_withState() and LZ4_compress_limitedOutput_withState() are equivalent to previously described functions.
-They just use the externally allocated memory area instead of allocating their own (on stack, or on heap).
-*/
-
-
-/**************************************
-   Streaming Functions
-**************************************/
-void* LZ4_create (const char* inputBuffer);
-int   LZ4_compress_continue (void* LZ4_Data, const char* source, char* dest, int inputSize);
-int   LZ4_compress_limitedOutput_continue (void* LZ4_Data, const char* source, char* dest, int inputSize, int maxOutputSize);
-char* LZ4_slideInputBuffer (void* LZ4_Data);
-int   LZ4_free (void* LZ4_Data);
+ * LZ4_stream_t
+ * information structure to track an LZ4 stream.
+ * important : set this structure content to zero before first use !
+ */
+typedef struct { unsigned int table[LZ4_STREAMSIZE_U32]; } LZ4_stream_t;
 
 /*
-These functions allow the compression of dependent blocks, where each block benefits from prior 64 KB within preceding blocks.
-In order to achieve this, it is necessary to start creating the LZ4 Data Structure, thanks to the function :
+ * If you prefer dynamic allocation methods,
+ * LZ4_createStream
+ * provides a pointer (void*) towards an initialized LZ4_stream_t structure.
+ * LZ4_free just frees it.
+ */
+void* LZ4_createStream();
+int   LZ4_free (void* LZ4_stream);
 
-void* LZ4_create (const char* inputBuffer);
-The result of the function is the (void*) pointer on the LZ4 Data Structure.
-This pointer will be needed in all other functions.
-If the pointer returned is NULL, then the allocation has failed, and compression must be aborted.
-The only parameter 'const char* inputBuffer' must, obviously, point at the beginning of input buffer.
-The input buffer must be already allocated, and size at least 192KB.
-'inputBuffer' will also be the 'const char* source' of the first block.
-
-All blocks are expected to lay next to each other within the input buffer, starting from 'inputBuffer'.
-To compress each block, use either LZ4_compress_continue() or LZ4_compress_limitedOutput_continue().
-Their behavior are identical to LZ4_compress() or LZ4_compress_limitedOutput(),
-but require the LZ4 Data Structure as their first argument, and check that each block starts right after the previous one.
-If next block does not begin immediately after the previous one, the compression will fail (return 0).
-
-When it's no longer possible to lay the next block after the previous one (not enough space left into input buffer), a call to :
-char* LZ4_slideInputBuffer(void* LZ4_Data);
-must be performed. It will typically copy the latest 64KB of input at the beginning of input buffer.
-Note that, for this function to work properly, minimum size of an input buffer must be 192KB.
-==> The memory position where the next input data block must start is provided as the result of the function.
-
-Compression can then resume, using LZ4_compress_continue() or LZ4_compress_limitedOutput_continue(), as usual.
-
-When compression is completed, a call to LZ4_free() will release the memory used by the LZ4 Data Structure.
-*/
 
-int LZ4_sizeofStreamState();
-int LZ4_resetStreamState(void* state, const char* inputBuffer);
+/*
+ * LZ4_loadDict
+ * Use this function to load a static dictionary into LZ4_stream.
+ * Any previous data will be forgotten, only 'dictionary' will remain in memory.
+ * Loading a size of 0 is allowed (same effect as init).
+ * Return : 1 if OK, 0 if error
+ */
+int LZ4_loadDict (void* LZ4_stream, const char* dictionary, int dictSize);
 
 /*
-These functions achieve the same result as :
-void* LZ4_create (const char* inputBuffer);
+ * LZ4_compress_continue
+ * Compress data block 'source', using blocks compressed before as dictionary to improve compression ratio
+ * Previous data blocks are assumed to still be present at their previous location.
+ */
+int LZ4_compress_continue (void* LZ4_stream, const char* source, char* dest, int inputSize);
 
-They are provided here to allow the user program to allocate memory using its own routines.
+/*
+ * LZ4_compress_limitedOutput_continue
+ * Same as before, but also specify a maximum target compressed size (maxOutputSize)
+ * If objective cannot be met, compression exits, and returns a zero.
+ */
+int LZ4_compress_limitedOutput_continue (void* LZ4_stream, const char* source, char* dest, int inputSize, int maxOutputSize);
 
-To know how much space must be allocated, use LZ4_sizeofStreamState();
-Note also that space must be 4-bytes aligned.
+/*
+ * LZ4_saveDict
+ * If previously compressed data block is not guaranteed to remain at its previous memory location
+ * save it into a safe place (char* safeBuffer)
+ * Note : you don't need to call LZ4_loadDict() afterwards,
+ *        dictionary is immediately usable, you can therefore call again LZ4_compress_continue()
+ * Return : 1 if OK, 0 if error
+ * Note : any dictSize > 64 KB will be interpreted as 64KB.
+ */
+int LZ4_saveDict (void* LZ4_stream, char* safeBuffer, int dictSize);
+
+
+/************************************************
+  Experimental Streaming Decompression Functions
+************************************************/
+
+#define LZ4_STREAMDECODESIZE_U32 4
+#define LZ4_STREAMDECODESIZE     (LZ4_STREAMDECODESIZE_U32 * sizeof(unsigned int))
+/*
+ * LZ4_streamDecode_t
+ * information structure to track an LZ4 stream.
+ * important : set this structure content to zero before first use !
+ */
+typedef struct { unsigned int table[LZ4_STREAMDECODESIZE_U32]; } LZ4_streamDecode_t;
 
-Once space is allocated, you must initialize it using : LZ4_resetStreamState(void* state, const char* inputBuffer);
-void* state is a pointer to the space allocated.
-It must be aligned on 4-bytes boundaries, and be large enough.
-The parameter 'const char* inputBuffer' must, obviously, point at the beginning of input buffer.
-The input buffer must be already allocated, and size at least 192KB.
-'inputBuffer' will also be the 'const char* source' of the first block.
+/*
+ * If you prefer dynamic allocation methods,
+ * LZ4_createStreamDecode()
+ * provides a pointer (void*) towards an initialized LZ4_streamDecode_t structure.
+ * LZ4_free just frees it.
+ */
+void* LZ4_createStreamDecode();
+int   LZ4_free (void* LZ4_stream);   /* yes, it's the same one as for compression */
 
-The same space can be re-used multiple times, just by initializing it each time with LZ4_resetStreamState().
-return value of LZ4_resetStreamState() must be 0 is OK.
-Any other value means there was an error (typically, pointer is not aligned on 4-bytes boundaries).
+/*
+*_continue() :
+    These decoding functions allow decompression of multiple blocks in "streaming" mode.
+    Previously decoded blocks must still be available at the memory position where they were decoded.
+    If it's not possible, save the relevant part of decoded data into a safe buffer,
+    and indicate where it stands using LZ4_setDictDecode()
 */
+int LZ4_decompress_safe_continue (void* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxOutputSize);
+int LZ4_decompress_fast_continue (void* LZ4_streamDecode, const char* source, char* dest, int originalSize);
 
+/*
+ * LZ4_setDictDecode
+ * Use this function to instruct where to find the dictionary.
+ * This function can be used to specify a static dictionary,
+ * or to instruct where to find some previously decoded data saved into a different memory space.
+ * Setting a size of 0 is allowed (same effect as no dictionary).
+ * Return : 1 if OK, 0 if error
+ */
+int LZ4_setDictDecode (void* LZ4_streamDecode, const char* dictionary, int dictSize);
 
-int LZ4_decompress_safe_withPrefix64k (const char* source, char* dest, int inputSize, int maxOutputSize);
-int LZ4_decompress_fast_withPrefix64k (const char* source, char* dest, int outputSize);
 
 /*
-*_withPrefix64k() :
-    These decoding functions work the same as their "normal name" versions,
-    but can use up to 64KB of data in front of 'char* dest'.
-    These functions are necessary to decode inter-dependant blocks.
+Advanced decoding functions :
+*_usingDict() :
+    These decoding functions work the same as
+    a combination of LZ4_setDictDecode() followed by LZ4_decompress_x_continue()
+    all together into a single function call.
+    It doesn't use nor update an LZ4_streamDecode_t structure.
 */
+int LZ4_decompress_safe_usingDict (const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize);
+int LZ4_decompress_fast_usingDict (const char* source, char* dest, int originalSize, const char* dictStart, int dictSize);
+
+
 
 
 /**************************************
    Obsolete Functions
 **************************************/
 /*
-These functions are deprecated and should no longer be used.
-They are provided here for compatibility with existing user programs.
+Obsolete decompression functions
+These function names are deprecated and should no longer be used.
+They are only provided here for compatibility with older user programs.
+- LZ4_uncompress is the same as LZ4_decompress_fast
+- LZ4_uncompress_unknownOutputSize is the same as LZ4_decompress_safe
 */
-static inline int LZ4_uncompress (const char* source, char* dest, int outputSize) { return LZ4_decompress_fast(source, dest, outputSize); }
-static inline int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize) { return LZ4_decompress_safe(source, dest, isize, maxOutputSize); }
+int LZ4_uncompress (const char* source, char* dest, int outputSize);
+int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize);
 
+/* Obsolete functions for externally allocated state; use streaming interface instead */
+int LZ4_sizeofState(void);
+int LZ4_compress_withState               (void* state, const char* source, char* dest, int inputSize);
+int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize);
+
+/* Obsolete streaming functions; use new streaming interface whenever possible */
+void* LZ4_create (const char* inputBuffer);
+int   LZ4_sizeofStreamState(void);
+int   LZ4_resetStreamState(void* state, const char* inputBuffer);
+char* LZ4_slideInputBuffer (void* state);
+
+/* Obsolete streaming decoding functions */
+int LZ4_decompress_safe_withPrefix64k (const char* source, char* dest, int compressedSize, int maxOutputSize);
+int LZ4_decompress_fast_withPrefix64k (const char* source, char* dest, int originalSize);
 
 
 #if defined (__cplusplus)
 }
 #endif
-
diff --git a/src/helpers/fstminer.c b/src/helpers/fstminer.c
index 04d2e0a..9184698 100644
--- a/src/helpers/fstminer.c
+++ b/src/helpers/fstminer.c
@@ -30,7 +30,7 @@
 #include "wave_locale.h"
 
 static char *match = NULL;
-static int matchlen = 0;
+static uint32_t matchlen = 0;
 static int names_only = 0;
 static char *killed_list = NULL;
 char killed_value = 1;
@@ -106,6 +106,8 @@ while((h = fstReaderIterateHier(xc)))
 
 static char *get_facname(void *lt, fstHandle pnt_facidx)
 {
+(void) lt;
+
 if(scope_idx[pnt_facidx] && scope_names[scope_idx[pnt_facidx]])
 	{
 	char *fst_scope_name = scope_names[scope_idx[pnt_facidx]];
@@ -252,7 +254,7 @@ char opt_errors_encountered=0;
 char *lxname=NULL;
 int c;
 int rc;
-int i, j, k;
+uint32_t i, j, k;
 int comprehensive = 0;
 
 
diff --git a/src/helpers/lxt2_read.c b/src/helpers/lxt2_read.c
index be10fc5..e7e5a7f 100644
--- a/src/helpers/lxt2_read.c
+++ b/src/helpers/lxt2_read.c
@@ -185,7 +185,7 @@ while((top_elem = lt->radix_sort[which_time]))
 	{
 	lxtint32_t idx = top_elem - lt->next_radix;
 	unsigned int vch;
-	int i;
+	lxtint32_t i;
 
 	switch(lt->fac_curpos_width)
 		{
@@ -299,7 +299,7 @@ void lxt2_rd_iter_radix0(struct lxt2_rd_trace *lt, struct lxt2_rd_block *b, lxti
 {
 	unsigned int vch;
 	unsigned int which_time;
-	int i;
+	lxtint32_t i;
 	int uniq = 0;
 
 	switch(lt->fac_curpos_width)
@@ -417,7 +417,7 @@ void lxt2_rd_iter_radix0(struct lxt2_rd_trace *lt, struct lxt2_rd_block *b, lxti
 					else
 					if(lt->len[idx] > b->string_lens[vch])
 						{
-						int lendelta = lt->len[idx] - b->string_lens[vch];
+						lxtint32_t lendelta = lt->len[idx] - b->string_lens[vch];
 						int fill = (b->string_pointers[vch][0]!='1') ?  b->string_pointers[vch][0] : '0';
 
 						for(i=0;i<lendelta;i++)
@@ -474,7 +474,7 @@ fini:	if(uniq)
 static void lxt2_rd_build_radix(struct lxt2_rd_trace *lt, struct lxt2_rd_block *b, int granule,
 		lxtint32_t strtfac, lxtint32_t endfac)
 {
-int i;
+lxtint32_t i;
 int offset;
 
 for(i=0;i<LXT2_RD_GRANULE_SIZE+1;i++)	/* +1 because tzc returns 33/65 when its arg == 0 */
@@ -515,7 +515,8 @@ for(i=strtfac;i<endfac;i++)
  */
 static void lxt2_rd_regenerate_process_mask(struct lxt2_rd_trace *lt)
 {
-int i, j, lim, idx;
+lxtint32_t i;
+int j, lim, idx;
 
 if((lt)&&(lt->process_mask_dirty))
 	{
@@ -560,7 +561,7 @@ int lxt2_rd_process_block(struct lxt2_rd_trace *lt, struct lxt2_rd_block *b)
 {
 char vld;
 char *pnt;
-int i;
+lxtint32_t i;
 int granule = 0;
 char sect_typ;
 lxtint32_t strtfac_gran=0;
@@ -744,6 +745,11 @@ return(1);
  */
 void lxt2_rd_null_callback(struct lxt2_rd_trace **lt, lxtint64_t *pnt_time, lxtint32_t *pnt_facidx, char **pnt_value)
 {
+(void) lt;
+(void) pnt_time;
+(void) pnt_facidx;
+(void) pnt_value;
+
 /* fprintf(stderr, LXT2_RDLOAD"%lld %d %s\n", *pnt_time, *pnt_facidx, *pnt_value); */
 }
 
@@ -756,7 +762,7 @@ void lxt2_rd_null_callback(struct lxt2_rd_trace **lt, lxtint64_t *pnt_time, lxti
 struct lxt2_rd_trace *lxt2_rd_init(const char *name)
 {
 struct lxt2_rd_trace *lt=(struct lxt2_rd_trace *)calloc(1, sizeof(struct lxt2_rd_trace));
-int i;
+lxtint32_t i;
 
 if(!(lt->handle=fopen(name, "rb")))
         {
@@ -856,7 +862,7 @@ if(!(lt->handle=fopen(name, "rb")))
 			rc=gzread(lt->zhandle, m, lt->zfacname_predec_size);
 			gzclose(lt->zhandle); lt->zhandle=NULL;
 
-			if(rc!=lt->zfacname_predec_size)
+			if(((lxtint32_t)rc)!=lt->zfacname_predec_size)
 				{
 				fprintf(stderr, LXT2_RDLOAD"*** name section mangled %d (act) vs "LXT2_RD_LD" (exp)\n", rc, lt->zfacname_predec_size);
 				free(m);
@@ -1023,7 +1029,7 @@ void lxt2_rd_close(struct lxt2_rd_trace *lt)
 if(lt)
 	{
 	struct lxt2_rd_block *b, *bt;
-	int i;
+	lxtint32_t i;
 
 	if(lt->process_mask) { free(lt->process_mask); lt->process_mask=NULL; }
 	if(lt->process_mask_compressed) { free(lt->process_mask_compressed); lt->process_mask_compressed=NULL; }
@@ -1233,7 +1239,7 @@ return(lt ? lt->timezero : 0);
 char *lxt2_rd_get_facname(struct lxt2_rd_trace *lt, lxtint32_t facidx)
 {
 char *pnt;
-int clone, j;
+lxtint32_t clone, j;
 
 if(lt)
 	{
@@ -1462,7 +1468,7 @@ struct lxt2_rd_block *bcutoff=NULL, *bfinal=NULL;
 int striped_kill = 0;
 unsigned int real_uncompressed_siz = 0;
 unsigned char gzid[2];
-int i;
+lxtint32_t i;
 
 if(lt)
 	{
@@ -1501,7 +1507,7 @@ if(lt)
 				char *pnt;
 				off_t fspos = b->filepos;
 
-				int zlen = 16;
+				lxtint32_t zlen = 16;
 				char *zbuff=malloc(zlen);
 				struct z_stream_s strm;
 
@@ -1577,7 +1583,7 @@ if(lt)
 				lt->zhandle = gzdopen(dup(fileno(lt->handle)), "rb");
 				rc=gzread(lt->zhandle, b->mem, b->uncompressed_siz);
 				gzclose(lt->zhandle); lt->zhandle=NULL;
-				if(rc!=b->uncompressed_siz)
+				if(((lxtint32_t)rc)!=b->uncompressed_siz)
 					{
 					fprintf(stderr, LXT2_RDLOAD"short read on block %d vs "LXT2_RD_LD" (exp), ignoring\n", rc, b->uncompressed_siz);
 					free(b->mem); b->mem=NULL;
diff --git a/src/helpers/lxt2_read.h b/src/helpers/lxt2_read.h
index e6b874d..e6a93d4 100644
--- a/src/helpers/lxt2_read.h
+++ b/src/helpers/lxt2_read.h
@@ -265,37 +265,37 @@ unsigned process_mask_dirty : 1; /* only used on partial block reads */
 struct lxt2_rd_trace *       	lxt2_rd_init(const char *name);
 void                    	lxt2_rd_close(struct lxt2_rd_trace *lt);
 
-_LXT2_RD_INLINE lxtint64_t	lxt2_rd_set_max_block_mem_usage(struct lxt2_rd_trace *lt, lxtint64_t block_mem_max);
-_LXT2_RD_INLINE lxtint64_t	lxt2_rd_get_block_mem_usage(struct lxt2_rd_trace *lt);
-_LXT2_RD_INLINE unsigned int	lxt2_rd_get_num_blocks(struct lxt2_rd_trace *lt);
+lxtint64_t			lxt2_rd_set_max_block_mem_usage(struct lxt2_rd_trace *lt, lxtint64_t block_mem_max);
+lxtint64_t			lxt2_rd_get_block_mem_usage(struct lxt2_rd_trace *lt);
+unsigned int			lxt2_rd_get_num_blocks(struct lxt2_rd_trace *lt);
 unsigned int			lxt2_rd_get_num_active_blocks(struct lxt2_rd_trace *lt);
 
-_LXT2_RD_INLINE lxtint32_t	lxt2_rd_get_num_facs(struct lxt2_rd_trace *lt);
+lxtint32_t			lxt2_rd_get_num_facs(struct lxt2_rd_trace *lt);
 char *				lxt2_rd_get_facname(struct lxt2_rd_trace *lt, lxtint32_t facidx);
 struct lxt2_rd_geometry *	lxt2_rd_get_fac_geometry(struct lxt2_rd_trace *lt, lxtint32_t facidx);
-_LXT2_RD_INLINE lxtint32_t	lxt2_rd_get_fac_rows(struct lxt2_rd_trace *lt, lxtint32_t facidx);
-_LXT2_RD_INLINE lxtsint32_t	lxt2_rd_get_fac_msb(struct lxt2_rd_trace *lt, lxtint32_t facidx);
-_LXT2_RD_INLINE lxtsint32_t	lxt2_rd_get_fac_lsb(struct lxt2_rd_trace *lt, lxtint32_t facidx);
-_LXT2_RD_INLINE lxtint32_t	lxt2_rd_get_fac_flags(struct lxt2_rd_trace *lt, lxtint32_t facidx);
-_LXT2_RD_INLINE lxtint32_t	lxt2_rd_get_fac_len(struct lxt2_rd_trace *lt, lxtint32_t facidx);
-_LXT2_RD_INLINE lxtint32_t	lxt2_rd_get_alias_root(struct lxt2_rd_trace *lt, lxtint32_t facidx);
-
-_LXT2_RD_INLINE char		lxt2_rd_get_timescale(struct lxt2_rd_trace *lt);
-_LXT2_RD_INLINE lxtsint64_t 	lxt2_rd_get_timezero(struct lxt2_rd_trace *lt);
-_LXT2_RD_INLINE lxtint64_t	lxt2_rd_get_start_time(struct lxt2_rd_trace *lt);
-_LXT2_RD_INLINE lxtint64_t	lxt2_rd_get_end_time(struct lxt2_rd_trace *lt);
-
-_LXT2_RD_INLINE int		lxt2_rd_get_fac_process_mask(struct lxt2_rd_trace *lt, lxtint32_t facidx);
-_LXT2_RD_INLINE int		lxt2_rd_set_fac_process_mask(struct lxt2_rd_trace *lt, lxtint32_t facidx);
-_LXT2_RD_INLINE int		lxt2_rd_clr_fac_process_mask(struct lxt2_rd_trace *lt, lxtint32_t facidx);
-_LXT2_RD_INLINE int		lxt2_rd_set_fac_process_mask_all(struct lxt2_rd_trace *lt);
-_LXT2_RD_INLINE int		lxt2_rd_clr_fac_process_mask_all(struct lxt2_rd_trace *lt);
+lxtint32_t			lxt2_rd_get_fac_rows(struct lxt2_rd_trace *lt, lxtint32_t facidx);
+lxtsint32_t			lxt2_rd_get_fac_msb(struct lxt2_rd_trace *lt, lxtint32_t facidx);
+lxtsint32_t			lxt2_rd_get_fac_lsb(struct lxt2_rd_trace *lt, lxtint32_t facidx);
+lxtint32_t			lxt2_rd_get_fac_flags(struct lxt2_rd_trace *lt, lxtint32_t facidx);
+lxtint32_t			lxt2_rd_get_fac_len(struct lxt2_rd_trace *lt, lxtint32_t facidx);
+lxtint32_t			lxt2_rd_get_alias_root(struct lxt2_rd_trace *lt, lxtint32_t facidx);
+
+char				lxt2_rd_get_timescale(struct lxt2_rd_trace *lt);
+lxtsint64_t 			lxt2_rd_get_timezero(struct lxt2_rd_trace *lt);
+lxtint64_t			lxt2_rd_get_start_time(struct lxt2_rd_trace *lt);
+lxtint64_t			lxt2_rd_get_end_time(struct lxt2_rd_trace *lt);
+
+int				lxt2_rd_get_fac_process_mask(struct lxt2_rd_trace *lt, lxtint32_t facidx);
+int				lxt2_rd_set_fac_process_mask(struct lxt2_rd_trace *lt, lxtint32_t facidx);
+int				lxt2_rd_clr_fac_process_mask(struct lxt2_rd_trace *lt, lxtint32_t facidx);
+int				lxt2_rd_set_fac_process_mask_all(struct lxt2_rd_trace *lt);
+int				lxt2_rd_clr_fac_process_mask_all(struct lxt2_rd_trace *lt);
 
 				/* null value_change_callback calls an empty dummy function */
 int 				lxt2_rd_iter_blocks(struct lxt2_rd_trace *lt,
 				void (*value_change_callback)(struct lxt2_rd_trace **lt, lxtint64_t *time, lxtint32_t *facidx, char **value),
 				void *user_callback_data_pointer);
-_LXT2_RD_INLINE void *		lxt2_rd_get_user_callback_data_pointer(struct lxt2_rd_trace *lt);
+void *				lxt2_rd_get_user_callback_data_pointer(struct lxt2_rd_trace *lt);
 
 				/* time (un)/restricted read ops */
 unsigned int			lxt2_rd_limit_time_range(struct lxt2_rd_trace *lt, lxtint64_t strt_time, lxtint64_t end_time);
diff --git a/src/helpers/lxt2_write.c b/src/helpers/lxt2_write.c
index 38b11f6..b50aa23 100644
--- a/src/helpers/lxt2_write.c
+++ b/src/helpers/lxt2_write.c
@@ -578,13 +578,13 @@ return;
 
 static void lxt2_wr_emitfacs(struct lxt2_wr_trace *lt)
 {
-int i;
+unsigned int i;
 
 if((lt)&&(lt->numfacs))
 	{
 	struct lxt2_wr_symbol *s = lt->symchain;
 	struct lxt2_wr_symbol **aliascache = calloc(lt->numalias ? lt->numalias : 1, sizeof(struct lxt2_wr_symbol *));
-	int aliases_encountered, facs_encountered;
+	unsigned int aliases_encountered, facs_encountered;
 
 	lt->sorted_facs = (struct lxt2_wr_symbol **)calloc(lt->numfacs, sizeof(struct lxt2_wr_symbol *));
 
@@ -1057,7 +1057,7 @@ if(!clone)
 for(cnt = 0; cnt < lt->break_header_size; cnt += sizeof(buf))
 	{
 	seg = lt->break_header_size - cnt;
-	if(seg > sizeof(buf))
+	if(seg > (off_t)sizeof(buf))
 		{
 		seg = sizeof(buf);
 		}
@@ -1369,7 +1369,7 @@ if((lt->timegranule>=lt->maxgranule)||(do_finalize)||(early_flush))
 	for(i=0;i<lt->num_map_entries;i++)
 		{
 		/* fprintf(stderr, "+++ %08x (%d)(%d)\n", dt->item, i, dt->val); */
-		if(dt->val != i)
+		if(((unsigned int)dt->val) != i)
 			{
 			fprintf(stderr, "internal error line %d\n", __LINE__);
 			exit(255);
diff --git a/src/helpers/lxt2_write.h b/src/helpers/lxt2_write.h
index 8c9a47b..7f2c6d1 100644
--- a/src/helpers/lxt2_write.h
+++ b/src/helpers/lxt2_write.h
@@ -163,7 +163,7 @@ off_t current_chunk, current_chunkz;
 struct lxt2_wr_symbol *sym[LXT2_WR_SYMPRIME];
 struct lxt2_wr_symbol **sorted_facs;
 struct lxt2_wr_symbol *symchain;
-int numfacs, numalias;
+unsigned int numfacs, numalias;
 int numfacbytes;
 int longestname;
 
@@ -174,7 +174,7 @@ lxttime_t mintime, maxtime;
 lxtstime_t timezero;
 unsigned int timegranule;
 int timescale;
-int timepos;
+unsigned int timepos;
 unsigned int maxgranule;
 lxttime_t firsttime, lasttime;
 lxttime_t timetable[LXT2_WR_GRANULE_SIZE];
diff --git a/src/helpers/lxt2miner.c b/src/helpers/lxt2miner.c
index 932b595..0c532fa 100644
--- a/src/helpers/lxt2miner.c
+++ b/src/helpers/lxt2miner.c
@@ -30,7 +30,7 @@
 #include "wave_locale.h"
 
 static char *match = NULL;
-static int matchlen = 0;
+static unsigned int matchlen = 0;
 static int names_only = 0;
 static char *killed_list = NULL;
 char killed_value = 1;
@@ -181,7 +181,8 @@ char opt_errors_encountered=0;
 char *lxname=NULL;
 int c;
 int rc;
-int i, j, k;
+unsigned int i;
+int j, k;
 int comprehensive = 0;
 
 WAVE_LOCALE_FIX
diff --git a/src/helpers/lxt_write.c b/src/helpers/lxt_write.c
index 2ff8bcb..be22866 100644
--- a/src/helpers/lxt_write.c
+++ b/src/helpers/lxt_write.c
@@ -1004,7 +1004,7 @@ if(s1->val > s2->val) return(1); else return(-1);	/* they're *never* equal */
 
 static void lt_finalize_dictionary(struct lt_trace *lt)
 {
-int i;
+unsigned int i;
 
 lt->sorted_dict = calloc(lt->num_dict_entries, sizeof(dslxt_Tree *));
 
@@ -1594,7 +1594,7 @@ if(lt)
 /*
  * emission for trace values..
  */
-static unsigned int lt_optimask[]=
+static int lt_optimask[]=
 {
 0x00000000,
 
@@ -1674,7 +1674,7 @@ while(s->aliased_to)	/* find root alias if exists */
 if(!(s->flags&(LT_SYM_F_DOUBLE|LT_SYM_F_STRING)))
 	{
 	int numbytes;				/* number of bytes to store value minus one */
-	int len = ((s->flags)&LT_SYM_F_INTEGER) ? 32 : s->len;
+	unsigned int len = ((s->flags)&LT_SYM_F_INTEGER) ? 32 : s->len;
 	unsigned int last_change_delta;
 
 	if((lt->clock_compress)&&(s->rows==0))
@@ -2283,7 +2283,7 @@ if(!(s->flags&(LT_SYM_F_DOUBLE|LT_SYM_F_STRING)))
 	char prevch;
 	unsigned int last_change_delta;
 
-	int len = ((s->flags)&LT_SYM_F_INTEGER) ? 32 : s->len;
+	unsigned int len = ((s->flags)&LT_SYM_F_INTEGER) ? 32 : s->len;
 
 	if((lt->clock_compress)&&(s->rows==0))
 	{
@@ -2291,7 +2291,7 @@ if(!(s->flags&(LT_SYM_F_DOUBLE|LT_SYM_F_STRING)))
 		{
 		int legal = 0;
 		int ivalue = 0;
-		int i;
+		unsigned int i;
 		char *pntv = value;
 		int delta1, delta2;
 
@@ -2589,10 +2589,10 @@ if(!(s->flags&(LT_SYM_F_DOUBLE|LT_SYM_F_STRING)))
 
 		if(!tagadd)
 			{
-			int len2 = ((s->flags)&LT_SYM_F_INTEGER) ? 32 : s->len;
+			unsigned int len2 = ((s->flags)&LT_SYM_F_INTEGER) ? 32 : s->len;
 			if((mvl & (LT_MVL_2|LT_MVL_4|LT_MVL_9)) == LT_MVL_2)
 				{
-				int i;
+				unsigned int i;
 				int bitpos = 7;
 				int outval = 0;
 				int thisval= 0;
@@ -2676,7 +2676,7 @@ if(!(s->flags&(LT_SYM_F_DOUBLE|LT_SYM_F_STRING)))
 			else
 			if((mvl & (LT_MVL_4|LT_MVL_9)) == LT_MVL_4)
 				{
-				int i;
+				unsigned int i;
 				int bitpos = 6;
 				int outval = 0;
 				int thisval= 0;
@@ -2710,7 +2710,7 @@ if(!(s->flags&(LT_SYM_F_DOUBLE|LT_SYM_F_STRING)))
 			else
 			/* if(mvl & LT_MVL_9) */
 				{
-				int i;
+				unsigned int i;
 				int bitpos = 4;
 				int outval = 0;
 				int thisval= 0;
diff --git a/src/helpers/shmidcat.c b/src/helpers/shmidcat.c
index 0c3ba6d..3045a3f 100644
--- a/src/helpers/shmidcat.c
+++ b/src/helpers/shmidcat.c
@@ -94,7 +94,7 @@ int rc;
 if((rc = *consume_ptr))
 	{
 	unsigned int len = get_32(consume_ptr+1);
-	int i;
+	unsigned int i;
 
 	for(i=0;i<len;i++)
 		{
diff --git a/src/helpers/vcd2fst.c b/src/helpers/vcd2fst.c
index c2b6d04..da95123 100644
--- a/src/helpers/vcd2fst.c
+++ b/src/helpers/vcd2fst.c
@@ -107,7 +107,7 @@ for(;;)
                                 if(pnt)
                                         {
                                         pnt++;
-                                        sscanf(pnt, "%d", &numfacs);
+                                        sscanf(pnt, "%u", &numfacs);
                                         }
                                 }
 			break;
@@ -441,7 +441,7 @@ int parallel_mode = 0; /* 0 is is single threaded, 1 is multi-threaded */
 #ifdef VCD2FST_EXTLOADERS_CONV
 static int suffix_check(const char *s, const char *sfx)
 {
-int sfxlen = strlen(sfx);
+size_t sfxlen = strlen(sfx);
 return((strlen(s)>=sfxlen)&&(!strcasecmp(s+strlen(s)-sfxlen,sfx)));
 }
 #endif
@@ -458,7 +458,7 @@ int ss;
 fstHandle returnedhandle;
 JRB node;
 uint64_t prev_tim = 0;
-size_t bin_fixbuff_len = 65537;
+ssize_t bin_fixbuff_len = 65537;
 char *bin_fixbuff = NULL;
 int hash_kill = 0;
 unsigned int hash_max = 0;
diff --git a/src/helpers/vzt_read.c b/src/helpers/vzt_read.c
index 65082bc..8446bb5 100644
--- a/src/helpers/vzt_read.c
+++ b/src/helpers/vzt_read.c
@@ -313,9 +313,9 @@ if((!b->times)&&(b->mem))
 vztint64_t *times=NULL;
 vztint32_t *change_dict=NULL;
 vztint32_t *val_dict=NULL;
-int num_time_ticks, num_sections, num_dict_entries;
+unsigned int num_time_ticks, num_sections, num_dict_entries;
 char *pnt = b->mem;
-int i, j, m, num_dict_words;
+vztint32_t i, j, m, num_dict_words;
 /* vztint32_t *block_end = (vztint32_t *)(pnt + b->uncompressed_siz); */
 vztint32_t *val_tmp;
 unsigned int num_bitplanes;
@@ -499,7 +499,7 @@ return(1);
 
 vztint32_t vzt_rd_next_value_chg_time(struct vzt_rd_trace *lt, struct vzt_rd_block *b, vztint32_t time_offset, vztint32_t facidx)
 {
-int i;
+unsigned int i;
 vztint32_t len = lt->len[facidx];
 vztint32_t vindex_offset = lt->vindex_offset[facidx];
 vztint32_t vindex_offset_x = vindex_offset + lt->total_values;
@@ -589,7 +589,7 @@ return(old_time_offset);
 int vzt_rd_fac_value(struct vzt_rd_trace *lt, struct vzt_rd_block *b, vztint32_t time_offset, vztint32_t facidx, char *value)
 {
 vztint32_t len = lt->len[facidx];
-int i;
+unsigned int i;
 int word = time_offset / 32;
 int bit  = time_offset & 31;
 int row_size = b->num_sections;
@@ -804,7 +804,7 @@ return(1);
  */
 int vzt_rd_process_block(struct vzt_rd_trace *lt, struct vzt_rd_block *b)
 {
-int i, i2;
+unsigned int i, i2;
 vztint32_t idx;
 char *pnt=lt->value_current_sector, *pnt2=lt->value_previous_sector;
 char buf[32];
@@ -949,6 +949,11 @@ return(1);
  */
 void vzt_rd_null_callback(struct vzt_rd_trace **lt, vztint64_t *pnt_time, vztint32_t *pnt_facidx, char **pnt_value)
 {
+(void) lt;
+(void) pnt_time;
+(void) pnt_facidx;
+(void) pnt_value;
+
 /* fprintf(stderr, VZT_RDLOAD"%lld %d %s\n", *pnt_time, *pnt_facidx, *pnt_value); */
 }
 
@@ -1104,7 +1109,7 @@ return(lt ? lt->timezero : 0);
 char *vzt_rd_get_facname(struct vzt_rd_trace *lt, vztint32_t facidx)
 {
 char *pnt;
-int clonecnt, j;
+unsigned int clonecnt, j;
 
 if(lt)
 	{
@@ -1243,7 +1248,7 @@ return(rc);
 _VZT_RD_INLINE int vzt_rd_set_fac_process_mask_all(struct vzt_rd_trace *lt)
 {
 int rc=0;
-int i;
+unsigned int i;
 
 if(lt)
 	{
@@ -1357,7 +1362,7 @@ return(VZT_RD_IS_BZ2);
 
 static void vzt_rd_decompress_blk(struct vzt_rd_trace *lt, struct vzt_rd_block *b, int reopen)
 {
-int rc;
+unsigned int rc;
 void *zhandle;
 FILE *handle;
 if(reopen)
@@ -1670,7 +1675,7 @@ if(lt)
 struct vzt_rd_trace *vzt_rd_init_smp(const char *name, unsigned int num_cpus)
 {
 struct vzt_rd_trace *lt=(struct vzt_rd_trace *)calloc(1, sizeof(struct vzt_rd_trace));
-int i;
+unsigned int i;
 unsigned int vindex_offset;
 
 if(!(lt->handle=fopen(name, "rb")))
@@ -1718,10 +1723,10 @@ if(!(lt->handle=fopen(name, "rb")))
 	else
 		{
 		size_t rcf;
-		int rc;
+		unsigned int rc;
 		char *m;
 		off_t pos, fend;
-		int t;
+		unsigned int t;
 		struct vzt_rd_block *b;
 
 		vzt_rd_pthread_mutex_init(lt, &lt->mutex, NULL);
@@ -2005,12 +2010,12 @@ if((!lt)||(lt->vectorize)||(lt->numfacs<2))
 	}
 	else
 	{
-	int old_longest_len = lt->longest_len;
+	unsigned int old_longest_len = lt->longest_len;
 	int pmxlen = 31;
 	char *pbuff = malloc(pmxlen+1);
 	char *pname;
 	int plen, plen2;
-	int i;
+	unsigned int i;
 	int pidx;
 	int num_after_combine = lt->numfacs;
 	int num_synvecs = 0;
@@ -2019,7 +2024,7 @@ if((!lt)||(lt->vectorize)||(lt->numfacs<2))
 
 	for(i=0;i<lt->numfacs-1;i++)
 		{
-		int j;
+		unsigned int j;
 
 		if(lt->len[i] != 1) continue;
 
@@ -2064,8 +2069,8 @@ if((!lt)||(lt->vectorize)||(lt->numfacs<2))
 		{
 		if(lt->flags[i] & VZT_RD_SYM_F_ALIAS)	/* not necessary, only for sanity */
 			{
-			int j = vzt_rd_get_alias_root(lt, i);
-			int k, l;
+			unsigned int j = vzt_rd_get_alias_root(lt, i);
+			unsigned int k, l;
 
 			if(lt->len[i])
 				{
@@ -2077,7 +2082,7 @@ if((!lt)||(lt->vectorize)||(lt->numfacs<2))
 
 				if(lt->len[i]==lt->len[j])
 					{
-					int nfm1 = lt->numfacs-1;
+					unsigned int nfm1 = lt->numfacs-1;
 					if((i != nfm1) && (j != nfm1))
 						{
 						if(lt->len[i+1] && lt->len[j+1])
@@ -2254,7 +2259,7 @@ if(lt)
  */
 static char *vzt_rd_process_block_single_factime(struct vzt_rd_trace *lt, struct vzt_rd_block *b, vztint64_t simtime, vztint32_t idx)
 {
-int i;
+unsigned int i;
 char *pnt=lt->value_current_sector;	/* convenient workspace mem */
 char *buf = lt->value_previous_sector;  /* convenient workspace mem */
 char *rcval = NULL;
@@ -2262,7 +2267,7 @@ char *rcval = NULL;
 vzt_rd_block_vch_decode(lt, b);
 vzt_rd_pthread_mutex_lock(lt, &b->mutex);
 
-if((b->last_rd_value_simtime == simtime) && (b->last_rd_value_idx != ~0))
+if((b->last_rd_value_simtime == simtime) && (b->last_rd_value_idx != ((vztint32_t)~0)))
 	{
 	i = b->last_rd_value_idx;
 	}
diff --git a/src/helpers/vzt_read.h b/src/helpers/vzt_read.h
index d9603d0..902b27e 100644
--- a/src/helpers/vzt_read.h
+++ b/src/helpers/vzt_read.h
@@ -158,7 +158,7 @@ vztint64_t *times;
 vztint32_t *change_dict;
 vztint32_t *val_dict;
 char **sindex;
-int num_time_ticks, num_sections, num_dict_entries, num_str_entries;
+unsigned int num_time_ticks, num_sections, num_dict_entries, num_str_entries;
 
 off_t filepos; /* where block starts in file if we have to reload */
 
@@ -238,7 +238,7 @@ void *zhandle;
 vztint64_t block_mem_consumed, block_mem_max;
 pthread_mutex_t mutex;	/* for these */
 
-int pthreads;			/* pthreads are enabled, set to max processor # (starting at zero for a uni) */
+unsigned int pthreads;			/* pthreads are enabled, set to max processor # (starting at zero for a uni) */
 unsigned process_linear : 1;	/* set by gtkwave for read optimization */
 unsigned vectorize : 1;		/* set when coalescing blasted bitvectors */
 };
@@ -251,37 +251,37 @@ struct vzt_rd_trace *       	vzt_rd_init(const char *name);
 struct vzt_rd_trace *       	vzt_rd_init_smp(const char *name, unsigned int num_cpus);
 void                    	vzt_rd_close(struct vzt_rd_trace *lt);
 
-_VZT_RD_INLINE vztint64_t	vzt_rd_set_max_block_mem_usage(struct vzt_rd_trace *lt, vztint64_t block_mem_max);
-_VZT_RD_INLINE vztint64_t	vzt_rd_get_block_mem_usage(struct vzt_rd_trace *lt);
-_VZT_RD_INLINE unsigned int	vzt_rd_get_num_blocks(struct vzt_rd_trace *lt);
+vztint64_t			vzt_rd_set_max_block_mem_usage(struct vzt_rd_trace *lt, vztint64_t block_mem_max);
+vztint64_t			vzt_rd_get_block_mem_usage(struct vzt_rd_trace *lt);
+unsigned int			vzt_rd_get_num_blocks(struct vzt_rd_trace *lt);
 unsigned int			vzt_rd_get_num_active_blocks(struct vzt_rd_trace *lt);
 
-_VZT_RD_INLINE vztint32_t	vzt_rd_get_num_facs(struct vzt_rd_trace *lt);
+vztint32_t			vzt_rd_get_num_facs(struct vzt_rd_trace *lt);
 char *				vzt_rd_get_facname(struct vzt_rd_trace *lt, vztint32_t facidx);
 struct vzt_rd_geometry *	vzt_rd_get_fac_geometry(struct vzt_rd_trace *lt, vztint32_t facidx);
-_VZT_RD_INLINE vztint32_t	vzt_rd_get_fac_rows(struct vzt_rd_trace *lt, vztint32_t facidx);
-_VZT_RD_INLINE vztsint32_t	vzt_rd_get_fac_msb(struct vzt_rd_trace *lt, vztint32_t facidx);
-_VZT_RD_INLINE vztsint32_t	vzt_rd_get_fac_lsb(struct vzt_rd_trace *lt, vztint32_t facidx);
-_VZT_RD_INLINE vztint32_t	vzt_rd_get_fac_flags(struct vzt_rd_trace *lt, vztint32_t facidx);
-_VZT_RD_INLINE vztint32_t	vzt_rd_get_fac_len(struct vzt_rd_trace *lt, vztint32_t facidx);
-_VZT_RD_INLINE vztint32_t	vzt_rd_get_alias_root(struct vzt_rd_trace *lt, vztint32_t facidx);
-
-_VZT_RD_INLINE char		vzt_rd_get_timescale(struct vzt_rd_trace *lt);
-_VZT_RD_INLINE vztint64_t	vzt_rd_get_start_time(struct vzt_rd_trace *lt);
-_VZT_RD_INLINE vztint64_t	vzt_rd_get_end_time(struct vzt_rd_trace *lt);
-_VZT_RD_INLINE vztsint64_t 	vzt_rd_get_timezero(struct vzt_rd_trace *lt);
-
-_VZT_RD_INLINE int		vzt_rd_get_fac_process_mask(struct vzt_rd_trace *lt, vztint32_t facidx);
-_VZT_RD_INLINE int		vzt_rd_set_fac_process_mask(struct vzt_rd_trace *lt, vztint32_t facidx);
-_VZT_RD_INLINE int		vzt_rd_clr_fac_process_mask(struct vzt_rd_trace *lt, vztint32_t facidx);
-_VZT_RD_INLINE int		vzt_rd_set_fac_process_mask_all(struct vzt_rd_trace *lt);
-_VZT_RD_INLINE int		vzt_rd_clr_fac_process_mask_all(struct vzt_rd_trace *lt);
+vztint32_t			vzt_rd_get_fac_rows(struct vzt_rd_trace *lt, vztint32_t facidx);
+vztsint32_t			vzt_rd_get_fac_msb(struct vzt_rd_trace *lt, vztint32_t facidx);
+vztsint32_t			vzt_rd_get_fac_lsb(struct vzt_rd_trace *lt, vztint32_t facidx);
+vztint32_t			vzt_rd_get_fac_flags(struct vzt_rd_trace *lt, vztint32_t facidx);
+vztint32_t			vzt_rd_get_fac_len(struct vzt_rd_trace *lt, vztint32_t facidx);
+vztint32_t			vzt_rd_get_alias_root(struct vzt_rd_trace *lt, vztint32_t facidx);
+
+char				vzt_rd_get_timescale(struct vzt_rd_trace *lt);
+vztint64_t			vzt_rd_get_start_time(struct vzt_rd_trace *lt);
+vztint64_t			vzt_rd_get_end_time(struct vzt_rd_trace *lt);
+vztsint64_t		 	vzt_rd_get_timezero(struct vzt_rd_trace *lt);
+
+int				vzt_rd_get_fac_process_mask(struct vzt_rd_trace *lt, vztint32_t facidx);
+int				vzt_rd_set_fac_process_mask(struct vzt_rd_trace *lt, vztint32_t facidx);
+int				vzt_rd_clr_fac_process_mask(struct vzt_rd_trace *lt, vztint32_t facidx);
+int				vzt_rd_set_fac_process_mask_all(struct vzt_rd_trace *lt);
+int				vzt_rd_clr_fac_process_mask_all(struct vzt_rd_trace *lt);
 
 				/* null value_change_callback calls an empty dummy function */
 int 				vzt_rd_iter_blocks(struct vzt_rd_trace *lt,
 				void (*value_change_callback)(struct vzt_rd_trace **lt, vztint64_t *time, vztint32_t *facidx, char **value),
 				void *user_callback_data_pointer);
-_VZT_RD_INLINE void *		vzt_rd_get_user_callback_data_pointer(struct vzt_rd_trace *lt);
+void *				vzt_rd_get_user_callback_data_pointer(struct vzt_rd_trace *lt);
 void 				vzt_rd_process_blocks_linearly(struct vzt_rd_trace *lt, int doit);
 
 				/* time (un)/restricted read ops */
diff --git a/src/helpers/vzt_write.c b/src/helpers/vzt_write.c
index 1dc503e..9f22706 100644
--- a/src/helpers/vzt_write.c
+++ b/src/helpers/vzt_write.c
@@ -1107,7 +1107,7 @@ if(!clone)
 for(cnt = 0; cnt < lt->break_header_size; cnt += sizeof(buf))
 	{
 	seg = lt->break_header_size - cnt;
-	if(seg > sizeof(buf))
+	if(seg > (off_t)sizeof(buf))
 		{
 		seg = sizeof(buf);
 		}
@@ -1221,7 +1221,7 @@ void vzt_wr_flush_granule(struct vzt_wr_trace *lt, int do_finalize)
 int i, j;
 vztsint32_t k;
 int val;
-int numticks;
+unsigned int numticks;
 
 if(!lt->timegranule)
 	{
@@ -1363,7 +1363,7 @@ if((lt->timegranule >= lt->maxgranule)||(do_finalize))
 		else
 		{
 	        vzt_wr_emit_uv32z(lt, numticks); /* number of time ticks */
-		for(i=0;i<numticks;i++)
+		for(i=0;i<((int)numticks);i++)
 			{
 		        vzt_wr_emit_uv64z(lt, i ? lt->timetable[i] - lt->timetable[i-1] : lt->timetable[i]); /* emit delta */
 			}
@@ -1424,7 +1424,7 @@ if((lt->timegranule >= lt->maxgranule)||(do_finalize))
 	        for(i=0;i<lt->numstrings;i++)
 	                {
 	                /* fprintf(stderr, "%8d %8d) '%s'\n", ds->val, i, ds->item); */
-	                if(ds->val != i)
+	                if(ds->val != ((vztint32_t)i))
 	                        {
 	                        fprintf(stderr, "internal error line %d\n", __LINE__);
 	                        exit(255);
diff --git a/src/helpers/vztminer.c b/src/helpers/vztminer.c
index b6adb40..f0c2dc1 100644
--- a/src/helpers/vztminer.c
+++ b/src/helpers/vztminer.c
@@ -31,7 +31,7 @@
 #include "wave_locale.h"
 
 static char *match = NULL;
-static int matchlen = 0;
+static uint32_t matchlen = 0;
 static int names_only = 0;
 static char *killed_list = NULL;
 char killed_value = 1;
@@ -183,7 +183,7 @@ char opt_errors_encountered=0;
 char *lxname=NULL;
 int c;
 int rc;
-int i, j, k;
+uint32_t i, j, k;
 int comprehensive = 0;
 
 
diff --git a/src/hierpack.c b/src/hierpack.c
index 28ebb8f..bcf0759 100644
--- a/src/hierpack.c
+++ b/src/hierpack.c
@@ -82,7 +82,7 @@ if(GLOBALS->do_hier_compress)
 }
 
 
-char *compress_facility(unsigned char *key, int len)
+char *compress_facility(unsigned char *key, unsigned int len)
 {
 size_t mat = 0;
 size_t plen;
diff --git a/src/hierpack.h b/src/hierpack.h
index cae9b85..2050b81 100644
--- a/src/hierpack.h
+++ b/src/hierpack.h
@@ -16,7 +16,7 @@
 #define HIER_DEPACK_STATIC (1)
 
 void init_facility_pack(void);
-char *compress_facility(unsigned char *key, int len);
+char *compress_facility(unsigned char *key, unsigned int len);
 void freeze_facility_pack(void);
 
 char *hier_decompress_flagged(char *n, int *was_packed);
diff --git a/src/hiersearch.c b/src/hiersearch.c
index 64fc1f7..2a14543 100644
--- a/src/hiersearch.c
+++ b/src/hiersearch.c
@@ -230,6 +230,9 @@ if((tc=GLOBALS->treechain_hiersearch_c_1))
 
 static void enter_callback_e(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   G_CONST_RETURN gchar *entry_text;
   int len;
   entry_text = gtk_entry_get_text(GTK_ENTRY(GLOBALS->entry_hiersearch_c_2));
@@ -247,6 +250,9 @@ static void enter_callback_e(GtkWidget *widget, GtkWidget *nothing)
 
 static void destroy_callback_e(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   DEBUG(printf("Entry Cancel\n"));
   GLOBALS->entrybox_text_local_hiersearch_c_1=NULL;
   wave_gtk_grab_remove(GLOBALS->window1_hiersearch_c_1);
@@ -310,6 +316,8 @@ static void entrybox_local(char *title, int width, char *default_text, int maxch
 
 static void ok_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 int i;
 
 if(!GLOBALS->h_selectedtree_hiersearch_c_1) return;
@@ -408,6 +416,8 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 
 static void insert_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 Traces tcache;
 int i;
 
@@ -523,6 +533,8 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 
 static void replace_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 Traces tcache;
 int i;
 Trptr tfirst=NULL, tlast=NULL;
@@ -685,6 +697,9 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 static void
 bundle_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 if(GLOBALS->entrybox_text_local_hiersearch_c_1)
         {
         char *efix;
@@ -744,6 +759,9 @@ if(!GLOBALS->autoname_bundles)
 static void
 bundle_callback_up(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 GLOBALS->bundle_direction_hiersearch_c_1=0;
 bundle_callback_generic();
 }
@@ -751,6 +769,9 @@ bundle_callback_generic();
 static void
 bundle_callback_down(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 GLOBALS->bundle_direction_hiersearch_c_1=1;
 bundle_callback_generic();
 }
@@ -760,6 +781,11 @@ bundle_callback_generic();
 static void select_row_callback(GtkWidget *widget, gint row, gint column,
 	GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)column;
+(void)event;
+(void)data;
+
 struct tree *t;
 
 t=(struct tree *)gtk_clist_get_row_data(GTK_CLIST(GLOBALS->clist_hiersearch_c_1), row);
@@ -835,6 +861,11 @@ if(t)
 static void unselect_row_callback(GtkWidget *widget, gint row, gint column,
 	GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)column;
+(void)event;
+(void)data;
+
 struct tree *t;
 
 t=(struct tree *)gtk_clist_get_row_data(GTK_CLIST(GLOBALS->clist_hiersearch_c_1), row);
@@ -853,6 +884,9 @@ if(t)
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   GLOBALS->is_active_hiersearch_c_1=0;
   gtk_widget_destroy(GLOBALS->window_hiersearch_c_3);
   GLOBALS->window_hiersearch_c_3 = NULL;
diff --git a/src/liblzma/LzmaLib.c b/src/liblzma/LzmaLib.c
index 203d95a..a280e98 100644
--- a/src/liblzma/LzmaLib.c
+++ b/src/liblzma/LzmaLib.c
@@ -141,6 +141,10 @@ if(((lrc == LZMA_OK)||(lrc == LZMA_STREAM_END))&&(strm.total_out<srclen))
 	return(wcnt);
 	}
 #else
+(void)h;
+(void)mem;
+(void)len;
+
 fprintf(stderr, "LZMA support was not compiled into this executable, sorry.\n");
 exit(255);
 #endif
@@ -409,6 +413,10 @@ if(h)
 return(rc);
 
 #else
+(void)handle;
+(void)mem;
+(void)len;
+
 fprintf(stderr, "LZMA support was not compiled into this executable, sorry.\n");
 exit(255);
 #endif
diff --git a/src/logfile.c b/src/logfile.c
index f8b67ca..ddda03f 100644
--- a/src/logfile.c
+++ b/src/logfile.c
@@ -52,6 +52,8 @@ a hierarchy first */
 void log_text(GtkWidget *text, GdkFont *font, char *str)
 {
 #if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN)
+(void)font;
+
 gtk_text_buffer_insert_with_tags (GTK_TEXT_VIEW (text)->buffer, &GLOBALS->iter_logfile_c_2,
                                  str, -1, GLOBALS->mono_tag_logfile_c_1, GLOBALS->size_tag_logfile_c_1, NULL);
 #else
@@ -62,6 +64,8 @@ gtk_text_insert (GTK_TEXT (text), font, &text->style->black, NULL, str, -1);
 void log_text_bold(GtkWidget *text, GdkFont *font, char *str)
 {
 #if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN)
+(void)font;
+
 gtk_text_buffer_insert_with_tags (GTK_TEXT_VIEW (text)->buffer, &GLOBALS->iter_logfile_c_2,
                                  str, -1, GLOBALS->bold_tag_logfile_c_2, GLOBALS->mono_tag_logfile_c_1, GLOBALS->size_tag_logfile_c_1, NULL);
 #else
@@ -72,6 +76,9 @@ gtk_text_insert (GTK_TEXT (text), font, &text->style->fg[GTK_STATE_SELECTED], &t
 static void
 log_realize_text (GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 /* nothing for now */
 }
 
@@ -108,6 +115,8 @@ gtk_signal_emit_by_name (GTK_OBJECT (GTK_ADJUSTMENT(GLOBALS->wave_hslider)), "va
 static gboolean
 button_release_event (GtkWidget *text, GdkEventButton *event)
 {
+(void)event;
+
 gchar *sel;
 
 #if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN)
@@ -153,7 +162,7 @@ if (gtk_text_buffer_get_selection_bounds (GTK_TEXT_VIEW(text)->buffer,
 						{
 						for(silp=0;silp<silen;silp++)
 							{
-							if(gch == WAVE_SI_UNITS[silp])
+							if((unsigned)gch == (unsigned)WAVE_SI_UNITS[silp])
 								{
 								do_si_append = 1;
 								break;
@@ -345,6 +354,8 @@ return(table);
 
 static void ok_callback(GtkWidget *widget, GtkWidget *cached_window)
 {
+(void)widget;
+
 struct logfile_instance_t *l = log_collection;
 struct logfile_instance_t *lprev = NULL;
 
@@ -376,6 +387,8 @@ while(l)
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *cached_window)
 {
+(void)cached_window;
+
 ok_callback(widget, widget);
 }
 
@@ -544,6 +557,8 @@ void logbox(char *title, int width, char *default_text)
 
 static void logbox_reload_single(GtkWidget *window, GtkWidget *text, char *default_text)
 {
+(void)window;
+
     FILE *handle;
     struct wave_logfile_lines_t *wlog_head=NULL, *wlog_curr=NULL;
     int wlog_size = 0;
diff --git a/src/lx2.c b/src/lx2.c
index fe16fc7..99ce378 100644
--- a/src/lx2.c
+++ b/src/lx2.c
@@ -242,9 +242,9 @@ if(GLOBALS->fast_tree_sort)
 
 	if(numalias)
 		{
-		unsigned int idx_lft = 0;
-		unsigned int idx_lftmax = GLOBALS->numfacs - numalias;
-		unsigned int idx_rgh = GLOBALS->numfacs - numalias;
+		int idx_lft = 0;
+		int idx_lftmax = GLOBALS->numfacs - numalias;
+		int idx_rgh = GLOBALS->numfacs - numalias;
 		struct symbol **facs_merge=(struct symbol **)malloc_2(GLOBALS->numfacs*sizeof(struct symbol *));
 
 		fprintf(stderr, LXT2_RDLOAD"Merging in %d aliases.\n", numalias);
@@ -445,6 +445,8 @@ return(GLOBALS->max_time);
  */
 static void lx2_callback(struct lxt2_rd_trace **lt, lxtint64_t *tim, lxtint32_t *facidx, char **value)
 {
+(void)lt;
+
 struct HistEnt *htemp = histent_calloc();
 struct lx2_entry *l2e = GLOBALS->lx2_table_lx2_c_1+(*facidx);
 struct fac *f = GLOBALS->mvlfacs_lx2_c_1+(*facidx);
diff --git a/src/lxt.c b/src/lxt.c
index 48b5d05..717126f 100644
--- a/src/lxt.c
+++ b/src/lxt.c
@@ -325,7 +325,8 @@ static void build_dict(void)
 {
 gzFile zhandle;
 off_t offs = GLOBALS->zdictionary_offset_lxt_c_1+24;
-int total_mem, rc, i;
+int total_mem, rc;
+unsigned int i;
 char *decmem=NULL;
 char *pnt;
 #if defined __MINGW32__ || defined _MSC_VER
@@ -948,7 +949,7 @@ if(!GLOBALS->sync_table_offset_lxt_c_1)
 
 	while(offs < vlen)
 		{
-		unsigned int facidx = 0;
+		int facidx = 0;
 		unsigned char cmd;
 		off_t offscache2, offscache3;
 		unsigned int height;
@@ -1049,7 +1050,7 @@ if(!GLOBALS->sync_table_offset_lxt_c_1)
 		if(!cmdkill)
 		switch(cmd)
 			{
-			int modlen;
+			unsigned int modlen;
 			case 0x0:
 			modlen = (!(GLOBALS->mvlfacs_lxt_c_2[facidx].flags&LT_SYM_F_INTEGER)) ? GLOBALS->mvlfacs_lxt_c_2[facidx].len : 32;
 			if((GLOBALS->dict_string_mem_array_lxt_c_1) && (modlen>GLOBALS->dict_width_lxt_c_1))
@@ -1199,8 +1200,10 @@ if(!GLOBALS->sync_table_offset_lxt_c_1)
  */
 static char *parse_offset(struct fac *which, off_t offs)
 {
-int v, v2, j;
-int k, l;
+int v, v2;
+unsigned int j;
+int k;
+unsigned int l;
 char *pnt;
 char repeat;
 
@@ -1214,7 +1217,7 @@ switch(v2)
 	case 0x00:	/* MVL2 */
 			{
 			unsigned int msk;
-			int bitcnt=0;
+			unsigned int bitcnt=0;
 			int ch;
 
 			if((GLOBALS->dict_string_mem_array_lxt_c_1) && (l>GLOBALS->dict_width_lxt_c_1))
@@ -1283,7 +1286,7 @@ switch(v2)
 
 	case 0x01:	/* MVL4 */
 			{
-			int bitcnt=0;
+			unsigned int bitcnt=0;
 			int ch;
 			int rsh;
 
@@ -1305,7 +1308,7 @@ switch(v2)
 
 	case 0x02:	/* MVL9 */
 			{
-			int bitcnt=0;
+			unsigned int bitcnt=0;
 			int ch;
 			int rsh;
 
diff --git a/src/main.c b/src/main.c
index ae2ae0d..2c8e6ed 100644
--- a/src/main.c
+++ b/src/main.c
@@ -89,6 +89,10 @@ static void switch_page(GtkNotebook     *notebook,
 			guint            page_num,
 			gpointer         user_data)
 {
+(void)notebook;
+(void)page;
+(void)user_data;
+
 char timestr[32];
 struct Global *g_old = GLOBALS;
 
@@ -172,7 +176,7 @@ struct Global *G = (struct Global *)V;
 #if !defined _MSC_VER
 void kill_stems_browser(void)
 {
-int ix;
+unsigned int ix;
 
 for(ix=0;ix<GLOBALS->num_notebook_pages;ix++)
 	{
@@ -185,6 +189,9 @@ for(ix=0;ix<GLOBALS->num_notebook_pages;ix++)
 
 static int plug_destroy (GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 exit(0);
 
 return(FALSE);
@@ -348,7 +355,13 @@ exit(0);
  * file selection for -n/--nocli flag
  */
 
-static void wave_get_filename_cleanup(GtkWidget *widget, gpointer data) { gtk_main_quit(); /* do nothing but exit gtk loop */ }
+static void wave_get_filename_cleanup(GtkWidget *widget, gpointer data) 
+{ 
+(void)widget;
+(void)data;
+
+gtk_main_quit(); /* do nothing but exit gtk loop */ 
+}
 
 static char *wave_get_filename(char *dfile)
 {
@@ -693,10 +706,6 @@ if(!mainwindow_already_built)
 #endif
 	}
 
-#if defined(__APPLE__)
-do_primary_inits:
-#endif
-
 if(!mainwindow_already_built)
 	{
 	wave_gconf_init(argc, argv);
@@ -1515,7 +1524,7 @@ if(((GLOBALS->loaded_file_type != FST_FILE) && (GLOBALS->loaded_file_type != AE2
 sym_hash_destroy(GLOBALS);
 
 /* reset/initialize various markers and time values */
-for(i=0;i<26;i++) GLOBALS->named_markers[i]=-1;	/* reset all named markers */
+for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++) GLOBALS->named_markers[i]=-1;	/* reset all named markers */
 
 GLOBALS->tims.last=GLOBALS->max_time;
 GLOBALS->tims.end=GLOBALS->tims.last;		/* until the configure_event of wavearea */
diff --git a/src/markerbox.c b/src/markerbox.c
index 85100f1..e5535f1 100644
--- a/src/markerbox.c
+++ b/src/markerbox.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) Tony Bybell 1999-2008.
+ * Copyright (c) Tony Bybell 1999-2014.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -16,12 +16,95 @@
 #include "analyzer.h"
 #include "currenttime.h"
 
+static void gtkwave_strrev(char *p)
+{
+char *q = p;
+while(q && *q) ++q;
+for(--q; p < q; ++p, --q)
+        *p = *p ^ *q,
+        *q = *p ^ *q,
+        *p = *p ^ *q;
+}
+
+
+char *make_bijective_marker_id_string(char *buf, unsigned int value)
+{
+char *pnt = buf;
+
+value++; /* bijective values start at one */
+while (value)
+        {
+        value--;
+        *(pnt++) = (char)('A' + value % ('Z'-'A'+1));
+        value = value / ('Z'-'A'+1);
+        }
+
+*pnt = 0;
+gtkwave_strrev(buf);
+return(buf);
+}
+
+
+unsigned int bijective_marker_id_string_hash(char *so)
+{
+unsigned int val=0;
+int i;
+int len = strlen(so);
+char sn[16];
+char *s = sn;
+
+strcpy(sn, so);
+gtkwave_strrev(sn);
+
+s += len;
+for(i=0;i<len;i++)
+        {
+	char c = toupper(*(--s));
+	if((c < 'A') || (c > 'Z')) break;
+        val *= ('Z'-'A'+1);
+        val += ((unsigned char)c) - ('A' - 1);
+        }
+
+val--; /* bijective values start at one so decrement */
+return(val);
+}
+
+
+unsigned int bijective_marker_id_string_len(char *s)
+{
+int len = 0;
+
+while(*s)
+	{
+	char c = toupper(*s);
+	if((c >= 'A') && (c <= 'Z'))
+		{
+		len++;
+		s++;
+		continue;
+		}
+		else
+		{
+		break;
+		}
+	}
+
+return(len);
+}
+
+
 static void str_change_callback(GtkWidget *entry, gpointer which)
 {
 G_CONST_RETURN gchar *entry_text;
 int i;
-
-i = ((int) (((long) which) & 31L)) % 26;
+uint32_t hashmask =  WAVE_NUM_NAMED_MARKERS;
+hashmask |= hashmask >> 1;   
+hashmask |= hashmask >> 2;
+hashmask |= hashmask >> 4;
+hashmask |= hashmask >> 8;
+hashmask |= hashmask >> 16;
+
+i = ((int) (((long) which) & hashmask)) % WAVE_NUM_NAMED_MARKERS;
 GLOBALS->dirty_markerbox_c_1 = 1;
 
 entry_text = gtk_entry_get_text(GTK_ENTRY(entry));
@@ -48,8 +131,14 @@ static void str_enter_callback(GtkWidget *entry, gpointer which)
 {
 G_CONST_RETURN gchar *entry_text;
 int i;
-
-i = ((int) (((long) which) & 31L)) % 26;
+uint32_t hashmask =  WAVE_NUM_NAMED_MARKERS;
+hashmask |= hashmask >> 1;   
+hashmask |= hashmask >> 2;
+hashmask |= hashmask >> 4;
+hashmask |= hashmask >> 8;
+hashmask |= hashmask >> 16;
+
+i = ((int) (((long) which) & hashmask)) % WAVE_NUM_NAMED_MARKERS;
 GLOBALS->dirty_markerbox_c_1 = 1;
 
 entry_text = gtk_entry_get_text(GTK_ENTRY(entry));
@@ -76,18 +165,24 @@ if(entry_text && strlen(entry_text))
 }
 
 
-
-
 static void change_callback(GtkWidget *widget, gpointer which)
 {
+(void)widget;
+
 GtkWidget *entry;
 TimeType temp;
 G_CONST_RETURN gchar *entry_text;
 char buf[49];
 int i;
 int ent_idx;
+uint32_t hashmask =  WAVE_NUM_NAMED_MARKERS;
+hashmask |= hashmask >> 1;   
+hashmask |= hashmask >> 2;
+hashmask |= hashmask >> 4;
+hashmask |= hashmask >> 8;
+hashmask |= hashmask >> 16;
 
-ent_idx = ((int) (((long) which) & 31L)) % 26;
+ent_idx = ((int) (((long) which) & hashmask)) % WAVE_NUM_NAMED_MARKERS;
 
 entry=GLOBALS->entries_markerbox_c_1[ent_idx];
 
@@ -103,7 +198,7 @@ temp=unformat_time(entry_text, GLOBALS->time_dimension);
 temp -= GLOBALS->global_time_offset;
 if((temp<GLOBALS->tims.start)||(temp>GLOBALS->tims.last)) goto failure;
 
-for(i=0;i<26;i++)
+for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
         {
         if(temp==GLOBALS->shadow_markers_markerbox_c_1[i])
 		{
@@ -126,6 +221,8 @@ return;
 
 static void enter_callback(GtkWidget *widget, gpointer which)
 {
+(void)widget;
+
 GtkWidget *entry;
 /* TimeType *modify; */ /* scan-build */
 TimeType temp;
@@ -133,8 +230,14 @@ G_CONST_RETURN gchar *entry_text;
 char buf[49];
 int i;
 int ent_idx;
+uint32_t hashmask =  WAVE_NUM_NAMED_MARKERS;
+hashmask |= hashmask >> 1;   
+hashmask |= hashmask >> 2;
+hashmask |= hashmask >> 4;
+hashmask |= hashmask >> 8;
+hashmask |= hashmask >> 16;
 
-ent_idx = ((int) (((long) which) & 31L)) % 26;
+ent_idx = ((int) (((long) which) & hashmask)) % WAVE_NUM_NAMED_MARKERS;
 
 entry=GLOBALS->entries_markerbox_c_1[ent_idx];
 
@@ -146,7 +249,7 @@ temp=unformat_time(entry_text, GLOBALS->time_dimension);
 temp -= GLOBALS->global_time_offset;
 if((temp<GLOBALS->tims.start)||(temp>GLOBALS->tims.last)) goto failure;
 
-for(i=0;i<26;i++)
+for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
         {
         if(temp==GLOBALS->shadow_markers_markerbox_c_1[i]) goto failure;
         }
@@ -175,10 +278,13 @@ gtk_entry_set_text (GTK_ENTRY (entry), buf);
 
 static void ok_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 if(GLOBALS->dirty_markerbox_c_1)
 	{
 	int i;
-	for(i=0;i<26;i++)
+	for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 		{
 		GLOBALS->named_markers[i]=GLOBALS->shadow_markers_markerbox_c_1[i];
 		if(GLOBALS->marker_names[i]) free_2(GLOBALS->marker_names[i]);
@@ -199,8 +305,11 @@ if(GLOBALS->dirty_markerbox_c_1)
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 int i;
-  for(i=0;i<26;i++)
+  for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 	{
 	if(GLOBALS->marker_names[i]) free_2(GLOBALS->marker_names[i]);
   	GLOBALS->marker_names[i] = GLOBALS->shadow_marker_names[i];
@@ -218,13 +327,13 @@ void markerbox(char *title, GtkSignalFunc func)
     GtkWidget *vbox, *hbox, *vbox_g, *label;
     GtkWidget *button1, *button2, *scrolled_win, *frame, *separator;
     GtkWidget *table;
-    char labtitle[2]={0,0};
+    char labtitle[16];
     int i;
 
     GLOBALS->cleanup_markerbox_c_4=func;
     GLOBALS->dirty_markerbox_c_1=0;
 
-    for(i=0;i<26;i++)
+    for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 	{
 	GLOBALS->shadow_markers_markerbox_c_1[i] = GLOBALS->named_markers[i];
 	GLOBALS->shadow_marker_names[i] = strdup_2(GLOBALS->marker_names[i]);
@@ -266,7 +375,7 @@ void markerbox(char *title, GtkSignalFunc func)
     gtk_container_add (GTK_CONTAINER (frame), scrolled_win);
     gtk_container_add (GTK_CONTAINER (vbox), frame);
 
-    for(i=0;i<26;i++)
+    for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
     {
     char buf[49];
 
@@ -277,7 +386,8 @@ void markerbox(char *title, GtkSignalFunc func)
         gtk_box_pack_start (GTK_BOX (vbox_g), separator, TRUE, TRUE, 0);
 	}
 
-    labtitle[0]='A'+i;
+
+    make_bijective_marker_id_string(labtitle, i);
     label=gtk_label_new(labtitle);
     gtk_widget_show (label);
     gtk_box_pack_start (GTK_BOX (vbox_g), label, TRUE, TRUE, 0);
diff --git a/src/markerbox.h b/src/markerbox.h
index 2c2550c..1efff92 100644
--- a/src/markerbox.h
+++ b/src/markerbox.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) Tony Bybell 2010
+ * Copyright (c) Tony Bybell 2010-2014
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -10,7 +10,26 @@
 #ifndef WAVE_MARKERBOX_H
 #define WAVE_MARKERBOX_H
 
+#ifdef WAVE_MANYMARKERS_MODE
+
+/* 702 will go from A-Z, AA-AZ, ... , ZA-ZZ */
+/* this is a bijective name similar to the columns on spreadsheets */
+/* the upper count is (practically) unbounded */
+#define WAVE_NUM_NAMED_MARKERS      (702)
+
+#else
+
+/* do not go less than 26! */
+#define WAVE_NUM_NAMED_MARKERS      (26)
+
+#endif
+
+
 void markerbox(char *title, GtkSignalFunc func);
 
+char *make_bijective_marker_id_string(char *buf, unsigned int value);
+unsigned int bijective_marker_id_string_hash(char *so);
+unsigned int bijective_marker_id_string_len(char *s);
+
 #endif
 
diff --git a/src/menu.c b/src/menu.c
index 5e1b688..b14ca34 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -27,6 +27,7 @@
 #include "lx2.h"
 #include "hierpack.h"
 #include "tcl_helper.h"
+#include <cocoa_misc.h>
 #include <assert.h>
 
 #if !defined __MINGW32__ && !defined _MSC_VER
@@ -53,60 +54,132 @@ extern char *gtkwave_argv0_cached; /* for new window */
 /* marshals for handling menu items vs button pressed items */
 
 static void service_left_edge_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_left_edge(widget, null_data); }
+{
+(void)callback_action;
+
+service_left_edge(widget, null_data); 
+}
 
 static void service_right_edge_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_right_edge(widget, null_data); }
+{
+(void)callback_action;
+
+service_right_edge(widget, null_data); 
+}
 
 static void service_zoom_in_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_zoom_in(widget, null_data); }
+{
+(void)callback_action;
+
+service_zoom_in(widget, null_data); 
+}
 
 static void service_zoom_out_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_zoom_out(widget, null_data); }
+{
+(void)callback_action;
+
+service_zoom_out(widget, null_data); 
+}
 
 static void service_zoom_full_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_zoom_full(widget, null_data); }
+{
+(void)callback_action;
+
+service_zoom_full(widget, null_data); 
+}
 
 static void service_zoom_fit_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_zoom_fit(widget, null_data); }
+{ 
+(void)callback_action;
+
+service_zoom_fit(widget, null_data); 
+}
 
 static void service_zoom_left_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_zoom_left(widget, null_data); }
+{
+(void)callback_action;
+
+service_zoom_left(widget, null_data); 
+}
 
 static void service_zoom_right_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_zoom_right(widget, null_data); }
+{
+(void)callback_action;
+
+service_zoom_right(widget, null_data); 
+}
 
 static void service_zoom_undo_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_zoom_undo(widget, null_data); }
+{
+(void)callback_action;
+
+service_zoom_undo(widget, null_data); 
+}
 
 static void fetch_right_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ fetch_right(widget, null_data); }
+{
+(void)callback_action;
+
+fetch_right(widget, null_data); 
+}
 
 static void fetch_left_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ fetch_left(widget, null_data); }
+{
+(void)callback_action;
+
+fetch_left(widget, null_data); 
+}
 
 static void discard_right_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ discard_right(widget, null_data); }
+{
+(void)callback_action;
+
+discard_right(widget, null_data); 
+}
 
 static void discard_left_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ discard_left(widget, null_data); }
+{
+(void)callback_action;
+
+discard_left(widget, null_data); 
+}
 
 static void service_right_shift_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_right_shift(widget, null_data); }
+{
+(void)callback_action;
+
+service_right_shift(widget, null_data); 
+}
 
 static void service_left_shift_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_left_shift(widget, null_data); }
+{
+(void)callback_action;
+
+service_left_shift(widget, null_data); 
+}
 
 static void service_right_page_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_right_page(widget, null_data); }
+{ 
+(void)callback_action;
+
+service_right_page(widget, null_data); 
+}
 
 static void service_left_page_marshal(gpointer null_data, guint callback_action, GtkWidget *widget)
-{ service_left_page(widget, null_data); }
+{ 
+(void)callback_action;
+
+service_left_page(widget, null_data); 
+}
 
 /* ruler */
 
 static void menu_def_ruler(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nDefine Time Ruler Marks");
@@ -145,6 +218,10 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 
 static void lock_marker_left(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 int ent_idx = GLOBALS->named_marker_lock_idx;
 int i;
 int success = 0;
@@ -164,11 +241,11 @@ if(GLOBALS->helpbox_is_active)
 	return;
 	}
 
-if(ent_idx < 0) ent_idx = 26;
+if(ent_idx < 0) ent_idx = WAVE_NUM_NAMED_MARKERS;
 ent_idx--;
-if(ent_idx < 0) ent_idx = 25;
+if(ent_idx < 0) ent_idx = WAVE_NUM_NAMED_MARKERS-1;
 
-for(i=0;i<26;i++)
+for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 	{
 	if(GLOBALS->named_markers[ent_idx] >= 0)
 		{
@@ -177,7 +254,7 @@ for(i=0;i<26;i++)
 		}
 
 	ent_idx--;
-	if(ent_idx < 0) ent_idx = 25;
+	if(ent_idx < 0) ent_idx = WAVE_NUM_NAMED_MARKERS-1;
 	}
 
 if(!success)
@@ -198,13 +275,17 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 
 static void lock_marker_right(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 int ent_idx = GLOBALS->named_marker_lock_idx;
 int i;
 int success = 0;
 
 if(ent_idx < 0) ent_idx = -1; /* not really necessary */
 ent_idx++;
-if(ent_idx > 25) ent_idx = 0;
+if(ent_idx > (WAVE_NUM_NAMED_MARKERS-1)) ent_idx = 0;
 
 if(GLOBALS->helpbox_is_active)
         {
@@ -221,7 +302,7 @@ if(GLOBALS->helpbox_is_active)
 	return;
 	}
 
-for(i=0;i<26;i++)
+for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 	{
 	if(GLOBALS->named_markers[ent_idx] >= 0)
 		{
@@ -230,7 +311,7 @@ for(i=0;i<26;i++)
 		}
 
 	ent_idx++;
-	if(ent_idx > 25) ent_idx = 0;
+	if(ent_idx > (WAVE_NUM_NAMED_MARKERS-1)) ent_idx = 0;
 	}
 
 if(!success)
@@ -253,6 +334,10 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 
 static void unlock_marker(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nUnlock from Named Marker");
@@ -276,10 +361,17 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 
 #ifdef WAVE_USE_MLIST_T
 void menu_scale_to_td_x(GtkWidget *widget, gpointer data)
+{
+(void)widget;
+(void)data;
 #else
 void menu_scale_to_td_x(gpointer null_data, guint callback_action, GtkWidget *widget)
-#endif
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+#endif
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nScale To Time Dimension: None");
@@ -303,10 +395,17 @@ if(GLOBALS->helpbox_is_active)
 
 #ifdef WAVE_USE_MLIST_T
 void menu_scale_to_td_s(GtkWidget *widget, gpointer data)
+{
+(void)widget;
+(void)data;
 #else
 void menu_scale_to_td_s(gpointer null_data, guint callback_action, GtkWidget *widget)
-#endif
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+#endif
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nScale To Time Dimension: sec");
@@ -330,10 +429,17 @@ if(GLOBALS->helpbox_is_active)
 
 #ifdef WAVE_USE_MLIST_T
 void menu_scale_to_td_m(GtkWidget *widget, gpointer data)
+{
+(void)widget;
+(void)data;
 #else
 void menu_scale_to_td_m(gpointer null_data, guint callback_action, GtkWidget *widget)
-#endif
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+#endif
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nScale To Time Dimension: ms");
@@ -357,10 +463,17 @@ if(GLOBALS->helpbox_is_active)
 
 #ifdef WAVE_USE_MLIST_T
 void menu_scale_to_td_u(GtkWidget *widget, gpointer data)
+{
+(void)widget;
+(void)data;
 #else
 void menu_scale_to_td_u(gpointer null_data, guint callback_action, GtkWidget *widget)
-#endif
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+#endif
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nScale To Time Dimension: us");
@@ -384,10 +497,17 @@ if(GLOBALS->helpbox_is_active)
 
 #ifdef WAVE_USE_MLIST_T
 void menu_scale_to_td_n(GtkWidget *widget, gpointer data)
+{
+(void)widget;
+(void)data;
 #else
 void menu_scale_to_td_n(gpointer null_data, guint callback_action, GtkWidget *widget)
-#endif
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+#endif
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nScale To Time Dimension: ns");
@@ -411,10 +531,17 @@ if(GLOBALS->helpbox_is_active)
 
 #ifdef WAVE_USE_MLIST_T
 void menu_scale_to_td_p(GtkWidget *widget, gpointer data)
+{
+(void)widget;
+(void)data;
 #else
 void menu_scale_to_td_p(gpointer null_data, guint callback_action, GtkWidget *widget)
-#endif
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+#endif
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nScale To Time Dimension: ps");
@@ -438,10 +565,17 @@ if(GLOBALS->helpbox_is_active)
 
 #ifdef WAVE_USE_MLIST_T
 void menu_scale_to_td_f(GtkWidget *widget, gpointer data)
+{
+(void)widget;
+(void)data;
 #else
 void menu_scale_to_td_f(gpointer null_data, guint callback_action, GtkWidget *widget)
-#endif
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+#endif
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nScale To Time Dimension: fs");
@@ -468,6 +602,10 @@ if(GLOBALS->helpbox_is_active)
 
 void menu_dataformat_xlate_ttrans_1(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nTransaction Filter Process");
@@ -482,6 +620,10 @@ ttrans_searchbox("Select Transaction Filter Process");
 
 void menu_dataformat_xlate_ttrans_0(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nTransaction Filter Process Disable");
@@ -498,6 +640,10 @@ install_ttrans_filter(0); /* disable, 0 is always NULL */
 
 void menu_dataformat_xlate_proc_1(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nTranslate Filter Process");
@@ -512,6 +658,10 @@ ptrans_searchbox("Select Signal Filter Process");
 
 void menu_dataformat_xlate_proc_0(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nTranslate Filter Process Disable");
@@ -529,6 +679,10 @@ install_proc_filter(0); /* disable, 0 is always NULL */
 
 void menu_dataformat_xlate_file_1(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nTranslate Filter File");
@@ -544,6 +698,10 @@ trans_searchbox("Select Signal Filter");
 
 void menu_dataformat_xlate_file_0(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nTranslate Filter File Disable");
@@ -562,6 +720,9 @@ install_file_filter(0); /* disable, 0 is always NULL */
 
 void menu_write_lxt_file_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 int rc;
 
 if(!GLOBALS->filesel_ok)
@@ -596,6 +757,10 @@ switch(rc)
 void
 menu_write_lxt_file(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nWrite LXT File As");
@@ -632,6 +797,9 @@ if(GLOBALS->traces.first)
 
 void menu_write_vcd_file_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 int rc;
 
 if(!GLOBALS->filesel_ok)
@@ -666,6 +834,10 @@ switch(rc)
 void
 menu_write_vcd_file(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nWrite VCD File As");
@@ -694,6 +866,9 @@ if(GLOBALS->traces.first)
 
 void menu_write_tim_file_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 int rc;
 
 if(!GLOBALS->filesel_ok)
@@ -728,6 +903,10 @@ switch(rc)
 void
 menu_write_tim_file(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nWrite TIM File As");
@@ -757,6 +936,10 @@ if(GLOBALS->traces.first)
 
 void menu_unwarp_traces_all(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 Trptr t;
 int found=0;
 
@@ -791,6 +974,10 @@ if(found)
 
 void menu_unwarp_traces(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 Trptr t;
 int found=0;
 
@@ -826,6 +1013,9 @@ if(found)
 
 void warp_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 if(GLOBALS->entrybox_text)
 	{
 	TimeType gt, delta;
@@ -874,6 +1064,10 @@ if(GLOBALS->entrybox_text)
 
 void menu_warp_traces(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 char gt[32];
 Trptr t;
 int found=0;
@@ -920,6 +1114,10 @@ if(found)
 
 void menu_altwheel(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
   if(GLOBALS->helpbox_is_active)
   {
     help_text_bold("\n\nAlternate Wheel Mode");
@@ -965,6 +1163,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 
 void wave_scrolling_on(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nWave Scrolling");
@@ -1012,6 +1214,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 
 void menu_keep_xz_colors(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nKeep xz Colors");
@@ -1051,6 +1257,10 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 
 void menu_autocoalesce(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nAutocoalesce");
@@ -1094,6 +1304,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 
 void menu_autocoalesce_reversal(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nAutocoalesce Reversal");
@@ -1136,6 +1350,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 
 void menu_autoname_bundles_on(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nAutoname Bundles");
@@ -1188,6 +1406,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 
 void menu_hgrouping(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nSearch Hierarchy Grouping");
@@ -1235,6 +1457,9 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 
 void set_hier_cleanup(GtkWidget *widget, gpointer data, int level)
 {
+(void)widget;
+(void)data;
+
   char update_string[128];
   Trptr t;
   int i;
@@ -1324,6 +1549,10 @@ if(GLOBALS->entrybox_text)
 
 void menu_set_max_hier(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 char za[32];
 
 if(GLOBALS->helpbox_is_active)
@@ -1347,6 +1576,8 @@ entrybox("Max Hier Depth",200,za,NULL,20,GTK_SIGNAL_FUNC(max_hier_cleanup));
 
 void menu_toggle_hier(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)callback_action;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nToggle Trace Hier");
@@ -1366,6 +1597,10 @@ if(GLOBALS->helpbox_is_active)
 /**/
 void menu_use_roundcaps(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nDraw Roundcapped Vectors");
@@ -1418,6 +1653,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 /**/
 void menu_lxt_clk_compress(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nLXT Clock Compress to Z");
@@ -1463,6 +1702,10 @@ if(GLOBALS->loaded_file_type == LXT_FILE)
 /**/
 void menu_use_full_precision(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nFull Precision");
@@ -1511,6 +1754,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 /**/
 void menu_remove_marked(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nRemove Pattern Marks");
@@ -1543,6 +1790,10 @@ if(GLOBALS->helpbox_is_active)
 /**/
 void menu_use_color(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nUse Color");
@@ -1562,6 +1813,10 @@ if(GLOBALS->helpbox_is_active)
 /**/
 void menu_use_bw(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nUse Black and White");
@@ -1582,6 +1837,10 @@ if(GLOBALS->helpbox_is_active)
 /**/
 void menu_zoom10_snap(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nZoom Pow10 Snap");
@@ -1635,6 +1894,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 /**/
 void menu_zoom_dynf(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nPartial VCD Dynamic Zoom Full");
@@ -1677,6 +1940,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 /**/
 void menu_zoom_dyne(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nPartial VCD Dynamic Zoom To End");
@@ -1719,6 +1986,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 /**/
 void menu_left_justify(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nLeft Justify Signals");
@@ -1738,6 +2009,10 @@ if(GLOBALS->helpbox_is_active)
 /**/
 void menu_right_justify(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nRight Justify Signals");
@@ -1757,6 +2032,10 @@ if(GLOBALS->helpbox_is_active)
 /**/
 void menu_enable_constant_marker_update(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nConstant Marker Update");
@@ -1804,6 +2083,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 /**/
 void menu_enable_standard_trace_select(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nStandard Trace Select");
@@ -1847,6 +2130,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 /**/
 void menu_enable_dynamic_resize(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nDynamic Resize");
@@ -1902,6 +2189,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 /**/
 void menu_toggle_delta_or_frequency(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nToggle Delta-Frequency");
@@ -1921,6 +2212,10 @@ if(GLOBALS->helpbox_is_active)
 /**/
 void menu_toggle_max_or_marker(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nToggle Max-Marker");
@@ -1941,6 +2236,10 @@ if(GLOBALS->helpbox_is_active)
 #ifdef MAC_INTEGRATION
 void menu_help_manual(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nWave User's Guide");
@@ -1984,6 +2283,10 @@ if(GLOBALS->helpbox_is_active)
 /**/
 void menu_help(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nWave Help");
@@ -1998,6 +2301,10 @@ helpbox("Wave Help",480,"Select any main window menu item");
 /**/
 void menu_version(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nWave Version");
@@ -2013,6 +2320,8 @@ simplereqbox("Wave Version",480,WAVE_VERSION_INFO,"OK", NULL, NULL, 0);
 /**/
 void menu_quit_callback(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+
 char sstr[32];
 
 if(data)
@@ -2029,6 +2338,10 @@ if(data)
 }
 void menu_quit(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nQuit");
@@ -2052,6 +2365,9 @@ if(!GLOBALS->enable_fast_exit)
 
 void menu_quit_close_callback(GtkWidget *widget, gpointer dummy_data)
 {
+(void)widget;
+(void)dummy_data;
+
 unsigned int i, j=0;
 unsigned int this_page = GLOBALS->this_context_page;
 unsigned np = GLOBALS->num_notebook_pages;
@@ -2119,6 +2435,10 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 
 void menu_quit_close(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nClose");
@@ -2165,6 +2485,9 @@ static void must_sel_bg(void)
 static void
 menu_open_group(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
   Trptr t;
   unsigned dirty = 0;
 
@@ -2201,6 +2524,9 @@ menu_open_group(GtkWidget *widget, gpointer data)
 static void
 menu_close_group(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
   Trptr t;
   unsigned dirty = 0;
 
@@ -2331,6 +2657,9 @@ static unsigned create_group (char* name, Trptr t_composite)
 static void
 create_group_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
   unsigned dirty = 0;
 
   dirty = create_group(GLOBALS->entrybox_text, NULL);
@@ -2353,6 +2682,9 @@ create_group_cleanup(GtkWidget *widget, gpointer data)
 void
 menu_create_group(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
 
   Trptr t;
   unsigned dirty = 0;
@@ -2507,6 +2839,10 @@ static unsigned expand_trace(Trptr t_top)
 void
 menu_expand(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
   Trptr t, t_next;
   int dirty=0;
   int j;
@@ -2607,6 +2943,10 @@ menu_expand(gpointer null_data, guint callback_action, GtkWidget *widget)
 void
 menu_toggle_group(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
   Trptr t;
   unsigned dirty_group  = 0;
   unsigned dirty_signal = 0;
@@ -2668,6 +3008,9 @@ menu_toggle_group(gpointer null_data, guint callback_action, GtkWidget *widget)
 
 static void rename_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
   Trptr t = GLOBALS->trace_to_alias_menu_c_1;
 
   if(GLOBALS->entrybox_text)
@@ -2723,6 +3066,9 @@ static void rename_cleanup(GtkWidget *widget, gpointer data)
 
 static void menu_rename(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
   Trptr t;
   /* currently only called by various combine menu options, so no help menu text */
 
@@ -3139,6 +3485,10 @@ bvptr combine_traces(int direction, Trptr single_trace_only)
 void
 menu_combine_down(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
   bvptr v;
 
   if(GLOBALS->helpbox_is_active)
@@ -3189,6 +3539,10 @@ menu_combine_down(gpointer null_data, guint callback_action, GtkWidget *widget)
 void
 menu_combine_up(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
   bvptr v;
 
   if(GLOBALS->helpbox_is_active)
@@ -3240,10 +3594,16 @@ menu_combine_up(gpointer null_data, guint callback_action, GtkWidget *widget)
 
 void menu_tracesearchbox_callback(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
 }
 
 void menu_tracesearchbox(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 Trptr t;
 
 if(GLOBALS->helpbox_is_active)
@@ -3301,6 +3661,9 @@ if(GLOBALS->helpbox_is_active)
 void
 menu_new_viewer_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 pid_t pid;
 
 if(GLOBALS->filesel_ok)
@@ -3379,6 +3742,10 @@ if(GLOBALS->filesel_ok)
 void
 menu_new_viewer(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 static int mnv = 0;
 
 if(!mnv && !GLOBALS->busy_busy_c_1)
@@ -3513,6 +3880,9 @@ return(rc);
 void
 menu_new_viewer_tab_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 if(GLOBALS->filesel_ok)
         {
 	menu_new_viewer_tab_cleanup_2(*GLOBALS->fileselbox_text, GLOBALS->optimize_vcd);
@@ -3523,6 +3893,10 @@ if(GLOBALS->filesel_ok)
 void
 menu_new_viewer_tab(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nOpen New Tab");
@@ -3550,6 +3924,10 @@ if(!GLOBALS->partial_vcd)
 void
 menu_reload_waveform(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
  if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nReload Current Waveform");
@@ -3590,6 +3968,10 @@ menu_reload_waveform(data, 0, widget);
 void
 menu_print(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nPrint To File");
@@ -3610,16 +3992,22 @@ renderbox("Print Formatting Options");
 /**/
 void menu_markerbox_callback(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
 }
 
 void menu_markerbox(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nShow-Change Marker Data");
         help_text(
                 " displays and allows the modification of the times for"
-		" all 26 named markers by filling in the leftmost entry boxes.  In addition, optional marker text"
+		" all named markers by filling in the leftmost entry boxes.  In addition, optional marker text"
 		" rather than a generic single letter name may be specified by filling in the rightmost entry boxes."
 		" Note that the time for each marker must be unique."
         );
@@ -3632,6 +4020,10 @@ markerbox("Markers", GTK_SIGNAL_FUNC(menu_markerbox_callback));
 
 void copy_pri_b_marker(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nCopy Primary -> B Marker");
@@ -3659,6 +4051,10 @@ if(GLOBALS->helpbox_is_active)
 /**/
 void delete_unnamed_marker(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nDelete Primary Marker");
@@ -3695,6 +4091,10 @@ if(GLOBALS->tims.marker!=-1)
 /**/
 void collect_all_named_markers(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 int i;
 int dirty=0;
 
@@ -3710,7 +4110,7 @@ if(GLOBALS->helpbox_is_active)
 
 DEBUG(printf("collect_all_unnamed_markers()\n"));
 
-for(i=0;i<26;i++)
+for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 	{
 	if(GLOBALS->named_markers[i]!=-1)
 		{
@@ -3734,6 +4134,10 @@ if(dirty)
 /**/
 void collect_named_marker(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 int i;
 
 if(GLOBALS->helpbox_is_active)
@@ -3750,7 +4154,7 @@ DEBUG(printf("collect_named_marker()\n"));
 
 if(GLOBALS->tims.marker!=-1)
 	{
-	for(i=0;i<26;i++)
+	for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 		{
 		if(GLOBALS->named_markers[i]==GLOBALS->tims.marker)
 			{
@@ -3772,14 +4176,30 @@ if(GLOBALS->tims.marker!=-1)
 /**/
 void drop_named_marker(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 int i;
 
 if(GLOBALS->helpbox_is_active)
         {
+	char nm_s[32];
+
+	sprintf(nm_s, "%d", WAVE_NUM_NAMED_MARKERS);
+
         help_text_bold("\n\nDrop Named Marker");
         help_text(
 		" drops a named marker where the current primary (unnamed)"
-		" marker is placed.  A maximum of 26 named markers are allowed"
+		" marker is placed.  A maximum of "
+	);
+
+        help_text(
+		nm_s
+	);
+
+        help_text(
+		" named markers are allowed"
 		" and the times for all must be different."
         );
         return;
@@ -3792,14 +4212,14 @@ if(GLOBALS->tims.marker!=-1)
 	{
 /* only one per slot requirement removed...
 #if 0
-	for(i=0;i<26;i++)
+	for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 		{
 		if(GLOBALS->named_markers[i]==GLOBALS->tims.marker) return;
 		}
 #endif
 ...only one per slot requirement removed */
 
-	for(i=0;i<26;i++)
+	for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 		{
 		if(GLOBALS->named_markers[i]==-1)
 			{
@@ -3814,6 +4234,9 @@ if(GLOBALS->tims.marker!=-1)
 /**/
 void menu_treesearch_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 MaxSignalLength();
 signalarea_configure_event(GLOBALS->signalarea, NULL);
 wavearea_configure_event(GLOBALS->wavearea, NULL);
@@ -3822,6 +4245,10 @@ DEBUG(printf("menu_treesearch_cleanup()\n"));
 
 void menu_treesearch(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nSignal Search Tree");
@@ -3842,6 +4269,9 @@ treebox("Signal Search Tree",GTK_SIGNAL_FUNC(menu_treesearch_cleanup), NULL);
 void
 menu_showchangeall_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 Trptr t;
 Ulong flags;
 
@@ -3869,6 +4299,10 @@ DEBUG(printf("menu_showchangeall_cleanup()\n"));
 void
 menu_showchangeall(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 Trptr t;
 
 if(GLOBALS->helpbox_is_active)
@@ -3902,6 +4336,9 @@ must_sel();
 void
 menu_showchange_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 GLOBALS->signalwindow_width_dirty=1;
 MaxSignalLength();
 signalarea_configure_event(GLOBALS->signalarea, NULL);
@@ -3912,6 +4349,10 @@ DEBUG(printf("menu_showchange_cleanup()\n"));
 void
 menu_showchange(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 Trptr t;
 
 if(GLOBALS->helpbox_is_active)
@@ -3944,6 +4385,10 @@ must_sel();
 /**/
 void menu_remove_aliases(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
   Trptr t;
   int dirty=0, none_selected = 1;
 
@@ -4020,6 +4465,9 @@ void menu_remove_aliases(gpointer null_data, guint callback_action, GtkWidget *w
 
 static void alias_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
   Trptr t = GLOBALS->trace_to_alias_menu_c_1;
 
   if(GLOBALS->entrybox_text)
@@ -4064,6 +4512,10 @@ static void alias_cleanup(GtkWidget *widget, gpointer data)
 
 void menu_alias(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
   Trptr t;
 
   if(GLOBALS->helpbox_is_active)
@@ -4119,6 +4571,9 @@ void menu_alias(gpointer null_data, guint callback_action, GtkWidget *widget)
 /**/
 void menu_hiersearch_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 MaxSignalLength();
 signalarea_configure_event(GLOBALS->signalarea, NULL);
 wavearea_configure_event(GLOBALS->wavearea, NULL);
@@ -4127,6 +4582,10 @@ DEBUG(printf("menu_hiersearch_cleanup()\n"));
 
 void menu_hiersearch(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nHierarchy Search");
@@ -4144,6 +4603,9 @@ hier_searchbox("Hierarchy Search",GTK_SIGNAL_FUNC(menu_hiersearch_cleanup));
 /**/
 void menu_signalsearch_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 MaxSignalLength();
 signalarea_configure_event(GLOBALS->signalarea, NULL);
 wavearea_configure_event(GLOBALS->wavearea, NULL);
@@ -4152,6 +4614,10 @@ DEBUG(printf("menu_signalsearch_cleanup()\n"));
 
 void menu_signalsearch(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nSignal Search Regexp");
@@ -4219,12 +4685,19 @@ if(GLOBALS->entrybox_text)
 static void
 regexp_unhighlight_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 regexp_highlight_generic(0);
 }
 
 void
 menu_regexp_unhighlight(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nUnHighlight Regexp");
@@ -4243,12 +4716,19 @@ entrybox("Regexp UnHighlight",300,GLOBALS->regexp_string_menu_c_1,NULL,128,GTK_S
 static void
 regexp_highlight_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 regexp_highlight_generic(1);
 }
 
 void
 menu_regexp_highlight(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nHighlight Regexp");
@@ -4271,6 +4751,9 @@ entrybox("Regexp Highlight",300,GLOBALS->regexp_string_menu_c_1,NULL,128,GTK_SIG
 void
 menu_write_screengrab_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 GdkWindow *gw;
 gint w, h;
 GdkColormap *cm;
@@ -4323,6 +4806,10 @@ if(!succ)
 void
 menu_write_screengrab_as(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nGrab To File");
@@ -4346,6 +4833,9 @@ fileselbox("Grab To File",&GLOBALS->filesel_imagegrab,GTK_SIGNAL_FUNC(menu_write
 void
 menu_write_save_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 FILE *wave;
 
 if(!GLOBALS->filesel_ok)
@@ -4372,6 +4862,10 @@ if(!(wave=fopen(*GLOBALS->fileselbox_text,"wb")))
 void
 menu_write_save_file_as(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nWrite Save File As");
@@ -4392,6 +4886,10 @@ fileselbox("Write Save File",&GLOBALS->filesel_writesave,GTK_SIGNAL_FUNC(menu_wr
 void
 menu_write_save_file(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nWrite Save File");
@@ -4427,6 +4925,9 @@ if(!GLOBALS->filesel_writesave)
 void
 menu_read_save_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 if(GLOBALS->filesel_ok)
 	{
 	char *wname;
@@ -4443,6 +4944,10 @@ if(GLOBALS->filesel_ok)
 void
 menu_read_save_file(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nRead Save File");
@@ -4468,7 +4973,10 @@ fileselbox("Read Save File",&GLOBALS->filesel_writesave,GTK_SIGNAL_FUNC(menu_rea
 void
 menu_read_stems_cleanup(GtkWidget *widget, gpointer data)
 {
-char *fname ;
+(void)widget;
+(void)data;
+
+char *fname;
 
 if(GLOBALS->filesel_ok)
 	{
@@ -4485,6 +4993,10 @@ if(GLOBALS->filesel_ok)
 void
 menu_read_stems_file(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nRead Verilog Stemsfile");
@@ -4516,6 +5028,9 @@ if(!stems_are_active())
 void
 menu_read_log_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 char *fname ;
 
 if(GLOBALS->filesel_ok)
@@ -4533,6 +5048,10 @@ if(GLOBALS->filesel_ok)
 void
 menu_read_log_file(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nRead Logfile");
@@ -4551,7 +5070,10 @@ fileselbox("Read Logfile",&GLOBALS->filesel_logfile_menu_c_1,GTK_SIGNAL_FUNC(men
 void
 menu_read_script_cleanup(GtkWidget *widget, gpointer data)
 {
-char *fname ;
+(void)widget;
+(void)data;
+
+char *fname;
 
 if(GLOBALS->filesel_ok)
 	{
@@ -4568,6 +5090,10 @@ if(GLOBALS->filesel_ok)
 void
 menu_read_script_file(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
 	{
 	help_text_bold("\n\nRead Script File");
@@ -4586,6 +5112,10 @@ fileselbox("Read Script File",&GLOBALS->filesel_scriptfile_menu,GTK_SIGNAL_FUNC(
 void
 menu_insert_blank_traces(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nInsert Blank");
@@ -4609,6 +5139,10 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 void
 menu_insert_analog_height_extension(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nInsert Analog Height Extension");
@@ -4632,6 +5166,9 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 static void
 comment_trace_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 InsertBlankTrace(GLOBALS->entrybox_text, 0);
 if(GLOBALS->entrybox_text) { free_2(GLOBALS->entrybox_text); GLOBALS->entrybox_text=NULL; }
 GLOBALS->signalwindow_width_dirty=1;
@@ -4643,6 +5180,10 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 void
 menu_insert_comment_traces(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nInsert Comment");
@@ -4663,6 +5204,9 @@ entrybox("Insert Comment Trace",300,"",NULL,128,GTK_SIGNAL_FUNC(comment_trace_cl
 /**/
 static void strace_repcnt_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 if(GLOBALS->entrybox_text)
 	{
 	GLOBALS->strace_repeat_count = atoi_64(GLOBALS->entrybox_text);
@@ -4674,6 +5218,10 @@ if(GLOBALS->entrybox_text)
 
 void menu_strace_repcnt(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 char gt[32];
 
 if(GLOBALS->helpbox_is_active)
@@ -4692,9 +5240,12 @@ entrybox("Repeat Count",300,gt,NULL,20,GTK_SIGNAL_FUNC(strace_repcnt_cleanup));
 /**/
 static void movetotime_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 if(GLOBALS->entrybox_text)
 	{
-	TimeType gt;
+	TimeType gt = GLOBALS->tims.first;
 	char update_string[128];
 	char timval[40];
 	GtkAdjustment *hadj;
@@ -4702,8 +5253,21 @@ if(GLOBALS->entrybox_text)
 
         if((GLOBALS->entrybox_text[0] >= 'A' && GLOBALS->entrybox_text[0] <= 'Z')||(GLOBALS->entrybox_text[0] >= 'a' && GLOBALS->entrybox_text[0] <= 'z'))
                 {
-                int uch = toupper((int)(unsigned char)GLOBALS->entrybox_text[0]);
-                gt=GLOBALS->named_markers[uch - 'A'];
+		char *su = GLOBALS->entrybox_text;
+		int uch;
+		while(*su)
+			{
+			uch = toupper((int)(unsigned char)*su);
+			*su = uch;
+			su++;
+			}
+
+		uch = bijective_marker_id_string_hash(GLOBALS->entrybox_text);
+
+		if((uch >= 0)&&(uch < WAVE_NUM_NAMED_MARKERS))
+			{
+	                gt=GLOBALS->named_markers[uch];
+			}
                 }
                 else
                 {
@@ -4738,6 +5302,10 @@ if(GLOBALS->entrybox_text)
 
 void menu_movetotime(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 char gt[32];
 
 if(GLOBALS->helpbox_is_active)
@@ -4758,6 +5326,9 @@ entrybox("Move To Time",200,gt,NULL,20,GTK_SIGNAL_FUNC(movetotime_cleanup));
 /**/
 static void fetchsize_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 if(GLOBALS->entrybox_text)
 	{
 	TimeType fw;
@@ -4780,6 +5351,10 @@ if(GLOBALS->entrybox_text)
 
 void menu_fetchsize(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 char fw[32];
 
 if(GLOBALS->helpbox_is_active)
@@ -4800,6 +5375,9 @@ entrybox("New Fetch Size",200,fw,NULL,20,GTK_SIGNAL_FUNC(fetchsize_cleanup));
 /**/
 static void zoomsize_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 if(GLOBALS->entrybox_text)
 	{
 	float f;
@@ -4833,6 +5411,10 @@ if(GLOBALS->entrybox_text)
 
 void menu_zoomsize(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 char za[32];
 
 if(GLOBALS->helpbox_is_active)
@@ -4853,6 +5435,9 @@ entrybox("New Zoom Amount",200,za,NULL,20,GTK_SIGNAL_FUNC(zoomsize_cleanup));
 /**/
 static void zoombase_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 if(GLOBALS->entrybox_text)
 	{
 	float za;
@@ -4884,6 +5469,10 @@ if(GLOBALS->entrybox_text)
 
 void menu_zoombase(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 char za[32];
 
 if(GLOBALS->helpbox_is_active)
@@ -4951,6 +5540,10 @@ static void colorformat(int color)
 void
 menu_colorformat_0(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nColor Format Normal");
@@ -4966,6 +5559,10 @@ colorformat(WAVE_COLOR_NORMAL);
 void
 menu_colorformat_1(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nColor Format Red");
@@ -4981,6 +5578,10 @@ colorformat(WAVE_COLOR_RED);
 void
 menu_colorformat_2(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nColor Format Orange");
@@ -4996,6 +5597,10 @@ colorformat(WAVE_COLOR_ORANGE);
 void
 menu_colorformat_3(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nColor Format Yellow");
@@ -5011,6 +5616,10 @@ colorformat(WAVE_COLOR_YELLOW);
 void
 menu_colorformat_4(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nColor Format Green");
@@ -5026,6 +5635,10 @@ colorformat(WAVE_COLOR_GREEN);
 void
 menu_colorformat_5(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nColor Format Blue");
@@ -5041,6 +5654,10 @@ colorformat(WAVE_COLOR_BLUE);
 void
 menu_colorformat_6(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nColor Format Indigo");
@@ -5056,6 +5673,10 @@ colorformat(WAVE_COLOR_INDIGO);
 void
 menu_colorformat_7(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nColor Format Violet");
@@ -5071,6 +5692,10 @@ colorformat(WAVE_COLOR_VIOLET);
 void
 menu_colorformat_cyc(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nColor Format Cycle");
@@ -5268,6 +5893,10 @@ if(idx)
 static void
 menu_open_hierarchy_2(gpointer null_data, guint callback_action, GtkWidget *widget, int typ)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 Trptr t;
 int fix=0;
 struct tree *t_forced = NULL;
@@ -5425,6 +6054,10 @@ if(((typ == FST_MT_SOURCESTEM) || (typ == FST_MT_SOURCEISTEM)) && t_forced)
 static void
 menu_open_hierarchy_2a(gpointer null_data, guint callback_action, GtkWidget *widget, int typ)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
 	if((typ == FST_MT_SOURCESTEM) || (typ == FST_MT_SOURCEISTEM))
@@ -5552,6 +6185,10 @@ static void dataformat(int mask, int patch)
 void
 menu_dataformat_ascii(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-ASCII");
@@ -5569,6 +6206,10 @@ dataformat( ~(TR_NUMMASK|TR_ANALOGMASK), TR_ASCII );
 void
 menu_dataformat_real(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-BitsToReal");
@@ -5587,6 +6228,10 @@ dataformat( ~(TR_NUMMASK|TR_ANALOGMASK), TR_REAL );
 void
 menu_dataformat_real2bon(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-RealToBits On");
@@ -5607,6 +6252,10 @@ dataformat( ~(TR_REAL2BITS|TR_NUMMASK|TR_ANALOGMASK), TR_REAL2BITS|TR_HEX );
 void
 menu_dataformat_real2boff(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-RealToBits Off");
@@ -5623,6 +6272,10 @@ dataformat( ~(TR_REAL2BITS|TR_ANALOGMASK), 0 );
 void
 menu_dataformat_hex(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Hex");
@@ -5640,6 +6293,10 @@ dataformat( ~(TR_NUMMASK|TR_ANALOGMASK), TR_HEX );
 void
 menu_dataformat_dec(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Decimal");
@@ -5657,6 +6314,10 @@ dataformat( ~(TR_NUMMASK|TR_ANALOGMASK), TR_DEC );
 void
 menu_dataformat_signed(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Signed");
@@ -5674,6 +6335,10 @@ dataformat( ~(TR_NUMMASK|TR_ANALOGMASK), TR_SIGNED );
 void
 menu_dataformat_bin(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Binary");
@@ -5691,6 +6356,10 @@ dataformat( ~(TR_NUMMASK|TR_ANALOGMASK), TR_BIN );
 void
 menu_dataformat_oct(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Octal");
@@ -5708,6 +6377,10 @@ dataformat( ~(TR_NUMMASK|TR_ANALOGMASK), TR_OCT );
 void
 menu_dataformat_rjustify_on(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Right Justify-On");
@@ -5725,6 +6398,10 @@ dataformat( ~(TR_RJUSTIFY), TR_RJUSTIFY );
 void
 menu_dataformat_rjustify_off(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Right Justify-Off");
@@ -5742,6 +6419,10 @@ dataformat( ~(TR_RJUSTIFY), 0 );
 void
 menu_dataformat_bingray_on(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Gray Filters-To Gray");
@@ -5760,6 +6441,10 @@ dataformat( ~(TR_GRAYMASK|TR_ANALOGMASK), TR_BINGRAY );
 void
 menu_dataformat_graybin_on(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Gray Filters-From Gray");
@@ -5779,6 +6464,10 @@ dataformat( ~(TR_GRAYMASK|TR_ANALOGMASK), TR_GRAYBIN );
 void
 menu_dataformat_nogray(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Gray Filters-None");
@@ -5796,6 +6485,10 @@ dataformat( ~(TR_GRAYMASK|TR_ANALOGMASK), 0 );
 void
 menu_dataformat_popcnt_on(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Popcnt-On");
@@ -5814,6 +6507,10 @@ dataformat( ~(TR_POPCNT), TR_POPCNT );
 void
 menu_dataformat_popcnt_off(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Popcnt-Off");
@@ -5831,6 +6528,10 @@ dataformat( ~(TR_POPCNT), 0 );
 void
 menu_dataformat_invert_on(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Invert-On");
@@ -5848,6 +6549,10 @@ dataformat( ~(TR_INVERT), TR_INVERT );
 void
 menu_dataformat_invert_off(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Invert-Off");
@@ -5865,6 +6570,10 @@ dataformat( ~(TR_INVERT), 0 );
 void
 menu_dataformat_reverse_on(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Reverse Bits-On");
@@ -5882,6 +6591,10 @@ dataformat( ~(TR_REVERSE), TR_REVERSE );
 void
 menu_dataformat_reverse_off(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Reverse Bits-Off");
@@ -5899,6 +6612,10 @@ dataformat( ~(TR_REVERSE), 0 );
 void
 menu_dataformat_exclude_on(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nExclude");
@@ -5915,6 +6632,10 @@ dataformat( ~(TR_EXCLUDE), TR_EXCLUDE );
 void
 menu_dataformat_exclude_off(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nShow");
@@ -5932,6 +6653,10 @@ dataformat( ~(TR_EXCLUDE), 0 );
 void
 menu_dataformat_rangefill_zero(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Range Fill With 0s");
@@ -5950,6 +6675,10 @@ dataformat( ~(TR_ZEROFILL|TR_ONEFILL|TR_ANALOGMASK), TR_ZEROFILL );
 void
 menu_dataformat_rangefill_one(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Range Fill With 1s");
@@ -5970,6 +6699,10 @@ dataformat( ~(TR_ZEROFILL|TR_ONEFILL|TR_ANALOGMASK), TR_ONEFILL );
 void
 menu_dataformat_rangefill_off(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nData Format-Zero Range Fill Off");
@@ -5986,6 +6719,10 @@ dataformat( ~(TR_ZEROFILL|TR_ONEFILL|TR_ANALOGMASK), 0 );
 void
 menu_dataformat_analog_off(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nAnalog Off");
@@ -6002,6 +6739,10 @@ dataformat( ~(TR_ANALOGMASK), 0 );
 void
 menu_dataformat_analog_step(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nAnalog Step");
@@ -6018,6 +6759,10 @@ dataformat( ~(TR_ANALOGMASK), TR_ANALOG_STEP );
 void
 menu_dataformat_analog_interpol(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nAnalog Interpolate");
@@ -6034,6 +6779,10 @@ dataformat( ~(TR_ANALOGMASK), TR_ANALOG_INTERPOLATED );
 void
 menu_dataformat_analog_interpol_step(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nAnalog Interpolate Annotated");
@@ -6051,6 +6800,10 @@ dataformat( ~(TR_ANALOGMASK), (TR_ANALOG_INTERPOLATED|TR_ANALOG_STEP) );
 void
 menu_dataformat_analog_resize_screen(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nAnalog Resizing Screen Data");
@@ -6068,6 +6821,10 @@ dataformat( ~(TR_ANALOG_FULLSCALE), 0 );
 void
 menu_dataformat_analog_resize_all(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nAnalog Resizing All Data");
@@ -6085,6 +6842,10 @@ dataformat( ~(TR_ANALOG_FULLSCALE), (TR_ANALOG_FULLSCALE) );
 /**/
 void menu_dataformat_highlight_all(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 Trptr t;
 
 if(GLOBALS->helpbox_is_active)
@@ -6112,6 +6873,10 @@ if((t=GLOBALS->traces.first))
 
 void menu_dataformat_unhighlight_all(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 Trptr t;
 
 if(GLOBALS->helpbox_is_active)
@@ -6139,6 +6904,10 @@ if((t=GLOBALS->traces.first))
 
 void menu_lexize(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nSigsort All");
@@ -6162,6 +6931,10 @@ if(GLOBALS->traces.first)
 /**/
 void menu_alphabetize(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nAlphabetize All");
@@ -6185,6 +6958,10 @@ if(GLOBALS->traces.first)
 /**/
 void menu_alphabetize2(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nAlphabetize All (CaseIns)");
@@ -6208,6 +6985,10 @@ if(GLOBALS->traces.first)
 /**/
 void menu_reverse(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nReverse All");
@@ -6232,6 +7013,10 @@ if(GLOBALS->traces.first)
 void
 menu_cut_traces(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 Trptr cutbuffer = NULL;
 
 if(GLOBALS->helpbox_is_active)
@@ -6272,6 +7057,10 @@ if(cutbuffer)
 void
 menu_copy_traces(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 Trptr t = GLOBALS->traces.first;
 gboolean highlighted = FALSE;
 
@@ -6320,6 +7109,10 @@ if(!highlighted)
 void
 menu_paste_traces(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nPaste");
@@ -6361,6 +7154,10 @@ if(PasteBuffer())
 /**/
 void menu_center_zooms(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nCenter Zooms");
@@ -6392,6 +7189,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 
 void menu_show_base(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nShow Base Symbols");
@@ -6425,6 +7226,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 /**/
 void menu_show_grid(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nShow Grid");
@@ -6455,6 +7260,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 /**/
 void menu_show_wave_highlight(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nShow Wave Highlight");
@@ -6485,6 +7294,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(GLOBALS->item_factory_menu_c_1,
 /**/
 void menu_show_mouseover(gpointer null_data, guint callback_action, GtkWidget *widget)
 {
+(void)null_data;
+(void)callback_action;
+(void)widget;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nShow Mouseover");
@@ -7117,6 +7930,9 @@ void menu_set_sensitive(void)
  */
 int file_quit_cmd_callback (GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 if(!GLOBALS->enable_fast_exit)
 	{
 	simplereqbox("Quit Program",300,"Do you really want to quit?","Yes", "No", GTK_SIGNAL_FUNC(menu_quit_callback), 1);
@@ -7139,7 +7955,7 @@ return(TRUE); /* keeps "delete_event" from happening...we'll manually destory la
  */
 int execute_script(char *name, int dealloc_name)
 {
-int i;
+unsigned int i;
 int nlen = strlen(name);
 
 if(GLOBALS->tcl_running)
@@ -7349,6 +8165,8 @@ static gtkwave_mlist_t popmenu_items[] =
 
 void do_popup_menu (GtkWidget *my_widget, GdkEventButton *event)
 {
+(void)my_widget;
+
   GtkWidget *menu;
   int button, event_time;
 
@@ -7416,6 +8234,8 @@ static gtkwave_mlist_t sst_popmenu_items[] =
 
 void do_sst_popup_menu (GtkWidget *my_widget, GdkEventButton *event)
 {
+(void)my_widget;
+
   GtkWidget *menu;
   int button, event_time;
 
@@ -7619,7 +8439,6 @@ static GtkWidget *alt_menu_walk(gtkwave_mlist_t *mi, GtkWidget **wlist, struct m
 {
 struct menu_item_t *ptr = lst;
 struct menu_item_t *optr;
-int i;
 GtkWidget *menu;
 GtkWidget *menuitem;
 
diff --git a/src/pagebuttons.c b/src/pagebuttons.c
index 129c86d..02de5ee 100644
--- a/src/pagebuttons.c
+++ b/src/pagebuttons.c
@@ -17,6 +17,9 @@
 void
 service_left_page(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
   TimeType ntinc, ntfrac;
 
   if(GLOBALS->helpbox_is_active)
@@ -34,12 +37,12 @@ service_left_page(GtkWidget *text, gpointer data)
 
   ntinc=(TimeType)(((gdouble)GLOBALS->wavewidth)*GLOBALS->nspx);	/* really don't need this var but the speed of ui code is human dependent.. */
   ntfrac=ntinc*GLOBALS->page_divisor;
-  if((ntfrac<1)||(ntinc<1))
+  if((ntfrac<1)||(ntinc<1))
     ntfrac= /*ntinc=*/ 1; /* scan-build */
 
-  if((GLOBALS->tims.start-ntfrac)>GLOBALS->tims.first)
+  if((GLOBALS->tims.start-ntfrac)>GLOBALS->tims.first)
     GLOBALS->tims.timecache=GLOBALS->tims.start-ntfrac;
-  else
+  else
     GLOBALS->tims.timecache=GLOBALS->tims.first;
 
   GTK_ADJUSTMENT(GLOBALS->wave_hslider)->value=GLOBALS->tims.timecache;
@@ -51,6 +54,9 @@ service_left_page(GtkWidget *text, gpointer data)
 void
 service_right_page(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
   TimeType ntinc, ntfrac;
 
   if(GLOBALS->helpbox_is_active)
@@ -68,8 +74,8 @@ service_right_page(GtkWidget *text, gpointer data)
 
   ntinc=(TimeType)(((gdouble)GLOBALS->wavewidth)*GLOBALS->nspx);
   ntfrac=ntinc*GLOBALS->page_divisor;
-
-  if((ntfrac<1)||(ntinc<1))
+
+  if((ntfrac<1)||(ntinc<1))
     ntfrac=ntinc=1;
 
   if((GLOBALS->tims.start+ntfrac)<(GLOBALS->tims.last-ntinc+1))
@@ -79,7 +85,7 @@ service_right_page(GtkWidget *text, gpointer data)
         else
 	{
 	GLOBALS->tims.timecache=GLOBALS->tims.last-ntinc+1;
-    if(GLOBALS->tims.timecache<GLOBALS->tims.first)
+    if(GLOBALS->tims.timecache<GLOBALS->tims.first)
       GLOBALS->tims.timecache=GLOBALS->tims.first;
 	}
 
diff --git a/src/print.c b/src/print.c
index 47cdf9f..90f031b 100644
--- a/src/print.c
+++ b/src/print.c
@@ -1173,9 +1173,8 @@ pr_render_individual_named_marker ( pr_context * prc, int i, gdouble gray, int b
 	      xl = ((gdouble) (t - GLOBALS->tims.start)) / pixstep;	/* snap to integer */
 	      if ((xl >= 0) && (xl < GLOBALS->wavewidth))
 		{
-		  char nbuff[2];
-		  nbuff[0] = 'A' + i;
-		  nbuff[1] = 0x00;
+		  char nbuff[16];
+		  make_bijective_marker_id_string(nbuff, i);
 
 		  pr_setgray (prc, gray);
 		  for (y = GLOBALS->fontheight - 1;
@@ -1227,7 +1226,7 @@ pr_draw_named_markers (pr_context * prc)
 {
 int i;
 
-for(i=0;i<26;i++)
+for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
         {
         if(i != GLOBALS->named_marker_lock_idx)
                 {
diff --git a/src/ptranslate.c b/src/ptranslate.c
index 1187616..f8c29be 100644
--- a/src/ptranslate.c
+++ b/src/ptranslate.c
@@ -37,7 +37,7 @@ for(i=0;i<PROC_FILTER_MAX+1;i++)
 void remove_all_proc_filters(void)
 {
 struct Global *GLOBALS_cache = GLOBALS;
-int i, j;
+unsigned int i, j;
 
 for(j=0;j<GLOBALS->num_notebook_pages;j++)
 	{
@@ -208,6 +208,9 @@ return(found);
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 GLOBALS->is_active_ptranslate_c_2=0;
 gtk_widget_destroy(GLOBALS->window_ptranslate_c_5);
 GLOBALS->window_ptranslate_c_5 = NULL;
@@ -222,18 +225,33 @@ destroy_callback(widget, nothing);
 static void select_row_callback(GtkWidget *widget, gint row, gint column,
 	GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)row;
+(void)column;
+(void)event;
+(void)data;
+
 GLOBALS->current_filter_ptranslate_c_1 = row + 1;
 }
 
 static void unselect_row_callback(GtkWidget *widget, gint row, gint column,
 	GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)row;
+(void)column;
+(void)event;
+(void)data;
+
 GLOBALS->current_filter_ptranslate_c_1 = 0; /* none */
 }
 
 
 static void add_filter_callback_2(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 int i;
 GtkCList *cl;
 
@@ -280,6 +298,9 @@ if(GLOBALS->is_active_ptranslate_c_2) gdk_window_raise(GLOBALS->window_ptranslat
 
 static void add_filter_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 if(GLOBALS->num_proc_filters == PROC_FILTER_MAX)
 	{
 	status_text("Max number of process filters installed already.\n");
diff --git a/src/renderopt.c b/src/renderopt.c
index 17ef18d..d83f85d 100644
--- a/src/renderopt.c
+++ b/src/renderopt.c
@@ -37,6 +37,8 @@ static gdouble py[]={ 8.50,  8.26,  8.50, 6.57, 5.84};
  */
 static void render_clicked(GtkWidget *widget, gpointer which)
 {
+(void)widget;
+
 int i;
 
 for(i=0;i<4;i++) GLOBALS->target_mutex_renderopt_c_1[i]=0;
@@ -49,6 +51,8 @@ DEBUG(printf("picked: %s\n", render_targets[i]));
 
 static void pagesize_clicked(GtkWidget *widget, gpointer which)
 {
+(void)widget;
+
 int i;
 
 for(i=0;i<5;i++) GLOBALS->page_mutex_renderopt_c_1[i]=0;
@@ -61,6 +65,8 @@ DEBUG(printf("picked: %s\n", page_size[GLOBALS->page_size_type_renderopt_c_1]));
 
 static void rendertype_clicked(GtkWidget *widget, gpointer which)
 {
+(void)widget;
+
 int i;
 
 for(i=0;i<3;i++) GLOBALS->render_mutex_renderopt_c_1[i]=0;
@@ -75,6 +81,9 @@ DEBUG(printf("picked: %s\n", render_type[i]));
 static void
 ps_print_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 FILE *wave;
 
 if(GLOBALS->filesel_ok)
@@ -98,6 +107,9 @@ if(GLOBALS->filesel_ok)
 static void
 pdf_print_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 FILE *wave;
 FILE *wave2;
 
@@ -170,6 +182,9 @@ if(GLOBALS->filesel_ok)
 static void
 mif_print_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 FILE *wave;
 
 if(GLOBALS->filesel_ok)
@@ -194,6 +209,9 @@ if(GLOBALS->filesel_ok)
 #ifdef WAVE_GTK_UNIX_PRINT
 static void wave_GtkPrintJobCompleteFunc(GtkPrintJob *print_job, gpointer user_data, GError *error)
 {
+(void)print_job;
+(void)error;
+
 if(user_data)
 	{
 	const char *ban = "Sent print job";
@@ -210,6 +228,9 @@ if(user_data)
 static void
 unix_print_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 #ifdef WAVE_GTK_UNIX_PRINT
 GtkWidget *ropt = gtk_print_unix_dialog_new("GTK Print UNIX Options", GTK_WINDOW(GLOBALS->mainwindow));
 gint gd_rc;
@@ -326,6 +347,9 @@ else
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   GLOBALS->is_active_renderopt_c_3=0;
   gtk_widget_destroy(GLOBALS->window_renderopt_c_6);
   GLOBALS->window_renderopt_c_6 = NULL;
diff --git a/src/savefile.c b/src/savefile.c
index 7f3e0e2..a6fed4f 100644
--- a/src/savefile.c
+++ b/src/savefile.c
@@ -187,18 +187,28 @@ void write_save_helper(const char *savnam, FILE *wave) {
 
 	fprintf(wave,"*%f "TTFormat, (float)(GLOBALS->tims.zoom),GLOBALS->tims.marker);
 
-	for(i=0;i<26;i++)
+	for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 		{
 		TimeType nm = GLOBALS->named_markers[i]; /* gcc compiler problem...thinks this is a 'long int' in printf format warning reporting */
 		fprintf(wave," "TTFormat,nm);
 		}
 	fprintf(wave,"\n");
 
-	for(i=0;i<26;i++)
+	for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 		{
 		if(GLOBALS->marker_names[i])
 			{
-			fprintf(wave, "[markername] %c%s\n", 'A'+i, GLOBALS->marker_names[i]);
+			char mbuf[16];
+
+			make_bijective_marker_id_string(mbuf, i);
+			if(strlen(mbuf)<2)
+				{
+				fprintf(wave, "[markername] %s%s\n", mbuf, GLOBALS->marker_names[i]);
+				}
+				else
+				{
+				fprintf(wave, "[markername_long] %s %s\n", mbuf, GLOBALS->marker_names[i]);
+				}
 			}
 		}
 
@@ -1067,7 +1077,7 @@ if(*w2=='*')
 			{
 			case 1:  GLOBALS->tims.marker=ttlocal; break;
 			default:
-				if((which-2)<26) GLOBALS->named_markers[which-2]=ttlocal;
+				if((which-2)<WAVE_NUM_NAMED_MARKERS) GLOBALS->named_markers[which-2]=ttlocal;
 				break;
 			}
 		}
@@ -1622,7 +1632,7 @@ else if (*w2 == '[')
 	if(*pnt)
 		{
 		which = (*pnt) - 'A';
-		if((which >=0) && (which <= 25))
+		if((which >=0) && (which < WAVE_NUM_NAMED_MARKERS))
 			{
 			pnt++;
 
@@ -1634,6 +1644,34 @@ else if (*w2 == '[')
 			}
 		}
 	}
+    else if (strcmp (w2, "markername_long") == 0)
+	{
+	char *pnt = w;
+	int which;
+
+	if((*pnt) && (isspace((int)(unsigned char)*pnt))) pnt++;
+
+	if(*pnt)
+		{
+		char *pnt2 = strchr(pnt, ' ');
+		if(pnt2)
+			{
+			*pnt2 = 0;
+			which = bijective_marker_id_string_hash(pnt);
+			if((which >=0) && (which < WAVE_NUM_NAMED_MARKERS))
+				{
+				pnt = pnt2 + 1;
+				if((*pnt) && (isspace((int)(unsigned char)*pnt))) pnt++;
+	
+				if(*pnt)
+					{
+					if(GLOBALS->marker_names[which]) free_2(GLOBALS->marker_names[which]);
+					GLOBALS->marker_names[which] = strdup_2(pnt);
+					}
+				}
+			}
+		}
+	}
     else if (strcmp (w2, "dumpfile") == 0)
 	{
         /* nothing here currently...only finder/DnD processes these externally */
@@ -1724,6 +1762,8 @@ return(0);
  */
 int maketraces_lx2(char *str, char *alias, int quick_return)
 {
+(void)alias;
+
 char *pnt, *wild;
 char ch, wild_active=0;
 int len;
@@ -2598,6 +2638,8 @@ return(FALSE);
  */
 gboolean deal_with_rpc_open_2(const gchar *path, gpointer user_data, gboolean is_save_file_only)
 {
+(void)user_data;
+
 const char *suffixes[] =
 {
  ".vcd", ".evcd", ".dump",
@@ -2676,6 +2718,9 @@ return(deal_with_rpc_open_2(path, user_data, FALSE));
  */
 gboolean deal_with_termination(GtkOSXApplication *app, gpointer user_data)
 {
+(void)app;
+(void)user_data;
+
 gboolean do_not_terminate = FALSE; /* future expansion */
 
 if(do_not_terminate)
@@ -2693,6 +2738,8 @@ return(do_not_terminate);
  */
 gboolean deal_with_finder_open(GtkOSXApplication *app, gchar *path, gpointer user_data)
 {
+(void)app;
+
 return(deal_with_rpc_open(path, user_data));
 }
 
@@ -2701,7 +2748,7 @@ return(deal_with_rpc_open(path, user_data));
 
 int suffix_check(const char *s, const char *sfx)
 {
-int sfxlen = strlen(sfx);
+unsigned int sfxlen = strlen(sfx);
 return((strlen(s)>=sfxlen)&&(!strcasecmp(s+strlen(s)-sfxlen,sfx)));
 }
 
diff --git a/src/search.c b/src/search.c
index 0d2032f..5e7c331 100644
--- a/src/search.c
+++ b/src/search.c
@@ -82,6 +82,9 @@ return(GLOBALS->is_active_search_c_4);
 
 static void enter_callback_e(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   G_CONST_RETURN gchar *entry_text;
   int len;
   char *vname="<Vector>";
@@ -101,6 +104,9 @@ static void enter_callback_e(GtkWidget *widget, GtkWidget *nothing)
 
 static void destroy_callback_e(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 DEBUG(printf("Entry Cancel\n"));
 GLOBALS->entrybox_text_local_search_c_2=NULL;
 wave_gtk_grab_remove(GLOBALS->window1_search_c_2);
@@ -169,6 +175,8 @@ static char *regex_name[]={"WRange", "WStrand", "Range", "Strand", "None"};
 
 static void regex_clicked(GtkWidget *widget, gpointer which)
 {
+(void)widget;
+
 int i;
 
 for(i=0;i<5;i++) GLOBALS->regex_mutex_search_c_1[i]=0;
@@ -189,6 +197,9 @@ DEBUG(printf("picked: %s\n", regex_name[GLOBALS->regex_which_search_c_1]));
 static void
 bundle_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 if(GLOBALS->entrybox_text_local_search_c_2)
 	{
 	char *efix;
@@ -226,6 +237,9 @@ if(GLOBALS->selected_rows_search_c_2>0)
 static void
 bundle_callback_up(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 GLOBALS->bundle_direction_search_c_2=0;
 bundle_callback_generic();
 }
@@ -233,12 +247,17 @@ bundle_callback_generic();
 static void
 bundle_callback_down(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 GLOBALS->bundle_direction_search_c_2=1;
 bundle_callback_generic();
 }
 
 static void insert_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 search_insert_callback(widget, 0);	/* native to search */
 }
 
@@ -391,6 +410,8 @@ GLOBALS->is_insert_running_search_c_1=0;
 
 static void replace_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 Traces tcache;
 int i;
 Trptr tfirst, tlast;
@@ -576,6 +597,8 @@ GLOBALS->is_replace_running_search_c_1=0;
 
 static void ok_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 int i;
 struct symchain *symc, *symc_current;
 
@@ -700,6 +723,11 @@ GLOBALS->is_append_running_search_c_1=0;
 static void select_row_callback(GtkWidget *widget, gint row, gint column,
 	GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)column;
+(void)event;
+(void)data;
+
 struct symbol *s;
 
 s=(struct symbol *)gtk_clist_get_row_data(GTK_CLIST(GLOBALS->clist_search_c_3), row);
@@ -711,6 +739,11 @@ GLOBALS->selected_rows_search_c_2++;
 static void unselect_row_callback(GtkWidget *widget, gint row, gint column,
 	GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)column;
+(void)event;
+(void)data;
+
 struct symbol *s;
 
 s=(struct symbol *)gtk_clist_get_row_data(GTK_CLIST(GLOBALS->clist_search_c_3), row);
@@ -867,6 +900,9 @@ if(GLOBALS->num_rows_search_c_2>=WAVE_MAX_CLIST_LENGTH)
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 if((!GLOBALS->is_insert_running_search_c_1)&&(!GLOBALS->is_replace_running_search_c_1)&&(!GLOBALS->is_append_running_search_c_1)&&(!GLOBALS->is_searching_running_search_c_1))
 	{
   	GLOBALS->is_active_search_c_4=0;
@@ -879,11 +915,17 @@ if((!GLOBALS->is_insert_running_search_c_1)&&(!GLOBALS->is_replace_running_searc
 
 static void select_all_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 gtk_clist_select_all(GTK_CLIST(GLOBALS->clist_search_c_3));
 }
 
 static void unselect_all_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 gtk_clist_unselect_all(GTK_CLIST(GLOBALS->clist_search_c_3));
 }
 
diff --git a/src/shiftbuttons.c b/src/shiftbuttons.c
index e3a7e8f..e48ab18 100644
--- a/src/shiftbuttons.c
+++ b/src/shiftbuttons.c
@@ -16,6 +16,9 @@
 void
 service_left_shift(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 GtkAdjustment *hadj;
 gfloat inc;
 TimeType ntinc;
@@ -52,6 +55,9 @@ DEBUG(printf("Left Shift\n"));
 void
 service_right_shift(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 GtkAdjustment *hadj;
 gfloat inc;
 TimeType ntinc, pageinc;
diff --git a/src/showchange.c b/src/showchange.c
index f6bec61..b3422ba 100644
--- a/src/showchange.c
+++ b/src/showchange.c
@@ -33,23 +33,34 @@ if(GTK_TOGGLE_BUTTON(widget)->active)
 
 static void toggle1_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 toggle_generic(widget, TR_RJUSTIFY);
 }
 static void toggle2_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 toggle_generic(widget, TR_INVERT);
 }
 static void toggle3_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 toggle_generic(widget, TR_REVERSE);
 }
 static void toggle4_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 toggle_generic(widget, TR_EXCLUDE);
 }
 
 static void enter_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   GLOBALS->flags_showchange_c_1=GLOBALS->flags_showchange_c_1&(~(TR_HIGHLIGHT|TR_NUMMASK));
 
   if(GTK_TOGGLE_BUTTON(GLOBALS->button1_showchange_c_1)->active)
@@ -94,6 +105,9 @@ static void enter_callback(GtkWidget *widget, GtkWidget *nothing)
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   wave_gtk_grab_remove(GLOBALS->window_showchange_c_8);
   gtk_widget_destroy(GLOBALS->window_showchange_c_8);
   GLOBALS->window_showchange_c_8 = NULL;
diff --git a/src/signalwindow.c b/src/signalwindow.c
index b52ade2..339f9f9 100644
--- a/src/signalwindow.c
+++ b/src/signalwindow.c
@@ -30,6 +30,9 @@ status_text("Can't perform that operation when waveform drag and drop is in prog
 static void
 service_hslider(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 GtkAdjustment *hadj;
 gint xsrc;
 
@@ -82,6 +85,9 @@ static void DNDBeginCB(
         GtkWidget *widget, GdkDragContext *dc, gpointer data
 )
 {
+(void)widget;
+(void)dc;
+(void)data;
 
 GLOBALS->dnd_state = 1;
 }
@@ -95,6 +101,10 @@ static void DNDEndCB(
         GtkWidget *widget, GdkDragContext *dc, gpointer data
 )
 {
+(void)widget;
+(void)dc;
+(void)data;
+
 GtkWidget *ddest;
 int which;
 gdouble x,y;
@@ -216,6 +226,10 @@ static gboolean DNDDragMotionCB(
         gpointer data
 )
 {
+(void)xx;
+(void)yy;
+(void)data;
+
 	gboolean same_widget;
 	GdkDragAction suggested_action;
 	GtkWidget *src_widget, *tar_widget;
@@ -413,6 +427,9 @@ if(!GLOBALS || !GLOBALS->filter_entry || !event)
  */
 static gint keypress_local(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
+(void)widget;
+(void)data;
+
 GtkAdjustment *wadj;
 int num_traces_displayable;
 int target;
@@ -709,6 +726,8 @@ return(TRUE);
 
 static gboolean mouseover_timer(gpointer dummy)
 {
+(void)dummy;
+
 static gboolean run_once = FALSE;
 gdouble x,y;
 GdkModifierType state;
@@ -1010,6 +1029,8 @@ return(TRUE);
 
 static gint motion_notify_event_std(GtkWidget *widget, GdkEventMotion *event)
 {
+(void)widget;
+
 gdouble x,y;
 GdkModifierType state;
 
@@ -1041,6 +1062,9 @@ return(TRUE);
 
 static gint button_release_event_std(GtkWidget *widget, GdkEventButton *event)
 {
+(void)widget;
+(void)event;
+
 if(GLOBALS->std_collapse_pressed)
 	{
 	GLOBALS->std_collapse_pressed = 0;
@@ -1269,6 +1293,8 @@ return(TRUE);
 
 gint signalarea_configure_event(GtkWidget *widget, GdkEventConfigure *event)
 {
+(void)event;
+
 GtkAdjustment *wadj, *hadj;
 int num_traces_displayable;
 int width;
@@ -1502,7 +1528,12 @@ return(rc);
 static int focus_in_local(GtkWidget *widget, GdkEventFocus *event)
 {
 #ifdef FOCUS_DEBUG_MSGS
+(void)event;
+
 printf("Focus in: %08x %08x\n", widget, GLOBALS->signalarea_event_box);
+#else
+(void)widget;
+(void)event;
 #endif
 
 GLOBALS->signalarea_has_focus = TRUE;
@@ -1515,7 +1546,12 @@ return(FALSE);
 static int focus_out_local(GtkWidget *widget, GdkEventFocus *event)
 {
 #ifdef FOCUS_DEBUG_MSGS
+(void)event;
+
 printf("Focus out: %08x\n", widget);
+#else
+(void)widget;
+(void)event;
 #endif
 
 GLOBALS->signalarea_has_focus = FALSE;
diff --git a/src/simplereq.c b/src/simplereq.c
index e61b4ef..12851b5 100644
--- a/src/simplereq.c
+++ b/src/simplereq.c
@@ -23,6 +23,9 @@
 
 static void ok_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   DEBUG(printf("OK\n"));
   wave_gtk_grab_remove(GLOBALS->window_simplereq_c_9);
   gtk_widget_destroy(GLOBALS->window_simplereq_c_9);
@@ -32,6 +35,9 @@ static void ok_callback(GtkWidget *widget, GtkWidget *nothing)
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   DEBUG(printf("Cancel\n"));
   wave_gtk_grab_remove(GLOBALS->window_simplereq_c_9);
   gtk_widget_destroy(GLOBALS->window_simplereq_c_9);
@@ -48,6 +54,8 @@ void simplereqbox(char *title, int width, char *default_text,
     GtkWidget *button1, *button2;
     GtkWidget *label, *separator;
     GtkWidget *pixmapwid1;
+#else
+(void)width;
 #endif
 
     if(GLOBALS->window_simplereq_c_9) return; /* only should happen with GtkPlug */
diff --git a/src/splash.c b/src/splash.c
index 875f6c7..cb0e7cf 100644
--- a/src/splash.c
+++ b/src/splash.c
@@ -690,6 +690,9 @@ return(FALSE);
 
 gint splash_button_press_event(GtkWidget *widget, GdkEventExpose *event)
 {
+(void)widget;
+(void)event;
+
 if(GLOBALS->timeout_tag) { gtk_timeout_remove(GLOBALS->timeout_tag); GLOBALS->timeout_tag = 0; }
 
 if(GLOBALS->wave_splash_pixmap)
@@ -713,6 +716,8 @@ return(FALSE);
 
 gint splash_kill(gpointer dummy)
 {
+(void)dummy;
+
 gulong usec;
 if(GLOBALS && GLOBALS->gt_splash_c_1)
 	{
diff --git a/src/status.c b/src/status.c
index 0cf5ab1..df2b5fe 100644
--- a/src/status.c
+++ b/src/status.c
@@ -56,6 +56,9 @@ if(!GLOBALS->quiet_checkmenu) /* when gtkwave_mlist_t check menuitems are being
 void
 realize_text (GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 char buf[128];
 
 if(GLOBALS->is_vcd)
diff --git a/src/strace.c b/src/strace.c
index 592b213..571e6ef 100644
--- a/src/strace.c
+++ b/src/strace.c
@@ -213,7 +213,7 @@ static void start_clicked(GtkWidget *widget, gpointer which)
 GET_WV_STRACE_CURWIN(widget);
 
 GLOBALS->strace_ctx->mark_idx_start=((struct item_mark_string*)which)->idx;
-if (GLOBALS->strace_ctx->mark_idx_start<0 || GLOBALS->strace_ctx->mark_idx_start>=(sizeof(item_mark_start_strings)/sizeof(struct item_mark_string)))
+if (GLOBALS->strace_ctx->mark_idx_start<0 || GLOBALS->strace_ctx->mark_idx_start>=(int)(sizeof(item_mark_start_strings)/sizeof(struct item_mark_string)))
 	{
 	fprintf(stderr, "Internal error: GLOBALS->mark_idx_start out of range %d\n", GLOBALS->strace_ctx->mark_idx_start);
 	exit(255);
@@ -226,7 +226,7 @@ static void end_clicked(GtkWidget *widget, gpointer which)
 GET_WV_STRACE_CURWIN(widget);
 
 GLOBALS->strace_ctx->mark_idx_end=((struct item_mark_string*)which)->idx;
-if (GLOBALS->strace_ctx->mark_idx_end<0 || GLOBALS->strace_ctx->mark_idx_end>=(sizeof(item_mark_end_strings)/sizeof(struct item_mark_string)))
+if (GLOBALS->strace_ctx->mark_idx_end<0 || GLOBALS->strace_ctx->mark_idx_end>=(int)(sizeof(item_mark_end_strings)/sizeof(struct item_mark_string)))
 	{
 	fprintf(stderr, "Internal error: GLOBALS->mark_idx_end out of range %d\n",GLOBALS->strace_ctx->mark_idx_end);
 	exit(255);
@@ -265,6 +265,8 @@ for(i=0;i<len;i++)
 
 static void forwards_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 GET_WV_STRACE_CURWIN(widget);
 
 /* no cleanup necessary, but do real search */
@@ -274,6 +276,8 @@ strace_search(STRACE_FORWARD);
 
 static void backwards_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 GET_WV_STRACE_CURWIN(widget);
 
 /* no cleanup necessary, but do real search */
@@ -283,6 +287,8 @@ strace_search(STRACE_BACKWARD);
 
 static void mark_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 GET_WV_STRACE_CURWIN(widget);
 
 DEBUG(printf("Marking..\n"));
@@ -301,6 +307,8 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 
 static void clear_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
 GET_WV_STRACE_CURWIN(widget);
 
 DEBUG(printf("Clearing..\n"));
@@ -317,6 +325,8 @@ wavearea_configure_event(GLOBALS->wavearea, NULL);
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
   GET_WV_STRACE_CURWIN(widget);
 
   free_straces();
@@ -496,7 +506,7 @@ void tracesearchbox(const char *title, GtkSignalFunc func, gpointer data)
 
     do		/* add GUI elements for displaying mark count and mark count start/end */
 	{
-	int idx;
+	unsigned int idx;
 	GtkWidget *ptr_mark_start_label, *ptr_mark_end_label;
 	GtkWidget *mark_count_hbox_start,  *mark_count_hbox_end;
 	GtkWidget *count_vbox_left, *count_vbox_right, *count_vbox, *count_hbox;
diff --git a/src/symbol.c b/src/symbol.c
index 81ea462..3e2c7f8 100644
--- a/src/symbol.c
+++ b/src/symbol.c
@@ -146,6 +146,8 @@ for(p=s;*p;p++)
 
 h^=h2;						/* combine the two hashes */
 GLOBALS->hashcache=h%SYMPRIME;
+#else
+(void)s;
 #endif
 return(GLOBALS->hashcache);
 }
@@ -160,6 +162,7 @@ struct symbol *symadd(char *name, int hv)
 struct symbol *s=(struct symbol *)calloc_2(1,sizeof(struct symbol));
 
 #ifdef _WAVE_HAVE_JUDY
+(void)hv;
 
 PPvoid_t PPValue = JudySLIns(&GLOBALS->sym_judy, (uint8_t *)name, PJE0);
 *((struct symbol **)PPValue) = s;
@@ -179,6 +182,7 @@ struct symbol *symadd_name_exists(char *name, int hv)
 struct symbol *s=(struct symbol *)calloc_2(1,sizeof(struct symbol));
 
 #ifdef _WAVE_HAVE_JUDY
+(void)hv;
 
 PPvoid_t PPValue = JudySLIns(&GLOBALS->sym_judy, (uint8_t *)name, PJE0);
 *((struct symbol **)PPValue) = s;
diff --git a/src/tcl_commands.c b/src/tcl_commands.c
index 158fe32..bffceca 100644
--- a/src/tcl_commands.c
+++ b/src/tcl_commands.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) Tony Bybell 2008-2012.
+ * Copyright (c) Tony Bybell 2008-2014.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -54,6 +54,8 @@
 
 static int gtkwavetcl_badNumArgs(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], int expected)
 {
+(void)clientData;
+
 Tcl_Obj *aobj;
 char reportString[1024];
 
@@ -66,6 +68,11 @@ return(TCL_ERROR);
 
 static int gtkwavetcl_nop(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
 {
+(void)clientData;
+(void)interp;
+(void)objc;
+(void)objv;
+
 /* nothing, this is simply to call gtk's main loop */
 gtkwave_main_iteration();
 return(TCL_OK);
@@ -73,6 +80,10 @@ return(TCL_OK);
 
 static int gtkwavetcl_printInteger(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], int intVal)
 {
+(void)clientData;
+(void)objc;
+(void)objv;
+
 Tcl_Obj *aobj;
 char reportString[33];
 
@@ -86,6 +97,10 @@ return(TCL_OK);
 
 static int gtkwavetcl_printTimeType(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], TimeType ttVal)
 {
+(void)clientData;
+(void)objc;
+(void)objv;
+
 Tcl_Obj *aobj;
 char reportString[65];
 
@@ -99,6 +114,10 @@ return(TCL_OK);
 
 static int gtkwavetcl_printDouble(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], double dVal)
 {
+(void)clientData;
+(void)objc;
+(void)objv;
+
 Tcl_Obj *aobj;
 char reportString[65];
 
@@ -112,6 +131,10 @@ return(TCL_OK);
 
 static int gtkwavetcl_printString(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], const char *reportString)
 {
+(void)clientData;
+(void)objc;
+(void)objv;
+
 Tcl_Obj *aobj;
 
 aobj = Tcl_NewStringObj(reportString, -1);
@@ -230,6 +253,10 @@ return(gtkwavetcl_printTimeType(clientData, interp, objc, objv, value));
 
 static int gtkwavetcl_getTimeDimension(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
 {
+(void)clientData;
+(void)objc;
+(void)objv;
+
 Tcl_Obj *aobj;
 char reportString[2];
 
@@ -244,6 +271,10 @@ return(TCL_OK);
 
 static int gtkwavetcl_getArgv(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
 {
+(void)clientData;
+(void)objc;
+(void)objv;
+
 if(GLOBALS->argvlist)
 	{
 	Tcl_Obj *aobj = Tcl_NewStringObj(GLOBALS->argvlist, -1);
@@ -279,6 +310,10 @@ return(gtkwavetcl_printTimeType(clientData, interp, objc, objv, value));
 
 static int gtkwavetcl_getDumpType(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
 {
+(void)clientData;
+(void)objc;
+(void)objv;
+
 Tcl_Obj *aobj;
 char *reportString = "UNKNOWN";
 
@@ -329,22 +364,23 @@ static int gtkwavetcl_getNamedMarker(ClientData clientData, Tcl_Interp *interp,
 if(objc == 2)
 	{
 	char *s = get_Tcl_string(objv[1]);
-	int which;
+	int which = -1;
 
 	if((s[0]>='A')&&(s[0]<='Z'))
 		{
-		TimeType value = GLOBALS->named_markers[s[0] - 'A'];
-		return(gtkwavetcl_printTimeType(clientData, interp, objc, objv, value));
+		which = bijective_marker_id_string_hash(s);
 		}
 	else
 	if((s[0]>='a')&&(s[0]<='z'))
 		{
-		TimeType value = GLOBALS->named_markers[s[0] - 'a'];
-		return(gtkwavetcl_printTimeType(clientData, interp, objc, objv, value));
+		which = bijective_marker_id_string_hash(s);
+		}
+	else
+		{
+		which = atoi(s); 
 		}
 
-	which = atoi(s);
-	if((which >= 0) && (which < 26))
+	if((which >= 0) && (which < WAVE_NUM_NAMED_MARKERS))
 		{
 		TimeType value = GLOBALS->named_markers[which];
 		return(gtkwavetcl_printTimeType(clientData, interp, objc, objv, value));
@@ -568,19 +604,19 @@ if(objc == 3)
 
 	if((sv[0]>='A')&&(sv[0]<='Z'))
 		{
-		which = sv[0] - 'A';
+		which = bijective_marker_id_string_hash(sv);
 		}
 	else
 	if((sv[0]>='a')&&(sv[0]<='z'))
 		{
-		which = sv[0] - 'a';
+		which = bijective_marker_id_string_hash(sv);
 		}
 	else
 		{
 		which = atoi(sv);
 		}
 
-	if((which >= 0) && (which < 26))
+	if((which >= 0) && (which < WAVE_NUM_NAMED_MARKERS))
 		{
 		char *s = get_Tcl_string(objv[2]);
 		Trptr t = GLOBALS->traces.first;
@@ -914,19 +950,19 @@ if((objc == 3)||(objc == 4))
 
         if((s[0]>='A')&&(s[0]<='Z'))
                 {
-                which = s[0] - 'A';
+		which = bijective_marker_id_string_hash(s);
                 }
         else
         if((s[0]>='a')&&(s[0]<='z'))
                 {
-                which = s[0] - 'a';
+		which = bijective_marker_id_string_hash(s);
                 }
 	else
 		{
 	        which = atoi(s);
 		}
 
-        if((which >= 0) && (which < 26))
+        if((which >= 0) && (which < WAVE_NUM_NAMED_MARKERS))
                 {
 	        char *t = get_Tcl_string(objv[2]);
 		TimeType gt=unformat_time(t, GLOBALS->time_dimension);
@@ -1452,6 +1488,8 @@ return(TCL_OK);
 
 static int gtkwavetcl_signalChangeList(ClientData clientData, Tcl_Interp *interp,
 				       int objc, Tcl_Obj *CONST objv[]) {
+(void) clientData;
+
     int dir = STRACE_FORWARD ;
     TimeType start_time = 0 ;
     TimeType end_time = MAX_HISTENT_TIME ;
diff --git a/src/tcl_helper.c b/src/tcl_helper.c
index 9732554..c7658db 100644
--- a/src/tcl_helper.c
+++ b/src/tcl_helper.c
@@ -1863,6 +1863,8 @@ sig_selection_foreach_dnd
                        GtkTreeIter *iter,
                        gpointer data)
 {
+(void)path;
+
   struct tree *sel;
   int i;
   int low, high;
@@ -2554,6 +2556,8 @@ static const char *tclcb_var_inits[] = { WAVE_TCLCB_MACRO_EXPANSION };
 
 static void declare_tclcb_variables(Tcl_Interp *interp)
 {
+(void)interp;
+
 int i = 0 ;
 while(tclcb_var_flags[i] != -1)
 	{
@@ -2750,6 +2754,8 @@ return(s);
 
 void gtkUpdate(ClientData ignore)
 {
+(void)ignore;
+
   while (gtk_events_pending()) { gtk_main_iteration(); }
   Tcl_CreateTimerHandler(50,gtkUpdate, (ClientData) NULL); /* ajb: was 0 period ...caused 100% CPU spike */
 }
@@ -2824,6 +2830,8 @@ int  gtkwaveInterpreterInit(Tcl_Interp *interp) {
 
 static gboolean repscript_timer(gpointer dummy)
 {
+(void)dummy;
+
 static gboolean run_once = FALSE;
 
 if(run_once == FALSE) /* avoid any race conditions with the toolkit for uninitialized data */
@@ -2888,6 +2896,8 @@ void set_globals_interp(char *me, int install_tk)
 	exit(255);
 	}
 #else
+(void)me;
+(void)install_tk;
 GLOBALS->interp = Tcl_CreateInterp();
 #endif
 }
@@ -2899,7 +2909,9 @@ void make_tcl_interpreter(char *argv[])
   char commandName[32768];
   gtkwave_mlist_t *ife;
   int num_menu_items;
+#if !((defined(__MACH__) && defined(__APPLE__)))
   int n = 0;
+#endif
 
 #ifndef WAVE_TCL_STUBIFY
   Tcl_FindExecutable(argv[0]);
@@ -3035,24 +3047,36 @@ return(rc);
 
 void make_tcl_interpreter(char *argv[])
 {
+(void)argv;
+
 /* nothing */
 }
 
 
 const char *gtkwavetcl_setvar(const char *name1, const char *val, int flags)
 {
+(void)name1;
+(void)val;
+(void) flags;
+
 return(NULL);
 }
 
 
 const char *gtkwavetcl_setvar_nonblocking(const char *name1, const char *val, int flags)
 {
+(void) name1;
+(void) val;
+(void) flags;
+
 return(NULL);
 }
 
 
 char *rpc_script_execute(const char *nam)
 {
+(void) nam;
+
 return(strdup_2("--script TCL_ERROR : Tcl support not compiled into gtkwave\n"));
 }
 
diff --git a/src/tcl_np.c b/src/tcl_np.c
index 8cef11e..a44d368 100644
--- a/src/tcl_np.c
+++ b/src/tcl_np.c
@@ -505,6 +505,8 @@ int NpInitInterp(Tcl_Interp *interp, int install_tk) {
  */
 
 Tcl_Interp *NpCreateMainInterp(char *me, int install_tk) {
+(void)me;
+
   ThreadSpecificData *tsdPtr;
   Tcl_Interp *interp;
 
diff --git a/src/tcl_support_commands.c b/src/tcl_support_commands.c
index 6899bb7..07cf59a 100644
--- a/src/tcl_support_commands.c
+++ b/src/tcl_support_commands.c
@@ -298,7 +298,7 @@ Trptr find_first_highlighted_trace(void) {
 Trptr is_signal_displayed(char *name) {
   Trptr t=GLOBALS->traces.first ;
   char *p = strchr(name, '['), *p1 ;
-  int len, len1 ;
+  unsigned int len, len1 ;
   if(p)
     *p = '\0' ;
   len = strlen(name) ;
@@ -323,7 +323,7 @@ Trptr is_signal_displayed(char *name) {
 
     if(p) {
       p1 = strchr(p,'[') ;
-      len1 = (p1) ? p1 - p : strlen(p) ;
+      len1 = (p1) ? (unsigned int)(p1 - p) : strlen(p) ;
       cc = ((len == len1) && !strncmp(name, p, len));
       if(was_packed) free_2(p);
       if(cc)
diff --git a/src/timeentry.c b/src/timeentry.c
index 9602cbe..74990a6 100644
--- a/src/timeentry.c
+++ b/src/timeentry.c
@@ -47,6 +47,8 @@ gtk_signal_emit_by_name (GTK_OBJECT (GTK_ADJUSTMENT(GLOBALS->wave_hslider)), "va
 
 void from_entry_callback(GtkWidget *widget, GtkWidget *entry)
 {
+(void)widget;
+
 G_CONST_RETURN gchar *entry_text;
 TimeType newlo;
 char fromstr[40];
@@ -85,6 +87,8 @@ if(newlo<(GLOBALS->tims.last))
 
 void to_entry_callback(GtkWidget *widget, GtkWidget *entry)
 {
+(void)widget;
+
 G_CONST_RETURN gchar *entry_text;
 TimeType newhi;
 char tostr[40];
diff --git a/src/translate.c b/src/translate.c
index 3602956..6edf024 100644
--- a/src/translate.c
+++ b/src/translate.c
@@ -303,6 +303,9 @@ return(found);
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 GLOBALS->is_active_translate_c_5=0;
 gtk_widget_destroy(GLOBALS->window_translate_c_11);
 GLOBALS->window_translate_c_11 = NULL;
@@ -317,18 +320,33 @@ destroy_callback(widget, nothing);
 static void select_row_callback(GtkWidget *widget, gint row, gint column,
 	GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)row;
+(void)column;
+(void)event;
+(void)data;
+
 GLOBALS->current_filter_translate_c_2 = row + 1;
 }
 
 static void unselect_row_callback(GtkWidget *widget, gint row, gint column,
 	GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)row;
+(void)column;
+(void)event;
+(void)data;
+
 GLOBALS->current_filter_translate_c_2 = 0; /* none */
 }
 
 
 static void add_filter_callback_2(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 int i;
 GtkCList *cl;
 
@@ -375,6 +393,9 @@ if(GLOBALS->is_active_translate_c_5) gdk_window_raise(GLOBALS->window_translate_
 
 static void add_filter_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 if(GLOBALS->num_file_filters == FILE_FILTER_MAX)
 	{
 	status_text("Max number of file filters installed already.\n");
diff --git a/src/treesearch.c b/src/treesearch.c
index bf04eda..a5c34a3 100644
--- a/src/treesearch.c
+++ b/src/treesearch.c
@@ -23,6 +23,9 @@
 
 void mkmenu_treesearch_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 /* nothing */
 }
 
diff --git a/src/treesearch_gtk2.c b/src/treesearch_gtk2.c
index 394656b..a07618d 100644
--- a/src/treesearch_gtk2.c
+++ b/src/treesearch_gtk2.c
@@ -490,6 +490,9 @@ if(is_expand)
 
 static void tree_expand_callback(GtkCTree *ctree, GtkCTreeNode *node, gpointer user_data)
 {
+(void)ctree;
+(void)user_data;
+
 create_sst_nodes_if_necessary(node);
 generic_tree_expand_collapse_callback(1, node);
 #ifdef WAVE_ALLOW_QUARTZ_FLUSH_WORKAROUND
@@ -503,6 +506,9 @@ gtk_widget_show(GTK_WIDGET(GLOBALS->tree_treesearch_gtk2_c_1));
 
 static void tree_collapse_callback(GtkCTree *ctree, GtkCTreeNode *node, gpointer user_data)
 {
+(void)ctree;
+(void)user_data;
+
 generic_tree_expand_collapse_callback(0, node);
 #ifdef WAVE_ALLOW_QUARTZ_FLUSH_WORKAROUND
 #ifdef MAC_INTEGRATION
@@ -591,6 +597,11 @@ if(ctree)
 static void select_row_callback(GtkWidget *widget, gint row, gint column,
         GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)column;
+(void)event;
+(void)data;
+
 struct tree *t;
 GtkCTreeNode* node = gtk_ctree_node_nth(GLOBALS->ctree_main, row);
 
@@ -644,6 +655,11 @@ DEBUG(printf("TS: %08x %s\n",t,t->name));
 static void unselect_row_callback(GtkWidget *widget, gint row, gint column,
         GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)column;
+(void)event;
+(void)data;
+
 struct tree *t;
 
 if(GLOBALS->selected_hierarchy_name)
@@ -669,6 +685,8 @@ DEBUG(printf("TU: %08x %s\n",t,t->name));
 static
 gboolean filter_edit_cb (GtkWidget *widget, GdkEventKey *ev, gpointer *data)
 {
+(void)data;
+
   /* Maybe this test is too strong ?  */
   if (ev->keyval == GDK_Return)
     {
@@ -759,6 +777,9 @@ return(GLOBALS->is_active_treesearch_gtk2_c_6);
 
 static void enter_callback_e(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   G_CONST_RETURN gchar *entry_text;
   int len;
   entry_text = gtk_entry_get_text(GTK_ENTRY(GLOBALS->entry_a_treesearch_gtk2_c_2));
@@ -776,6 +797,9 @@ static void enter_callback_e(GtkWidget *widget, GtkWidget *nothing)
 
 static void destroy_callback_e(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   DEBUG(printf("Entry Cancel\n"));
   GLOBALS->entrybox_text_local_treesearch_gtk2_c_3=NULL;
   wave_gtk_grab_remove(GLOBALS->window1_treesearch_gtk2_c_3);
@@ -907,6 +931,9 @@ bundle_cleanup_foreach (GtkTreeModel *model,
 			GtkTreeIter *iter,
 			gpointer data)
 {
+(void)path;
+(void)data;
+
   struct tree *sel;
 
   /* Extract the tree.  */
@@ -953,6 +980,9 @@ if(GLOBALS->entrybox_text_local_treesearch_gtk2_c_3)
 static void
 bundle_cleanup(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
   gtk_tree_selection_selected_foreach
     (GLOBALS->sig_selection_treesearch_gtk2_c_1, &bundle_cleanup_foreach, NULL);
 
@@ -981,6 +1011,9 @@ bundle_callback_generic(void)
 static void
 bundle_callback_up(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 GLOBALS->bundle_direction_treesearch_gtk2_c_3=0;
 bundle_callback_generic();
 }
@@ -988,6 +1021,9 @@ bundle_callback_generic();
 static void
 bundle_callback_down(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 GLOBALS->bundle_direction_treesearch_gtk2_c_3=1;
 bundle_callback_generic();
 }
@@ -1004,6 +1040,9 @@ sig_selection_foreach (GtkTreeModel *model,
 		       GtkTreeIter *iter,
 		       gpointer data)
 {
+(void)path;
+(void)data;
+
   struct tree *sel;
   /* const enum cb_action action = (enum cb_action)data; */
   int i;
@@ -1135,6 +1174,9 @@ sig_selection_foreach_preload_lx2
 		       GtkTreeIter *iter,
 		       gpointer data)
 {
+(void)path;
+(void)data;
+
   struct tree *sel;
   /* const enum cb_action action = (enum cb_action)data; */
   int i;
@@ -1234,6 +1276,8 @@ action_callback(enum cb_action action)
 
 static void insert_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
   set_window_busy(widget);
   action_callback (ACTION_INSERT);
   set_window_idle(widget);
@@ -1241,6 +1285,8 @@ static void insert_callback(GtkWidget *widget, GtkWidget *nothing)
 
 static void replace_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
   set_window_busy(widget);
   action_callback (ACTION_REPLACE);
   set_window_idle(widget);
@@ -1248,6 +1294,8 @@ static void replace_callback(GtkWidget *widget, GtkWidget *nothing)
 
 static void ok_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)nothing;
+
   set_window_busy(widget);
   action_callback (ACTION_APPEND);
   set_window_idle(widget);
@@ -1256,6 +1304,9 @@ static void ok_callback(GtkWidget *widget, GtkWidget *nothing)
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
   GLOBALS->is_active_treesearch_gtk2_c_6=0;
   gtk_widget_destroy(GLOBALS->window_treesearch_gtk2_c_12);
   GLOBALS->window_treesearch_gtk2_c_12 = NULL;
@@ -1281,6 +1332,9 @@ static gboolean
                        gboolean          path_currently_selected,
                        gpointer          userdata)
   {
+(void)selection;
+(void)userdata;
+
     GtkTreeIter iter;
 
     if (gtk_tree_model_get_iter(model, &iter, path))
@@ -1314,6 +1368,8 @@ static gboolean
 
 static gint button_press_event_std(GtkWidget *widget, GdkEventButton *event)
 {
+(void)widget;
+
 if(event->type == GDK_2BUTTON_PRESS)
 	{
 	if(GLOBALS->selected_hierarchy_name && GLOBALS->selected_sig_name)
@@ -1665,6 +1721,8 @@ do_tooltips:
  */
 GtkWidget* treeboxframe(char *title, GtkSignalFunc func)
 {
+(void)title;
+
     GtkWidget *scrolled_win, *sig_scroll_win;
     GtkWidget *hbox;
     GtkWidget *button1, *button2, *button3, *button3a, *button4;
@@ -1939,6 +1997,8 @@ static void DNDBeginCB(
 	GtkWidget *widget, GdkDragContext *dc, gpointer data
 )
 {
+(void)data;
+
         if((widget == NULL) || (dc == NULL))
 		return;
 
@@ -1965,6 +2025,10 @@ static void DNDEndCB_2(
 	GtkWidget *widget, GdkDragContext *dc, gpointer data
 )
 {
+(void)widget;
+(void)dc;
+(void)data;
+
 Trptr t;
 int trwhich, trtarget;
 GdkModifierType state;
@@ -2127,6 +2191,10 @@ static gboolean DNDDragMotionCB(
         gpointer data
 )
 {
+(void)x; 
+(void)y;
+(void)data;
+
 	gboolean same_widget;
 	GdkDragAction suggested_action;
 	GtkWidget *src_widget, *tar_widget;
@@ -2193,6 +2261,11 @@ static void DNDDataRequestCB(
 	gpointer data
 )
 {
+(void)dc;
+(void)info;
+(void)t;
+(void)data;
+
 int upd = 0;
 GLOBALS->tree_dnd_requested = 1;  /* indicate that a request for data occurred... */
 
@@ -2263,6 +2336,10 @@ static void DNDDataReceivedCB(
 	GtkWidget *widget, GdkDragContext *dc,
 	gint x, gint y, GtkSelectionData *selection_data,
 	guint info, guint t, gpointer data) {
+(void)x;
+(void)y;
+(void)t;
+
     gboolean same;
     GtkWidget *source_widget;
 
@@ -2372,6 +2449,10 @@ static void DNDDataDeleteCB(
 	GtkWidget *widget, GdkDragContext *dc, gpointer data
 )
 {
+(void)widget;
+(void)dc;
+(void)data;
+
 /* nothing */
 }
 
diff --git a/src/ttranslate.c b/src/ttranslate.c
index 9db3311..939497e 100644
--- a/src/ttranslate.c
+++ b/src/ttranslate.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) Tony Bybell 2010-2012.
+ * Copyright (c) Tony Bybell 2010-2014.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -22,6 +22,8 @@
 
 static void args_entry_callback(GtkWidget *widget, GtkWidget *entry)
 {
+(void)widget;
+
 G_CONST_RETURN gchar *entry_text;
 
 entry_text=gtk_entry_get_text(GTK_ENTRY(entry));
@@ -54,7 +56,7 @@ for(i=0;i<TTRANS_FILTER_MAX+1;i++)
 void remove_all_ttrans_filters(void)
 {
 struct Global *GLOBALS_cache = GLOBALS;
-int i, j;
+unsigned int i, j;
 
 for(j=0;j<GLOBALS->num_notebook_pages;j++)
         {
@@ -303,6 +305,9 @@ return(found);
 
 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 GLOBALS->is_active_ttranslate_c_2=0;
 gtk_widget_destroy(GLOBALS->window_ttranslate_c_5);
 GLOBALS->window_ttranslate_c_5 = NULL;
@@ -317,18 +322,32 @@ destroy_callback(widget, nothing);
 static void select_row_callback(GtkWidget *widget, gint row, gint column,
 	GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)column;
+(void)event;
+(void)data;
+
 GLOBALS->current_filter_ttranslate_c_1 = row + 1;
 }
 
 static void unselect_row_callback(GtkWidget *widget, gint row, gint column,
 	GdkEventButton *event, gpointer data)
 {
+(void)widget;
+(void)row;
+(void)column;
+(void)event;
+(void)data;
+
 GLOBALS->current_filter_ttranslate_c_1 = 0; /* none */
 }
 
 
 static void add_filter_callback_2(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 int i;
 GtkCList *cl;
 
@@ -375,6 +394,9 @@ if(GLOBALS->is_active_ttranslate_c_2) gdk_window_raise(GLOBALS->window_ttranslat
 
 static void add_filter_callback(GtkWidget *widget, GtkWidget *nothing)
 {
+(void)widget;
+(void)nothing;
+
 if(GLOBALS->num_ttrans_filters == TTRANS_FILTER_MAX)
 	{
 	status_text("Max number of transaction filters processes installed already.\n");
@@ -722,34 +744,40 @@ ex:     			buf[n] = 0;
 				else
 				if((*pnt=='M')||(*pnt=='m'))
 					{
+					int mlen;
 					pnt++;
-					if(((*pnt>='A')&&(*pnt<='Z')) || ((*pnt>='a')&&(*pnt<='z')))
+
+					mlen = bijective_marker_id_string_len(pnt);
+					if(mlen)
 						{
-						int which_marker = ((*pnt>='A')&&(*pnt<='Z')) ? (*pnt - 'A') : (*pnt - 'a');
-						TimeType tim = atoi_64(pnt+1) * GLOBALS->time_scale;
-						int slen;
-						char *sp;
+						int which_marker = bijective_marker_id_string_hash(pnt);
+						if((which_marker >= 0) && (which_marker < WAVE_NUM_NAMED_MARKERS))
+							{
+							TimeType tim = atoi_64(pnt+mlen) * GLOBALS->time_scale;
+							int slen;
+							char *sp;
 
-						if(tim < LLDescriptor(0)) tim = LLDescriptor(-1);
-						GLOBALS->named_markers[which_marker] = tim;
+							if(tim < LLDescriptor(0)) tim = LLDescriptor(-1);
+							GLOBALS->named_markers[which_marker] = tim;
 
-						while(*pnt) { if(!isspace((int)(unsigned char)*pnt)) pnt++; else break; }
-						while(*pnt) { if(isspace((int)(unsigned char)*pnt)) pnt++; else break; }
+							while(*pnt) { if(!isspace((int)(unsigned char)*pnt)) pnt++; else break; }
+							while(*pnt) { if(isspace((int)(unsigned char)*pnt)) pnt++; else break; }
 
-						sp = pnt;
-						slen = strlen(sp);
+							sp = pnt;
+							slen = strlen(sp);
 
-						if(slen)
-							{
-							pnt = sp + slen - 1;
-							do
+							if(slen)
 								{
-								if(isspace((int)(unsigned char)*pnt)) { *pnt = 0; pnt--; slen--; } else { break; }
-								} while(pnt != (sp-1));
+								pnt = sp + slen - 1;
+								do
+									{
+									if(isspace((int)(unsigned char)*pnt)) { *pnt = 0; pnt--; slen--; } else { break; }
+									} while(pnt != (sp-1));
+								}
+
+		                                	if(GLOBALS->marker_names[which_marker]) free_2(GLOBALS->marker_names[which_marker]);
+		                                	GLOBALS->marker_names[which_marker] = (sp && (*sp) && (tim >= LLDescriptor(0))) ? strdup_2(sp) : NULL;
 							}
-
-	                                	if(GLOBALS->marker_names[which_marker]) free_2(GLOBALS->marker_names[which_marker]);
-	                                	GLOBALS->marker_names[which_marker] = (sp && (*sp) && (tim >= LLDescriptor(0))) ? strdup_2(sp) : NULL;
 						}
 
 					continue;
diff --git a/src/twinwave.c b/src/twinwave.c
index 8259331..a8a2ca2 100644
--- a/src/twinwave.c
+++ b/src/twinwave.c
@@ -29,6 +29,9 @@ static int use_embedded = 1;
 
 static int plug_removed(GtkWidget *widget, gpointer data)
 {
+(void)widget;
+(void)data;
+
 static int cnt = 2;
 
 fprintf(stderr, "GtkPlug removed\n");
@@ -45,6 +48,8 @@ return(FALSE);   /* TRUE would keep xsocket open */
 
 int quit_callback (GtkWidget *widget, gpointer data)
 {
+(void)widget;
+
 fprintf(stderr,"%s\n", (char *)data);
 gtk_exit(0);
 
diff --git a/src/vcd_recoder.c b/src/vcd_recoder.c
index a8fa2a4..ce1a9aa 100644
--- a/src/vcd_recoder.c
+++ b/src/vcd_recoder.c
@@ -2964,7 +2964,7 @@ void import_vcd_trace(nptr np)
 {
 struct vlist_t *v = np->mv.mvlfac_vlist;
 int len = 1;
-int list_size;
+unsigned int list_size;
 unsigned char vlist_type;
 /* unsigned int vartype = 0; */ /* scan-build */
 unsigned int vlist_pos = 0;
@@ -2983,7 +2983,7 @@ vlist_uncompress(&v);
 
 if(GLOBALS->vlist_prepack)
 	{
-	depacked = vlist_packer_decompress(v, (unsigned int *)&list_size);
+	depacked = vlist_packer_decompress(v, &list_size);
 	vlist_destroy(v);
 	}
 	else
diff --git a/src/vcd_saver.c b/src/vcd_saver.c
index bce30ee..7dd5d9c 100644
--- a/src/vcd_saver.c
+++ b/src/vcd_saver.c
@@ -17,27 +17,10 @@
 
 static void w32redirect_fprintf(FILE *sfd, const char *format, ...)
 {
-#if !defined _MSC_VER && !defined __MINGW32__
-
 va_list ap;
 va_start(ap, format);
 vfprintf(sfd, format, ap);
 va_end(ap);
-
-#else
-
-char buf[16385];
-BOOL bSuccess;
-DWORD dwWritten;
-
-va_list ap;
-va_start(ap, format);
-buf[0] = 0;
-vsprintf(buf, format, ap);
-bSuccess = WriteFile((HANDLE)sfd, buf, strlen(buf), &dwWritten, NULL);
-va_end(ap);
-
-#endif
 }
 
 /*
@@ -293,7 +276,7 @@ if(vt->right) recurse_build(vt->right, hp);
 static void heapify(int i, int heap_size)
 {
 int l, r;
-unsigned int largest;
+int largest;
 vcdsav_Tree *t;
 int maxele=heap_size/2-1;	/* points to where heapswaps don't matter anymore */
 
diff --git a/src/vzt.c b/src/vzt.c
index 54fb845..f88c6cf 100644
--- a/src/vzt.c
+++ b/src/vzt.c
@@ -244,9 +244,9 @@ if(GLOBALS->fast_tree_sort)
 
         if(numalias)
                 {
-                unsigned int idx_lft = 0;
-                unsigned int idx_lftmax = GLOBALS->numfacs - numalias;
-                unsigned int idx_rgh = GLOBALS->numfacs - numalias;
+                int idx_lft = 0;
+                int idx_lftmax = GLOBALS->numfacs - numalias;
+                int idx_rgh = GLOBALS->numfacs - numalias;
                 struct symbol **facs_merge=(struct symbol **)malloc_2(GLOBALS->numfacs*sizeof(struct symbol *));
 
 		fprintf(stderr, VZT_RDLOAD"Merging in %d aliases.\n", numalias);
@@ -447,6 +447,8 @@ return(GLOBALS->max_time);
  */
 static void vzt_callback(struct vzt_rd_trace **lt, lxtint64_t *tim, lxtint32_t *facidx, char **value)
 {
+(void)lt;
+
 struct HistEnt *htemp = histent_calloc();
 struct lx2_entry *l2e = GLOBALS->vzt_table_vzt_c_1+(*facidx);
 struct fac *f = GLOBALS->mvlfacs_vzt_c_3+(*facidx);
diff --git a/src/wavewindow.c b/src/wavewindow.c
index b23b98f..39fd6dc 100644
--- a/src/wavewindow.c
+++ b/src/wavewindow.c
@@ -94,6 +94,8 @@ draw_slider_p(style, window, state_type, shadow_type, area, widget, detail, x, y
 
 static gint slider_bpr(GtkWidget *widget, GdkEventButton *event)
 {
+(void)widget;
+
 int xi = event->x;
 int xl = GLOBALS->str_wid_x;
 int xr = GLOBALS->str_wid_x + GLOBALS->str_wid_width;
@@ -115,6 +117,9 @@ return(FALSE);
 
 static gint slider_brr(GtkWidget *widget, GdkEventButton *event)
 {
+(void)widget;
+(void)event;
+
 GLOBALS->str_wid_state = 0;
 return(FALSE);
 }
@@ -122,6 +127,8 @@ return(FALSE);
 
 static gint slider_mnr(GtkWidget *widget, GdkEventMotion *event)
 {
+(void)widget;
+
 #ifndef WAVE_USE_GTK2
 gdouble x, y;
 #endif
@@ -332,7 +339,7 @@ TraceEnt t_trans;
 if(!GLOBALS->cursor_snap) return(marker);
 
 /* potential snapping to a named marker time */
-for(i=0;i<26;i++)
+for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 	{
 	if(GLOBALS->named_markers[i] != -1)
 		{
@@ -554,8 +561,8 @@ if((t=GLOBALS->named_markers[i])!=-1)
 		xl=((gdouble)(t-GLOBALS->tims.start))/pixstep;     /* snap to integer */
 		if((xl>=0)&&(xl<GLOBALS->wavewidth))
 			{
-			char nbuff[2];
-			nbuff[0]='A'+i; nbuff[1]=0x00;
+			char nbuff[16];
+			make_bijective_marker_id_string(nbuff, i);
 
 			for(y=GLOBALS->fontheight-1;y<=GLOBALS->waveheight-1;y+=8)
 				{
@@ -597,7 +604,7 @@ int i;
 
 if(!GLOBALS->wavepixmap_wavewindow_c_1) return;
 
-for(i=0;i<26;i++)
+for(i=0;i<WAVE_NUM_NAMED_MARKERS;i++)
 	{
 	if(i != GLOBALS->named_marker_lock_idx)
 		{
@@ -799,6 +806,9 @@ if(bt)
 static void
 service_hslider(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 DEBUG(printf("Wave HSlider Moved\n"));
 
 if((GLOBALS->wavepixmap_wavewindow_c_1)&&(GLOBALS->wavewidth>1))
@@ -830,6 +840,9 @@ if((GLOBALS->wavepixmap_wavewindow_c_1)&&(GLOBALS->wavewidth>1))
 static void
 service_vslider(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 GtkAdjustment *sadj, *hadj;
 int trtarget;
 int xsrc;
@@ -960,6 +973,8 @@ if(!is_button_2)
 
 static gint motion_notify_event(GtkWidget *widget, GdkEventMotion *event)
 {
+(void)widget;
+
 gdouble x, y, pixstep, offset;
 GdkModifierType state;
 TimeType newcurr;
@@ -1171,6 +1186,9 @@ gtk_signal_emit_by_name (GTK_OBJECT (wadj), "value_changed"); /* force text upda
 void
 alt_move_left(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
   TimeType ntinc, ntfrac;
 
   ntinc=(TimeType)(((gdouble)GLOBALS->wavewidth)*GLOBALS->nspx);	/* really don't need this var but the speed of ui code is human dependent.. */
@@ -1190,6 +1208,9 @@ alt_move_left(GtkWidget *text, gpointer data)
 void
 alt_move_right(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
   TimeType ntinc, ntfrac;
 
   ntinc=(TimeType)(((gdouble)GLOBALS->wavewidth)*GLOBALS->nspx);
@@ -1215,6 +1236,9 @@ alt_move_right(GtkWidget *text, gpointer data)
 
 void alt_zoom_out(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
   TimeType middle=0, width;
   TimeType marker = GLOBALS->cached_currenttimeval_currenttime_c_1;
   /* Zoom on mouse cursor, not marker */
@@ -1268,6 +1292,9 @@ void alt_zoom_out(GtkWidget *text, gpointer data)
 
 void alt_zoom_in(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
   if(GLOBALS->tims.zoom<0)		/* otherwise it's ridiculous and can cause */
   {		/* overflow problems in the scope          */
     TimeType middle=0, width;
@@ -1328,6 +1355,8 @@ void alt_zoom_in(GtkWidget *text, gpointer data)
 static        gint
 scroll_event( GtkWidget * widget, GdkEventScroll * event )
 {
+(void)widget;
+
 int num_traces_displayable=(GLOBALS->signalarea->allocation.height)/(GLOBALS->fontheight);
 num_traces_displayable--;
 
@@ -1481,6 +1510,8 @@ return(TRUE);
 
 static gint button_release_event(GtkWidget *widget, GdkEventButton *event)
 {
+(void)widget;
+
 if((event->button)&&(event->button==GLOBALS->in_button_press_wavewindow_c_1))
 	{
 	GLOBALS->in_button_press_wavewindow_c_1=0;
@@ -1602,6 +1633,8 @@ static const int wave_rgb_rainbow[WAVE_NUM_RAINBOW] = WAVE_RAINBOW_RGB;
 
 gint wavearea_configure_event(GtkWidget *widget, GdkEventConfigure *event)
 {
+(void)event;
+
 if((!widget)||(!widget->window)) return(TRUE);
 
 DEBUG(printf("WaveWin Configure Event h: %d, w: %d\n",widget->allocation.height,
diff --git a/src/zoombuttons.c b/src/zoombuttons.c
index 41d0336..2a66ae2 100644
--- a/src/zoombuttons.c
+++ b/src/zoombuttons.c
@@ -42,6 +42,9 @@ if(hadj->value+hadj->page_size>hadj->upper)
 
 void service_zoom_left(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 GtkAdjustment *hadj;
 
 if(GLOBALS->helpbox_is_active)
@@ -60,6 +63,9 @@ time_update();
 
 void service_zoom_right(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 GtkAdjustment *hadj;
 TimeType ntinc;
 
@@ -84,6 +90,9 @@ time_update();
 
 void service_zoom_out(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 TimeType middle=0, width;
 
 if(GLOBALS->helpbox_is_active)
@@ -140,6 +149,9 @@ DEBUG(printf("Zoombuttons out\n"));
 
 void service_zoom_in(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 if(GLOBALS->helpbox_is_active)
         {
         help_text_bold("\n\nZoom In");
@@ -199,6 +211,9 @@ if(GLOBALS->tims.zoom<0)		/* otherwise it's ridiculous and can cause */
 
 void service_zoom_undo(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 gdouble temp;
 
 if(GLOBALS->helpbox_is_active)
@@ -227,6 +242,9 @@ DEBUG(printf("Zoombuttons Undo\n"));
 
 void service_zoom_fit(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 gdouble estimated;
 int fixedwidth;
 
@@ -271,6 +289,9 @@ DEBUG(printf("Zoombuttons Fit\n"));
 
 void service_zoom_full(GtkWidget *text, gpointer data)
 {
+(void)text;
+(void)data;
+
 gdouble estimated;
 int fixedwidth;
 

-- 
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