sch-rnd modularization

Why bother...

I believe good software should be modular. This is especially important in the context of large software, such as CAD applications. There should be a thin core that can model the world and provide the basic operations defined on it but anything else should go in separate modules.

Sch-rnd is built up from scratch with modularity in mind.

I believe such modularization has benefits on multiple levels:

Code size in charts

Overall distribution

All numbers are in SLOC and are acquired running sloccount on the given directory. While lines of code alone is not a true measure of complexity, it's a good estimation. The slices of pie charts are the major components of the sch-rnd executable.

Main components

The main components are:

Zooming on to the plugins

total size per class
IO plugins
feature plugins
export plugins
GUI plugins
engine plugins

(Red means the plugin doesn't really work).

Progress in numbers

Below is a table with the summary of core plugins.
module size [sloc] status configure
default
class description
act_draw280 works buildin feature Actions for drawing objects on a graphical sheet or symbol
act_read388 works buildin feature Data access related API as actions
attbl_csv238 works buildin export export and import attribute table in CSV format
attbl_json311 works buildin export export and import attribute table in json format
attbl_lht234 works buildin export export and import attribute table in lihata format
attbl_tedax270 works buildin export export and import attribute table in tEDAx format
backann1490 works buildin feature interactive back annotation
construct467 works buildin feature construct complex objects from atoms, break up groups
diag200 works buildin feature Actions for sch-rnd core diagnostics, intended for developers. These are not in core because end users normally don't need these. As a plugin, due to dynamic loading, it can be dropped on an existing sch-rnd installation with minimal risk of scaring away a reproducible bug.
export_abst208 works buildin export export project's abstract model to text
export_accel304 works buildin export export netlist to Accel
export_allegro247 works buildin export export netlist to Allegro
export_bae232 works buildin export export netlist to Bae
export_bom334 works buildin export export a BoM based on the components of the abstract model, using configurable templates
export_boxsym349 works buildin export export hierarchic child sheet terminals as a boxsym source
export_cadstar210 works buildin export export netlist to Cadstar (RINF/RIFN/RNIF format)
export_calay352 works buildin export export netlist in Calay's format
export_eagle218 works buildin export export netlist to Eagle
export_eagle5286 works buildin export export to Eagle5 tabular netlist+bom format
export_easyeda195 works buildin export export netlist to Easyeda
export_edif489 works buildin export export netlist to Edif
export_ewnet293 works buildin export export netlist to Ewnet
export_fritzing204 works buildin export export netlist to Fritzing
export_futurenet2235 works buildin export export netlist to Futurenet dash
export_jsonnet304 works buildin export export netlist to generic JSON
export_kicad400 works buildin export export netlist to KiCAD's format for pcbnew
export_lpr14 works buildin export Export to lpr (using export_ps to generate postscript)
export_maxascii218 works buildin export export netlist to Maxascii
export_orcad177 works buildin export export netlist to Orcad
export_osmond239 works buildin export export netlist to Osmond
export_pads_ascii222 works buildin export export netlist to PASD (in ASCII format)
export_png267 works buildin export png, jpeg and gif render
export_protelII239 works buildin export export netlist to ProtelII
export_ps576 works buildin export PostScript, Encapsulated PostScript exporter
export_redac197 works buildin export export netlist to Racal-Redac
export_spice474 works buildin export SPICE netlist exporter for circuit simulation
export_svg236 works buildin export Scalable Vector Graphics exporter
export_systemc288 works buildin export export netlist to Systemc
export_tango213 works buildin export export netlist to Tango
export_tedax221 works buildin export export netlist as a tEDAx netlist block
export_tedax_footprint242 works buildin export export sheet to tEDAx silk footprint for use on a PCB
export_tinycad265 works buildin export export netlist to TinyCAD
export_xmlnet273 works buildin export export netlist to generic XML
extobj_chart799 works buildin feature extended objects: block, arrow
funcmap1746 works buildin engine Handles alternate functionality of device ports (e.g. MCU pins)
gui1461 works buildin gui sch-rnd-specific GUI elements
hlibrary_fs76 works buildin symlib access libraries of hierarchic child sheets stored on the local file system
io_altium2472 works buildin io Load schematics from altium schdoc
io_bxl2499 works buildin io Load symbol from BXL format.
io_easyeda3605 works buildin io Load easyeda schematics and symbols
io_eeschema5201 works buildin io Load schematics and symbols from KiCAD's eeschema formats.
io_geda1313 works buildin io Load schematics and symbols from gEDA format.
io_lihata1629 works buildin io Load and save the schematics and symbols in the native lihata format.
io_ngrp_fawk259 works buildin io non-graphical schematic sheets in form of fawk scripts.
io_ngrp_tedax301 works buildin io Load non-graphical schematic sheets in tEDAx format.
io_orcad6336 works buildin io Load schematics from OrCad dsn
io_tinycad1511 works buildin io Load schematics from TinyCAD .dsn xml format.
lib_alien625 works buildin io Format-independent helper functions for reading alien files
lib_anymap383 works buildin export Common code usable for map-like engine plugins
lib_attbl749 works buildin export Helper functions for importing/exporting attribute tables
lib_nanojson15 works buildin io Wrapper around the nanojson library so multiple plugins can use it
lib_netlist_exp102 works buildin export Helper functions for exporting netlists
lib_ngrp296 works buildin io Helper functions for handling non-graphical sheets
lib_plot671 works disable-all gui subdialog for plotting and navigating graphs
lib_target136 works buildin export Helper functions for implementing target plugins
lib_tedax127 works buildin io Helper functions for implementing parsing and writing tEDAx files
lib_ucdf13 works buildin io Helper functions for reading (unpacking) ucdf files
place137 works buildin feature place complex objects such as terminals from template
propedit2268 works buildin feature List and edit properties of a group of objects.
query4336 works buildin feature sch-rnd query language: execute expressions on objects and rules for the programmed drc.
renumber379 works buildin feature Systematically change the name of selected symbols
sch_dialogs6669 works buildin gui Standard schematics editor dialog boxes
sim1667 works buildin feature abstract differences of circuit simiulation implementations, provide an unified interface (infrastructure, CLI and actions)
sim_gui2165 works buildin feature GUI for the the a unified high level simulation interface
sim_ngspice474 works buildin feature ngspice specific execution glue (for the GUI)
std_cschem399 works buildin engine Handles: component connect
std_devmap748 works buildin engine Handles slotting, device mapping and port mapping
std_forge2109 works buildin engine Handles: attribute forging
std_tools1825 works buildin feature Tools for drawing standard cschem concrete primitives
suite483 works buildin feature Suite integration: features spanning across tools in the suite
symlib_fs119 works buildin symlib access symbol libraries stored on the local file system
symlib_local697 works buildin symlib access symbol library stored within the sheet
target_none46 works buildin engine Display original names
target_pcb187 works buildin engine Attribute transformations for the PCB workflow
target_spice1138 works buildin engine Attribute transformations for the SPICE workflow

Classes

Each plugin implements a class (rarely a set of classes). Classes are:
name description
feature random features directly accessible for the user, usually actions
lib support code library for other plugins (core doesn't depend on these); functionality not directly accessible for the user but other plugins may depend on it
import load alien formats into the design space
export save (parts of) the design space in alien formats
io native file format (save & load) implementation

Status

Common status column values mean:
name description
works production quality code - configures, compiles, tested
WIP work in progress: the plugin may be avaialble for testing but is not yet production quality
abandoned unmaintained plugin; may be in working condition but there is no developer supporting it
deprecated legacy plugin scheduled for removal; may still work but will soon be removed; if your workflow depends on it, please report ASAP

Plugin dependency map

sch-rnd plugin dependency graph