Hello community, here is the log from the commit of package gtkwave for openSUSE:Factory checked in at 2016-02-24 18:43:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gtkwave (Old) and /work/SRC/openSUSE:Factory/.gtkwave.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gtkwave" Changes: -------- --- /work/SRC/openSUSE:Factory/gtkwave/gtkwave.changes 2015-11-26 17:02:03.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.gtkwave.new/gtkwave.changes 2016-02-24 18:43:06.000000000 +0100 @@ -1,0 +2,6 @@ +Wed Feb 24 14:26:32 UTC 2016 - [email protected] + +- Update to version 3.3.70 + * bugfix release, see included ChangeLog file for details + +------------------------------------------------------------------- Old: ---- gtkwave-3.3.68.tar.gz New: ---- gtkwave-3.3.70.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gtkwave.spec ++++++ --- /var/tmp/diff_new_pack.tbRcBs/_old 2016-02-24 18:43:07.000000000 +0100 +++ /var/tmp/diff_new_pack.tbRcBs/_new 2016-02-24 18:43:07.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package gtkwave # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: gtkwave -Version: 3.3.68 +Version: 3.3.70 Release: 0 Summary: Waveform viewer for Ditital Signals License: GPL-2.0+ ++++++ gtkwave-3.3.68.tar.gz -> gtkwave-3.3.70.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/ChangeLog new/gtkwave-3.3.70/ChangeLog --- old/gtkwave-3.3.68/ChangeLog 2015-11-19 02:42:19.000000000 +0100 +++ new/gtkwave-3.3.70/ChangeLog 2016-02-15 23:36:59.000000000 +0100 @@ -1521,3 +1521,13 @@ input boxes. Added support for fixed point binary numbers for both signed and unsigned decimal display types. +3.3.69 03feb16 Added missing EXTLOAD_CFLAGS declarations in configure.ac for + FSDB detection when only .a files are present (necessary for + Ubuntu). + Fixed valgrind warning in fst.c for dead memory allocation. + Fixed signed fixed point binary number shift for negative + numbers. + Added ghw patch for missing enum crash in ghw files. +3.3.70 14feb16 Various warnings fixes from new version of scan-build. + Crash fix in Windows for transaction traces (broken since + VCD/TIM export in 3.3.61). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/configure new/gtkwave-3.3.70/configure --- old/gtkwave-3.3.68/configure 2015-11-05 01:54:35.000000000 +0100 +++ new/gtkwave-3.3.70/configure 2016-02-14 20:37:33.000000000 +0100 @@ -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.68. +# Generated by GNU Autoconf 2.69 for gtkwave 3.3.70. # # Report bugs to <[email protected]>. # @@ -580,8 +580,8 @@ # Identity of this package. PACKAGE_NAME='gtkwave' PACKAGE_TARNAME='gtkwave' -PACKAGE_VERSION='3.3.68' -PACKAGE_STRING='gtkwave 3.3.68' +PACKAGE_VERSION='3.3.70' +PACKAGE_STRING='gtkwave 3.3.70' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1383,7 +1383,7 @@ # 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.68 to adapt to many kinds of systems. +\`configure' configures gtkwave 3.3.70 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1449,7 +1449,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gtkwave 3.3.68:";; + short | recursive ) echo "Configuration of gtkwave 3.3.70:";; esac cat <<\_ACEOF @@ -1595,7 +1595,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gtkwave configure 3.3.68 +gtkwave configure 3.3.70 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2239,7 +2239,7 @@ 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.68, which was +It was created by gtkwave $as_me 3.3.70, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3106,7 +3106,7 @@ # Define the identity of the package. PACKAGE='gtkwave' - VERSION='3.3.68' + VERSION='3.3.70' cat >>confdefs.h <<_ACEOF @@ -4253,6 +4253,7 @@ if test "X$FSDB_A" = "Xyes" ; then FSDB_CFLAGS="-DFSDB_IS_PRESENT -I$FSDBREADER_HDRS" FSDB_LDADD="$FSDBREADER_LIBS/libnffr.a" + EXTLOAD_CFLAGS="-DEXTLOAD_SUFFIX=\\\"fsdb\\\"" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FSDB reader library not found, skipping." >&5 @@ -4317,6 +4318,7 @@ if test "X$AFSDB_A" = "Xyes" ; then FSDB_CFLAGS="-DFSDB_NSYS_IS_PRESENT $FSDB_CFLAGS" FSDB_LDADD="$FSDB_LDADD $FSDBREADER_LIBS/libnsys.a" + EXTLOAD_CFLAGS="-DEXTLOAD_SUFFIX=\\\"fsdb\\\"" else FSDB_CFLAGS= @@ -10992,7 +10994,7 @@ # 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.68, which was +This file was extended by gtkwave $as_me 3.3.70, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11058,7 +11060,7 @@ 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.68 +gtkwave config.status 3.3.70 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/configure.ac new/gtkwave-3.3.70/configure.ac --- old/gtkwave-3.3.68/configure.ac 2015-11-05 01:53:59.000000000 +0100 +++ new/gtkwave-3.3.70/configure.ac 2016-02-14 20:37:33.000000000 +0100 @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT(gtkwave, 3.3.68, [email protected]) +AC_INIT(gtkwave, 3.3.70, [email protected]) AC_CONFIG_SRCDIR([src/vcd.c]) AM_INIT_AUTOMAKE AC_CONFIG_HEADER([config.h]) @@ -368,6 +368,7 @@ if test "X$FSDB_A" = "Xyes" ; then FSDB_CFLAGS="-DFSDB_IS_PRESENT -I$FSDBREADER_HDRS" FSDB_LDADD="$FSDBREADER_LIBS/libnffr.a" + EXTLOAD_CFLAGS="-DEXTLOAD_SUFFIX=\\\"fsdb\\\"" else AC_MSG_WARN([FSDB reader library not found, skipping.]) @@ -387,6 +388,7 @@ if test "X$AFSDB_A" = "Xyes" ; then FSDB_CFLAGS="-DFSDB_NSYS_IS_PRESENT $FSDB_CFLAGS" FSDB_LDADD="$FSDB_LDADD $FSDBREADER_LIBS/libnsys.a" + EXTLOAD_CFLAGS="-DEXTLOAD_SUFFIX=\\\"fsdb\\\"" else FSDB_CFLAGS= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/src/baseconvert.c new/gtkwave-3.3.70/src/baseconvert.c --- old/gtkwave-3.3.68/src/baseconvert.c 2015-11-19 07:58:08.000000000 +0100 +++ new/gtkwave-3.3.70/src/baseconvert.c 2016-01-23 08:26:22.000000000 +0100 @@ -168,37 +168,53 @@ } -static void cvt_fpsdec(Trptr t, TimeType val, char *os, int len) +static void cvt_fpsdec(Trptr t, TimeType val, char *os, int len, int nbits) { int shamt = t->t_fpdecshift; TimeType lpart = val >> shamt; TimeType rmsk = (1 << shamt); TimeType rbit = (val >= 0) ? (val & (rmsk-1)) : ((-val) & (rmsk-1)); double rfrac; +int negflag = 0; char dbuf[32]; char bigbuf[64]; + if(rmsk) - { - rfrac = (double)rbit / (double)rmsk; - } - else - { - rfrac = 0.0; - } + { + rfrac = (double)rbit / (double)rmsk; -sprintf(dbuf, "%.16g", rfrac); + if(shamt) + { + if(lpart < 0) + { + if(rbit) + { + lpart++; + if(!lpart) negflag = 1; + } + } + } + + } + else + { + rfrac = 0.0; + } + +sprintf(dbuf, "%.16g", rfrac); char *dot = strchr(dbuf, '.'); + if(dot && (dbuf[0] == '0')) - { - sprintf(bigbuf, TTFormat".%s", lpart, dot+1); - strncpy(os, bigbuf, len); - os[len-1] = 0; - } - else - { - sprintf(os, TTFormat, lpart); - } + { + sprintf(bigbuf, "%s"TTFormat".%s", negflag ? "-" : "", lpart, dot+1); + strncpy(os, bigbuf, len); + os[len-1] = 0; + } + else + { + sprintf(os, "%s"TTFormat, negflag ? "-" : "", lpart); + } } static void cvt_fpsudec(Trptr t, TimeType val, char *os, int len) @@ -674,7 +690,7 @@ { if((flags&TR_FPDECSHIFT)&&(t->t_fpdecshift)) { - cvt_fpsdec(t, val, os, len); + cvt_fpsdec(t, val, os, len, nbits); } else { @@ -1376,7 +1392,7 @@ { if((flags&TR_FPDECSHIFT)&&(t->t_fpdecshift)) { - cvt_fpsdec(t, val, os, len); + cvt_fpsdec(t, val, os, len, nbits); } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/src/fst.c new/gtkwave-3.3.70/src/fst.c --- old/gtkwave-3.3.68/src/fst.c 2015-04-15 02:14:04.000000000 +0200 +++ new/gtkwave-3.3.70/src/fst.c 2015-12-04 08:15:48.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) Tony Bybell 2009-2015. + * Copyright (c) Tony Bybell 2009-2016. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -1021,6 +1021,8 @@ s->n=n; } /* for(i) of facs parsing */ + +if(f_name_max_len) { free_2(f_name_max_len); f_name_max_len = NULL; } if(nnam) { free_2(nnam); nnam = NULL; } if(f_name_build_buf) { free_2(f_name_build_buf); f_name_build_buf = NULL; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/src/ghw.c new/gtkwave-3.3.70/src/ghw.c --- old/gtkwave-3.3.68/src/ghw.c 2015-05-09 01:17:16.000000000 +0200 +++ new/gtkwave-3.3.70/src/ghw.c 2016-02-05 04:32:29.000000000 +0100 @@ -492,7 +492,37 @@ } } return; + /* PATCH-BEGIN: */ + case ghdl_rtik_type_b2: + { + int32_t v; + char *nam; + struct ghw_range_b2 *r; + /* struct tree *last; */ + int len; + /* last = NULL; */ + r = &arr->sa.rngs[dim]->b2; + len = ghw_get_range_length ((union ghw_range *)r); + if (len <= 0) + break; + v = r->left; + while (1) + { + sprintf(GLOBALS->asbuf, "%s%c"GHWLD, pfx, dim == 0 ? '[' : ',', v); + nam = strdup_2(GLOBALS->asbuf); + build_hierarchy_array (h, arr, dim + 1, nam, res, sig); + free_2(nam); + if (v == r->right) + break; + if (r->dir == 0) + v++; + else + v--; + } + } + return; + /* PATCH-END: */ default: fprintf (stderr, "build_hierarchy_array: unhandled type %d\n", idx->kind); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/src/ghwlib.c new/gtkwave-3.3.70/src/ghwlib.c --- old/gtkwave-3.3.68/src/ghwlib.c 2014-07-10 00:42:27.000000000 +0200 +++ new/gtkwave-3.3.70/src/ghwlib.c 2016-02-05 04:32:29.000000000 +0100 @@ -480,7 +480,15 @@ if (rng->e8.dir) return (rng->e8.left - rng->e8.right + 1); else - return (rng->e8.right - rng->e8.left + 1); + return (rng->e8.right - rng->e8.left + 1); + + /* PATCH-BEGIN: */ + case ghdl_rtik_type_b2: + if (rng->b2.dir) + return (rng->b2.left - rng->b2.right + 1); + else + return (rng->b2.right - rng->b2.left + 1); + /* PATCH-END: */ default: fprintf (stderr, "get_range_length: unhandled kind %d\n", rng->kind); @@ -1349,12 +1357,19 @@ void ghw_get_value (char *buf, int len, union ghw_val *val, union ghw_type *type) { - switch (ghw_get_base_type (type)->kind) + /* PATCH-BEGIN: */ + union ghw_type *base = ghw_get_base_type (type); + switch (base->kind) + /* switch (ghw_get_base_type (type)->kind) */ + /* PATCH-END: */ { case ghdl_rtik_type_b2: if (val->b2 <= 1) { - strncpy (buf, type->en.lits[val->b2], len - 1); + /* PATCH-BEGIN: */ + strncpy (buf, base->en.lits[val->b2], len - 1); + /* strncpy (buf, type->en.lits[val->b2], len - 1); */ + /* PATCH-END: */ buf[len - 1] = 0; } else @@ -1363,12 +1378,21 @@ } break; case ghdl_rtik_type_e8: - if (val->e8 <= type->en.nbr) + /* PATCH-BEGIN: */ + if (val->e8 <= base->en.nbr) + /* if (val->e8 <= type->en.nbr) */ + /* PATCH-END: */ { /* XXX : without the if() is this a programming error? */ - if(type->en.lits) + /* PATCH-BEGIN: */ + if(base->en.lits) + /* if(type->en.lits) */ + /* PATCH-END: */ { - strncpy (buf, type->en.lits[val->e8], len - 1); + /* PATCH-BEGIN: */ + strncpy (buf, base->en.lits[val->e8], len - 1); + /* strncpy (buf, type->en.lits[val->e8], len - 1); */ + /* PATCH-END: */ buf[len - 1] = 0; } else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/src/ghwlib.h new/gtkwave-3.3.70/src/ghwlib.h --- old/gtkwave-3.3.68/src/ghwlib.h 2014-05-28 06:59:41.000000000 +0200 +++ new/gtkwave-3.3.70/src/ghwlib.h 2016-02-05 04:32:29.000000000 +0100 @@ -148,6 +148,9 @@ { unsigned kind : 8; struct ghw_range_e8 e8; + /* PATCH-BEGIN: */ + struct ghw_range_b2 b2; + /* PATCH-END: */ struct ghw_range_i32 i32; struct ghw_range_i64 i64; struct ghw_range_f64 f64; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/src/helpers/fst/fstapi.c new/gtkwave-3.3.70/src/helpers/fst/fstapi.c --- old/gtkwave-3.3.68/src/helpers/fst/fstapi.c 2015-05-08 23:52:58.000000000 +0200 +++ new/gtkwave-3.3.70/src/helpers/fst/fstapi.c 2015-12-15 07:36:14.000000000 +0100 @@ -279,7 +279,6 @@ static char *fstRealpath(const char *path, char *resolved_path) { #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __CYGWIN__ || defined HAVE_REALPATH - #if (defined(__MACH__) && defined(__APPLE__)) if(!resolved_path) { @@ -297,6 +296,8 @@ } return(_fullpath(resolved_path, path, PATH_MAX)); #else +(void)path; +(void)resolved_path; return(NULL); #endif #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/src/helpers/vzt_read.c new/gtkwave-3.3.70/src/helpers/vzt_read.c --- old/gtkwave-3.3.68/src/helpers/vzt_read.c 2015-05-09 01:17:16.000000000 +0200 +++ new/gtkwave-3.3.70/src/helpers/vzt_read.c 2016-02-14 20:37:33.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003-2015 Tony Bybell. + * Copyright (c) 2003-2016 Tony Bybell. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -812,7 +812,7 @@ struct vzt_ncycle_autosort **autosort; struct vzt_ncycle_autosort *deadlist=NULL; -struct vzt_ncycle_autosort *autofacs= calloc(lt->numrealfacs, sizeof(struct vzt_ncycle_autosort)); +struct vzt_ncycle_autosort *autofacs= calloc(lt->numrealfacs ? lt->numrealfacs : 1, sizeof(struct vzt_ncycle_autosort)); /* fix for scan-build on lt->numrealfacs */ vzt_rd_block_vch_decode(lt, b); vzt_rd_pthread_mutex_lock(lt, &b->mutex); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/src/tcl_helper.c new/gtkwave-3.3.70/src/tcl_helper.c --- old/gtkwave-3.3.68/src/tcl_helper.c 2015-11-19 07:58:08.000000000 +0100 +++ new/gtkwave-3.3.70/src/tcl_helper.c 2016-02-14 20:37:33.000000000 +0100 @@ -747,7 +747,7 @@ if(elem) { - if(strcmp("gtkwave", elem[0])) + if((!elem[0]) || strcmp("gtkwave", elem[0])) /* scan-build: elem[0] is NULL */ { free_2(elem); elem = NULL; @@ -784,7 +784,7 @@ if(elem) { - if((!strcmp("net", elem[0])) || (!strcmp("netBus", elem[0]))) + if ((elem[0]) && ((!strcmp("net", elem[0])) || (!strcmp("netBus", elem[0])))) /* scan-build: elem[0] can be NULL */ { char delim_str[2]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/src/vcd_saver.c new/gtkwave-3.3.70/src/vcd_saver.c --- old/gtkwave-3.3.68/src/vcd_saver.c 2015-05-09 01:17:16.000000000 +0200 +++ new/gtkwave-3.3.70/src/vcd_saver.c 2016-02-15 23:36:59.000000000 +0100 @@ -15,14 +15,35 @@ #include "hierpack.h" #include <time.h> -static void w32redirect_fprintf(FILE *sfd, const char *format, ...) +static void w32redirect_fprintf(int is_trans, FILE *sfd, const char *format, ...) { -va_list ap; -va_start(ap, format); -vfprintf(sfd, format, ap); -va_end(ap); +#if defined _MSC_VER || defined __MINGW32__ +if(is_trans) + { + 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); + } + else +#else +(void) is_trans; +#endif + { + va_list ap; + va_start(ap, format); + vfprintf(sfd, format, ap); + va_end(ap); + } } + /* * unconvert trace data back to VCD representation...use strict mode for LXT */ @@ -342,6 +363,7 @@ char *row_data = NULL; struct lt_trace *lt = NULL; int lxt = (export_typ == WAVE_EXPORT_LXT); +int is_trans = (export_typ == WAVE_EXPORT_TRANS); if(export_typ == WAVE_EXPORT_TIM) { @@ -507,30 +529,30 @@ if(export_typ != WAVE_EXPORT_TRANS) { time(&walltime); - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$date\n"); - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "\t%s",asctime(localtime(&walltime))); - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$end\n"); - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$version\n\t"WAVE_VERSION_INFO"\n$end\n"); - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$timescale\n\t%d%c%s\n$end\n", (int)GLOBALS->time_scale, GLOBALS->time_dimension, (GLOBALS->time_dimension=='s') ? "" : "s"); - if(GLOBALS->global_time_offset) { w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$timezero\n\t"TTFormat"\n$end\n",GLOBALS->global_time_offset); } + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$date\n"); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "\t%s",asctime(localtime(&walltime))); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$end\n"); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$version\n\t"WAVE_VERSION_INFO"\n$end\n"); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$timescale\n\t%d%c%s\n$end\n", (int)GLOBALS->time_scale, GLOBALS->time_dimension, (GLOBALS->time_dimension=='s') ? "" : "s"); + if(GLOBALS->global_time_offset) { w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$timezero\n\t"TTFormat"\n$end\n",GLOBALS->global_time_offset); } } else { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$comment data_start %p $end\n", (void *)trans_head); /* arbitrary hex identifier */ - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$comment name %s $end\n", trans_head->name ? trans_head->name : "UNKNOWN"); - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$timescale %d%c%s $end\n", (int)GLOBALS->time_scale, GLOBALS->time_dimension, (GLOBALS->time_dimension=='s') ? "" : "s"); - if(GLOBALS->global_time_offset) { w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$timezero "TTFormat" $end\n",GLOBALS->global_time_offset); } - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$comment min_time "TTFormat" $end\n", GLOBALS->min_time / GLOBALS->time_scale); - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$comment max_time "TTFormat" $end\n", GLOBALS->max_time / GLOBALS->time_scale); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$comment data_start %p $end\n", (void *)trans_head); /* arbitrary hex identifier */ + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$comment name %s $end\n", trans_head->name ? trans_head->name : "UNKNOWN"); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$timescale %d%c%s $end\n", (int)GLOBALS->time_scale, GLOBALS->time_dimension, (GLOBALS->time_dimension=='s') ? "" : "s"); + if(GLOBALS->global_time_offset) { w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$timezero "TTFormat" $end\n",GLOBALS->global_time_offset); } + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$comment min_time "TTFormat" $end\n", GLOBALS->min_time / GLOBALS->time_scale); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$comment max_time "TTFormat" $end\n", GLOBALS->max_time / GLOBALS->time_scale); } } if(export_typ == WAVE_EXPORT_TRANS) { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$comment max_seqn %d $end\n", nodecnt); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$comment max_seqn %d $end\n", nodecnt); if(t && t->transaction_args) { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$comment args \"%s\" $end\n", t->transaction_args); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$comment args \"%s\" $end\n", t->transaction_args); } } @@ -542,11 +564,11 @@ { int was_packed = HIER_DEPACK_STATIC; char *hname = hier_decompress_flagged(GLOBALS->hp_vcd_saver_c_1[i]->item->nname, &was_packed); - char *netname = lxt ? hname : output_hier(hname); + char *netname = lxt ? hname : output_hier(is_trans, hname); if(export_typ == WAVE_EXPORT_TRANS) { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$comment seqn %d %s $end\n", GLOBALS->hp_vcd_saver_c_1[i]->val, hname); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$comment seqn %d %s $end\n", GLOBALS->hp_vcd_saver_c_1[i]->val, hname); } if(GLOBALS->hp_vcd_saver_c_1[i]->flags & (HIST_REAL|HIST_STRING)) @@ -559,7 +581,7 @@ { const char *typ = (GLOBALS->hp_vcd_saver_c_1[i]->flags & HIST_STRING) ? "string" : "real"; int tlen = (GLOBALS->hp_vcd_saver_c_1[i]->flags & HIST_STRING) ? 0 : 1; - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$var %s %d %s %s $end\n", typ, tlen, vcdid(GLOBALS->hp_vcd_saver_c_1[i]->val, export_typ), netname); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$var %s %d %s %s $end\n", typ, tlen, vcdid(GLOBALS->hp_vcd_saver_c_1[i]->val, export_typ), netname); } } else @@ -585,7 +607,7 @@ } else { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$var wire 1 %s %s $end\n", vcdid(GLOBALS->hp_vcd_saver_c_1[i]->val, export_typ), netname); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$var wire 1 %s %s $end\n", vcdid(GLOBALS->hp_vcd_saver_c_1[i]->val, export_typ), netname); } } else @@ -597,7 +619,7 @@ } else { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$var wire %d %s %s $end\n", len, vcdid(GLOBALS->hp_vcd_saver_c_1[i]->val, export_typ), netname); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$var wire %d %s %s $end\n", len, vcdid(GLOBALS->hp_vcd_saver_c_1[i]->val, export_typ), netname); } GLOBALS->hp_vcd_saver_c_1[i]->len = len; if(len > max_len) max_len = len; @@ -611,11 +633,11 @@ if(!lxt) { - output_hier(""); + output_hier(is_trans, ""); free_hier(); - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$enddefinitions $end\n"); - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$dumpvars\n"); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$enddefinitions $end\n"); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$dumpvars\n"); } /* value changes */ @@ -646,7 +668,7 @@ } else { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "#"TTFormat"\n", tnorm); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "#"TTFormat"\n", tnorm); } prevtime = GLOBALS->hp_vcd_saver_c_1[0]->hist->time; } @@ -672,11 +694,11 @@ vec_escaped[vlen] = 0; if(vlen) { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "s%s %s\n", vec_escaped, vcdid(GLOBALS->hp_vcd_saver_c_1[0]->val, export_typ)); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "s%s %s\n", vec_escaped, vcdid(GLOBALS->hp_vcd_saver_c_1[0]->val, export_typ)); } else { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "s\\000 %s\n", vcdid(GLOBALS->hp_vcd_saver_c_1[0]->val, export_typ)); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "s\\000 %s\n", vcdid(GLOBALS->hp_vcd_saver_c_1[0]->val, export_typ)); } free_2(vec_escaped); } @@ -705,7 +727,7 @@ } else { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "r%.16g %s\n", value, vcdid(GLOBALS->hp_vcd_saver_c_1[0]->val, export_typ)); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "r%.16g %s\n", value, vcdid(GLOBALS->hp_vcd_saver_c_1[0]->val, export_typ)); } } } @@ -734,7 +756,7 @@ } else { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "b%s %s\n", vcd_truncate_bitvec(row_data), vcdid(GLOBALS->hp_vcd_saver_c_1[0]->val, export_typ)); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "b%s %s\n", vcd_truncate_bitvec(row_data), vcdid(GLOBALS->hp_vcd_saver_c_1[0]->val, export_typ)); } } else @@ -748,7 +770,7 @@ } else { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "%c%s\n", analyzer_demang(lxt, GLOBALS->hp_vcd_saver_c_1[0]->hist->v.h_val), vcdid(GLOBALS->hp_vcd_saver_c_1[0]->val, export_typ)); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "%c%s\n", analyzer_demang(lxt, GLOBALS->hp_vcd_saver_c_1[0]->hist->v.h_val), vcdid(GLOBALS->hp_vcd_saver_c_1[0]->val, export_typ)); } } } @@ -764,7 +786,7 @@ } else { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "#"TTFormat"\n", GLOBALS->max_time / GLOBALS->time_scale); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "#"TTFormat"\n", GLOBALS->max_time / GLOBALS->time_scale); } } @@ -789,7 +811,7 @@ } else { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$comment data_end %p $end\n", (void *)trans_head); /* arbitrary hex identifier */ + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$comment data_end %p $end\n", (void *)trans_head); /* arbitrary hex identifier */ #if !defined _MSC_VER && !defined __MINGW32__ fflush(GLOBALS->f_vcd_saver_c_1); #endif @@ -842,7 +864,7 @@ * navigate up and down the scope hierarchy and * emit the appropriate vcd scope primitives */ -static void diff_hier(struct namehier *nh1, struct namehier *nh2) +static void diff_hier(int is_trans, struct namehier *nh1, struct namehier *nh2) { /* struct namehier *nhtemp; */ /* scan-build */ @@ -850,7 +872,7 @@ { while((nh1)&&(nh1->not_final)) { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$scope module %s $end\n", nh1->name); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$scope module %s $end\n", nh1->name); nh1=nh1->next; } return; @@ -868,7 +890,7 @@ /* nhtemp=nh1; */ /* scan-build */ while((nh1)&&(nh1->not_final)) { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$scope module %s $end\n", nh1->name); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$scope module %s $end\n", nh1->name); nh1=nh1->next; } break; @@ -879,7 +901,7 @@ /* nhtemp=nh2; */ /* scan-build */ while((nh2)&&(nh2->not_final)) { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$upscope $end\n"); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$upscope $end\n"); nh2=nh2->next; } break; @@ -890,14 +912,14 @@ /* nhtemp=nh2; */ /* prune old hier */ /* scan-build */ while((nh2)&&(nh2->not_final)) { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$upscope $end\n"); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$upscope $end\n"); nh2=nh2->next; } /* nhtemp=nh1; */ /* add new hier */ /* scan-build */ while((nh1)&&(nh1->not_final)) { - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, "$scope module %s $end\n", nh1->name); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$scope module %s $end\n", nh1->name); nh1=nh1->next; } break; @@ -912,7 +934,7 @@ /* * output scopedata for a given name if needed, return pointer to name string */ -char *output_hier(char *name) +char *output_hier(int is_trans, char *name) { char *pnt, *pnt2; char *s; @@ -973,7 +995,7 @@ pnt=(++pnt2); } -diff_hier(nh_head, GLOBALS->nhold_vcd_saver_c_1); +diff_hier(is_trans, nh_head, GLOBALS->nhold_vcd_saver_c_1); free_hier(); GLOBALS->nhold_vcd_saver_c_1=nh_head; @@ -1063,7 +1085,7 @@ h_val = invert ? AN_USTR_INV[ha[i]->v.h_val] : AN_USTR[ha[i]->v.h_val]; } - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, + w32redirect_fprintf(0, GLOBALS->f_vcd_saver_c_1, "Digital_Signal\n" " Position: %d\n" " Height: 24\n" @@ -1086,14 +1108,14 @@ } h_val = invert ? AN_USTR_INV[ha[i]->v.h_val] : AN_USTR[ha[i]->v.h_val]; - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, " Edge: "TTFormat".0 %c\n", ha[i]->time, h_val); + w32redirect_fprintf(0, GLOBALS->f_vcd_saver_c_1, " Edge: "TTFormat".0 %c\n", ha[i]->time, h_val); } } if(first) { /* need to emit blank trace */ - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, + w32redirect_fprintf(0, GLOBALS->f_vcd_saver_c_1, "Digital_Signal\n" " Position: %d\n" " Height: 24\n" @@ -1284,7 +1306,7 @@ h_val = get_hptr_vector_val(t, ha[i]); } - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, + w32redirect_fprintf(0, GLOBALS->f_vcd_saver_c_1, "Digital_Bus\n" " Position: %d\n" " Height: 24\n" @@ -1310,14 +1332,14 @@ if(h_val) free_2(h_val); h_val = get_hptr_vector_val(t, ha[i]); - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, " Edge: "TTFormat".0 %s\n", ha[i]->time, h_val); + w32redirect_fprintf(0, GLOBALS->f_vcd_saver_c_1, " Edge: "TTFormat".0 %s\n", ha[i]->time, h_val); } } if(first) { /* need to emit blank trace */ - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, + w32redirect_fprintf(0, GLOBALS->f_vcd_saver_c_1, "Digital_Bus\n" " Position: %d\n" " Height: 24\n" @@ -1429,7 +1451,7 @@ h_val = get_vptr_vector_val(t, ha[i]); } - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, + w32redirect_fprintf(0, GLOBALS->f_vcd_saver_c_1, "Digital_Bus\n" " Position: %d\n" " Height: 24\n" @@ -1455,14 +1477,14 @@ if(h_val) free_2(h_val); h_val = get_vptr_vector_val(t, ha[i]); - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, " Edge: "TTFormat".0 %s\n", ha[i]->time, h_val); + w32redirect_fprintf(0, GLOBALS->f_vcd_saver_c_1, " Edge: "TTFormat".0 %s\n", ha[i]->time, h_val); } } if(first) { /* need to emit blank trace */ - w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, + w32redirect_fprintf(0, GLOBALS->f_vcd_saver_c_1, "Digital_Bus\n" " Position: %d\n" " Height: 24\n" @@ -1549,7 +1571,7 @@ pnt=strchr(time_prefix, (int)GLOBALS->time_dimension); if(pnt) { offset=pnt-time_prefix; } else offset=0; -w32redirect_fprintf(GLOBALS->f_vcd_saver_c_1, +w32redirect_fprintf(0, GLOBALS->f_vcd_saver_c_1, "Timing Analyzer Settings\n" " Time_Scale: %E\n" " Time_Per_Division: %E\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.68/src/vcd_saver.h new/gtkwave-3.3.70/src/vcd_saver.h --- old/gtkwave-3.3.68/src/vcd_saver.h 2011-05-30 04:19:08.000000000 +0200 +++ new/gtkwave-3.3.70/src/vcd_saver.h 2016-02-15 23:36:59.000000000 +0100 @@ -25,7 +25,7 @@ /* from helpers/scopenav.c */ extern void free_hier(void); -extern char *output_hier(char *name); +extern char *output_hier(int is_trans, char *name); #endif
