Removed since win32 support has been included into ngspice.
This commit is contained in:
parent
f3e144bc8d
commit
6ab2709212
|
|
@ -9,7 +9,4 @@ of ngspice not included in the main source.
|
|||
|
||||
Index:
|
||||
|
||||
win32/: This directory contains a patch to run ngspice under windows.
|
||||
This code is not yet inserted into the main code but will be
|
||||
in the next ones.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,258 +0,0 @@
|
|||
/*
|
||||
* Win32...
|
||||
*/
|
||||
|
||||
/*
|
||||
* MS-DOS
|
||||
*/
|
||||
#ifndef WIN32_H
|
||||
#define WIN32_H
|
||||
|
||||
#define STDC_HEADERS
|
||||
|
||||
#define DIR_CWD "."
|
||||
#define DIR_PATHSEP "\\"
|
||||
#define DIR_TERM '\\'
|
||||
#define TEMPFORMAT "%s%d.tmp"
|
||||
|
||||
#define RETSIGTYPE void*
|
||||
/* ----- System capabilities */
|
||||
#define HAS_FLAT_INCLUDES
|
||||
//#define HAS_QUICKDRAW
|
||||
//#define HAS_MACCLOCK
|
||||
//#define HAS_LOCALTIME
|
||||
//#define HAS_NO_ERFC
|
||||
|
||||
#define FTEDEBUG /* Enable general debugging */
|
||||
#define CPDEBUG /* Enable cshpar debugging */
|
||||
#define CAPZEROBYPASS
|
||||
#define NEWCONV
|
||||
//#define HAS_MAC_ARGCARGV
|
||||
#define HAS_ASCII
|
||||
#define HAS_CHDIR /* for tree filesystems, chdir( ) */
|
||||
#define HAS_CLEARERR /* clearerr( ), should be in stdio */
|
||||
#define HAS_CTYPE /* <ctype.h>, iswhite( ), etc. */
|
||||
#define HAS_DOSDIRS /* Emulate opendir, etc. */
|
||||
//#define HAS_MEMAVL /*_memavl( ) not available in Win32 console mode. */
|
||||
#define HAS_ENVIRON
|
||||
#define HAS_FTIME
|
||||
#define HAS_GETCWD /* getcwd(buf, size) */
|
||||
#define HAS_LOCALTIME
|
||||
#define HAS_LONGJUMP /* setjmp( ), longjmp( ) */
|
||||
// #define HAS_MINDATA // only needed for MS-DOS
|
||||
// #define HAS_NOINLINE // only needed for MS-DOS
|
||||
// #define HAS_NOVM // only needed for MS-DOS
|
||||
#define HAS_PCTERM
|
||||
#define HAS_QSORT /* qsort( ) */
|
||||
#define HAVE_QSORT /* qsort( ) */
|
||||
#define HAS_SHORTMACRO
|
||||
#define HAS_STAT
|
||||
#define HAS_STDLIB
|
||||
#define HAS_STRCHR /* strchr( ) instead of index( ) */
|
||||
#define HAS_SYSTEM
|
||||
#define HAS_UNIX_SIGS
|
||||
#define HAS_UNLINK
|
||||
#define HAS_LIMITS_H
|
||||
#define HAS_FLOAT_H
|
||||
#define HAS_NO_IEEE_LOGB
|
||||
#define HAS_NO_ERFC
|
||||
#define HAS_BATCHSIM
|
||||
|
||||
#define WANT_PCHARDCOPY
|
||||
#define WANT_MFB
|
||||
|
||||
#define X_DISPLAY_MISSING
|
||||
// from Mac world??
|
||||
#define SIMULATOR /* There should be a better way */
|
||||
|
||||
#define PACKAGE "NG-SPICE"
|
||||
#define VERSION "13"
|
||||
#define NGSPICEBUILDDATE "??"
|
||||
#define NGSPICEBINDIR "??"
|
||||
#define NGSPICEDATADIR "??"
|
||||
|
||||
#define MAX_EXP_ARG 709.0
|
||||
|
||||
#ifndef DBL_EPSILON
|
||||
# define DBL_EPSILON 8.9e-15
|
||||
#endif
|
||||
|
||||
// from misc.h
|
||||
#define BSIZE_SP 512
|
||||
|
||||
#ifdef HAS_EXIT1
|
||||
# define EXIT_NORMAL 1
|
||||
# define EXIT_BAD 0
|
||||
#else
|
||||
# define EXIT_NORMAL 0
|
||||
# define EXIT_BAD 1
|
||||
#endif
|
||||
|
||||
#ifdef HAS_CTYPE
|
||||
# ifndef isalpha
|
||||
# include <ctype.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define eq(a,b) (!strcmp((a), (b)))
|
||||
#define eqc(a,b) (cieq((a), (b)))
|
||||
#define isalphanum(c) (isalpha(c) || isdigit(c))
|
||||
#define hexnum(c) ((((c) >= '0') && ((c) <= '9')) ? ((c) - '0') : ((((c) >= \
|
||||
'a') && ((c) <= 'f')) ? ((c) - 'a' + 10) : ((((c) >= 'A') && \
|
||||
((c) <= 'F')) ? ((c) - 'A' + 10) : 0)))
|
||||
|
||||
#include <string.h>
|
||||
|
||||
//extern char *tmalloc();
|
||||
//extern char *trealloc();
|
||||
//extern void txfree();
|
||||
//#define tfree(x) (txfree(x), x = 0)
|
||||
//#define alloc(TYPE) ((TYPE *) tmalloc(sizeof(TYPE)))
|
||||
|
||||
//extern int externalerror(char *message);
|
||||
|
||||
extern char *copy();
|
||||
extern char *gettok();
|
||||
extern void appendc();
|
||||
extern int scannum();
|
||||
extern int prefix();
|
||||
extern int ciprefix();
|
||||
extern int cieq();
|
||||
extern void strtolower();
|
||||
extern int substring();
|
||||
extern char *tilde_expand( );
|
||||
extern void cp_printword();
|
||||
|
||||
extern char *datestring();
|
||||
extern double seconds();
|
||||
|
||||
extern char *smktemp();
|
||||
|
||||
/* Externs from libc */
|
||||
|
||||
#ifdef HAS_STDLIB
|
||||
|
||||
# ifndef _STDLIB_INCLUDED
|
||||
# define _STDLIB_INCLUDED
|
||||
# include <stdlib.h>
|
||||
# endif
|
||||
# ifndef HAS_BSDRAND
|
||||
# define random rand
|
||||
# define srandom srand
|
||||
# endif
|
||||
# ifdef HAS_DOSDIRS
|
||||
#ifndef WIN32
|
||||
char *getcwd( );
|
||||
#endif
|
||||
# endif
|
||||
|
||||
#else
|
||||
|
||||
# ifdef HAS_BSDRAND
|
||||
extern long random();
|
||||
extern void srandom();
|
||||
# else
|
||||
# define random rand
|
||||
# define srandom srand
|
||||
# endif
|
||||
|
||||
extern char *calloc();
|
||||
extern char *malloc();
|
||||
extern char *realloc();
|
||||
extern char *getenv();
|
||||
extern int errno;
|
||||
extern char *sys_errlist[];
|
||||
extern char *getenv();
|
||||
extern char *getwd();
|
||||
extern int rand();
|
||||
extern int srand();
|
||||
extern int atoi();
|
||||
extern int kill();
|
||||
extern int getpid();
|
||||
extern int qsort();
|
||||
# ifdef notdef
|
||||
extern void exit();
|
||||
# endif
|
||||
|
||||
# ifdef HAS_GETCWD
|
||||
extern char *getcwd( );
|
||||
# endif
|
||||
|
||||
# ifdef HAS_CLEARERR
|
||||
# ifndef clearerr
|
||||
extern void clearerr();
|
||||
# endif /* clearerr */
|
||||
# endif /* HAS_CLEARERR */
|
||||
|
||||
# ifndef bzero
|
||||
extern int bzero();
|
||||
# endif
|
||||
# ifndef bcopy
|
||||
extern void bcopy();
|
||||
# endif
|
||||
|
||||
# ifndef index
|
||||
# ifdef HAS_INDEX
|
||||
extern char *rindex();
|
||||
extern char *index();
|
||||
# else
|
||||
# ifdef HAS_STRCHR
|
||||
extern char *strchr();
|
||||
extern char *strrchr();
|
||||
# else
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#endif /* else STDLIB */
|
||||
|
||||
#ifndef HAS_INDEX
|
||||
# ifndef index
|
||||
# ifdef HAS_STRCHR
|
||||
# define index strchr
|
||||
# define rindex strrchr
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef HAS_VPERROR
|
||||
extern void perror();
|
||||
#endif
|
||||
|
||||
#ifdef HAS_TIME_
|
||||
# ifdef HAS_BSDTIME
|
||||
extern char *timezone();
|
||||
# endif
|
||||
extern char *asctime();
|
||||
extern struct tm *localtime();
|
||||
#endif
|
||||
|
||||
#ifndef HAS_MEMAVL
|
||||
# ifdef HAS_RLIMIT_
|
||||
extern char *sbrk();
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define false 0
|
||||
#define true 1
|
||||
|
||||
#ifdef HAS_DOSDIRS
|
||||
typedef int *DIR;
|
||||
struct direct {
|
||||
int d_reclen;
|
||||
short d_ino;
|
||||
short d_namelen;
|
||||
char d_name[20];
|
||||
};
|
||||
|
||||
# ifdef __STDC__
|
||||
extern DIR *opendir(char *);
|
||||
extern struct direct *readdir(DIR *);
|
||||
# else
|
||||
extern DIR *opendir( );
|
||||
extern struct direct *readdir( );
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif WIN32_H
|
||||
|
|
@ -1,858 +0,0 @@
|
|||
---------- Forwarded message ----------
|
||||
Date: Tue, 24 Apr 2001 15:19:56 -0400
|
||||
From: Jon Engelbert <jon@beigebag.com>
|
||||
Reply-To: ng-spice-devel@ieee.ing.uniroma1.it
|
||||
To: ng-spice-devel@ieee.ing.uniroma1.it
|
||||
Subject: [ng-spice-devel] Changes to ng-spice v13 for WIN32.
|
||||
|
||||
I didn't get a chance to download the preliminary v14 yet. Also, please
|
||||
note that this is not 100% complete or tested yet.
|
||||
Also, I don't have cvs on my Windows machine, so these reports are from
|
||||
Visual SourceSafe. There are no line numbers (ouch!)
|
||||
|
||||
I hope that someone can go through these changes and make them to the
|
||||
official ng-spice source code so that the relevant changes are in v14.
|
||||
|
||||
Some of the big changes are:
|
||||
I added a new file, os_win32.h, that I took from my old xspice project, and
|
||||
this new file is included in conf.h.
|
||||
Os_win32.h contains definitions particular to the WIN32 environment.
|
||||
|
||||
I changed complex field references (cxreal, cximag) to the functions that
|
||||
return the same values.
|
||||
This is because Microsoft defines the complex fields as x and y.
|
||||
|
||||
I changed a lot of headers from <> to "" enclosures, and I gave explicit
|
||||
paths in some cases.
|
||||
This is because the compiler was having trouble finding the header files.
|
||||
|
||||
I bracketed #include of some files with #ifndef WIN32 ... #endif
|
||||
This is because Win32 didn't have these files on the system.
|
||||
|
||||
I basically replaced resource.c because there were a lot of
|
||||
incompatibilities with WIN32.
|
||||
I replaced it with the file from my old xspice project.
|
||||
|
||||
If anyone has suggestions on a better way to communicate my changes in the
|
||||
future, please don't hesitate.
|
||||
|
||||
|
||||
Files that are included separately... frontend/resource.c, os_win32.h
|
||||
|
||||
FILE: Main.c
|
||||
|
||||
********
|
||||
#define _GNU_SOURCE #define _GNU_SOURCE
|
||||
>
|
||||
> #ifndef WIN32
|
||||
#include <getopt.h> #include <getopt.h>
|
||||
> #endif
|
||||
|
||||
********
|
||||
#include <devdefs.h> #include <devdefs.h>
|
||||
#include <spicelib/devices/dev.h> | #include "spicelib/devices/dev.h"
|
||||
#include <spicelib/analysis/analysis | #include
|
||||
"spicelib/analysis/analysis
|
||||
#include <misc/ivars.h> | #include "misc/ivars.h"
|
||||
#include <frontend/resource.h> | #include "frontend/resource.h"
|
||||
#include <frontend/variable.h> | #include "frontend/variable.h"
|
||||
|
||||
********
|
||||
pw = getpwuid(getuid()); pw =
|
||||
getpwuid(getuid());
|
||||
asprintf(&s, "%s/.spiceinit", p | #ifndef WIN32
|
||||
> asprintf(&s, "%s/.spiceinit",
|
||||
pw-
|
||||
> #endif
|
||||
if (access(s, 0) == 0) if (access(s, 0) == 0)
|
||||
|
||||
|
||||
-----------------------------------
|
||||
FILE: frontend/com_ghelp.c
|
||||
|
||||
********
|
||||
#include <bool.h> #include <bool.h>
|
||||
>
|
||||
> #ifndef WIN32
|
||||
#include <variable.h> #include <variable.h>
|
||||
> #endif
|
||||
>
|
||||
#include <hlpdefs.h> #include <hlpdefs.h>
|
||||
|
||||
|
||||
|
||||
FILE: frontend/outitf.c
|
||||
|
||||
********
|
||||
#include "cktdefs.h" #include "cktdefs.h"
|
||||
| #ifdef WIN32
|
||||
> #include <float.h>
|
||||
> #endif
|
||||
|
||||
********
|
||||
|
||||
> #ifndef WIN32
|
||||
if (strncasecmp(run->type,"AC",2 if
|
||||
(strncasecmp(run->type,"AC",2
|
||||
********
|
||||
}; };
|
||||
> #else
|
||||
> if
|
||||
(strnicmp(run->type,"AC",2)==0) {
|
||||
> sprintf(buf, "AC Sweep");
|
||||
> sweep=2;
|
||||
> } else if
|
||||
(strnicmp(run->type,"DC",2)==0) {
|
||||
> sprintf(buf, "DC Sweep");
|
||||
> sweep=1;
|
||||
> } else if
|
||||
(strnicmp(run->type,"Tran",4)==0) {
|
||||
> sprintf(buf, "Transient
|
||||
An
|
||||
> sweep=4;
|
||||
> };
|
||||
> #endif
|
||||
i += strlen(buf); i += strlen(buf);
|
||||
********
|
||||
sizeof (complex) * (v->v sizeof (complex) *
|
||||
(v->v_length + 1));
|
||||
v->v_compdata[v->v_length].cx_ |
|
||||
realpart(&v->v_compdata[v->v_length]) = value;
|
||||
v->v_compdata[v->v_length].cx_ |
|
||||
imagpart(&v->v_compdata[v->v_length]) = (double) 0;
|
||||
} }
|
||||
********
|
||||
sizeof (complex) * (v->v sizeof (complex) *
|
||||
(v->v_length + 1));
|
||||
v->v_compdata[v->v_length].cx_re |
|
||||
realpart(&v->v_compdata[v->v_length]) = value;
|
||||
v->v_compdata[v->v_length].cx_im |
|
||||
imagpart(&v->v_compdata[v->v_length]) = value.imag;
|
||||
v->v_length++; v->v_length++;
|
||||
|
||||
FILE: frontend/rawfile.c
|
||||
|
||||
********
|
||||
} else { } else {
|
||||
if (fread((char *) &v->v_compdat | if (fread((char *)
|
||||
&realpart(&v->v_compdata[i]),
|
||||
sizeof (double), 1, fp) != 1) sizeof (double), 1, fp) != 1)
|
||||
********
|
||||
"Error: bad rawfile\n"); "Error: bad rawfile\n");
|
||||
if (fread((char *) &v->v_compdat | if (fread((char *)
|
||||
&imagpart(&v->v_compdata[i]),
|
||||
sizeof (double), 1, fp) != 1) sizeof (double), 1, fp) != 1)
|
||||
|
||||
|
||||
FILE: frontend/resource.c
|
||||
******** So many changes that I'm also attaching the resource.c file
|
||||
separately.
|
||||
|
||||
> #include <sys/types.h>
|
||||
>
|
||||
> #ifdef HAS_BSDRLIMIT
|
||||
> # include <sys/time.h>
|
||||
> # include <sys/resource.h>
|
||||
> #endif
|
||||
> #ifdef HAS_BSDRUSAGE
|
||||
> # ifndef HAS_BSDRLIMIT
|
||||
> # include <sys/time.h>
|
||||
> # include <sys/resource.h>
|
||||
> # endif
|
||||
> #else
|
||||
> # ifdef HAS_SYSVRUSAGE
|
||||
> # include <sys/times.h>
|
||||
> # include <sys/param.h>
|
||||
> # else
|
||||
> # ifdef HAS_FTIME
|
||||
> # include <sys/timeb.h>
|
||||
> struct timeb timebegin;
|
||||
> # endif
|
||||
> # endif
|
||||
> #endif
|
||||
>
|
||||
/* static declarations */ /* static declarations */
|
||||
********
|
||||
|
||||
| #ifdef HAS_RLIMIT_
|
||||
| # ifdef HAS_MEMAVL
|
||||
> size_t mem_avail;
|
||||
> # else
|
||||
char *startdata; char *startdata;
|
||||
char *enddata; char *enddata;
|
||||
| # endif
|
||||
> #endif
|
||||
|
||||
********
|
||||
{ {
|
||||
| #ifdef HAS_RLIMIT_
|
||||
> # ifdef HAS_MEMAVL
|
||||
> mem_avail = _memavl( );
|
||||
> # else
|
||||
startdata = (char *) baseaddr( ) startdata = (char *)
|
||||
aseaddr( )
|
||||
enddata = sbrk(0); enddata = sbrk(0);
|
||||
| # endif
|
||||
> #endif
|
||||
} }
|
||||
********
|
||||
{ {
|
||||
> #ifdef HAS_RLIMIT_
|
||||
long usage, limit; long usage, limit;
|
||||
static long old_usage = 0; static long old_usage = 0;
|
||||
>
|
||||
> # ifdef HAS_MEMAVL
|
||||
>
|
||||
> size_t mem_avail_now;
|
||||
>
|
||||
> mem_avail_now = _memavl( );
|
||||
> usage = mem_avail -
|
||||
mem_avail_now
|
||||
> limit = mem_avail;
|
||||
>
|
||||
> # else
|
||||
>
|
||||
char *hi; char *hi;
|
||||
|
||||
| # ifdef HAS_BSDRLIMIT
|
||||
# ifdef HAVE_GETRLIMIT <
|
||||
|
||||
********
|
||||
# endif # endif
|
||||
hi=sbrk(0); |
|
||||
usage = (long) (hi - enddata); | usage = sbrk(0) - enddata;
|
||||
|
||||
> # endif
|
||||
|
||||
********
|
||||
|
||||
> #endif
|
||||
return; return;
|
||||
********
|
||||
{ {
|
||||
bool yy = FALSE; | bool yy = false;
|
||||
static long lastsec = 0, lastuse static long lastsec = 0,
|
||||
lastuse
|
||||
struct variable *v; struct variable *v;
|
||||
> long realt;
|
||||
char *cpu_elapsed; char *cpu_elapsed;
|
||||
********
|
||||
|
||||
# ifdef HAVE_GETRUSAGE | # ifdef HAS_BSDRUSAGE
|
||||
struct rusage ruse; struct rusage ruse;
|
||||
********
|
||||
# else # else
|
||||
# ifdef HAVE_TIMES | # ifdef HAS_SYSVRUSAGE
|
||||
struct tms ruse; struct tms ruse;
|
||||
********
|
||||
# else # else
|
||||
# ifdef HAVE_FTIME | # ifdef HAS_FTIME
|
||||
struct timeb timenow; struct timeb timenow;
|
||||
********
|
||||
totalu %= 1000; totalu %= 1000;
|
||||
fprintf(cp_out, "Total %s time: | fprintf(cp_out, "Total %s
|
||||
time: %lu.%03lu seconds.\n",
|
||||
cpu_elapsed, total, totalu); cpu_elapsed, total, totalu);
|
||||
********
|
||||
|
||||
fprintf(cp_out, "%s time since | out_printf("%s time since last
|
||||
call: %lu.%03lu seconds.\n",
|
||||
cpu_elapsed, lastsec, lastusec); cpu_elapsed, lastsec, lastusec);
|
||||
********
|
||||
|
||||
yy = TRUE; | yy = true;
|
||||
#else #else
|
||||
********
|
||||
fprintf(cp_out, "CPU time since fprintf(cp_out, "CPU time
|
||||
since
|
||||
yy = TRUE; | yy = true;
|
||||
#endif #endif
|
||||
********
|
||||
#else #else
|
||||
# ifdef HAVE_GETRLIMIT | # ifdef HAS_BSDRLIMIT
|
||||
struct rlimit rld; struct rlimit rld;
|
||||
********
|
||||
# else # else
|
||||
# ifdef HAVE_ULIMIT | # ifdef HAS_SYSVRLIMIT
|
||||
char *hi; char *hi;
|
||||
********
|
||||
usage = (long) (hi - enddata); usage = (long) (hi - enddata);
|
||||
> # else
|
||||
> # ifdef HAS_MEMAVL
|
||||
>
|
||||
> size_t mem_avail_now;
|
||||
> mem_avail_now = _memavl( );
|
||||
> limit = mem_avail;
|
||||
> usage = mem_avail - mem_avail_now;
|
||||
>
|
||||
# endif # endif
|
||||
********
|
||||
#endif # endif
|
||||
> #endif
|
||||
fprintf(cp_out, "Current dyn fprintf(cp_out, "Current
|
||||
dynamic memory usage = %ld,\n", usage);
|
||||
fprintf(cp_out, "Dynamic mem fprintf(cp_out, "Dynamic
|
||||
memory limit = %ld.\n", limit);
|
||||
yy = TRUE; | yy = true;
|
||||
} }
|
||||
********
|
||||
if (!name || eq(name, "faults")) if (!name || eq(name,
|
||||
"faults"))
|
||||
#ifdef HAVE_GETRUSAGE | #ifdef HAS_BSDRUSAGE
|
||||
struct rusage ruse; struct rusage ruse;
|
||||
********
|
||||
ruse.ru_nvcsw + ruse ruse.ru_majflt,
|
||||
ruse.ru_nvcsw, ruse.ru_nivcsw,
|
||||
yy = TRUE; | yy = true;
|
||||
#endif #endif
|
||||
********
|
||||
(void) putc('\n', cp_out (void) putc('\n',
|
||||
cp_out);
|
||||
yy = TRUE; | yy = true;
|
||||
} else if (v) { } else if (v) {
|
||||
********
|
||||
} }
|
||||
yy = TRUE; | yy = true;
|
||||
} }
|
||||
********
|
||||
|
||||
> #ifdef HAS_UNIX_SEGMENT_HACK
|
||||
|
||||
********
|
||||
static void * static void *
|
||||
baseaddr(void) | baseaddr( )
|
||||
{ {
|
||||
char *low, *high, *at; char *low, *high, *at;
|
||||
/* char *sbrk(int); */ | char *sbrk( );
|
||||
long x; long x;
|
||||
RETSIGTYPE (*orig_signal)( ); | SIGNAL_TYPE (*orig_signal)( );
|
||||
|
||||
********
|
||||
<< (LOG2_PAGESIZE - 1)); << (LOG2_PAGESIZE - 1));
|
||||
> # ifdef notdef
|
||||
> at = (char *) ((((int) low +
|
||||
(int) high) / 2 + 0x7ff)
|
||||
> & ~(long) 0xfff);
|
||||
> /* nearest page */
|
||||
> # endif
|
||||
> # ifdef notdef
|
||||
> printf(
|
||||
> "high = %#8x low = %#8x at
|
||||
= %#8x\n",
|
||||
> high, low, at);
|
||||
> # endif
|
||||
|
||||
********
|
||||
|
||||
> # ifdef notdef
|
||||
> printf ("start is at %#x, end is
|
||||
at %#x\n", high, sbrk(0));
|
||||
> # endif
|
||||
(void) signal(SIGSEGV, (SIGNAL_FUNC (void) signal(SIGSEGV,
|
||||
(SIGNAL_FUNCTION) orig_signal);
|
||||
********
|
||||
|
||||
> #else
|
||||
>
|
||||
> static void *
|
||||
> baseaddr( )
|
||||
> {
|
||||
> return 0;
|
||||
> }
|
||||
>
|
||||
> #endif
|
||||
|
||||
|
||||
FILE: frontend/signal_handler.c
|
||||
|
||||
********
|
||||
|
||||
| #ifdef WIN32
|
||||
| #include <process.h>
|
||||
> #endif
|
||||
|
||||
********
|
||||
|
||||
> #ifdef WIN32
|
||||
> //extern pid_t _getpid (void);
|
||||
> #else
|
||||
extern pid_t getpid (void); extern pid_t getpid (void);
|
||||
> #endif
|
||||
|
||||
|
||||
|
||||
FILE: frontend/spec.c
|
||||
|
||||
********
|
||||
for (i = 0; i<ngood; i++) { for (i = 0; i<ngood; i++) {
|
||||
fdvec[i][j].cx_real = 0; | realpart(&fdvec[i][j]) = 0;
|
||||
fdvec[i][j].cx_imag = 0; | imagpart(&fdvec[i][j]) = 0;
|
||||
} }
|
||||
********
|
||||
double value = tdvec[i] double value =
|
||||
tdvec[i]
|
||||
fdvec[i][j].cx_real += val | realpart(&fdvec[i][j]) +=
|
||||
value*cosa;
|
||||
fdvec[i][j].cx_imag += val | imagpart(&fdvec[i][j]) +=
|
||||
value*sina;
|
||||
|
||||
} }
|
||||
********
|
||||
for (i = 0; i<ngood; i++) { for (i = 0; i<ngood; i++) {
|
||||
fdvec[i][0].cx_real = dc[i]; | realpart(&fdvec[i][0]) =
|
||||
dc[i];
|
||||
fdvec[i][0].cx_imag = 0; | imagpart(&fdvec[i][0]) = 0;
|
||||
} }
|
||||
|
||||
FILE: frontend/parser/complete.c
|
||||
|
||||
********
|
||||
/* MW. We also need ioctl.h here I /* MW. We also need ioctl.h here I
|
||||
> #ifndef WIN32
|
||||
#include <sys/ioctl.h> #include <sys/ioctl.h>
|
||||
> #endif
|
||||
|
||||
|
||||
|
||||
FILE: frontend/parser/lexical.c
|
||||
|
||||
********
|
||||
/* MW. Linux has TIOCSTI, so we inc /* MW. Linux has TIOCSTI, so we
|
||||
inc
|
||||
> #ifndef WIN32
|
||||
#include <sys/ioctl.h> #include <sys/ioctl.h>
|
||||
> #endif
|
||||
|
||||
|
||||
|
||||
FILE: frontend/parser/std.c
|
||||
|
||||
********
|
||||
#include "cpstd.h" #include "cpstd.h"
|
||||
| #include <stdlib.h>
|
||||
> #include <search.h>
|
||||
|
||||
FILE: frontend/plotting/agraf.c
|
||||
|
||||
|
||||
********
|
||||
|
||||
#include <variable.h> | #include <../frontend/variable.h>
|
||||
|
||||
|
||||
|
||||
FILE: frontend/plotting/graf.c
|
||||
|
||||
|
||||
********
|
||||
#include <terminal.h> #include <terminal.h>
|
||||
#include <variable.h> | #include <../frontend/variable.h>
|
||||
|
||||
********
|
||||
printf("%s", printf("%s",
|
||||
getitright(buf, u->v_compdata[le | getitright(buf,
|
||||
realpart(&u->v_compdata[len - 1])));
|
||||
printf(", %s", printf(", %s",
|
||||
getitright(buf, u->v_compdat | getitright(buf,
|
||||
imagpart(&u->v_compdata[len - 1])));
|
||||
} }
|
||||
|
||||
********
|
||||
/* MW. Complex data again */ /* MW. Complex data again */
|
||||
printf("%s", getitright(buf, v | printf("%s", getitright(buf,
|
||||
realpart(&v->v_compdata[len - 1])));
|
||||
printf(", %s", getitright(buf, | printf(", %s", getitright(buf,
|
||||
imagpart(&v->v_compdata[len - 1])));
|
||||
} }
|
||||
|
||||
FILE: frontend/plotting/plotcurv.c
|
||||
|
||||
|
||||
********
|
||||
#include <ftedbgra.h> #include <ftedbgra.h>
|
||||
#include <variable.h> | #include "..\variable.h"
|
||||
|
||||
|
||||
|
||||
FILE: frontend/plotting/plotit.c
|
||||
|
||||
********
|
||||
|
||||
#include <circuits.h> | #include "../circuits.h"
|
||||
#include <variable.h> | #include "../variable.h"
|
||||
|
||||
|
||||
|
||||
FILE: frontend/plotting/pvec.c
|
||||
|
||||
********
|
||||
default: default:
|
||||
> break;
|
||||
} }
|
||||
********
|
||||
default: default:
|
||||
> break;
|
||||
} }
|
||||
|
||||
|
||||
FILE: frontend/plotting/xgraph.c
|
||||
|
||||
|
||||
********
|
||||
|
||||
#include <variable.h> | #include <../frontend/variable.h>
|
||||
|
||||
|
||||
|
||||
FILE: /maths/cmaths/cmath2.c
|
||||
|
||||
******** replace random with rand
|
||||
k = floor(imagpart(&cc[i k =
|
||||
floor(imagpart(&cc[i
|
||||
realpart(&c[i]) = j ? random | realpart(&c[i]) = j
|
||||
? rand
|
||||
imagpart(&c[i]) = k ? random | imagpart(&c[i]) = k
|
||||
? rand
|
||||
} }
|
||||
********
|
||||
j = floor(dd[i]); j = floor(dd[i]);
|
||||
d[i] = j ? random() % j | d[i] = j ? rand() % j :
|
||||
} }
|
||||
|
||||
|
||||
FILE: /maths/cmaths/cmath4.c
|
||||
|
||||
********
|
||||
|
||||
#include <interpolate.h> | #include
|
||||
<../maths/poly/interpolate.
|
||||
#include <polyfit.h> | #include <../maths/poly/polyfit.h>
|
||||
#include <polyeval.h> | #include <../maths/poly/polyeval.h>
|
||||
#include <polyderiv.h> | #include
|
||||
<../maths/poly/polyderiv.h>
|
||||
|
||||
|
||||
|
||||
FILE: /maths/cmaths/test_cx_ph.c
|
||||
|
||||
********
|
||||
#include "cmath1.h" #include "cmath1.h"
|
||||
> #ifdef WIN32
|
||||
> #include "defines.h"
|
||||
> #endif
|
||||
|
||||
|
||||
FILE: /include/complex.h
|
||||
|
||||
********
|
||||
/* Complex numbers. */ /* Complex numbers. */
|
||||
>
|
||||
>
|
||||
> #ifndef WIN32
|
||||
>
|
||||
struct _complex { /* IBM portabili struct _complex { /* IBM
|
||||
portabili
|
||||
********
|
||||
|
||||
> #else
|
||||
> #ifndef _COMPLEX_DEFINED
|
||||
> // Jon changed this... 4/15/01
|
||||
> // Complex has been defined by MSVC
|
||||
include, so don't redefine it.
|
||||
> // if it hasn't, then define it the
|
||||
same way as it's defined in vc
|
||||
> // i.e., use x & y rather than
|
||||
cx_real and cx_imag, and define
|
||||
> // complex and _complex as the
|
||||
same.
|
||||
> struct _complex { /* IBM
|
||||
portability*/
|
||||
> double x;
|
||||
> double y;
|
||||
> } ;
|
||||
> #define _COMPLEX_DEFINED
|
||||
> #endif // _COMPLEX_DEFINED
|
||||
> // end of jon's change
|
||||
> #endif
|
||||
>
|
||||
typedef struct _complex complex; typedef struct _complex complex;
|
||||
|
||||
> #ifndef WIN32
|
||||
#define realpart(cval) ((struct _co #define realpart(cval) ((struct
|
||||
_co ...
|
||||
#define imagpart(cval) ((struct _co #define imagpart(cval) ((struct
|
||||
_co ...
|
||||
| #else
|
||||
| #define realpart(cval) ((struct
|
||||
_complex *) (cval))->x
|
||||
> #define imagpart(cval) ((struct _
|
||||
complex *) (cval))->y
|
||||
> #endif
|
||||
/* /*
|
||||
|
||||
|
||||
FILE: /include/config.h
|
||||
|
||||
> #ifndef CONFIG_H
|
||||
> #define CONFIG_H
|
||||
>
|
||||
> # include "os_win32.h" // add to
|
||||
project
|
||||
> #define SIMULATOR
|
||||
#ifdef HAS_NOVM #ifdef HAS_NOVM
|
||||
********
|
||||
#endif #endif
|
||||
>
|
||||
> #endif CONFIG_H
|
||||
|
||||
|
||||
FILE: /include/defines.h
|
||||
|
||||
********
|
||||
|
||||
| // Jon's change, otherwise
|
||||
conflict.
|
||||
> #ifndef WIN32_H
|
||||
#define DIR_PATHSEP "/" #define DIR_PATHSEP "/"
|
||||
********
|
||||
#define DIR_CWD "." #define DIR_CWD "."
|
||||
> #define TEMPFORMAT "/tmp/%s%d"
|
||||
> #endif
|
||||
|
||||
#define TEMPFORMAT "/tmp/%s%d" <
|
||||
#define SYSTEM_PLOT5LPR "lpr -P%s -g #define SYSTEM_PLOT5LPR
|
||||
"lpr -P%s -g %s"
|
||||
********
|
||||
#define HAS_TIME_ #define HAS_TIME_
|
||||
>
|
||||
> #ifndef WIN32
|
||||
#define HAS_RLIMIT_ #define HAS_RLIMIT_
|
||||
| #endif
|
||||
|
||||
********
|
||||
|
||||
#define DIR_PATHSEP "/" <
|
||||
#define DIR_TERM '/' <
|
||||
#define DIR_CWD "." <
|
||||
<
|
||||
#define TEMPFORMAT "/tmp/%s%d" <
|
||||
#define SYSTEM_PLOT5LPR "lpr -P%s -g <
|
||||
#define SYSTEM_PSLPR "lpr -P%s %s" <
|
||||
#define SYSTEM_MAIL "Mail -s \"%s (% <
|
||||
|
||||
|
||||
|
||||
FILE: /include/terminal.h
|
||||
|
||||
> #ifndef WIN32
|
||||
#include "../misc/terminal.h" #include "../misc/terminal.h"
|
||||
> #endif
|
||||
|
||||
FILE: misc/ivars.c
|
||||
|
||||
********
|
||||
buffer = getenv(env_var); buffer = getenv(env_var);
|
||||
> #ifndef WIN32
|
||||
if (buffer) if (buffer)
|
||||
********
|
||||
asprintf(p, "%s%s%s", path_prefix, asprintf(p, "%s%s%s", path_prefix,
|
||||
> #endif
|
||||
} }
|
||||
|
||||
|
||||
FILE: spicelib/analysis/cktdisto.c
|
||||
|
||||
********
|
||||
#include "devdefs.h" #include "devdefs.h"
|
||||
#include "vsrc/vsrcdefs.h" | #include
|
||||
"../devices/vsrc/vsrcdefs.h"
|
||||
#include "isrc/isrcdefs.h" | #include
|
||||
"../devices/isrc/isrcdefs.h"
|
||||
#include "iferrmsg.h" #include "iferrmsg.h"
|
||||
|
||||
|
||||
FILE: spicelib/analysis/ckttroub.c
|
||||
|
||||
********
|
||||
#include "devdefs.h" #include "devdefs.h"
|
||||
#include "vsrc/vsrcdefs.h" | #include
|
||||
"../devices/vsrc/vsrcdefs.h"
|
||||
#include "isrc/isrcdefs.h" | #include
|
||||
"../devices/isrc/isrcdefs.h"
|
||||
#include "jobdefs.h" #include "jobdefs.h"
|
||||
|
||||
|
||||
FILE: spicelib/analysis/dctran.c
|
||||
|
||||
********
|
||||
#include <cktdefs.h> #include <cktdefs.h>
|
||||
#include <cktaccept.h> | #include "../devices/cktaccept.h"
|
||||
#include <trandefs.h> #include <trandefs.h>
|
||||
|
||||
|
||||
FILE: spicelib/analysis/dctrcurv.c
|
||||
|
||||
********
|
||||
|
||||
#include "vsrc/vsrcdefs.h" | #include
|
||||
"../devices/vsrc/vsrcdefs.h"
|
||||
#include "isrc/isrcdefs.h" | #include
|
||||
"../devices/isrc/isrcdefs.h"
|
||||
#include "res/resdefs.h" | #include "../devices/res/resdefs.h"
|
||||
|
||||
|
||||
|
||||
FILE: spicelib/analysis/noisean.c
|
||||
|
||||
********
|
||||
#include "sperror.h" #include "sperror.h"
|
||||
#include "vsrc/vsrcdefs.h" | #include
|
||||
"../devices/vsrc/vsrcdefs.h"
|
||||
#include "isrc/isrcdefs.h" | #include
|
||||
"../devices/isrc/isrcdefs.h"
|
||||
|
||||
|
||||
FILE: spicelib/devices/asrc/asrcinit.c
|
||||
********
|
||||
> #ifndef WIN32
|
||||
DEVparam : ASRCparam, DEVparam : ASRCparam,
|
||||
********
|
||||
DEVmodSize : &ASRCmSize DEVmodSize : &ASRCmSize
|
||||
> #else
|
||||
> ASRCparam,
|
||||
> NULL,
|
||||
> ASRCload,
|
||||
> ASRCsetup,
|
||||
> ASRCunsetup,
|
||||
> ASRCsetup,
|
||||
> NULL,
|
||||
> NULL,
|
||||
> ASRCfindBr,
|
||||
> ASRCacLoad, /* ac and normal
|
||||
> NULL,
|
||||
> ASRCdestroy,
|
||||
> ASRCmDelete,
|
||||
> ASRCdelete,
|
||||
> NULL,
|
||||
> NULL,
|
||||
> NULL,
|
||||
> ASRCpzLoad,
|
||||
> ASRCconvTest,
|
||||
> NULL,
|
||||
> NULL,
|
||||
> NULL,
|
||||
> NULL,
|
||||
> NULL,
|
||||
> NULL,
|
||||
> NULL, /* DISTO */
|
||||
> NULL, /* NOISE */
|
||||
>
|
||||
> &ASRCiSize,
|
||||
> &ASRCmSize
|
||||
> #endif
|
||||
}; };
|
||||
|
||||
******************************
|
||||
**** the same changes for all other device init routines.
|
||||
******************************
|
||||
|
||||
FILE: spicelib/parser/ifnewuid.c
|
||||
|
||||
********
|
||||
#include <inpdefs.h> #include <inpdefs.h>
|
||||
#include <circuits.h> | #include "../frontend/circuits.h"
|
||||
#include <cpdefs.h> #include <cpdefs.h>
|
||||
********
|
||||
|
||||
> #ifndef WIN32
|
||||
if (olduid) { if (olduid) {
|
||||
********
|
||||
} }
|
||||
| #endif
|
||||
switch (type) { switch (type) {
|
||||
|
||||
|
||||
FILE: spicelib/parser/inperror.c
|
||||
|
||||
********
|
||||
|
||||
> #ifndef WIN32
|
||||
if (errRtn) if (errRtn)
|
||||
********
|
||||
asprintf(&ebuf, "%s\n", val); asprintf(&ebuf, "%s\n", val);
|
||||
| #endif
|
||||
return ebuf; return ebuf;
|
||||
|
||||
|
||||
|
||||
****************************************************************************
|
||||
*****************
|
||||
FILE: include/OS_WIN32.H
|
||||
/*
|
||||
* Win32...
|
||||
*/
|
||||
|
||||
/*
|
||||
* MS-DOS
|
||||
*/
|
||||
#define DIR_CWD "."
|
||||
#define DIR_PATHSEP "\\"
|
||||
#define DIR_TERM '\\'
|
||||
#define TEMPFORMAT "%s%d.tmp"
|
||||
|
||||
/* ----- System capabilities */
|
||||
#define HAS_FLAT_INCLUDES
|
||||
//#define HAS_QUICKDRAW
|
||||
//#define HAS_MACCLOCK
|
||||
//#define HAS_LOCALTIME
|
||||
//#define HAS_NO_ERFC
|
||||
|
||||
#define FTEDEBUG /* Enable general debugging */
|
||||
#define CPDEBUG /* Enable cshpar debugging */
|
||||
#define CAPZEROBYPASS
|
||||
#define NEWCONV
|
||||
//#define HAS_MAC_ARGCARGV
|
||||
#define HAS_ASCII
|
||||
#define HAS_CHDIR /* for tree filesystems, chdir( ) */
|
||||
#define HAS_CLEARERR /* clearerr( ), should be in stdio */
|
||||
#define HAS_CTYPE /* <ctype.h>, iswhite( ), etc. */
|
||||
#define HAS_DOSDIRS /* Emulate opendir, etc. */
|
||||
//#define HAS_MEMAVL /*_memavl( ) not available in Win32 console mode. */
|
||||
#define HAS_ENVIRON
|
||||
#define HAS_FTIME
|
||||
#define HAS_GETCWD /* getcwd(buf, size) */
|
||||
#define HAS_LOCALTIME
|
||||
#define HAS_LONGJUMP /* setjmp( ), longjmp( ) */
|
||||
// #define HAS_MINDATA // only needed for MS-DOS
|
||||
// #define HAS_NOINLINE // only needed for MS-DOS
|
||||
// #define HAS_NOVM // only needed for MS-DOS
|
||||
#define HAS_PCTERM
|
||||
#define HAS_QSORT /* qsort( ) */
|
||||
#define HAS_SHORTMACRO
|
||||
#define HAS_STAT
|
||||
#define HAS_STDLIB
|
||||
#define HAS_STRCHR /* strchr( ) instead of index( ) */
|
||||
#define HAS_SYSTEM
|
||||
#define HAS_UNIX_SIGS
|
||||
#define HAS_UNLINK
|
||||
#define HAS_LIMITS_H
|
||||
#define HAS_FLOAT_H
|
||||
#define HAS_NO_IEEE_LOGB
|
||||
#define HAS_NO_ERFC
|
||||
#define HAS_BATCHSIM
|
||||
|
||||
#define WANT_PCHARDCOPY
|
||||
#define WANT_MFB
|
||||
|
||||
// from Mac world??
|
||||
#define SIMULATOR /* There should be a better way */
|
||||
|
||||
**********************************
|
||||
|
||||
|
||||
Jon Engelbert
|
||||
President, Beige Bag Software
|
||||
279 E. Liberty, Ann Arbor, MI 48105
|
||||
jon@beigebag.com
|
||||
|
||||
|
||||
|
|
@ -1,444 +0,0 @@
|
|||
/**********
|
||||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||
**********/
|
||||
|
||||
/*
|
||||
* Resource-related routines.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include "ngspice.h"
|
||||
#include "cpdefs.h"
|
||||
#include "ftedefs.h"
|
||||
|
||||
#include "circuits.h"
|
||||
#include "quote.h"
|
||||
#include "resource.h"
|
||||
#include "variable.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef HAS_BSDRLIMIT
|
||||
# include <sys/time.h>
|
||||
# include <sys/resource.h>
|
||||
#endif
|
||||
#ifdef HAS_BSDRUSAGE
|
||||
# ifndef HAS_BSDRLIMIT
|
||||
# include <sys/time.h>
|
||||
# include <sys/resource.h>
|
||||
# endif
|
||||
#else
|
||||
# ifdef HAS_SYSVRUSAGE
|
||||
# include <sys/times.h>
|
||||
# include <sys/param.h>
|
||||
# else
|
||||
# ifdef HAS_FTIME
|
||||
# include <sys/timeb.h>
|
||||
struct timeb timebegin;
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* static declarations */
|
||||
static void printres(char *name);
|
||||
static RETSIGTYPE fault(void);
|
||||
static void * baseaddr(void);
|
||||
|
||||
#ifdef HAS_RLIMIT_
|
||||
# ifdef HAS_MEMAVL
|
||||
size_t mem_avail;
|
||||
# else
|
||||
char *startdata;
|
||||
char *enddata;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
void
|
||||
init_rlimits(void)
|
||||
{
|
||||
#ifdef HAS_RLIMIT_
|
||||
# ifdef HAS_MEMAVL
|
||||
mem_avail = _memavl( );
|
||||
# else
|
||||
startdata = (char *) baseaddr( );
|
||||
enddata = sbrk(0);
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
init_time(void)
|
||||
{
|
||||
|
||||
#ifdef HAVE_GETRUSAGE
|
||||
#else
|
||||
# ifdef HAVE_TIMES
|
||||
# else
|
||||
# ifdef HAVE_FTIME
|
||||
ftime(&timebegin);
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
com_rusage(wordlist *wl)
|
||||
{
|
||||
char* copyword;
|
||||
/* Fill in the SPICE accounting structure... */
|
||||
|
||||
if (wl && (eq(wl->wl_word, "everything") || eq(wl->wl_word, "all"))) {
|
||||
printres((char *) NULL);
|
||||
} else if (wl) {
|
||||
for (; wl; wl = wl->wl_next) {
|
||||
/* printres(cp_unquote(wl->wl_word)); DG: bad, memory leak*/
|
||||
copyword=cp_unquote(wl->wl_word);/*DG*/
|
||||
printres(copyword);
|
||||
tfree(copyword);
|
||||
if (wl->wl_next)
|
||||
(void) putc('\n', cp_out);
|
||||
}
|
||||
} else {
|
||||
printres("cputime");
|
||||
(void) putc('\n', cp_out);
|
||||
printres("totalcputime");
|
||||
(void) putc('\n', cp_out);
|
||||
printres("space");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* Find out if the user is approaching his maximum data size. */
|
||||
|
||||
void
|
||||
ft_ckspace(void)
|
||||
{
|
||||
#ifdef HAS_RLIMIT_
|
||||
long usage, limit;
|
||||
static long old_usage = 0;
|
||||
|
||||
# ifdef HAS_MEMAVL
|
||||
|
||||
size_t mem_avail_now;
|
||||
|
||||
mem_avail_now = _memavl( );
|
||||
usage = mem_avail - mem_avail_now;
|
||||
limit = mem_avail;
|
||||
|
||||
# else
|
||||
|
||||
char *hi;
|
||||
|
||||
# ifdef HAS_BSDRLIMIT
|
||||
|
||||
struct rlimit rld;
|
||||
getrlimit(RLIMIT_DATA, &rld);
|
||||
if (rld.rlim_cur == RLIM_INFINITY)
|
||||
return;
|
||||
limit = rld.rlim_cur - (enddata - startdata); /* rlim_max not used */
|
||||
|
||||
# else
|
||||
|
||||
/* SYSVRLIMIT */
|
||||
limit = ulimit(3, 0L) - (enddata - startdata);
|
||||
|
||||
# endif
|
||||
|
||||
usage = sbrk(0) - enddata;
|
||||
|
||||
# endif
|
||||
|
||||
if (limit < 0)
|
||||
return; /* what else do you do? */
|
||||
|
||||
if (usage <= old_usage)
|
||||
return;
|
||||
|
||||
old_usage = usage;
|
||||
|
||||
if (usage > limit * 0.9) {
|
||||
fprintf(cp_err, "Warning - approaching max data size: ");
|
||||
fprintf(cp_err, "current size = %ld, limit = %ld.\n", usage, limit);
|
||||
}
|
||||
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
/* Print out one piece of resource usage information. */
|
||||
|
||||
|
||||
static void
|
||||
printres(name)
|
||||
char *name;
|
||||
{
|
||||
bool yy = false;
|
||||
static long lastsec = 0, lastusec = 0;
|
||||
struct variable *v;
|
||||
long realt;
|
||||
char *cpu_elapsed;
|
||||
|
||||
if (!name || eq(name, "totalcputime") || eq(name, "cputime")) {
|
||||
int total, totalu;
|
||||
|
||||
#ifdef ipsc
|
||||
# define NO_RUDATA
|
||||
#else
|
||||
|
||||
# ifdef HAS_BSDRUSAGE
|
||||
struct rusage ruse;
|
||||
(void) getrusage(RUSAGE_SELF, &ruse);
|
||||
total = ruse.ru_utime.tv_sec + ruse.ru_stime.tv_sec;
|
||||
totalu = (ruse.ru_utime.tv_usec + ruse.ru_stime.tv_usec) / 1000;
|
||||
cpu_elapsed = "CPU";
|
||||
# else
|
||||
# ifdef HAS_SYSVRUSAGE
|
||||
struct tms ruse;
|
||||
realt = times(&ruse);
|
||||
total = (ruse.tms_utime + ruse.tms_stime)/ HZ;
|
||||
totalu = (ruse.tms_utime + ruse.tms_utime) * 1000 / HZ;
|
||||
cpu_elapsed = "CPU";
|
||||
# else
|
||||
# ifdef HAS_FTIME
|
||||
struct timeb timenow;
|
||||
int sec, msec;
|
||||
ftime(&timenow);
|
||||
timediff(&timenow, &timebegin, &total, &totalu);
|
||||
totalu /= 1000;
|
||||
cpu_elapsed = "elapsed";
|
||||
# else
|
||||
# define NO_RUDATA
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef NO_RUDATA
|
||||
if (!name || eq(name, "totalcputime")) {
|
||||
total += totalu / 1000;
|
||||
totalu %= 1000;
|
||||
fprintf(cp_out, "Total %s time: %lu.%03lu seconds.\n",
|
||||
cpu_elapsed, total, totalu);
|
||||
}
|
||||
|
||||
if (!name || eq(name, "cputime")) {
|
||||
lastusec = totalu - lastusec;
|
||||
lastsec = total - lastsec;
|
||||
while (lastusec < 0) {
|
||||
lastusec += 1000;
|
||||
lastsec -= 1;
|
||||
}
|
||||
while (lastusec > 1000) {
|
||||
lastusec -= 1000;
|
||||
lastsec += 1;
|
||||
}
|
||||
|
||||
out_printf("%s time since last call: %lu.%03lu seconds.\n",
|
||||
cpu_elapsed, lastsec, lastusec);
|
||||
|
||||
lastsec = total;
|
||||
lastusec = totalu;
|
||||
}
|
||||
|
||||
yy = true;
|
||||
#else
|
||||
if (!name || eq(name, "totalcputime"))
|
||||
fprintf(cp_out, "Total CPU time: ??.??? seconds.\n");
|
||||
if (!name || eq(name, "cputime"))
|
||||
fprintf(cp_out, "CPU time since last call: ??.??? seconds.\n");
|
||||
yy = true;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
if (!name || eq(name, "space")) {
|
||||
long usage = 0, limit = 0;
|
||||
#ifdef ipsc
|
||||
NXINFO cur = nxinfo, start = nxinfo_snap;
|
||||
|
||||
usage = cur.dataend - cur.datastart;
|
||||
limit = start.availmem;
|
||||
#else
|
||||
# ifdef HAS_BSDRLIMIT
|
||||
struct rlimit rld;
|
||||
char *hi;
|
||||
|
||||
getrlimit(RLIMIT_DATA, &rld);
|
||||
limit = rld.rlim_cur - (enddata - startdata);
|
||||
hi = sbrk(0);
|
||||
usage = (long) (hi - enddata);
|
||||
# else
|
||||
# ifdef HAS_SYSVRLIMIT
|
||||
char *hi;
|
||||
|
||||
limit = ulimit(3, 0L) - (enddata - startdata);
|
||||
hi = sbrk(0);
|
||||
usage = (long) (hi - enddata);
|
||||
# else
|
||||
# ifdef HAS_MEMAVL
|
||||
|
||||
size_t mem_avail_now;
|
||||
mem_avail_now = _memavl( );
|
||||
limit = mem_avail;
|
||||
usage = mem_avail - mem_avail_now;
|
||||
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
fprintf(cp_out, "Current dynamic memory usage = %ld,\n", usage);
|
||||
fprintf(cp_out, "Dynamic memory limit = %ld.\n", limit);
|
||||
yy = true;
|
||||
}
|
||||
|
||||
if (!name || eq(name, "faults")) {
|
||||
#ifdef HAS_BSDRUSAGE
|
||||
struct rusage ruse;
|
||||
|
||||
(void) getrusage(RUSAGE_SELF, &ruse);
|
||||
fprintf(cp_out,
|
||||
"%lu page faults, %lu vol + %lu invol = %lu context switches.\n",
|
||||
ruse.ru_majflt, ruse.ru_nvcsw, ruse.ru_nivcsw,
|
||||
ruse.ru_nvcsw + ruse.ru_nivcsw);
|
||||
yy = true;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Now get all the spice resource stuff. */
|
||||
if (ft_curckt && ft_curckt->ci_ckt) {
|
||||
if (name && eq(name, "task"))
|
||||
v = if_getstat(ft_curckt->ci_ckt, NULL);
|
||||
else
|
||||
v = if_getstat(ft_curckt->ci_ckt, name);
|
||||
if (name && v) {
|
||||
fprintf(cp_out, "%s = ", v->va_name);
|
||||
wl_print(cp_varwl(v), cp_out);
|
||||
(void) putc('\n', cp_out);
|
||||
yy = true;
|
||||
} else if (v) {
|
||||
(void) putc('\n', cp_out);
|
||||
while (v) {
|
||||
fprintf(cp_out, "%s = ", v->va_name);
|
||||
wl_print(cp_varwl(v), cp_out);
|
||||
(void) putc('\n', cp_out);
|
||||
v = v->va_next;
|
||||
}
|
||||
yy = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!yy) {
|
||||
fprintf(cp_err, "Note: no resource usage information for '%s',\n",
|
||||
name);
|
||||
fprintf(cp_err, "\tor no active circuit available\n");
|
||||
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef HAS_UNIX_SEGMENT_HACK
|
||||
|
||||
#include <signal.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
/*
|
||||
* baseaddr( ) returns the base address of the data segment on most Unix
|
||||
* systems. It's an ugly hack for info that should be provided by the OS.
|
||||
*/
|
||||
|
||||
/* Does anyone use a pagesize < 256 bytes?? I'll bet not;
|
||||
* too small doesn't hurt
|
||||
*/
|
||||
|
||||
#define LOG2_PAGESIZE 8
|
||||
|
||||
static jmp_buf env;
|
||||
|
||||
static RETSIGTYPE
|
||||
fault(void)
|
||||
{
|
||||
signal(SIGSEGV, (SIGNAL_FUNCTION) fault); /* SysV style */
|
||||
longjmp(env, 1);
|
||||
}
|
||||
|
||||
static void *
|
||||
baseaddr( )
|
||||
{
|
||||
char *low, *high, *at;
|
||||
char *sbrk( );
|
||||
long x;
|
||||
SIGNAL_TYPE (*orig_signal)( );
|
||||
|
||||
if (getenv("SPICE_NO_DATASEG_CHECK"))
|
||||
return 0;
|
||||
|
||||
low = 0;
|
||||
high = (char *) ((unsigned long) sbrk(0) & ~((1 << LOG2_PAGESIZE) - 1));
|
||||
|
||||
orig_signal = signal(SIGSEGV, (SIGNAL_FUNCTION) fault);
|
||||
|
||||
do {
|
||||
|
||||
at = (char *) ((((long)low >> LOG2_PAGESIZE)
|
||||
+ ((long)high >> LOG2_PAGESIZE))
|
||||
<< (LOG2_PAGESIZE - 1));
|
||||
# ifdef notdef
|
||||
at = (char *) ((((int) low + (int) high) / 2 + 0x7ff)
|
||||
& ~(long) 0xfff);
|
||||
/* nearest page */
|
||||
# endif
|
||||
# ifdef notdef
|
||||
printf(
|
||||
"high = %#8x low = %#8x at = %#8x\n",
|
||||
high, low, at);
|
||||
# endif
|
||||
|
||||
if (at == low || at == high) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (setjmp(env)) {
|
||||
low = at;
|
||||
continue;
|
||||
} else
|
||||
x = *at;
|
||||
|
||||
if (setjmp(env)) {
|
||||
low = at;
|
||||
continue;
|
||||
} else
|
||||
*at = x;
|
||||
|
||||
high = at;
|
||||
|
||||
} while (1);
|
||||
|
||||
# ifdef notdef
|
||||
printf ("start is at %#x, end is at %#x\n", high, sbrk(0));
|
||||
# endif
|
||||
(void) signal(SIGSEGV, (SIGNAL_FUNCTION) orig_signal);
|
||||
return (void *) high;
|
||||
}
|
||||
|
||||
# ifdef notdef
|
||||
main( )
|
||||
{
|
||||
printf("testing\n");
|
||||
printf("baseaddr: %#8x topaddr: %#8x\n", baseaddr( ), sbrk(0));
|
||||
}
|
||||
# endif
|
||||
|
||||
#else
|
||||
|
||||
static void *
|
||||
baseaddr( )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue