7.1 Architecture
7.1.1 File organization
Gnucap source files are organized into groups by the name prefix as follows:
-
ap
- “Argparse”. Generic parser and lexical analysis library.
- bm
- Behavioral modeling.
- c
- Commands.
- d
- Devices and models.
- e
- Device and model base classes. (“e” comes from
“electrical” and is retained because of inertia.)
- io
- Input and output library, raw, generic.
- l
- Library. General purpose functions and classes that do not
fit elsewhere.
- m
- Math library.
- plot
- Obsolete plotting that should be replaced.
- s
- Simulation engine.
- u
- Utility functions and classes. Gnucap Specific.
The files ap_*, io_*, l_*, m_* are not Gnucap
specific. Although they were created for Gnucap, they are public domain
and may be used by anyone for any purpose.
The remaining files bm_*, c_*, d_*, e_*,
s_*, u_* are Gnucap specific, and reuse is subject to the
Gnu Public License.
Some of the d_* files are automatically generated during
compilation. Do not change them, because your changes may be lost in
a recompile. For licensing and distribution legal purposes, these
files are considered to be “object” code, even though they are
readable C++.
The files d_*.model, where present, contain the actual model
descriptions as input for modelgen, the model compiler.
These files are the source that is used to generate the corresponding
.cc and .h files. All changes should be done to the .model file. For GPL purposes, these files are considered to be
“source”.
7.1.2 Building, Makefiles
Gnucap uses a 4 part Makefile, designed for simultaneous builds on
several systems. A true Makefile is built by selecting and catenating
the four pieces. A master Makefile switches to a subdirectory and
builds a specialized Makefile there.
-
Make1
- The file list. Specific to this program.
- Make2
- Compiler and system dependencies. Specific to the
compiler. In some cases, hardware dependencies are here. There are
several provided. Choose the one that matches your system.
- Make3
- Basic “make” targets. Generic.
- Make.depend
- List of dependencies.
7.1.3 Program flow
It all starts at “main”, in main.cc. The function
“main” has a loop that gets input and calls “CMD::cmdproc” to dispatch the command.
Batch mode is done in “process_cmd_line”, by using “CMD::cmdproc” to execute the commands “get” or “<”
which is passed to “CMD::cmdproc” as text.
The function “CMD::cmdproc” dispatches the command to its
handler. The handlers are located in the “CMD” namespace, and
the “c_*” files.