The eNTiDi applications are usually based on the GTK+ library stack. They are developed in plain C using the object-oriented paradigm provided by the GObject facility (yes, OOP in C is possible). This approach keeps open the possibility of reusing the code in other programming languages by providing only the missing glue (that is, using the so called bindings).
Some of our project is based on this stack:
- a non-interactive cairo canvas based on cairo specifically designed for generating 2D mechanical drawings; Lua bindings are availables and can be found under the same web site;
- GTK+2 panel
- a panel entirely based on the GTK+2 stack, a useful alternative for embedded system or dedicated machines;
- NtD libraries
- a collection of experimental GtkWidget (the ntd-widgets subproject) and GObject classes (the ntd-data subproject) shared among some eNTiDi project .
- a project that provides three different interfaces for programming embedded chips through In System Programming protocol (ISP): a GObject based library, a command-line utility and a GTK+3 front-end.
When feasible other open source projects are also used. Most of them are built around the same stack, just to keep low the number of dependencies on the final project. The following list contains the ones used more often (description excerpted from their home pages):
- A powerful, fast, lightweight, embeddable scripting language. It combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping.
- a data abstraction layer. It can manage data stored in databases and can be used by non GNOME applications, it depends on the GLib (and integrates with it), and LibXML.
- GOffice is a library of document-centric objects and utilities building on top of GLib and GTK+ and used by software such as Gnumeric.
- A collection of drivers for a variety of common data acquisition plug-in boards. The drivers are implemented as a core Linux kernel module providing common functionality and individual low-level driver modules.
- A user-space library that provides a developer-friendly interface to Comedi devices.