diff --git a/ChangeLog b/ChangeLog
index 209d86836..8e55c472d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2002-01-03 Paolo Nenzi
+
+ * acconfig.h: added define needed for Windows and some aesthetic
+ rework (from Holger Vogt patch).
+
+ * configure.in: added macros to handle windows related
+ issues (Holger patch and me).
+
+ * INSTALL: added documentation on ngspice compilation under
+ Windows (Holger Vogt patch).
+
+ * Makefile.am: added Windows compilation code (Holger Vogt patch and
+ me).
+
+
+
2001-12-05 Emmanuel Rouat
* configure.in: removed (unnecessary) macros to handle GNU getopt
diff --git a/INSTALL b/INSTALL
index 9e8a41cc5..c22594ee2 100644
--- a/INSTALL
+++ b/INSTALL
@@ -151,3 +151,52 @@ operates.
script, and exit.
`configure' also accepts some other, not widely useful, options.
+
+
+
+NGSPICE COMPILATION UNDER WINDOWS OS
+====================================
+
+
+make ngspice with CYGWIN and external MINGW32
+
+according to http://www.geocrawler.com/lists/3/SourceForge/6013/0/7321042/
+
+
+$ cd ng-spice-rework-14
+$ export PATH="/cygdrive/g/gcc_mingw/bin:$PATH"
+$ autoconf
+$ rm config.cache
+$ ./configure --with-windows --prefix="/cygdrive/g/gcc_mingw/bin"
+$ make clean
+$ make 2> make.err
+
+$ cp config.h config_ming.h
+
+ngspice.exe is o.k.,but make tests does not work (cannot direct console
+output into file). Needs to add .save "what" "where.test" to every input
+(*.cir) file. Also all given output files have to be adapted to WINDOWS (CR/LF
+instead of only LF at each line ending) for allowing proper comparison.
+
+
+
+make ngspice with CYGWIN and internal MINGW32 (use config.h made above)
+
+$ cd ng-spice-rework-14
+$ rm config.cache
+$ export CFLAGS="-mno-cygwin -g -O2"
+$ export LDFLAGS="-L/lib/mingw"
+$ export CPPFLAGS="-I/usr/include/mingw"
+$ ./configure --with-windows
+$ cp config_ming.h config.h
+$ make clean
+$ make 2> make.err
+
+./configure does not work correctly: It finds headers and libs which are not
+really available in the -mno-cygwin port of MINGW32. Therefore config.h is
+not o.k.
+
+ToDo: find appropriate presets for variables ?
+ rewrite tests for headers and libs (search exclusively in mingw
+ directories)
+
diff --git a/acconfig.h b/acconfig.h
index 1c283fcc2..63fdc6319 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -32,8 +32,14 @@
/* Undefine HAVE_EKV since it is not included in the standard distribution */
#undef HAVE_EKV
-/* Define if we have GNU readline */
+/* Undefine HAVE_GNUREADLINE */
#undef HAVE_GNUREADLINE
/* We do not want spurios debug info into non-developer code */
#undef FTEDEBUG
+
+/* Generate MS WINDOWS executable */
+#undef HAS_WINDOWS
+
+/* get system memory and time */
+#undef HAVE__MEMAVL
diff --git a/configure.in b/configure.in
index 828f69543..e3c783ee7 100644
--- a/configure.in
+++ b/configure.in
@@ -1,6 +1,9 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT(src/main.c)
+dnl Keep old autoconf version, procedure is not compatible to new 2.5.2
+AC_PREREQ(2.13)
+
dnl Create a configuration header
AM_CONFIG_HEADER(config.h)
@@ -57,6 +60,7 @@ AM_MAINTAINER_MODE
dnl Work on compiler options according to system:
dnl Set default CFLAG - only use -Wall if we have gcc
+
AC_PROG_CC
if test "x$GCC" = "xyes"; then
@@ -106,6 +110,22 @@ AC_LIBTOOL_DLOPEN
AM_PROG_LIBTOOL
+dnl --with-windows : the user wants to use generate the MS WINDOWS executable
+AC_ARG_WITH(windows,
+ [ --with-windows MS WINDOWS executable],
+dnl set HAS_WINDOWS flag:
+ AC_DEFINE(HAS_WINDOWS)
+)
+
+
+case $with_windows in
+
+ yes )
+ AC_DEFINE(X_DISPLAY_MISSING)
+ AC_MSG_RESULT(No X display!)
+ CFLAGS="$CFLAGS -mwindows";;
+ *)
+
dnl Checks for X11 header files and libraries - X11 support can be disabled
dnl by passing the '--without-x' option to configure:
@@ -117,16 +137,18 @@ AC_PATH_XTRA
dnl Checks for X libraries - if X11 wasn't found then don't make following
dnl tests and compile without X11 support - otherwise, check if the following
dnl libraries are present (error if they are not)
-
+dnl In CYGWIN library ordering has to be changed. Is this compatible to LINUX?
+dnl XShmAttach is a struct in CYGWIN, not a function
if test ! "$no_x" = "yes" ; then
- X_LIBS="$X_LIBS -lX11 -lXt"
- AC_CHECK_LIB(Xext, XShmAttach,X_LIBS="$X_LIBS -lXext",AC_MSG_ERROR(Couldn't find Xext librairies), $X_LIBS $X_EXTRA_LIBS)
- AC_CHECK_LIB(Xmu,main,X_LIBS="$X_LIBS -lXmu",AC_MSG_ERROR(Couldn't find Xmu librairies), $X_LIBS $X_EXTRA_LIBS)
AC_CHECK_LIB(Xaw,main,X_LIBS="$X_LIBS -lXaw",AC_MSG_ERROR(Couldn't find Xaw librairies),$X_LIBS $X_EXTRA_LIBS)
+ X_LIBS="$X_LIBS -lXt"
+ AC_CHECK_LIB(Xmu,main,X_LIBS="$X_LIBS -lXmu",AC_MSG_ERROR(Couldn't find Xmu librairies), $X_LIBS $X_EXTRA_LIBS)
+ AC_CHECK_LIB(Xext,main,X_LIBS="$X_LIBS -lXext",AC_MSG_ERROR(Couldn't find Xext librairies), $X_LIBS $X_EXTRA_LIBS)
+ X_LIBS="$X_LIBS -lX11 -lXpm"
+fi ;;
-
-fi
+esac
dnl Check for a few typdefs:
AC_TYPE_PID_T
@@ -135,8 +157,8 @@ AC_TYPE_SIGNAL
dnl Check for a few libraries and headers:
dnl Look for ncurses first, then termcap
-AC_SEARCH_LIBS(tputs,ncurses termcap,AC_DEFINE(HAVE_TERMCAP),
- AC_MSG_ERROR(Found neither ncurses or termcap))
+#AC_SEARCH_LIBS(tputs,ncurses termcap,AC_DEFINE(HAVE_TERMCAP),
+# AC_MSG_ERROR(Found neither ncurses or termcap))
AC_HEADER_DIRENT
@@ -149,13 +171,20 @@ AC_HEADER_TIME
AC_STRUCT_TM
AC_STRUCT_TIMEZONE
AC_CHECK_FUNCS(localtime)
-AC_CHECK_FUNCS(gettimeofday time ftime , break)
-AC_CHECK_FUNCS(getrusage utimes, break)
-AC_CHECK_FUNCS(getrlimit ulimit, break)
+
+case $host_os in
+ *cygwin* )
+ AC_CHECK_FUNCS(ftime)
+ AC_DEFINE(HAVE__MEMAVL) ;;
+ * )
+ AC_CHECK_FUNCS(gettimeofday time ftime , break)
+ AC_CHECK_FUNCS(getrusage utimes, break)
+ AC_CHECK_FUNCS(getrlimit ulimit, break) ;;
+esac
dnl Look for termios first (posix)
AC_CHECK_HEADERS(termios.h termio.h sgtty.h , break)
-AC_CHECK_FUNCS(isatty)
+AC_CHECK_FUNCS(isatty tcgetattr tcsetattr)
dnl Check for a few functions:
AC_FUNC_VFORK
@@ -177,9 +206,12 @@ dnl Check for the garbage collector:
AC_CHECK_LIB(gc,GC_malloc,AC_DEFINE(HAVE_LIBGC) LIBS="$LIBS -lgc")
dnl Check for the asprintf function:
-AC_CHECK_FUNCS(asprintf)
+AC_CHECK_FUNCS(asprintf,,AC_CHECK_LIB(iberty,asprintf,AC_DEFINE(HAVE_ASPRINTF) LIBS="$LIBS -liberty"))
+# AC_CHECK_FUNC(getopt_long, getopt_long=true)
+# AM_CONDITIONAL(HAVE_GETOPT_LONG, test "$getopt_long" = "true")
+
# Expand the prefix variable (this is really annoying!)
if eval "test x$prefix = xNONE"; then
dprefix=$ac_default_prefix
@@ -187,10 +219,22 @@ else
dprefix=$prefix
fi
+
AC_DEFINE_UNQUOTED(NGSPICEBINDIR, "`echo $dprefix/bin`" )
AC_DEFINE_UNQUOTED(NGSPICEDATADIR, "`echo $dprefix/share/ng-spice-rework`" )
AC_DEFINE_UNQUOTED(NGSPICEBUILDDATE, "`date`" )
+dnl with the MS WINDOWS executable we suggest /spice_win/bin as *.exe-path
+if test "$with_windows" = "yes"; then
+dnl redefine the path for WINDOWS:
+ AC_MSG_RESULT(WINDOWS cide enabled)
+ AC_DEFINE_UNQUOTED(NGSPICEBINDIR, "`echo /spice_win/bin`" )
+ AC_DEFINE_UNQUOTED(NGSPICEDATADIR, "`echo /spice_win/lib`" )
+ WINMAIN = "winmain.o"
+else
+ WINMAIN =""
+fi
+AC_SUBST(WINMAIN)
# Recapitulate settings:
AC_MSG_RESULT(Settings which were chosen:)
@@ -297,6 +341,7 @@ src/frontend/Makefile \
src/frontend/help/Makefile \
src/frontend/parser/Makefile \
src/frontend/plotting/Makefile \
+src/frontend/wdisp/Makefile \
src/include/Makefile \
src/maths/Makefile \
src/maths/cmaths/Makefile \
@@ -312,6 +357,6 @@ tests/resistance/Makefile \
tests/bsim3soipd/Makefile \
tests/bsim3soifd/Makefile \
tests/bsim3soidd/Makefile \
-tests/bsim4/Makefile \
+tests/bsim4/Makefile \
tests/mesa/Makefile
)
diff --git a/src/ChangeLog b/src/ChangeLog
index 797bb4c7a..d50db54c2 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,16 @@
+2002-01-03 Paolo Nenzi
+
+ * main.c: Some code additions for Windows support (Holger Vogt patch).
+
+ * maths/cmaths/Makefile.am: reintegrated test code removed from
+ Holger Vogt patch (this may cause trouble under Windows).
+
+ * maths/cmaths/cmath1.c, maths/cmaths/test_cx_ph.c: small changes to
+ support Windows (Holger Vogt patch).
+
+ * winmain.c: added file for Windows port (Holger Vogt).
+
+
2001-12-04 Emmanuel Rouat
* maths/cmaths/Makefile.am (noinst_PROGRAMS): test programs
diff --git a/src/Makefile.am b/src/Makefile.am
index 49ceea3cb..0967d3c83 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -63,12 +63,15 @@ DYNAMIC_DEVICELIBS = \
ngspice_SOURCES = \
conf.c \
conf.h \
- ngspice.c
+ ngspice.c
ngspice_LDADD = \
+ @WINMAIN@ \
spice.o \
frontend/libfte.a \
+ frontend/wdisp/libwindisp.a \
frontend/plotting/libplotting.a \
+ spicelib/devices/dev.o \
$(DYNAMIC_DEVICELIBS) \
spicelib/analysis/libckt.a \
spicelib/devices/libdev.a \
@@ -83,7 +86,10 @@ ngspice_LDADD = \
misc/libmisc.a
-spice.o: main.c
+winmain.o: winmain.c
+ $(COMPILE) -DSIMULATOR -o winmain.o -c $(srcdir)/winmain.c
+
+spice.o: main.c
$(COMPILE) -DSIMULATOR -o spice.o -c $(srcdir)/main.c
## nutmeg:
@@ -95,7 +101,9 @@ ngnutmeg_SOURCES = \
ngnutmeg.c
ngnutmeg_LDADD = \
+ @WINMAIN@ \
frontend/libfte.a \
+ frontend/wdisp/libwindisp.a \
frontend/plotting/libplotting.a \
frontend/parser/libparser.a \
frontend/help/libhlp.a \
diff --git a/src/conf.c b/src/conf.c
index ccc8fddf8..ca6f1d6a6 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -7,10 +7,21 @@
char Spice_Version[ ] = VERSION;
char Spice_Notice[ ] = "Please submit bug-reports to: ng-spice-bugs@ieee.ing.uniroma1.it";
char Spice_Build_Date[ ] = NGSPICEBUILDDATE;
+/*
+char *Spice_Exec_Dir = "/spice_win/bin";
+char *Spice_Lib_Dir = "/spice_win/lib";
+*/
char *Spice_Exec_Dir = NGSPICEBINDIR;
char *Spice_Lib_Dir = NGSPICEDATADIR;
+
+#ifdef __MINGW32__
+char *Def_Editor = "notepad.exe";
+int AsciiRawFile = 1;
+#else
char *Def_Editor = "vi";
int AsciiRawFile = 0;
+#endif
+
char *Bug_Addr = "ng-spice-bugs@ieee.ing.uniroma1.it";
char *Spice_Host = "";
diff --git a/src/frontend/ChangeLog b/src/frontend/ChangeLog
index 180ac51b8..72357a300 100644
--- a/src/frontend/ChangeLog
+++ b/src/frontend/ChangeLog
@@ -1,4 +1,16 @@
-2001-12-14 Paolo Nenzi
+2002-01-03 Paolo Nenzi
+
+ * wdisp: added an entire directory containing windows frontend code
+ (Holger Vogt patch). Files in wdsip: ftegraf.h, makedefs, Makefile.am,
+ windisp.c and winprint.c.
+
+ * Makefile.am: Windows code compilation rules added to makefile.
+
+ * display.c, outitf.c, rawfile.c, resource.c, runcoms.c: added
+ defines for Windows (Holger Vogt patch).
+
+
+2001-12-14 Paolo Nenzi
* control.c, control.h, com_cdump.c, com_cdump.h, variable.c, variable.h:
Patched the code with the one contributed by Charles Williams. The patches
@@ -6,7 +18,7 @@
2001-11-25 Emmanuel Rouat
- * circuits.h: transfered definition of sstructire 'circ' to ftedefs.h
+ * circuits.h: transfered definition of structure 'circ' to ftedefs.h
2001-02-07 Paolo Nenzi
diff --git a/src/frontend/Makefile.am b/src/frontend/Makefile.am
index 11eb5157b..0e78696e0 100644
--- a/src/frontend/Makefile.am
+++ b/src/frontend/Makefile.am
@@ -1,6 +1,6 @@
## Process this file with automake to produce Makefile.in
-SUBDIRS = plotting help parser
+SUBDIRS = plotting help parser wdisp
noinst_LIBRARIES = libfte.a
diff --git a/src/frontend/display.c b/src/frontend/display.c
index ffc0edcbf..96ca863fa 100644
--- a/src/frontend/display.c
+++ b/src/frontend/display.c
@@ -31,6 +31,17 @@ extern int X11_Init(void), X11_NewViewport(GRAPH *graph), X11_Close(void), X11_
#endif
+#ifdef HAS_WINDOWS /* Grafik-IO über MS Windows */
+extern int WIN_Init(), WIN_NewViewport(), WIN_Close(), WIN_Clear(),
+ WIN_DrawLine(), WIN_Arc(), WIN_Text(), WIN_DefineColor(),
+ WIN_DefineLinestyle(), WIN_SetLinestyle(), WIN_SetColor(),
+ WIN_Update(), WIN_DiagramReady();
+
+extern int WPRINT_Init(), WPRINT_NewViewport(), WPRINT_Close(), WPRINT_Clear(),
+ WPRINT_DrawLine(), WPRINT_Arc(), WPRINT_Text(), WPRINT_DefineColor(),
+ WPRINT_DefineLinestyle(), WPRINT_SetLinestyle(), WPRINT_SetColor(),
+ WPRINT_Update(), WPRINT_DiagramReady();
+#endif
@@ -62,6 +73,24 @@ DISPDEVICE device[] = {
gen_DatatoScreen,},
#endif
+#ifdef HAS_WINDOWS /* Grafik-IO über MS Windows */
+ {"Windows", 0, 0, 1000, 1000, 0, 0, WIN_Init, WIN_NewViewport,
+ WIN_Close, WIN_Clear,
+ WIN_DrawLine, WIN_Arc, WIN_Text, WIN_DefineColor, WIN_DefineLinestyle,
+ WIN_SetLinestyle, WIN_SetColor, WIN_Update,
+ nodev, nodev, nodev, gen_Input,
+ gen_DatatoScreen, WIN_DiagramReady},
+
+ // Achtung: Namen "WinPrint" nicht ändern!
+ {"WinPrint", 0, 0, 1000, 1000, 0, 0, WPRINT_Init, WPRINT_NewViewport,
+ WPRINT_Close, WPRINT_Clear,
+ WPRINT_DrawLine, WPRINT_Arc, WPRINT_Text, WPRINT_DefineColor, WPRINT_DefineLinestyle,
+ WPRINT_SetLinestyle, WPRINT_SetColor, WPRINT_Update,
+ nodev, nodev, nodev, nodev,
+ gen_DatatoScreen, WPRINT_DiagramReady},
+
+#endif
+
{"plot5", 0, 0, 1000, 1000, 0, 0, Plt5_Init, Plt5_NewViewport,
Plt5_Close, Plt5_Clear,
@@ -87,6 +116,7 @@ DISPDEVICE device[] = {
};
DISPDEVICE *dispdev = device + NUMELEMS(device) - 1;
+// DISPDEVICE *dispdev = device ; /* GCC257 stuertzt hier ab */
#define XtNumber(arr) (sizeof(arr) / sizeof(arr[0]))
@@ -135,6 +165,11 @@ DevInit(void)
#endif
+#ifdef HAS_WINDOWS
+ if (!dispdev) {
+ dispdev = FindDev("Windows");
+ }
+#endif
if (!dispdev) {
externalerror(
diff --git a/src/frontend/outitf.c b/src/frontend/outitf.c
index 097746d4a..e61ea0462 100644
--- a/src/frontend/outitf.c
+++ b/src/frontend/outitf.c
@@ -524,6 +524,7 @@ OUTpData(void *plotPtr, IFvalue *refValue, IFvalue *valuePtr)
variable just the same */
currclock = clock();
+#ifndef HAS_WINDOWS
if ((currclock-lastclock)>(0.25*CLOCKS_PER_SEC)) {
if (run->isComplex) {
fprintf(stderr, " Reference value : % 12.5e\r",
@@ -534,7 +535,7 @@ OUTpData(void *plotPtr, IFvalue *refValue, IFvalue *valuePtr)
}
lastclock = currclock;
}
-
+#endif
for (i = 0; i < run->numData; i++) {
if (run->data[i].outIndex == -1) {
if (run->data[i].type == IF_REAL)
diff --git a/src/frontend/parser/ChangeLog b/src/frontend/parser/ChangeLog
index cab45c791..176af45c2 100644
--- a/src/frontend/parser/ChangeLog
+++ b/src/frontend/parser/ChangeLog
@@ -1,3 +1,10 @@
+2002-01-03 Paolo Nenzi
+
+ * complete.c: Double patch applied, code for Windows support (Holger
+ Vogt) and rework of netBSD support (AMAKAWA Shuhei).
+
+ * input.c, lexical.c: Windows support (Holger Vogt patch).
+
2001-12-14 Paolo Nenzi
* lexical.c, complete.c, complete.h:
diff --git a/src/frontend/parser/complete.c b/src/frontend/parser/complete.c
index a49ca49fa..97e1d514c 100644
--- a/src/frontend/parser/complete.c
+++ b/src/frontend/parser/complete.c
@@ -35,8 +35,10 @@ Modified: 1999 Paolo Nenzi
#include
#endif
+#ifndef __MINGW32__
/* MW. We also need ioctl.h here I think */
#include
+#endif
/* Be sure the ioctls get included in the following */
#ifdef HAVE_SGTTY_H
@@ -413,10 +415,6 @@ cp_ccon(bool on)
# else
# ifdef HAVE_TERMIOS_H
-# ifdef __NetBSD__
-# define TCGETS
-# define TCSETS
-# endif
# define TERM_GET TCGETS
# define TERM_SET TCSETS
@@ -426,7 +424,7 @@ cp_ccon(bool on)
# endif
# endif
-# if defined(TERM_GET) || defined(__NetBSD__)
+#ifdef TERM_GET
static bool ison = FALSE;
if (cp_nocc || !cp_interactive || (ison == on))
@@ -434,7 +432,7 @@ cp_ccon(bool on)
ison = on;
if (ison == TRUE) {
-#ifdef __NetBSD__
+#if HAVE_TCGETATTR
tcgetattr(fileno(cp_in),&OS_Buf);
#else
(void) ioctl(fileno(cp_in), TERM_GET, (char *) &OS_Buf);
@@ -443,13 +441,13 @@ cp_ccon(bool on)
sbuf.c_cc[VEOF] = 0;
sbuf.c_cc[VEOL] = ESCAPE;
sbuf.c_cc[VEOL2] = CNTRL_D;
-#ifdef __NetBSD__
+#if HAVE_TCSETATTR
tcsetattr(fileno(cp_in),TCSANOW,&sbuf);
#else
(void) ioctl(fileno(cp_in), TERM_SET, (char *) &sbuf);
#endif
} else {
-#ifdef __NetBSD__
+#ifdef HAVE_TCSETATTR
tcsetattr(fileno(cp_in),TCSANOW,&OS_Buf);
#else
(void) ioctl(fileno(cp_in), TERM_SET, (char *) &OS_Buf);
diff --git a/src/frontend/parser/input.c b/src/frontend/parser/input.c
index 284e9c0e5..06e75cdc3 100644
--- a/src/frontend/parser/input.c
+++ b/src/frontend/parser/input.c
@@ -24,6 +24,7 @@ inchar(FILE *fp)
{
char c;
+#ifndef HAS_WINDOWS
int i;
if (cp_interactive && !cp_nocc) {
@@ -38,6 +39,7 @@ inchar(FILE *fp)
} else
return ((int) c);
} else
+#endif
c = getc(fp);
return ((int) c);
}
diff --git a/src/frontend/parser/lexical.c b/src/frontend/parser/lexical.c
index 23c5df429..287436946 100644
--- a/src/frontend/parser/lexical.c
+++ b/src/frontend/parser/lexical.c
@@ -22,8 +22,10 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
#include
#endif
+#ifndef __MINGW32__
/* MW. Linux has TIOCSTI, so we include all headers here */
#include
+#endif
#ifdef HAVE_SGTTY_H
#include
diff --git a/src/frontend/plotting/ChangeLog b/src/frontend/plotting/ChangeLog
index 09032d6f9..7bc12712f 100644
--- a/src/frontend/plotting/ChangeLog
+++ b/src/frontend/plotting/ChangeLog
@@ -1,3 +1,7 @@
+2002-01-03 Paolo Nenzi
+
+ * graf.c: Added code to support Windows (Holger Vogt patch).
+
2000-10-10 Arno W. Peters
* graf.c: Removed need to press return after resizing the plot
diff --git a/src/frontend/plotting/graf.c b/src/frontend/plotting/graf.c
index 786b8b09c..5a9d7ae67 100644
--- a/src/frontend/plotting/graf.c
+++ b/src/frontend/plotting/graf.c
@@ -153,6 +153,16 @@ gr_init(double *xlims, double *ylims, /* The size of the screen. */
graph->data.xmax = xlims[1];
graph->data.ymin = ylims[0];
graph->data.ymax = ylims[1];
+/* get title into plot window */
+#ifdef HAS_WINDOWS
+ if (!pname)
+ pname = "(unknown)";
+ if (!plotname)
+ plotname = "(unknown)";
+ comb_title = tmalloc(strlen(plotname) + strlen(pname) + 3);
+ sprintf(comb_title, "%s: %s", pname, plotname);
+ graph->plotname = comb_title;
+#endif
/* note: have enum here or some better convention */
if (NewViewport(graph) == 1) {
@@ -199,7 +209,7 @@ gr_init(double *xlims, double *ylims, /* The size of the screen. */
graph->grid.ylabel = "imag";
}
}
-
+#ifndef HAS_WINDOWS
if (!pname)
pname = "(unknown)";
if (!plotname)
@@ -207,7 +217,7 @@ gr_init(double *xlims, double *ylims, /* The size of the screen. */
comb_title = tmalloc(strlen(plotname) + strlen(pname) + 3);
sprintf(comb_title, "%s: %s", pname, plotname);
graph->plotname = comb_title;
-
+#endif
gr_resize_internal(graph);
gr_redrawgrid(graph);
diff --git a/src/frontend/rawfile.c b/src/frontend/rawfile.c
index 42b2485c2..ac7a9f948 100644
--- a/src/frontend/rawfile.c
+++ b/src/frontend/rawfile.c
@@ -24,6 +24,12 @@ int raw_prec = -1; /* How many sigfigs to use, default 15 (max). */
#define DEFPREC 15
+#ifdef HAS_WINDOWS
+#undef fscanf /* redo I/O from WINMAIN.C here
+ otherwise reading ASCII will not work */
+#endif
+
+
/* Write a raw file. We write everything in the plot pointed to. */
void
@@ -56,11 +62,34 @@ raw_write(char *name, struct plot *pl, bool app, bool binary)
else
prec = DEFPREC;
+#ifdef __MINGW32__
+// -Binärdatei binär schreiben- hvogt 15.03.2000 ---------------------
+ if (binary) {
+ if (!(fp = fopen(name, app ? "ab" : "wb"))) {
+ perror(name);
+ return;
+ }
+ fprintf(cp_out,"binary raw file\n");
+ }
+ else {
+ if (!(fp = fopen(name, app ? "a" : "w"))) {
+ perror(name);
+ return;
+ }
+ fprintf(cp_out,"ASCII raw file\n");
+ }
+// --------------------------------------------------------------------
+
+#else
+
+
if (!(fp = fopen(name, app ? "a" : "w"))) {
perror(name);
return;
}
+#endif
+
numdims = nvars = length = 0;
for (v = pl->pl_dvecs; v; v = v->v_next) {
if (iscomplex(v))
@@ -138,7 +167,7 @@ raw_write(char *name, struct plot *pl, bool app, bool binary)
if (v->v_gridtype)
fprintf(fp, " grid=%d", v->v_gridtype);
if (v->v_plottype)
- fprintf(fp, " plot=%d", v->v_gridtype);
+ fprintf(fp, " plot=%d", v->v_plottype);
/* Only write dims if they are different from default. */
writedims = FALSE;
if (v->v_numdims != numdims) {
@@ -253,12 +282,35 @@ raw_read(char *name)
struct variable *vv;
wordlist *wl, *nwl;
FILE *fp, *lastin, *lastout, *lasterr;
+ bool binary = TRUE;
if (!(fp = fopen(name, "r"))) {
perror(name);
return (NULL);
}
+#ifdef __MINGW32__
+// Test, ob Datei wirklich ASCII, sonst binär annehmen hvogt 15.3.2000
+ while (fgets(buf, BSIZE_SP, fp)) {
+ if (ciprefix("values:", buf)) {
+ binary = FALSE;
+ rewind(fp); // zurückspulen
+ fprintf(cp_err, "\nASCII raw file\n");
+ break;
+ }
+ }
+
+ if (binary) {
+ (void) fclose(fp);
+ if (!(fp = fopen(name, "rb"))) {
+ perror(name);
+ return (NULL);
+ }
+ fprintf(cp_err, "\nbinary raw file\n");
+ }
+//--------------------------------------------------------
+#endif
+
/* Since we call cp_evloop() from here, we have to do this junk. */
lastin = cp_curin;
lastout = cp_curout;
diff --git a/src/frontend/resource.c b/src/frontend/resource.c
index a24751a92..eee58cd0d 100644
--- a/src/frontend/resource.c
+++ b/src/frontend/resource.c
@@ -17,24 +17,47 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
#include "resource.h"
#include "variable.h"
+#ifdef HAVE__MEMAVL
+#define WIN32_LEAN_AND_MEAN
+#include
+#endif
+
/* static declarations */
static void printres(char *name);
static RETSIGTYPE fault(void);
static void * baseaddr(void);
+#ifdef HAVE__MEMAVL
+size_t mem_avail;
+size_t _memavl(void)
+{
+ MEMORYSTATUS ms;
+ DWORD sum;
+ ms.dwLength = sizeof(MEMORYSTATUS);
+ GlobalMemoryStatus( &ms);
+ sum = ms.dwAvailPhys + ms.dwAvailPageFile;
+ return (size_t) sum;
+}
+
+#else
char *startdata;
char *enddata;
-
+#endif
void
init_rlimits(void)
{
-
+# ifdef HAVE__MEMAVL // hvogt
+ mem_avail = _memavl( );
+# else
startdata = (char *) baseaddr( );
enddata = sbrk(0);
+# endif
+// startdata = (char *) baseaddr( );
+// enddata = sbrk(0);
}
@@ -88,10 +111,19 @@ void
ft_ckspace(void)
{
long usage, limit;
+
+
+#ifdef HAVE__MEMAVL
+ size_t mem_avail_now;
+
+ mem_avail_now = _memavl( );
+ usage = mem_avail - mem_avail_now;
+ limit = mem_avail;
+#else
+
static long old_usage = 0;
char *hi;
-
# ifdef HAVE_GETRLIMIT
struct rlimit rld;
@@ -102,6 +134,8 @@ ft_ckspace(void)
# else
+
+
/* SYSVRLIMIT */
limit = ulimit(3, 0L) - (enddata - startdata);
@@ -110,6 +144,7 @@ ft_ckspace(void)
usage = (long) (hi - enddata);
+
if (limit < 0)
return; /* what else do you do? */
@@ -118,6 +153,8 @@ ft_ckspace(void)
old_usage = usage;
+#endif
+
if (usage > limit * 0.9) {
fprintf(cp_err, "Warning - approaching max data size: ");
fprintf(cp_err, "current size = %ld, limit = %ld.\n", usage, limit);
@@ -162,7 +199,7 @@ printres(char *name)
int sec, msec;
ftime(&timenow);
timediff(&timenow, &timebegin, &total, &totalu);
- totalu /= 1000;
+// totalu /= 1000; hvogt
cpu_elapsed = "elapsed";
# else
# define NO_RUDATA
@@ -191,10 +228,10 @@ printres(char *name)
lastusec -= 1000;
lastsec += 1;
}
-
+#ifndef HAVE__MEMAVL
fprintf(cp_out, "%s time since last call: %lu.%03lu seconds.\n",
cpu_elapsed, lastsec, lastusec);
-
+#endif
lastsec = total;
lastusec = totalu;
}
@@ -212,6 +249,17 @@ printres(char *name)
if (!name || eq(name, "space")) {
long usage = 0, limit = 0;
+
+
+#ifdef HAVE__MEMAVL
+ size_t mem_avail_now;
+
+ mem_avail_now = _memavl( );
+ usage = mem_avail - mem_avail_now;
+ limit = mem_avail;
+#else
+
+
#ifdef ipsc
NXINFO cur = nxinfo, start = nxinfo_snap;
@@ -236,8 +284,18 @@ printres(char *name)
# endif
# endif
#endif
+#endif
+#ifdef HAVE__MEMAVL
+ if (usage > 1000000)
+ fprintf(cp_out, "Current dynamic memory usage = %8.6f MB,\n", usage/1000000.);
+ else
+ fprintf(cp_out, "Current dynamic memory usage = %5.3f kB,\n", usage/1000.);
+
+ fprintf(cp_out, "Dynamic memory limit = %8.6f MB.\n", limit/1000000.);
+#else
fprintf(cp_out, "Current dynamic memory usage = %ld,\n", usage);
fprintf(cp_out, "Dynamic memory limit = %ld.\n", limit);
+#endif
yy = TRUE;
}
@@ -321,6 +379,10 @@ baseaddr(void)
if (getenv("SPICE_NO_DATASEG_CHECK"))
return 0;
+#if defined(__CYGWIN__) || defined(HAS_WINDOWS)
+ return 0;
+#endif
+
low = 0;
high = (char *) ((unsigned long) sbrk(0) & ~((1 << LOG2_PAGESIZE) - 1));
diff --git a/src/frontend/runcoms.c b/src/frontend/runcoms.c
index dbdd563b3..75ef97d21 100644
--- a/src/frontend/runcoms.c
+++ b/src/frontend/runcoms.c
@@ -214,12 +214,33 @@ dosim(char *what, wordlist *wl)
#endif /* PARALLEL_ARCH */
if (!*wl->wl_word)
rawfileFp = stdout;
+#ifdef __MINGW32__
+// ask if binary or ASCII, open file with w or wb hvogt 15.3.2000
+ else if (ascii) {
+ if(!(rawfileFp = fopen(wl->wl_word, "w"))) {
+ perror(wl->wl_word);
+ ft_setflag = FALSE;
+ return 1;
+ }
+ fprintf(cp_out,"ASCII raw file\n");
+ }
+ else if (!ascii) {
+ if(!(rawfileFp = fopen(wl->wl_word, "wb"))) {
+ perror(wl->wl_word);
+ ft_setflag = FALSE;
+ return 1;
+ }
+ fprintf(cp_out,"binary raw file\n");
+ }
+//-------------------------------------------------------------------------
+#else
else if (!(rawfileFp = fopen(wl->wl_word, "w"))) {
setvbuf(rawfileFp, rawfileBuf, _IOFBF, RAWBUF_SIZE);
perror(wl->wl_word);
ft_setflag = FALSE;
return 1;
}
+#endif /* __MINGW32__ */
rawfileBinary = !ascii;
#ifdef PARALLEL_ARCH
} else {
diff --git a/src/include/ChangeLog b/src/include/ChangeLog
index a23b3743a..eff6e1a0b 100644
--- a/src/include/ChangeLog
+++ b/src/include/ChangeLog
@@ -1,3 +1,15 @@
+2002-01-03 Paolo Nenzi
+
+ * wstdio.h: Standard input/output for Windows (Holger Vogt patch).
+
+ * complex.h: _complex redefined as _complex1 to avoid conflict with
+ MINGW32 Paolo Nenzi
+
+ * defines.h: added defines for Windows (Holger Vogt patch).
+
+ * ngspice.h: added wstdio.h inclusion if compiling for Windows
+ (Holger Vogt patch).
+
2001-12-14 Paolo Nenzi
* cpextern.h: Modification needed for patches sent by
diff --git a/src/include/complex.h b/src/include/complex.h
index dc7b0a4e7..bbcabc180 100644
--- a/src/include/complex.h
+++ b/src/include/complex.h
@@ -7,15 +7,15 @@
/* Complex numbers. */
-struct _complex { /* IBM portability... */
+struct _complex1 { /* IBM portability... renamed due to double definition in MINGW32*/
double cx_real;
double cx_imag;
} ;
-typedef struct _complex complex;
+typedef struct _complex1 complex;
-#define realpart(cval) ((struct _complex *) (cval))->cx_real
-#define imagpart(cval) ((struct _complex *) (cval))->cx_imag
+#define realpart(cval) ((struct _complex1 *) (cval))->cx_real
+#define imagpart(cval) ((struct _complex1 *) (cval))->cx_imag
/*
diff --git a/src/include/defines.h b/src/include/defines.h
index bea978a1e..b28fe2aa6 100644
--- a/src/include/defines.h
+++ b/src/include/defines.h
@@ -65,6 +65,18 @@
#define REFTEMP 300.15 /* 27 degrees C */
+#ifdef __MINGW32__
+#define DIR_PATHSEP "\\"
+#define DIR_TERM '\\'
+#define DIR_CWD "."
+
+#define TEMPFORMAT "%s%d.tmp"
+/*
+#define SYSTEM_PLOT5LPR "lpr -P%s -g %s"
+#define SYSTEM_PSLPR "lpr -P%s %s"
+#define SYSTEM_MAIL "Mail -s \"%s (%s) Bug Report\" %s"
+*/
+#else
#define DIR_PATHSEP "/"
#define DIR_TERM '/'
@@ -75,6 +87,7 @@
#define SYSTEM_PSLPR "lpr -P%s %s"
#define SYSTEM_MAIL "Mail -s \"%s (%s) Bug Report\" %s"
+#endif
/*
* #define-s that are always on
@@ -102,7 +115,7 @@
#define TRUE 1
#define FALSE 0
-
+/*
#define DIR_PATHSEP "/"
#define DIR_TERM '/'
@@ -113,7 +126,7 @@
#define SYSTEM_PSLPR "lpr -P%s %s"
#define SYSTEM_MAIL "Mail -s \"%s (%s) Bug Report\" %s"
-
+*/
diff --git a/src/include/ngspice.h b/src/include/ngspice.h
index aa26120b1..b34250dfb 100644
--- a/src/include/ngspice.h
+++ b/src/include/ngspice.h
@@ -103,6 +103,14 @@ struct timeb timebegin;
#include
#endif
+// added for CYGWIN
+#ifndef HUGE
+#define HUGE HUGE_VAL
+#endif
+
+#ifdef HAS_WINDOWS
+#include "wstdio.h"
+#endif
extern char *gettok(char **s);
extern void appendc(char *s, char c);
diff --git a/src/main.c b/src/main.c
index 0e5af9c23..12893fb55 100644
--- a/src/main.c
+++ b/src/main.c
@@ -23,7 +23,9 @@
#include
#include
#include
+#if !defined(__CYGWIN__)
#include
+#endif
#include
#include
@@ -46,6 +48,9 @@ bool ft_intrpt = FALSE; /* Set by the (void) signal handlers. */
bool ft_setflag = FALSE; /* Don't abort after an interrupt. */
char *ft_rawfile = "rawspice.raw";
+bool oflag = FALSE; /* Output über redefinierte Funktionen */
+FILE *flogp; // hvogt 15.12.2001
+
/* Frontend and circuit options */
IFsimulator *ft_sim = NULL;
@@ -240,7 +245,11 @@ append_to_stream(FILE *dest, FILE *source)
}
int
+#ifdef HAS_WINDOWS
+xmain(int argc, char **argv)
+#else
main(int argc, char **argv)
+#endif
{
int c;
int err;
@@ -318,7 +327,8 @@ main(int argc, char **argv)
#ifdef MALLOCTRACE
mallocTraceInit("malloc.out");
#endif
-#ifdef HAVE_ISATTY
+
+#if defined (HAVE_ISATTY) && !defined(HAS_WINDOWS)
istty = (bool) isatty(fileno(stdin));
#endif
@@ -398,10 +408,22 @@ main(int argc, char **argv)
#else
sprintf (buf, "%s", optarg);
#endif
- if (!(freopen (buf, "w", stdout))) {
+/* if (!(freopen (buf, "w", stdout))) {
perror (buf);
shutdown (EXIT_BAD);
}
+*/
+// *** Log-File öffnen *******
+ if (!(flogp = fopen(buf, "w"))) {
+ perror(buf);
+ shutdown(EXIT_BAD);
+ }
+// ***************************
+ com_version(NULL); // hvogt 11.11.2001
+ fprintf(stdout, "\nBatch mode\n\n");
+ fprintf(stdout, "Simulation output goes to rawfile: %s\n\n", ft_rawfile);
+ fprintf(stdout, "Comments and warnigs go to log-file: %s\n", buf);
+ oflag = TRUE;
}
break;
@@ -473,7 +495,7 @@ main(int argc, char **argv)
if (!ft_batchmode) {
signal(SIGINT, ft_sigintr);
signal(SIGFPE, sigfloat);
-#ifdef SIGTSTP
+#if defined(SIGTSTP) // && !defined(__MINGW32__)
signal(SIGTSTP, sigstop);
#endif
}
diff --git a/src/maths/cmaths/Makefile.am b/src/maths/cmaths/Makefile.am
index 7f548542e..6207157d3 100644
--- a/src/maths/cmaths/Makefile.am
+++ b/src/maths/cmaths/Makefile.am
@@ -14,7 +14,7 @@ libcmaths_a_SOURCES = \
cmath4.h
noinst_PROGRAMS = test_cx_mag test_cx_j test_cx_ph
-
+
test_cx_ph_SOURCES = \
test_cx_ph.c
@@ -38,6 +38,7 @@ test_cx_j_LDADD = \
TESTS = test_cx_mag test_cx_j test_cx_ph
+
INCLUDES = -I$(top_srcdir)/src/include -I$(top_srcdir)/src/maths/poly
MAINTAINERCLEANFILES = Makefile.in
diff --git a/src/maths/cmaths/cmath1.c b/src/maths/cmaths/cmath1.c
index d755d0bab..a6bd1af86 100644
--- a/src/maths/cmaths/cmath1.c
+++ b/src/maths/cmaths/cmath1.c
@@ -24,6 +24,9 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
#include "cmath.h"
#include "cmath1.h"
+#ifdef HAS_WINDOWS
+#define fp_r_i_n_t_f fprintf
+#endif
/* This flag determines whether degrees or radians are used. The radtodeg
* and degtorad macros are no-ops if this is FALSE.
diff --git a/src/maths/cmaths/test_cx_ph.c b/src/maths/cmaths/test_cx_ph.c
index ce2f31d41..24c000e14 100644
--- a/src/maths/cmaths/test_cx_ph.c
+++ b/src/maths/cmaths/test_cx_ph.c
@@ -6,6 +6,7 @@
#include
#include
#include
+#include
#include "cmath.h"
#include "cmath1.h"
diff --git a/src/spicelib/analysis/ChangeLog b/src/spicelib/analysis/ChangeLog
index 9f9f7f543..5cee2ce97 100644
--- a/src/spicelib/analysis/ChangeLog
+++ b/src/spicelib/analysis/ChangeLog
@@ -1,3 +1,10 @@
+2002-01-03 Paolo Nenzi
+
+ * Added some code that adds new functionalities if
+ ngspice is compiled for Windows (Holger Vogt patch)
+ I think that the new code interactively displays the
+ percent done of the analysis.
+
2001-01-23 Paolo Nenzi
* noisean.c: patched the code with the new one
diff --git a/src/spicelib/analysis/acan.c b/src/spicelib/analysis/acan.c
index bcaa5113b..1ee8720a2 100644
--- a/src/spicelib/analysis/acan.c
+++ b/src/spicelib/analysis/acan.c
@@ -11,6 +11,10 @@ Modified 2001: AlansFixes
#include "devdefs.h"
#include "sperror.h"
+#ifdef HAS_WINDOWS
+void SetAnalyse( char * Analyse, int Percent);
+#endif
+
int
ACan(CKTcircuit *ckt, int restart)
@@ -196,10 +200,36 @@ ACan(CKTcircuit *ckt, int restart)
switch(((ACAN*)ckt->CKTcurJob)->ACstepType) {
case DECADE:
case OCTAVE:
+
+// neu eingefügt 14.12.2001
+#ifdef HAS_WINDOWS
+ {
+ double endfreq = ((ACAN*)ckt->CKTcurJob)->ACstopFreq;
+ double startfreq = ((ACAN*)ckt->CKTcurJob)->ACstartFreq;
+ double step = ((ACAN*)ckt->CKTcurJob)->ACfreqDelta;
+ endfreq = log(endfreq);
+ if (startfreq == 0.0)
+ startfreq = 1e-12;
+ startfreq = log(startfreq);
+
+ if (freq > 0.0)
+ SetAnalyse( "ac", (log(freq)-startfreq) * 100.0 / (endfreq-startfreq));
+ }
+#endif
+
freq *= ((ACAN*)ckt->CKTcurJob)->ACfreqDelta;
if(((ACAN*)ckt->CKTcurJob)->ACfreqDelta==1) goto endsweep;
break;
case LINEAR:
+
+#ifdef HAS_WINDOWS
+ {
+ double endfreq = ((ACAN*)ckt->CKTcurJob)->ACstopFreq;
+ double startfreq = ((ACAN*)ckt->CKTcurJob)->ACstartFreq;
+ SetAnalyse( "ac", (freq - startfreq)* 100.0 / (endfreq-startfreq));
+ }
+#endif
+
freq += ((ACAN*)ckt->CKTcurJob)->ACfreqDelta;
if(((ACAN*)ckt->CKTcurJob)->ACfreqDelta==0) goto endsweep;
break;
diff --git a/src/spicelib/analysis/dctran.c b/src/spicelib/analysis/dctran.c
index 0d2e0721c..88d4e70a1 100644
--- a/src/spicelib/analysis/dctran.c
+++ b/src/spicelib/analysis/dctran.c
@@ -13,6 +13,12 @@ Modified: 2000 AlansFixes
#include
#include
+
+#ifdef HAS_WINDOWS /* hvogt 10.03.99, nach W. Mues */
+void SetAnalyse( char * Analyse, int Percent);
+#endif
+
+
int
DCtran(CKTcircuit *ckt,
int restart) /* forced restart flag */
@@ -328,6 +334,9 @@ resume:
(void)printf("limited by Tmax\n");
}
}
+#endif
+#ifdef HAS_WINDOWS
+ SetAnalyse( "tran", (int)((ckt->CKTtime * 100) / ckt->CKTfinalTime));
#endif
ckt->CKTdelta =
MIN(ckt->CKTdelta,ckt->CKTmaxStep);
diff --git a/src/spicelib/devices/ChangeLog b/src/spicelib/devices/ChangeLog
index 0e1975836..1f60c35fa 100644
--- a/src/spicelib/devices/ChangeLog
+++ b/src/spicelib/devices/ChangeLog
@@ -1,3 +1,12 @@
+2002-01-03 Paolo Nenzi
+
+ * bsim3v1/b3v1noi.c, bsim3v2/b3v2noi.c: Both models had a
+ function called StrongInversionNoiseEval(). They were renamed
+ BSIM3V1StrongInversionNoiseEval() and
+ BSIM3V2StrongInversionNoiseEval(). (Holger Vogt)
+
+ * dev.c: support for ieee754 floating point. (Holger Vogt patch)
+
2000-08-28 Arno W. Peters
* asrc/asrcset.c, bjt/bjtsetup.c, bsim1/b1set.c, bsim2/b2set.c,
diff --git a/src/spicelib/devices/bsim3v1/b3v1noi.c b/src/spicelib/devices/bsim3v1/b3v1noi.c
index 3d8974308..d2346e335 100644
--- a/src/spicelib/devices/bsim3v1/b3v1noi.c
+++ b/src/spicelib/devices/bsim3v1/b3v1noi.c
@@ -44,7 +44,7 @@ extern void NevalSrc();
extern double Nintegrate();
double
-StrongInversionNoiseEval(vgs, vds, model, here, freq, temp)
+BSIM3V1StrongInversionNoiseEval(vgs, vds, model, here, freq, temp)
double vgs, vds, freq, temp;
BSIM3V1model *model;
BSIM3V1instance *here;
@@ -253,7 +253,7 @@ int i;
vgs = vgs + vds;
}
if (vgs >= here->BSIM3V1von + 0.1)
- { Ssi = StrongInversionNoiseEval(vgs,
+ { Ssi = BSIM3V1StrongInversionNoiseEval(vgs,
vds, model, here, data->freq,
ckt->CKTtemp);
noizDens[BSIM3V1FLNOIZ] *= Ssi;
@@ -268,7 +268,7 @@ int i;
* 4.0e36;
Swi = T10 / T11 * here->BSIM3V1cd
* here->BSIM3V1cd;
- Slimit = StrongInversionNoiseEval(
+ Slimit = BSIM3V1StrongInversionNoiseEval(
here->BSIM3V1von + 0.1, vds, model,
here, data->freq, ckt->CKTtemp);
T1 = Swi + Slimit;
diff --git a/src/spicelib/devices/bsim3v2/b3v2noi.c b/src/spicelib/devices/bsim3v2/b3v2noi.c
index a5713b93f..654ef6508 100644
--- a/src/spicelib/devices/bsim3v2/b3v2noi.c
+++ b/src/spicelib/devices/bsim3v2/b3v2noi.c
@@ -44,7 +44,7 @@ extern void NevalSrc();
extern double Nintegrate();
double
-StrongInversionNoiseEval(vgs, vds, model, here, freq, temp)
+BSIM3V2StrongInversionNoiseEval(vgs, vds, model, here, freq, temp)
double vgs, vds, freq, temp;
BSIM3V2model *model;
BSIM3V2instance *here;
@@ -253,7 +253,7 @@ int error, i;
vgs = vgs + vds;
}
if (vgs >= here->BSIM3V2von + 0.1)
- { Ssi = StrongInversionNoiseEval(vgs,
+ { Ssi = BSIM3V2StrongInversionNoiseEval(vgs,
vds, model, here, data->freq,
ckt->CKTtemp);
noizDens[BSIM3V2FLNOIZ] *= Ssi;
@@ -268,7 +268,7 @@ int error, i;
* 4.0e36;
Swi = T10 / T11 * here->BSIM3V2cd
* here->BSIM3V2cd;
- Slimit = StrongInversionNoiseEval(
+ Slimit = BSIM3V2StrongInversionNoiseEval(
here->BSIM3V2von + 0.1, vds, model,
here, data->freq, ckt->CKTtemp);
T1 = Swi + Slimit;
diff --git a/src/spicelib/devices/dev.c b/src/spicelib/devices/dev.c
index 50e9ad40a..e1deb61a4 100644
--- a/src/spicelib/devices/dev.c
+++ b/src/spicelib/devices/dev.c
@@ -182,3 +182,53 @@ devices(void)
{
return DEVices;
}
+
+
+
+#ifdef __MINGW32__
+// isnan for SOI devices in MINGW32 hvogt
+
+union ieee754_double
+ {
+ double d;
+
+ /* This is the IEEE 754 double-precision format. */
+ struct
+ {
+ /* Together these comprise the mantissa. */
+ unsigned int mantissa1:32;
+ unsigned int mantissa0:20;
+ unsigned int exponent:11;
+ unsigned int negative:1;
+ } ieee;
+ struct
+ {
+ /* Together these conprise the mantissa. */
+ unsigned int mantissa1:32;
+ unsigned int mantissa0:19;
+ unsigned int quiet_nan:1;
+ unsigned int exponent:11;
+ unsigned int negative:1;
+ } ieee_nan;
+ };
+
+
+int
+isnan(double value)
+
+{
+ union ieee754_double u;
+
+ u.d = value;
+
+ /* IEEE 754 NaN's have the maximum possible
+ exponent and a nonzero mantissa. */
+ return ((u.ieee.exponent & 0x7ff) == 0x7ff &&
+ (u.ieee.mantissa0 != 0 || u.ieee.mantissa1 != 0));
+
+}
+
+/*
+ * end isnan.c
+ */
+#endif
\ No newline at end of file