27 changed files with 142 additions and 776 deletions
-
29NEWS
-
69NOTES
-
13TODO
-
3acconfig.h
-
3configure.in
-
164notes/Linux.changes
-
7notes/dbx
-
98notes/internal
-
207notes/mac_port
-
237notes/porting
-
15notes/spice2
-
2src/frontend/inpcom.c
-
2src/include/complex.h
-
7src/include/macros.h
-
18src/include/memory.h
-
15src/include/ngspice.h
-
1src/maths/cmaths/Makefile.am
-
7src/maths/cmaths/cmath.h
-
2src/maths/cmaths/cmath1.c
-
1src/maths/cmaths/cmath2.c
-
1src/maths/cmaths/cmath3.c
-
2src/maths/cmaths/cmath4.c
-
2src/maths/cmaths/test_cx_j.c
-
2src/maths/cmaths/test_cx_mag.c
-
2src/maths/cmaths/test_cx_ph.c
-
7src/misc/alloc.c
-
2src/misc/alloc.h
@ -0,0 +1,69 @@ |
|||
DEBUGGING SPICE |
|||
|
|||
To avoid a segmentation fault in the initial run, use the following |
|||
command in gdb: |
|||
|
|||
setenv SPICE_NO_DATASEG_CHECK "1" |
|||
|
|||
Or, the comparable command in your shell before running gdb. This |
|||
disable accurate tracking of how much memory is used. |
|||
|
|||
---------------------------------------------------------------------- |
|||
USING A GARBAGE COLLECTOR |
|||
|
|||
Get the Boehm-Weiser conservative garbage collector at the following |
|||
address: |
|||
|
|||
http://www.hpl.hp.com/personal/Hans_Boehm/gc/ |
|||
|
|||
Compile it with 'make liblinuxgc.so' and install libgc.so and gc.h |
|||
where the compiler can find them (i.e., /usr/local/lib and |
|||
/usr/local/include). Run configure and compile. |
|||
|
|||
|
|||
---------------------------------------------------------------------- |
|||
CREATING PATCHES |
|||
|
|||
If you don't have access to anonymous CVS: |
|||
|
|||
# extract the differences |
|||
$ diff -ruN ng-spice-rework-x ng-spice > my.patch |
|||
|
|||
where ng-spice-rework-x is the snapshot you used to base your changes |
|||
on. |
|||
|
|||
If you do have access to anonymous CVS: |
|||
|
|||
$ cvs diff -u > my.patch |
|||
|
|||
Note: this only works if you haven't added any files. Otherwise, the |
|||
first method is better. |
|||
|
|||
Now, send your patch to ng-spice mailing list. |
|||
|
|||
|
|||
---------------------------------------------------------------------- |
|||
INCORPORATING PATCHES |
|||
|
|||
# apply the patch |
|||
$ patch -p1 < my.patch |
|||
|
|||
# update the automatically generated files |
|||
$ sh autogen.sh |
|||
|
|||
---------------------------------------------------------------------- |
|||
INCOMPATIBILITIES BETWEEN SPICE3 AND SPICE2 |
|||
|
|||
The output format of spice3 is slightly different for .print and .plot |
|||
lines. Most notably, different traces on plots are not scaled |
|||
independently. This is most noticeable on phase/magnitude plots from |
|||
an AC analysis (also, phase is displayed in radians). Finally, |
|||
frequency for ".PRINT AC" lines is displayed as a complex quantity |
|||
with an all-zero imaginary component. |
|||
|
|||
For input, "POLY( )" sources are not supported (the non-linear |
|||
dependent source provides a more general replacement). Also, the |
|||
".ALTER" line is not supported. The Spice3 parser may be slightly |
|||
different on subtle points of reading input (lines need not start at |
|||
column 1 for instance). |
|||
|
|||
@ -1,164 +0,0 @@ |
|||
So, this is third version of Spice3f5 for RedHat Linux 2.6. I took re-ported |
|||
version of spice3f5 and made changes to fix some bugs. If someone want to help, |
|||
please send me "newer" versions wtih more bugs fixed. |
|||
I hope that those who wnat to have good spice under Linux (no more Win95) |
|||
will find this port useful and maybe help each other to improve it. |
|||
|
|||
There was a lot of bugs in previus versions, generally in command parsiong routines. |
|||
I copy all original files to *.orig and marked all my changes with /* MW. ... */ |
|||
|
|||
I changed cp/bquote.c and cp/var2.c to handle some special situations |
|||
and commands like $foo, `foo`. Also problems with 'gets()' (in sconvert and |
|||
inp.c) function are fixed. I chnaget it to fgets(buf, BSIZE_SP, stdin) for |
|||
safe use. |
|||
|
|||
Globing ('[]{}?*') didn't work at all. Now it is removed (form cp/glob.c). |
|||
We don't need this features in spice. |
|||
|
|||
Initial command parsing (cp_lexer() from cp/lexical.c) strip all commas from |
|||
strings. This was in conflict with aritchetic expressions. |
|||
|
|||
com_let() in fte/postcoms.c caused core dump in some situations - fixed. |
|||
|
|||
Editor problems. Com_edit() in fte/inp.c failed occasionally, when it |
|||
tryies to fclose() fp second time. Now inp_spsource() always closes fp, and |
|||
other calling functions do not. It seems to work right now. |
|||
|
|||
vec_get() (fte/vectors.c) has some problems with devices parameters and |
|||
memory leaks. I hope that my changes fixed it at all. |
|||
|
|||
I have to add INPinsertNofree() in inp/inpsymt.c. This is special case for |
|||
routines from fte/spiceif.c and fte/outitf.c - It does not do free() for |
|||
any pointers that it gets. This may cause small memory leaks, but I don't |
|||
know how to make it better. |
|||
|
|||
com_alter_common() (fte/device.c) caused segmentation faults ocassionally, |
|||
due to double free the same pointers. It works right now. |
|||
|
|||
cp_lexer() corretly gets ^V, ^D, and ESC. I have to #include ioctl.h file in |
|||
cp/lexical.c and cp/complete.c |
|||
|
|||
There were problem with com_iplot() if it was called when X11 does not run. |
|||
I have to add additonal check to gr_pmsg() (from fte/graph.c) and now it |
|||
works fine. |
|||
|
|||
Trace failed to display comlex data due to segmentation fault. Someone wants |
|||
to plot realdata even if given vector was complex. I changed gr_iplot() |
|||
(in fte/graf.c) and now it is fine. |
|||
|
|||
There are some changes in os_linux.h and os_unix.h, but they are not mandatory, |
|||
I think. Also I have to add PI, and some other const. declarations in spice.h |
|||
They were needed somewhere. (why someone didn't used M_PI and so on instead ?) |
|||
|
|||
In file fte/x11.c, was a prloblem with background color for plot windows. I |
|||
changed init_colors() and now we can use color0 variable. |
|||
|
|||
Spice3f5 has a few memory leaks. I suppose that some vectors and maybe other |
|||
things are simple 'lost' somewhere. If you (just like me) trying to make this |
|||
program better, take care about this also. |
|||
Generally I didn't do much with graphisc interface, because it seems to work |
|||
quite good. Only problem is core dump, when cliking mouse on help screen. |
|||
|
|||
Manuals are sometimes in error. Vector creation by [ el. el. ...] is not |
|||
supported I think. For indexing we must use [low , hi]. For setting 'list' |
|||
variables - ( el. el. ... ). Indexing also doesn't work with let xx[...] = yy. |
|||
|
|||
Someone should change these f... manuals. |
|||
|
|||
|
|||
And now for those who think about makeing this program better. There is a big |
|||
problem with memory, when you run a few simulations. Destroy commad does not |
|||
free much memory, and after some time you can see that spice uses 3MB, when |
|||
you just clean all vectros. Also I don't know how to unload a circuit - |
|||
spice hold all sourced files in the "deck" list and there is no way to free |
|||
it from command line (or maybe I didn't find any). |
|||
Unfortunatelly I am sure that these are not all off the problems |
|||
with this program, but now I can use it quite effectively. If anyone will |
|||
know anything about bugs-free, good, commannd driven simulator for Linux |
|||
__PLEASE__ let me know. |
|||
|
|||
For easer use I made special debug file (conf/debug). I used it for makeing |
|||
"debug" version of spice with efence library and -g option. Executable files |
|||
from this are located in spice3f5/objdbg/bin, when you do 'util/build linux debug'. |
|||
|
|||
I am an electronic designer, so I really need a good working simulator... |
|||
|
|||
Original readme file is given below. |
|||
|
|||
Michael Widlok (widlok@uci.agh.edu.pl) |
|||
Uniersity of Mining and Metallurgy |
|||
Krakow, Poland. |
|||
|
|||
|
|||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|||
This is my (re-)port of Spice3f4 to Linux version 2 (I am not the same |
|||
person who ported it before). It also wraps in the latest official |
|||
pre-3f5 patches from Berkeley I could find (found in |
|||
sp3f4.patch.tar.Z). Support for the MFB interface using the Linux |
|||
termcap library and some various Linux features have been ported. |
|||
|
|||
This was not done for the hell of it, but it seemed that something |
|||
broke due to some Linux/system/library changes, so I decided to try |
|||
porting it from scratch. In fact, if you don't have any problems with |
|||
the previous port, your probably fine then. However, if you do have |
|||
problems (e.g. exiting Spice leaves you in uppercase mode), or want |
|||
MFB for some reason, then try this. It seems to work here. |
|||
|
|||
Basically, I started out with sp3f4.kit.tar.Z. Then, I applied the |
|||
most recent patches contained in sp3f4.patch.tar.Z and wrote new Linux |
|||
build files: "linux" and "os_linux.h" (some minor mods to the source |
|||
were also necessary, protected with linux conditionals). |
|||
|
|||
Since the previous spice3f4.tar.gz port file was generally available, |
|||
there was no point in duplicating source, so I just diffed from the |
|||
spice3f4.tar.gz tree to freshly ported tree and edited or removed a |
|||
few of the diffs. A few of the changes made in spice3f4.tar.gz have |
|||
been reverted to the distribution defaults, but one notable change is |
|||
that performing the install step will install the necessary files into |
|||
/usr/local/spice. You'll need to add /usr/local/spice/bin to your |
|||
shell path. See the file conf/linux to change the installation |
|||
location (this location gets hard-coded in the spice binaries). |
|||
|
|||
This is a patched file of the original readme.Linux from |
|||
spice3f4.tar.gz, and the previous contents by Jeff@EE.Ryerson.Ca is |
|||
given below. Just follow the below instructions, so you should be |
|||
able to safely do: |
|||
|
|||
./util/build linux |
|||
./util/build linux install |
|||
|
|||
You should then find the spice binaries and library files |
|||
in e.g. /usr/local/spice. Example files and the man pages |
|||
are not installed, so you might want to copy them by hand. |
|||
|
|||
Andrew Veliath (veliaa@rpi.edu) |
|||
January 25, 1997 |
|||
|
|||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|||
This is my port of Spice3f4 to Linux. It required a few more changes |
|||
than the porting document indicated would be necessary, mostly to do |
|||
with supported/unsupported functions in Linux libc & libm. |
|||
|
|||
I've tried to make these changes in as as portable a way as possible, |
|||
so it should build cleanly on other Unicies, however I've removed the |
|||
MS-DOS support so the tarred and gziped source fits on one disk. |
|||
|
|||
To build spice3, first have a look in the file readme, but you should |
|||
be able to just do... |
|||
|
|||
./util/build linux |
|||
./util/build install linux |
|||
|
|||
Note that there is a modifyer "gcc" you can try if you have trouble, but |
|||
it claims to work around some obscure bug in gcc that I'm positive got |
|||
fixed eons ago. To use it anyway, do ./util/build linux gcc. |
|||
|
|||
I found this source through archie, (look for spice3f3.tar.Z, and then |
|||
patched it to 3f4 with patches from ic.berkeley.edu), I assume that the |
|||
ftp site I got it from has read thier license from Berkeley, which if |
|||
it's the same as the 3e2 license states that the holder can distribute |
|||
copies free of charge provided it does not fall into hands unfriendly |
|||
to the U.S. So... I guess if that's you, please destroy all copies of this |
|||
you might have! |
|||
|
|||
Jeff@EE.Ryerson.Ca |
|||
@ -1,7 +0,0 @@ |
|||
A note when using dbx (under unix-type operating systems) to debug spice3: |
|||
|
|||
To avoid a segmentation fault in the initial run, use the following command |
|||
in dbx: |
|||
setenv SPICE_NO_DATASEG_CHECK "1" |
|||
Or, the comparable command in your shell before running dbx. This |
|||
disable accurate tracking of how much memory is used. |
|||
@ -1,98 +0,0 @@ |
|||
Internal Changes from 3e2 |
|||
|
|||
The device structure has changed: The state counter in all device |
|||
structures has been moved to correspond to GENstates in the |
|||
GENinstance structure. |
|||
|
|||
Also, a new per-device-type function has been added: XXXunsetup, |
|||
which deallocates nodes and other resources created in the |
|||
XXXsetup function. ("XXX" is the device abbreviation.) |
|||
|
|||
Internal Changes from 3d2 |
|||
|
|||
FILE NAMES: |
|||
|
|||
Of the changes to spice3 between 3d2 and 3e1, the |
|||
the most obvious is the new filenames. All filesnames |
|||
have been converted to lowercase and are at most eight |
|||
characters plus an optional dot and three character extension. |
|||
This change was made to accomodate MS-DOS and other operating |
|||
systems which limit the maximum file name length. |
|||
|
|||
|
|||
ORGANIZATION |
|||
|
|||
The top level directory contains the installation "readme" file |
|||
and a "makedefs" files used by the "build" command. |
|||
|
|||
"src/" contains all of the C source code. This used to be named |
|||
"spice3" or "spice3d2" in previous releases. |
|||
|
|||
"src/lib" is the library or "toolkit" portion of Spice3. Within |
|||
it are the following subdirectories: |
|||
|
|||
ckt/ All of the analysis code. |
|||
ni/ Numerical algorithms (used by ckt routines). |
|||
sparse/ Sparse matrix package (used by ckt and ni). |
|||
misc/ Miscellaneous utility and portability routines. |
|||
dev/ All of the device specific code, with a subdir for |
|||
each device implementation. |
|||
|
|||
inp/ Input parsing; could be much smaller. |
|||
|
|||
fte/ The front end. Really bad. |
|||
cp/ More front end -- "C shell". |
|||
hlp/ The windowed help system. |
|||
|
|||
mfb/ Terminal independant graphics package. |
|||
mfbpc/ MFB interface for the IBM PC. |
|||
|
|||
|
|||
"src/bin" contains the source for all executable programs (the |
|||
location for "main( )"). "main.c" is used by spice, nutmeg, |
|||
bspice, and cspice (the latter two for MS-DOS). The function |
|||
of "main.c" is altered by defining the pre-processor symbols |
|||
SIMULATOR (for either spice, bspice, or cspice), BATCH for |
|||
bspice, and BATCH and SPICE2 for cspice (no special defines |
|||
give nutmeg). Each variant of the simulator uses "conf.c" (or |
|||
"bconf.c" or "cconf.c", or "nconf.c" for nutmeg), which is |
|||
automatically generated from "config.c". "config.c" is a |
|||
template used to select devices and analyses. "tune.c" |
|||
("tunepc.c") contains the compiled in pathnames. |
|||
|
|||
|
|||
"examples/" contains several spice input files. |
|||
|
|||
"lib/" contains standard data files for spice, such as the help |
|||
files and MFB capability files. |
|||
|
|||
"man/" contains UNIX style manual pages (ala "man(1)"). |
|||
|
|||
"util/" contains utility scripts, such as "build" for running the |
|||
recursive "make" and "delall.bat" for deleting the distribution on |
|||
MS-DOS systems. |
|||
|
|||
All "Makefile"s have been replaced with "makedefs" (and optionally |
|||
"depend" and "makeops"). "makedefs" is combined with other |
|||
make definition files with the "build" script. |
|||
|
|||
SOURCE LEVEL CHANGES |
|||
|
|||
(Added features are listed in the "README" file). |
|||
|
|||
DEVICES: The interface to devices has, once again, changed. |
|||
The change is small from 3d2. Table size values in the device |
|||
information struction are now pointers to integers containing |
|||
the table sizes. Per-analyses functions have been surrounded |
|||
with "#ifdef AN_xx"/"#else"/"#endif" lines. Note that the |
|||
"itf.h" files are stored only in the "include/" subdirectory. |
|||
|
|||
Adding devices to the master list is done in the file |
|||
"src/bin/config.c", instead of "FTE/SPIinit.c". |
|||
|
|||
SPARSE MATRIX PACKAGE: the sparse matrix package in Spice3e1 |
|||
and later is a more efficient implementation than in earlier releases. |
|||
The interface is the same. |
|||
|
|||
|
|||
|
|||
@ -1,207 +0,0 @@ |
|||
|
|||
|
|||
Compiling spice with Think C on a Macintosh. |
|||
|
|||
A 68020 (Mac II) with co-processor is required. |
|||
|
|||
The src directory from the spice distribution should be moved into |
|||
the C folder. |
|||
|
|||
**** recompile think c libraries **** |
|||
|
|||
Both the ANSI and unix libraries must be recompiled with the |
|||
following additional compiler settings: |
|||
Generate 68020 instructions |
|||
Generate 68881 instructions |
|||
4-bytes ints |
|||
Native floating-point format |
|||
|
|||
The "console.c" file must be edited and should be removed from |
|||
the ANSI project. I actually recompiled copies of the ANSI and |
|||
unix libraries that I called ANSI.68881 and unix.68881. |
|||
Copy the "console.c" source (a THINK C file) to a suitable |
|||
location so that it can be included in the spice project. (See |
|||
the next section for details of how "consol.c" must be modified.) |
|||
|
|||
|
|||
**** creating the project **** |
|||
|
|||
Create a new project and set the Options as follows: |
|||
Laguage Settings |
|||
Turn on the following options |
|||
Define #__STDC__ |
|||
Recognize trigraphs |
|||
enums are always ints |
|||
Check pointer types |
|||
Language Extension |
|||
THINK C |
|||
Compiler Settings |
|||
Turn on the following options |
|||
Generate 68020 instructions |
|||
Generate 68881 instructions |
|||
4-bytes ints |
|||
Native floating-point format |
|||
Code Optimization |
|||
Turn on all options |
|||
Prefix |
|||
make sure there is no prefix (remove |
|||
default #include <macheaders>) |
|||
|
|||
Note: The Language setting 'Strict Prototype Enforcement' must be |
|||
turned off. |
|||
|
|||
Set the project type to application with at least 1024k partition |
|||
and turn on the 'Far DATA' option. |
|||
|
|||
*** Adding the code to the project *** |
|||
|
|||
Start Adding the code to the project. The code must be divided |
|||
into segments that are less that 32K each when compiled. The |
|||
following division has been used: |
|||
|
|||
Segment 1: the ANSI.68881 and unix.68881 libraries. |
|||
Segment 2: all *.c files in /src/sparse |
|||
Segment 3: all *.c files in /src/lib/ni |
|||
Segment 4: all *.c files in /src/lib/misc |
|||
Segment 5: files /src/lib/inp/inp2dot.c |
|||
and /src/lib/inp/inptree.c |
|||
Segment 6: all other *.c files in /src/inp |
|||
Segment 7: all *.c files in /src/lib/hlp |
|||
Segment 8: all *.c files in /src/lib/cp |
|||
except /src/lib/cp/input.c |
|||
Segment 9: file /src/lib/ckt/dloadfns.c |
|||
Segment 10: files /src/lib/ckt/cktpzstr.c, |
|||
/src/lib/ckt/cktsens.c, /src/lib/ckt/dctran.c, |
|||
and /src/lib/ckt/distoan.c |
|||
Segment 11: all other *.c files in /src/lib/ckt |
|||
Segment 12: cmath*.c files in /src/lib/fte |
|||
Segment 13: files agraf.c, clip.c, display.c, graf.c, |
|||
graphdb.c, plot5.c, plotcurv.c and |
|||
postsc.c in /src/lib/fte |
|||
|
|||
Segment 14: files evaluate.c, parse.c, postcoms.c, |
|||
and subckt.c in /src/lib/fte |
|||
Segment 15: files breakp.c, device.c, doplot.c, |
|||
grid.c and shyu.c in /src/lib/fte |
|||
Segment 16: files dotcards.c, inp.c, outif.c, rawfile.c, |
|||
spiceif.c and vectors.c in /src/lib/fte |
|||
Segment 17: all other *.c files in /src/lib/fte |
|||
except nutmegif.c |
|||
Segment 18: all *.c files in /src/lib/fte/vsrc |
|||
and /src/lib/fte/isrc |
|||
Segment 19: all *.c files in /src/lib/fte/jfet |
|||
Segment 20: all *.c files in /src/lib/fte/vccs, |
|||
/src/lib/fte/vcvs, /src/lib/fte/cccs, |
|||
and /src/lib/fte/ccvs |
|||
Segment 21: all *.c files in /src/lib/fte/asrc |
|||
and /src/lib/fte/urc |
|||
Segment 22: all *.c files in /src/lib/fte/cap, |
|||
/src/lib/fte/ind, and /src/lib/fte/res |
|||
Segment 23: all *.c files in /src/lib/fte/csw, |
|||
/src/lib/fte/sw, and /src/lib/fte/tra |
|||
Segment 24: all *.c files in /src/lib/fte/mos6 |
|||
Segment 25: all *.c files in /src/lib/fte/mes |
|||
Segment 26: all *.c files in /src/lib/fte/ltra |
|||
Segment 27: file mos3load.c in /src/lib/fte/mos3 |
|||
Segment 28: files mos3dist.c, mos3dset.c, |
|||
and mos3sld.c in /src/lib/fte/mos3 |
|||
Segment 29: remaining *.c files in /src/lib/fte/mos3 |
|||
Segment 30: all *.c files in /src/lib/fte/dio |
|||
Segment 31: file mos1load.c in /src/lib/fte/mos1 |
|||
Segment 32: files mos1dist.c, mos1dset.c, |
|||
and mos1sld.c in /src/lib/fte/mos1 |
|||
Segment 33: remaining *.c files in /src/lib/fte/mos1 |
|||
Segment 34: file bjtload.c in /src/lib/fte/bjt |
|||
Segment 35: files bjtdisto.c, bjtdset.c, |
|||
and bjtsload.c in /src/lib/fte/bjt |
|||
Segment 36: remaining *.c files in /src/lib/fte/bjt |
|||
Segment 37: file mos2load.c in /src/lib/fte/mos2 |
|||
Segment 38: file mos2dset.c in /src/lib/fte/mos2 |
|||
Segment 39: files mos2dist.c, and mos2sld.c |
|||
in /src/lib/fte/mos2 |
|||
Segment 40: remaining *.c files in /src/lib/fte/mos2 |
|||
Segment 41: files b1dset.c, and b1ld.c in /src/lib/fte/bsim1 |
|||
Segment 42: files b1disto.c, and b1eval.c in /src/lib/fte/bsim1 |
|||
Segment 43: remaining *.c files in /src/lib/fte/bsim1 |
|||
Segment 44: files b2eval.c, and b2ld.c in /src/lib/fte/bsim2 |
|||
Segment 45: remaining *.c files in /src/lib/fte/bsim2 |
|||
Segment 46: all *.c files in /src/lib/dev/disto, |
|||
and devsup.c in /src/lib/dev |
|||
Segment 47 all *.c files in /src/lib/mac, |
|||
and file /src/bin/main.c |
|||
|
|||
Note that the following files are not included: |
|||
/src/lib/cp/input.c |
|||
/src/lib/fte/nutmegif.c |
|||
|
|||
Add "console.c" (the copy made as described above) and make the |
|||
following alterations to it: |
|||
1. The lines: |
|||
static char console_environment, noPrint, interrupted; |
|||
static short console_refnum; |
|||
static MenuHandle appleMenu; |
|||
static WindowPeek theConsole; |
|||
|
|||
must be changed to make console_environment and |
|||
appleMenu external: |
|||
extern char console_environment, noPrint, interrupted; |
|||
static char noPrint, interrupted; |
|||
static short console_refnum; |
|||
extern MenuHandle appleMenu; |
|||
static WindowPeek theConsole; |
|||
|
|||
2. Alter the function ProcessEvent() to add a default switch |
|||
case. The altered section appears following a doEvent label as |
|||
(note: this code fragment has 4-space tabs and long lines |
|||
broken to fit an 80-column page; these changes do not affect |
|||
the code): |
|||
|
|||
doEvent: |
|||
if (event.what == mouseDown) { |
|||
switch (FindWindow(event.where, &wp)) { |
|||
case inMenuBar: |
|||
InitCursor(); |
|||
choice = MenuSelect(event.where); |
|||
goto doMenu; |
|||
case inSysWindow: |
|||
SystemClick(&event, wp); |
|||
break; |
|||
default: /* For spice to pass mouse |
|||
events to graphs */ |
|||
if ((WindowPtr) wp != FrontWindow()) { |
|||
SelectWindow(wp); |
|||
in.cnt = 0; |
|||
} /* in.cnt=0 forces console to |
|||
return to application */ |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
Compilation takes about 3 to 4 hours on a 25MHz mac. Set the cache |
|||
to at least 256k to eliminate a lot of disk access. |
|||
|
|||
**** makeindx **** |
|||
Create a project with the same option settings decribed above. |
|||
|
|||
Add src/bin/makeidx.c, ANSI.68881 and an unmodified version of |
|||
"console.c". |
|||
|
|||
Build the makeindex application. |
|||
|
|||
Move the application into lib/helpdir directory of the the spice |
|||
distribution. Run it and add the names of the files to be indexed |
|||
(nutmeg.txt spice.txt) to the command line and hit return. |
|||
|
|||
**** proc2mod **** |
|||
|
|||
Create a project with the same option settings decribed above. |
|||
|
|||
Add src/bin/proc2mod.c, src/lib/misc/alloc.c, src/lib/misc/string.c |
|||
src/lib/inp/inpcfix.c, src/lib/inp/inpeval.c, |
|||
src/lib/inp/inpgtok.c, ANSI.68881 and an unmodified |
|||
version of console.c. |
|||
|
|||
Build the proc2mod application. |
|||
@ -1,237 +0,0 @@ |
|||
(ER - 7/08/99) |
|||
|
|||
These are a few notes on the autoconf porting that is being done. |
|||
|
|||
Autoconf automaticcaly provides #defines (in config.h) that describe |
|||
the system that ng-spice is being compiled on. Thus, all the os_xxx.h |
|||
files should no longer be necessary. |
|||
|
|||
|
|||
Here is a (as complete as possible) list of new #defines and their |
|||
corresponding #defines in the old build system: |
|||
|
|||
|
|||
|
|||
|
|||
#define HAS_VAX_FPERRORS - unused (should remove the code) |
|||
#define MAXPOSINT 4294967295 - don't know about that one |
|||
#define MAX_EXP_ARG 87.0 - same |
|||
|
|||
---------- Operating System (os_xxx.h) parameters: |
|||
|
|||
----- Enabling flags |
|||
#define AVAIL_MFB -DWANT_MFB passed to cpp |
|||
#define AVAIL_X11 X_DISPLAY_MISSING (reversed) |
|||
|
|||
----- String or character constants |
|||
#define DIR_CWD "." now in spice.h |
|||
#define DIR_PATHSEP "/" now in spice;h |
|||
#define DIR_TERM '/' now in spice.h |
|||
|
|||
On Unix, I don't think that there are other possibilities. |
|||
We should get rid of those. |
|||
|
|||
|
|||
----- sprintf( ) format strings |
|||
#define TEMPFORMAT "/tmp/%s%d" /* sprintf format for creating temp files */ |
|||
#define SYSTEM_MAIL "mail -s \"%s (%s) Bug Report\" %s" /* mail command */ |
|||
#define SYSTEM_PLOT5LPR "lpr -P%s -g %s" /* For printing Unix plot(5) files */ |
|||
#define SYSTEM_PSLPR "lpr -P%s %s" /* For printing postscript files */ |
|||
|
|||
|
|||
Same for these I guess... |
|||
|
|||
|
|||
|
|||
----- System capabilities |
|||
#define HAS_ACCESS HAVE_ACCES |
|||
#define HAS_ASCII not handled yet |
|||
#define HAS_ATRIGH HAVE_ATANH HAVE_ACOSH HAVE_ASINH |
|||
#define HAS_BCOPY HAVE_BCOPY |
|||
#define HAS_BSDDIRS HAVE_DIR_H |
|||
#define HAS_BSDRANDOM unused |
|||
#define HAS_BSDRLIMIT HAVE_GETRLIMIT |
|||
#define HAS_BSDRUSAGE HAVE_GETRUSAGE |
|||
#define HAS_BSDSOCKETS unused |
|||
#define HAS_BSDTIME HAVE_GETTIMEOFDAY |
|||
#define HAS_BSDTTY HAVE_SGTTY_H |
|||
#define HAS_CHDIR removed |
|||
#define HAS_CLEARERR removed |
|||
#define HAS_CTYPE HAVE_CTYPE_H |
|||
#define HAS_DOSDIRS dos only - should remove code |
|||
#define HAS_DUP2 HAVE_DUP2 |
|||
#define HAS_ENVIRON removed |
|||
#define HAS_EXIT1 vms only - should remove the code |
|||
#define HAS_FCNTL HAVE_FCNTL_H |
|||
#define HAS_FTIME HAVE_FTIME |
|||
#define HAS_GETCWD HAVE_GETCWD |
|||
#define HAS_GETPID removed |
|||
#define HAS_GETPW HAVE_PWD_H |
|||
#define HAS_GETWD HAVE_GETWD |
|||
#define HAS_INDEX HAVE_INDEX |
|||
#define HAS_NO_IEEE_LOGB HAVE_LOGB HAVE_SCALB HAVE_SCALBN |
|||
#define HAS_NO_IEEE_LOGB_DECL removed |
|||
#define HAS_ISATTY HAVE_ISATTY |
|||
#define HAS_LONGJUMP removed |
|||
#define HAS_MINDATA dos only? - should remove code if so |
|||
#define HAS_NOINLINE dos only? - should remove code if so |
|||
#define HAS_NOVM dos only? - should remove code if so |
|||
#define HAS_NO_ATRIGH_DECL removed |
|||
#define HAS_PCTERM dos only - should remove code |
|||
#define HAS_POPEN HAVE_POPEN |
|||
#define HAS_QSORT HAVE_QSORT |
|||
#define HAS_SHORTMACRO dos only - should remove code |
|||
#define HAS_STAT STAT_MACROS_BROKEN (reversed) |
|||
#define HAS_STDLIB STDC_HEADERS |
|||
#define HAS_STRCHR HAVE_STRCHR |
|||
#define HAS_STRINGS STDC_HEADERS (reversed) not sure about that one! |
|||
#define HAS_SYSTEM removed |
|||
#define HAS_SYSVDIRS HAVE_DIRENT_H |
|||
#define HAS_SYSVRLIMIT HAVE_ULIMIT |
|||
#define HAS_SYSVRUSAGE HAVE_UTIME |
|||
#define HAS_SYSVTIME HAVE_TIME |
|||
#define HAS_SYSVTTY HAVE_TERMIO_H |
|||
#define HAS_TERMCAP HAVE_TERMCAP |
|||
#define HAS_TERMREAD don't know what to do with this one |
|||
#define HAS_UNIX_SIGS removed |
|||
#define HAS_UNLINK removed |
|||
#define HAS_VFORK HAVE_VFORK_H |
|||
#define HAS_VMSHACK vms only - should remove the code |
|||
#define HAS_VPERROR removed |
|||
#define HAS_WAIT HAVE_WAIT |
|||
|
|||
plus a few others: |
|||
|
|||
#define HAS_MEMAVL dos only - should remove code |
|||
#define HAS_FLAT_INCLUDES macos only - should remove code |
|||
#define HAS_BATCHSIM dos only - should remove code |
|||
|
|||
|
|||
|
|||
---------------------------------------------------------------------------- |
|||
|
|||
PORTING SPICE3e1 |
|||
|
|||
Porting Spice3 to a new operating system usually consists of listing |
|||
the capabilities of that operating system in a new '.h' file and |
|||
including this '.h' file in the standard portability sequence. This |
|||
also needs to be done separately for the numerical capabilities of the |
|||
system hardware (this consist of only two parameters at present). |
|||
|
|||
For each operating system there is a file in the "include/" directory |
|||
named "os_xxx.h", where xxx identifies the given operating system (ex. |
|||
"os_bsd.h", "os_aix.h"). These files are selectively #include-d by |
|||
"include/port.h". For a new operating system, you should add the |
|||
appropriate "#include" line to "include/port.h". Be sure to guard |
|||
the new "#include" line with "#ifdef/#endif", as is done with the other |
|||
operating system capability files. The same may also need to be done |
|||
for your hardware (for the file "hw_xxx.h"), though there is typically |
|||
very little difference in hardware. |
|||
|
|||
Note that operating system which are a derivative of another supported |
|||
system can '#include' the "os_xxx.h" file from the other system. For |
|||
example, "os_aix.h" includes "os_sysv.h", which in turn includes |
|||
"os_unix.h". |
|||
|
|||
The entries that can go into a "os_xxx.h" file are described below; |
|||
most are simple flags (e.g. HAS_xxxx). To turn on a flag, insert the |
|||
"#define" line for that flag; to turn off the flag, simply leave the |
|||
"#define" line out. Other entries are strings, others single-quoted |
|||
characters or numbers. Be sure to use the same type as the example |
|||
values shown. |
|||
|
|||
There are always exceptions to the rule. Some incompatibilities |
|||
have not yet been dealt with cleanly; review the other "os_xxx.h" |
|||
files, the file "capabil.h", and the file "suffix.h" to understand |
|||
how some problems have been handled (note especially the lines like |
|||
"#define index strchr"). After trying to compile, you may yet find |
|||
non-portable code that is not guarded by one of the following |
|||
options. You are encouraged to alter the source code (".c" or ".h" |
|||
files) in the style of the current portability scheme. |
|||
|
|||
Note: to enable X11 or MFB, the flag AVAIL_X11 or AVAIL_MFB, |
|||
respectively, must be included in the "os_xxx.h" file; this _was_ to |
|||
simplify the problems of forgetting to re-edit the "config.h" file, |
|||
but this is no longer necessary. |
|||
|
|||
---------- Machine architecture numerics (hw_xxx.h) parameters: |
|||
(In the future this will be more complete and will be used for |
|||
tuning the accuracy or performance of the numerical algorithms) |
|||
|
|||
#define HAS_VAX_FPERRORS /* Only for Vax */ |
|||
#define MAXPOSINT 4294967295 /* == 2^32 - 1, maximum positive integer */ |
|||
#define MAX_EXP_ARG 87.0 /* Approximate largest arg to exp() */ |
|||
|
|||
---------- Operating System (os_xxx.h) parameters: |
|||
|
|||
----- Enabling flags |
|||
#define AVAIL_MFB /* If the MFB package can work on this system */ |
|||
#define AVAIL_X11 /* If the X11 Window System can work */ |
|||
|
|||
----- String or character constants |
|||
#define DIR_CWD "." /* Current working directory */ |
|||
#define DIR_PATHSEP "/" /* subdirectory separator */ |
|||
#define DIR_TERM '/' /* Subdirectory component terminator */ |
|||
|
|||
----- sprintf( ) format strings |
|||
#define TEMPFORMAT "/tmp/%s%d" /* sprintf format for creating temp files */ |
|||
#define SYSTEM_MAIL "mail -s \"%s (%s) Bug Report\" %s" /* mail command */ |
|||
#define SYSTEM_PLOT5LPR "lpr -P%s -g %s" /* For printing Unix plot(5) files */ |
|||
#define SYSTEM_PSLPR "lpr -P%s %s" /* For printing postscript files */ |
|||
|
|||
----- System capabilities |
|||
#define HAS_ACCESS /* access( ) */ |
|||
#define HAS_ASCII /* eighth bit of a character is not used */ |
|||
#define HAS_ATRIGH /* acosh( ), asinh( ), atanh( ) */ |
|||
#define HAS_BCOPY /* bcopy( ), bzero( ) */ |
|||
#define HAS_BSDDIRS /* <sys/dir.h> */ |
|||
#define HAS_BSDRANDOM /* srandom( ) and random( ) */ |
|||
#define HAS_BSDRLIMIT /* getrlimit( ) returns proc limits */ |
|||
#define HAS_BSDRUSAGE /* getrusage( ) returns cpu usage */ |
|||
#define HAS_BSDSOCKETS /* <net/inet.h>, socket( ), etc. */ |
|||
#define HAS_BSDTIME /* gettimeofday( ) return time */ |
|||
#define HAS_BSDTTY /* <sgtty.h> */ |
|||
#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_DUP2 /* dup2(a, b) for shifting file descrs. */ |
|||
#define HAS_ENVIRON /* getenv( ) */ |
|||
#define HAS_EXIT1 /* If exit status of 1 is normal for procs */ |
|||
#define HAS_FCNTL /* acosh( ), asinh( ), atanh( ) */ |
|||
#define HAS_FTIME /* ftime( ), <times.h> */ |
|||
#define HAS_GETCWD /* getcwd(buf, size) */ |
|||
#define HAS_GETPID /* getpid( ) to identify processes */ |
|||
#define HAS_GETPW /* getpwuid( ), etc. */ |
|||
#define HAS_GETWD /* getwd(buf) */ |
|||
#define HAS_INDEX /* index( ) instead of strchr( ) */ |
|||
#define HAS_NO_IEEE_LOGB /* no logb( ) and scalb( ) functions */ |
|||
#define HAS_NO_IEEE_LOGB_DECL /* logb( ) and scalb( ) not in math.h */ |
|||
#define HAS_ISATTY /* isatty( ) */ |
|||
#define HAS_LONGJUMP /* setjmp( ), longjmp( ) */ |
|||
#define HAS_MINDATA /* Machine has limited data area */ |
|||
#define HAS_NOINLINE /* Machine has limited data area */ |
|||
#define HAS_NOVM /* Machine has limited data area */ |
|||
#define HAS_NO_ATRIGH_DECL /* if asinh( ) is not in math.h */ |
|||
#define HAS_PCTERM /* For MS-DOS, use PC graphics for MFB */ |
|||
#define HAS_POPEN /* popen( ), pipe through shell command */ |
|||
#define HAS_QSORT /* qsort( ) exists */ |
|||
#define HAS_SHORTMACRO /* If the compiler can't handle long macros */ |
|||
#define HAS_STAT /* stat( ) returns info on files */ |
|||
#define HAS_STDLIB /* #include <stdlib.h> for libc defs */ |
|||
#define HAS_STRCHR /* strchr( ) instead of index( ) */ |
|||
#define HAS_STRINGS /* #include <strings.h> (else <string.h>) */ |
|||
#define HAS_SYSTEM /* system( ), execute system command */ |
|||
#define HAS_SYSVDIRS /* <dirent.h> */ |
|||
#define HAS_SYSVRLIMIT /* ulimit( ) reports on proc size limit */ |
|||
#define HAS_SYSVRUSAGE /* utimes( ) reports on cpu usage */ |
|||
#define HAS_SYSVTIME /* time( ) returns seconds from 1970 */ |
|||
#define HAS_SYSVTTY /* <termio.h> */ |
|||
#define HAS_TERMCAP /* tgetxxx( ) */ |
|||
#define HAS_TERMREAD /* Has "read" syscall from terminals */ |
|||
#define HAS_UNIX_SIGS /* signal( ), kill( ) */ |
|||
#define HAS_UNLINK /* unlink( ), for removing files */ |
|||
#define HAS_VFORK /* BSD-ism, should not be necessary */ |
|||
#define HAS_VMSHACK /* Stand on your head for VMS */ |
|||
#define HAS_VPERROR /* perror( ) defined by standard '.h's */ |
|||
#define HAS_WAIT /* wait( ) wait for processes */ |
|||
@ -1,15 +0,0 @@ |
|||
|
|||
Incompatibilities between spice3 and spice2 |
|||
|
|||
The output format of spice3 is slightly different for .print and .plot lines. |
|||
Most notably, different traces on plots are not scaled independently. This |
|||
is most noticeable on phase/magnitude plots from an AC analysis (also, |
|||
phase is displayed in radians). Finally, frequency for ".PRINT AC" lines |
|||
is displayed as a complex quantity with an all-zero imaginary component. |
|||
|
|||
For input, "POLY( )" sources are not supported (the non-linear dependent |
|||
source provides a more general replacement). Also, the ".ALTER" line |
|||
is not supported. The Spice3 parser may be slightly different |
|||
on subtle points of reading input (lines need not start at column 1 |
|||
for instance). |
|||
|
|||
@ -1,8 +1,26 @@ |
|||
#ifndef _MEMORY_H |
|||
#define _MEMORY_H |
|||
|
|||
#ifndef HAVE_LIBGC |
|||
extern void *tmalloc(size_t num); |
|||
extern void *trealloc(void *str, size_t num); |
|||
extern void txfree(void *ptr); |
|||
|
|||
#define tfree(x) (txfree(x), x = 0) |
|||
|
|||
#else |
|||
#include <gc.h> |
|||
|
|||
#define tmalloc(m) GC_malloc(m) |
|||
#define trealloc(m,n) GC_realloc((m),(n)) |
|||
#define tfree(m) |
|||
#define txfree(m) |
|||
#endif |
|||
|
|||
#define alloc(TYPE) ((TYPE *) tmalloc(sizeof(TYPE))) |
|||
#define MALLOC(x) tmalloc((unsigned)(x)) |
|||
#define FREE(x) {if (x) {txfree((char *)(x));(x) = 0;}} |
|||
#define REALLOC(x,y) trealloc((char *)(x),(unsigned)(y)) |
|||
#define ZERO(PTR,TYPE) (bzero((PTR),sizeof(TYPE))) |
|||
|
|||
#endif |
|||
@ -0,0 +1,7 @@ |
|||
#ifndef _CMATH_H |
|||
#define _CMATH_H |
|||
|
|||
#define alloc_c(len) ((complex *) tmalloc((len) * sizeof (complex))) |
|||
#define alloc_d(len) ((double *) tmalloc((len) * sizeof (double))) |
|||
|
|||
#endif |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue