SXEmacs is a powerful, extensible editor. The traditional way of extending the functionality of SXEmacs is to use its built-in Lisp language (called Emacs Lisp, or elisp for short). However, while elisp is a full programming language and capable of extending SXEmacs in more ways than you can imagine, it does have its short-comings.
Firstly, elisp is an interpreted language, and this has serious speed implications. Like all other interpreted languages (like Java), elisp is often suitable only for certain types of application or extension. So although elisp is a general purpose language, and very high level, there are times when it is desirable to descend to a lower level compiled language for speed purposes.
Secondly, elisp (or Lisp in general) is not a very common language any more, except for certain circles in the computer industry. C is a far more commonly known language, and because it is compiled, more suited to a wider range of applications, especially those that require low level access to a system or need to be as quick as possible.
This manual describes a way of extending SXEmacs using dynamic sharable objects (DSOs aka dynamic loadable modules aka dynamically loadable libraries, or just simply shared objects), which can be written in C or C++ (or more generally in anything that can be compiled to native object code on platforms that support shared objects). After the build, they can be loaded into SXEmacs at any time.
SXEmacs emodule support is detected and enabled during configure time by default on all systems that support loading of shared objects, provided libtool and libltdl is properly installed. From a users perspective, the internals of SXEmacs emodules are irrelevant. All a user will ever need to know about shared objects is the name of the shared object when they want to load a given emodule. From a developers perspective though, a lot more is provided.
The rest of this document will discuss the actual mechanics of SXEmacs emodules and work through several of the samples. Please be sure that you have read the SXEmacs Internals Manual and understand everything in it. The concepts there apply to all emodules. This document may have some overlap, but it is the internals manual which should be considered the final authority. It will also help a great deal to look at the actual SXEmacs source code to see how things are done.