Design document open for discussion


To ng-spice@ieee.ing.uniroma1.it
From Arno <A.W.Peters@ieee.org>
Date Mon, 20 Sep 1999 00:05:07 +0200
Delivered-To mailing list ng-spice@ieee.ing.uniroma1.it
Mailing-List contact ng-spice-help@ieee.ing.uniroma1.it; run by ezmlm
Reply-To ng-spice@ieee.ing.uniroma1.it
User-Agent Mutt/1.0pre2i

I have tried to merge as many (non-conflicting) ideas into this
document as possible.  I may have missed some, please 

I propose a period of two weeks for discussing this document as well
as how we can best go about the transition of the current tree to the
proposed tree.

I await your comments.
-- 
Arno
NOTICE
======

This document is under discussion/construction.

This document tries to summarize the good ideas that have been
floating around the ng-spice mailing list.  It contains ideas from
many different people.

If you think you have a good idea to contribute, don't hesitate:
propose it on ng-spice@ieee.ing.uniroma1.it

Thank you,
Arno.


LICENSING
=========

Currently, the tree is BSD licensed (see COPYING for the whole
license).  The majority of the contributors to the project wish to
bring the software under a GPL (compatible) license ASAP.  Due to
legal incompatibilities between the GPL and BSD licensing, it is not
possible to link pieces of software statically to each other and
distribute it.  Dynamically linked pieces don't seem to pose much
problem.

Therefore, if we want to move to a GPL license while retaining working
revisions during the transition, almost all parts need to be made into
shared libraries that can be loaded at runtime.  Specific parts of the 
code can than be converted to the GPL.


CODING STYLE
============

This project uses the BSD coding style.  It is the prevalent coding
style in use for most of the source code.  It is not advisable to
to force it into some other coding style.


DIRECTORY ORGANIZATION
======================

This is the proposed directory tree.  To be done: map current
directories and source files to this new structure.


ng-spice/               # the interpreter/batch simulator
    include/            # spice data structures, macro's, defines
        ngspice.h
        struct.h
        macros.h
        defines.h
    src/                # glue code between parser, analysis, devices
    tests/              # testing spice, nutmeg, etc functionality
    contrib/            # contributions of utility programs/scripts etc.
    lib/                # contents of src/lib moves here
        parser/
            include/    # API for circuit/netlist parser
            src/        # the parser
            doc/
            tests/
        analysis/       # modes of analysis
            include/    # API for analysis
            src/        # analysing code
                tran/
                ac/
                dc/
                sens/
                noise/
                ...
            tests/
        devices/
            include/  # generic device interface
            src/      # registering devices, etc.
                asrc/ # implementation of asrc device
                bjt/  # implementation of bjt device
                bsim1/
                bsim2/
                ...
            tests/    # tests for dynamic device loading, math props
        maths/        # math subroutines
            include/  
            src/
                sparse/
                fft/
                ...
            tests/
        misc/         # necessary?
            include/
            src/
            tests/

Partial thread listing: