Fortunately PCB already had a strong infrastructure supporting this idea. It has dynamic loadable plugins and the GUI and exporters are in separate HID modules. While working on pcb-gpmi and later pcb-rnd, I added the gpmi module as a separate plugin.
As of version 1.0.8 a cosiderable chunk of core code has been moved into core plugins. A core plugin is just a plugin that is maintained together with the core, in the same repository, still the code is somewhat detached from the core. More importantly, the user can choose, for each plugin, separately:
I believe such modularization has benefits on multiple levels:
|
(Red means the plugin doesn't really work).
module | size [sloc] | status | configure default | description |
---|---|---|---|---|
autoplace | 608 | works | buildin | Automatically place elements. |
autoroute | 4177 | works | buildin | Automatically route selected or all rats. This is the original autorouter. |
dbus | 438 | disabled
(TODO: needs scconfig support) | disabled | Remote control PCB using DBUS. |
djopt | 2315 | works | buildin | Various board optimization algorithms. |
export_gcode | 2450 | works | buildin | Export to gcode |
export_lpr | 96 | works | buildin | Export to lpr (using export_ps to generate postscript) |
export_nelma | 683 | |||
export_ps | 1608 | works | buildin | Export postscript or embedded postscript. |
gpmi | 2992 | works | buildin
(if gpmi is installed) | Scriptable plugin system with about 10 scripting languages supported and dynamic load/unload of scripts that can manipulate the GUI, the board, can implement exporters, etc. |
import_edif | 3578 | works | buildin | Import code for netlists in the EDIF format. |
import_sch | 255 | works | buildin | Imports element and netlist data from the schematics (or some other source). |
mincut | 886 | works | buildin | Use the minimal cut algorithm to indicate shorts: instead of highlighting two random pins/pads, try to highlight the least number of objects that connect the two networks. |
oldactions | 53 | works | disabled | Random collection of old/obsolete actions. Bell(): audible feedback; DumpLibrary(): print footprint library on stdout |
puller | 1878 | works | buildin | Pull traces to minimize their length. |
renumber | 218 | works | buildin | Renumber elements (renaming them) and generate a text file for back annotation. |
stroke | 124 | partially works (doesn't work with lesstif; works with the gtk hid, but there's no zoom bindings) | disabled
(requires libstroke installed) | Gesture recognition with libstroke. |
toporouter | 6161 | fails
(infinite loop in gts) | disabled | Automatically route selected or all rats using a topological algorithm. This is the new autorouter from 2009. |
vendordrill | 567 | works | buildin | Vendor drill mapping. |