
Hi,
appended is a diff against the latest svn repository about some common and some win related issues:
common stuff:
* lib/smi.c: changed smiAsprintf() calls to format SMI_LANGUAGE_UNKNOWN as decimal value.
comment: SMI_LANGUAGE_UNKNOWN is defined as 0 in lib/smi.h.in, so putting it as a format-string parameter to smiAsprintf() will fail. but i guess, replacing ``smiAsprintf(&s, SMI_LANGUAGE_UNKNOWN)'' by ``smiAsprintf(&s, "%s", "<language unknown>")'' would be more helpful.
* tools/dump-cm.c: explicit casting of double precision calculation to float.
comment: something like ``(float) val / 2.0'' results in a double value, because the float cast only belongs to val. so a ``(float) (val / 2.0)'' is better; but in ages of processor integrated math-units using double values should be no problem anyway.
* tools/dump-sizes.c: win-platform support and int64 abs calculation fix.
comment: the abs(3) function from stdlib.h takes and returns a integer, leading to possible precision loss with int64 values. at least linux has a llabs() call, but at least vc6 does not support it, so introducing this local m_abs() macro should be a good way to go.
* tools/dump-svg.c: unused variable cleanup
comment: this just cosmetic.
* tools/dump-xsd.c: win-platform support and use of predefined UINT64_MAX values instead of local hardcoded constants.
constants: likewise used in other modules this is for portability, especially windows, only.
and these explicitly win related changes:
* win/makefile: add dump-svg module.
* win/win.h: include limits.h for 64bit limits.
* win/Makefile.mingw: add dump-svg module and make linux cross-compile the default setting
well, at least the smiAsprintf() change in lib/smi.c and the m_abs() macro in tools/dump-sizes.c seems to be a real bugfix and should be worth to be included.
have fun, Erik
----------------------------------------------------------------------
diff -d -u -r libsmi-svn-2004-10-05-orig/lib/smi.c libsmi-svn-2004-10-05/lib/smi.c --- libsmi-svn-2004-10-05-orig/lib/smi.c Tue Oct 5 14:44:57 2004 +++ libsmi-svn-2004-10-05/lib/smi.c Tue Oct 5 22:49:06 2004 @@ -1768,7 +1768,7 @@ if (! isascii((int) smiValuePtr->value.ptr[i+k])) { smiFree(s); if (flags & SMI_RENDER_UNKNOWN) { - smiAsprintf(&s, SMI_LANGUAGE_UNKNOWN); + smiAsprintf(&s, "%d", SMI_LANGUAGE_UNKNOWN); } else { s = NULL; } @@ -1832,7 +1832,7 @@ default: smiFree(s); if (flags & SMI_RENDER_UNKNOWN) { - smiAsprintf(&s, SMI_LANGUAGE_UNKNOWN); + smiAsprintf(&s, "%d", SMI_LANGUAGE_UNKNOWN); } else { s = NULL; } @@ -1913,7 +1913,7 @@ case SMI_BASETYPE_UNKNOWN: default: if (flags & SMI_RENDER_UNKNOWN) { - smiAsprintf(&s, SMI_LANGUAGE_UNKNOWN); + smiAsprintf(&s, "%d", SMI_LANGUAGE_UNKNOWN); } else { s = NULL; } diff -d -u -r libsmi-svn-2004-10-05-orig/tools/dump-cm.c libsmi-svn-2004-10-05/tools/dump-cm.c --- libsmi-svn-2004-10-05-orig/tools/dump-cm.c Tue Oct 5 14:44:48 2004 +++ libsmi-svn-2004-10-05/tools/dump-cm.c Tue Oct 5 22:56:14 2004 @@ -2196,22 +2196,22 @@
static float getRectSX(GraphNode *tNode) { - return (float) tNode->dia.w / 2.0 + tNode->dia.x - RECTCORRECTION; + return (float) (tNode->dia.w / 2.0 + tNode->dia.x - RECTCORRECTION); }
static float getRectEX(GraphNode *tNode) { - return (float) tNode->dia.w / 2.0 + tNode->dia.x + RECTCORRECTION; + return (float) (tNode->dia.w / 2.0 + tNode->dia.x + RECTCORRECTION); }
static float getRectSY(GraphNode *tNode) { - return (float) tNode->dia.y - 2.0 - RECTCORRECTION; + return (float) (tNode->dia.y - 2.0 - RECTCORRECTION); }
static float getRectEY(GraphNode *tNode) { - return (float) tNode->dia.y - 2.0 + RECTCORRECTION; + return (float) (tNode->dia.y - 2.0 + RECTCORRECTION); }
@@ -2244,7 +2244,7 @@ return node->dia.x; break; case 1 : - return node->dia.w / 2.0 + node->dia.x; + return (float) (node->dia.w / 2.0 + node->dia.x); break; case 2 : return node->dia.x + node->dia.w; @@ -2259,7 +2259,7 @@ return node->dia.x; break; case 6 : - return node->dia.w / 2.0 + node->dia.x; + return (float) (node->dia.w / 2.0 + node->dia.x); break; case 7 : return node->dia.x + node->dia.w; @@ -2281,10 +2281,10 @@ return node->dia.y; break; case 3 : - return node->dia.y + TABLEHEIGHT / 2.0; + return (float) (node->dia.y + TABLEHEIGHT / 2.0); break; case 4 : - return node->dia.y + TABLEHEIGHT / 2.0; + return (float) (node->dia.y + TABLEHEIGHT / 2.0); break; case 5 : return node->dia.y + node->dia.h; @@ -2323,10 +2323,10 @@ return node->dia.y - dist; break; case 3 : - return node->dia.y + TABLEHEIGHT / 2.0; + return (float) (node->dia.y + TABLEHEIGHT / 2.0); break; case 4 : - return node->dia.y + TABLEHEIGHT / 2.0; + return (float) (node->dia.y + TABLEHEIGHT / 2.0); break; case 5 : return node->dia.y + node->dia.h + dist; diff -d -u -r libsmi-svn-2004-10-05-orig/tools/dump-sizes.c libsmi-svn-2004-10-05/tools/dump-sizes.c --- libsmi-svn-2004-10-05-orig/tools/dump-sizes.c Tue Oct 5 14:44:50 2004 +++ libsmi-svn-2004-10-05/tools/dump-sizes.c Tue Oct 5 23:05:17 2004 @@ -15,12 +15,19 @@
#include <stdio.h> #include <string.h> +#ifdef HAVE_WIN_H +#include "win.h" +#endif
#include "smi.h" #include "smidump.h"
static int silent = 0;
+/* + * help functions + */ +#define m_abs(a) ((a) < 0 ? -(a) : (a))
static SmiInteger32 getAbsMinEnum(SmiType *smiType) @@ -155,7 +162,7 @@ { SmiType *parent; SmiRange *range; - SmiInteger64 min = 9223372036854775808ULL; + SmiInteger64 min = LIBSMI_INT64_MAX;
range = smiGetFirstRange(smiType); if (! range) { @@ -164,8 +171,8 @@ }
for (; range; range = smiGetNextRange(range)) { - if (abs(range->minValue.value.integer64) < min) { - min = abs(range->minValue.value.integer64); + if (m_abs(range->minValue.value.integer64) < min) { + min = m_abs(range->minValue.value.integer64); } } return min; @@ -187,8 +194,8 @@ }
for (; range; range = smiGetNextRange(range)) { - if (abs(range->maxValue.value.integer64) > max) { - max = abs(range->maxValue.value.integer64); + if (m_abs(range->maxValue.value.integer64) > max) { + max = m_abs(range->maxValue.value.integer64); } } return max; diff -d -u -r libsmi-svn-2004-10-05-orig/tools/dump-svg.c libsmi-svn-2004-10-05/tools/dump-svg.c --- libsmi-svn-2004-10-05-orig/tools/dump-svg.c Tue Oct 5 14:44:48 2004 +++ libsmi-svn-2004-10-05/tools/dump-svg.c Tue Oct 5 23:32:08 2004 @@ -2543,7 +2543,6 @@ static void printSVGTitle(int modc, SmiModule **modv) { size_t length; - float width; char *note; int i;
diff -d -u -r libsmi-svn-2004-10-05-orig/tools/dump-xsd.c libsmi-svn-2004-10-05/tools/dump-xsd.c --- libsmi-svn-2004-10-05-orig/tools/dump-xsd.c Tue Oct 5 14:44:51 2004 +++ libsmi-svn-2004-10-05/tools/dump-xsd.c Tue Oct 5 22:37:29 2004 @@ -21,6 +21,9 @@ #include <string.h> #include <ctype.h> #include <time.h> +#ifdef HAVE_WIN_H +#include "win.h" +#endif
#include "smi.h" #include "smidump.h" @@ -1024,7 +1027,7 @@ SmiUnsigned64 min, max;
min = 0; - max = 18446744073709551615ULL; + max = LIBSMI_UINT64_MAX;
fprintStdRestHead( f, smiType ); @@ -1261,7 +1264,7 @@ SmiUnsigned64 min, max;
min = 0; - max = 18446744073709551615ULL; + max = LIBSMI_UINT64_MAX;
if( smiRange->minValue.value.unsigned64 < min ) { min = smiRange->minValue.value.unsigned64; diff -d -u -r libsmi-svn-2004-10-05-orig/win/Makefile.mingw libsmi-svn-2004-10-05/win/Makefile.mingw --- libsmi-svn-2004-10-05-orig/win/Makefile.mingw Tue Oct 5 14:44:47 2004 +++ libsmi-svn-2004-10-05/win/Makefile.mingw Tue Oct 5 23:46:27 2004 @@ -26,20 +26,26 @@ ## ## Commands: ## -CC = gcc -CP = copy -RM = del -AR = ar -MKDIR = -mkdir + +## +## Linux cross-compile is now the way to go. +## compilation within win-environment works, but you need to +## change path an options settings to get installation work. +## +# CC = gcc +# CP = copy +# RM = del +# AR = ar +# MKDIR = -mkdir
## ## Debian Linux mingw cross-compiler version: ## -# CC = i586-mingw32msvc-gcc -# CP = cp -# RM = rm -f -# AR = i586-mingw32msvc-ar -# MKDIR = -mkdir +CC = i586-mingw32msvc-gcc +CP = cp +RM = rm -f +AR = i586-mingw32msvc-ar +MKDIR = -mkdir
## ## Definitions: @@ -87,7 +93,8 @@ dump-scli.o \ dump-xsd.o \ dump-sppi.o \ - dump-sizes.o + dump-sizes.o \ + dump-svg.o # dump-smiv3.o # dump-fig.o
@@ -125,7 +132,7 @@ dump-imports.o dump-types.o dump-tree.o dump-mosy.o \ dump-corba.o dump-netsnmp.o dump-cm.o dump-jax.o dump-xml.o \ dump-identifiers.o dump-metrics.o dump-python.o dump-perl.o \ - dump-scli.o dump-xsd.o dump-sppi.o dump-sizes.o \ + dump-scli.o dump-xsd.o dump-sppi.o dump-sizes.o dump-svg.o \ shhopt.o $(SMILIB)
smidiff.exe: $(TOOLSOBJS) $(SMILIB) diff -d -u -r libsmi-svn-2004-10-05-orig/win/makefile libsmi-svn-2004-10-05/win/makefile --- libsmi-svn-2004-10-05-orig/win/makefile Tue Oct 5 14:44:47 2004 +++ libsmi-svn-2004-10-05/win/makefile Tue Oct 5 22:45:03 2004 @@ -105,7 +105,8 @@ $(TMPDIR)\dump-scli.obj \ $(TMPDIR)\dump-xsd.obj \ $(TMPDIR)\dump-sppi.obj \ - $(TMPDIR)\dump-sizes.obj + $(TMPDIR)\dump-sizes.obj \ + $(TMPDIR)\dump-svg.obj
SMIDIFFOBJS = \ $(TMPDIR)\smidiff.obj diff -d -u -r libsmi-svn-2004-10-05-orig/win/win.h libsmi-svn-2004-10-05/win/win.h --- libsmi-svn-2004-10-05-orig/win/win.h Tue Oct 5 14:44:47 2004 +++ libsmi-svn-2004-10-05/win/win.h Tue Oct 5 22:36:36 2004 @@ -16,6 +16,7 @@ #define _WIN_H
#include <ctype.h> +#include <limits.h> #include <io.h>
/*