GAMGI source code is in the
src directory, distributed over the
sub-directories
engine,
gtk,
mesa,
math,
chem,
phys,
io,
expat and
global.
The code in the
gtk directory (TODO) is in turn partially distributed
over sub-directories
text,
atom,
bond,
light,
layer, etc., one for each object class.
Each directory has a makefile, listing all the local source files.
These makefiles are then included in the global makefiles, in the
src directory.
Each directory has a common header
.h file, containing
all the relevant type definitions, enumerations, macros, plus library
headers that are relevant for that section of the code. This information
should be included in the common header files only (library headers
which are needed only once, are included directly in that specific
source file, to reduce compilation time). The common header files
are then included in the
.c source files everytime that
information is needed.
Every
.c file has a corresponding
.h file, containing:
1) full declarations (including argument names) of all the functions
in the source file, including local (commented) functions; 2) a rationale
describing the mains aspects of the control flow. Local functions are
classified as
static and start with the prefix
static_.
Global functions start with the name of the file containing them.
All files start with the prefix
gamgi_ and for each directory
in the file path after the
src directory a new prefix is added,
with the name of the directory. Thus a file (and the external functions
inside) in the directory
src/engine must have a prefix
gamgi_engine.
With this naming conventions it is easy to: 1) distinguish static and
external Gamgi functions; 2) distinguish Gamgi and library functions;
3) to identify where is the file that contains a given Gamgi external
function.
To understand GAMGI control flow, the first file to check
is
/src/global/gamgi_global_main.c, where GAMGI
starts and ends. To understand GAMGI data flow, the first file
to check is
/src/engine/gamgi_engine.h, which
contains the primary data types and definitions.
GAMGI has one global variable, called
gamgi, declared in
gamgi_global.h. This header file is then included everytime
gamgi is needed. This declaration is actually redundant,
as the
gamgi address (TODO) can be acessed as the parent
object for all the windows objects, but it makes code slightly
simpler.