Object Linking and Embedding

Object Linking and Embedding or OLE is a mechanism that allows applications to have some of their data edited by an external editor. For example: an email program must, at some point, allow its users to type the text of a new email. It could implement its own flat text editor, but it could also make use of an existing text editing application. Such an application is usually already present. For RISC OS the Edit application is built-in, and most users have either StrongEd or Zap available. The mail program sends the existing data to the text editor, the user edits the text, and when finished, the editor sends the data back to the mail program.

Advantages of OLE:
 * The main application does not have to implement an editor for the data types for which an external editor is available.
 * The editing interface for that data type is the same for all applications. If each application had its own editor, then the user would have to learn all the different interfaces.
 * The user can select his favorite editor for a specific data type, and whenever an application needs to edit that data, the user gets to use that editor. This is complete with all the features of that editor. So rather than having to struggle with the limited features of an editing function that is built into an application, the user always has the most powerful editing tool available.

The OLE principle is not limited to flat text. It can also be used e.g. for Draw files, tables, sprites, etc.

OLE on RISC OS
There have been various efforts to make the power of OLE available for RISC OS. Computer Concepts invented a messages protocol for its own applications around 1993, most notably Impression and Artworks (citation needed). There is also the External Edit protocol designed by Jason Williams in 1992, which is not as widespread.

For OLE to work for a specific data type, there must be an editing application that supports the protocol to work as an OLE server, and the client application must implement the client side of the protocol.

For the (very common) case that there is an editor but it does not support OLE, there is the OLESupport module, which pretends to be a server and communicates with the client via the protocol, and on the other side calls on the editor. This in principle gives OLE support for any data type for which there is an editor, but the support is limited.

Known OLE Servers
The following editors are know to work as OLE server:
 * Text files (type &amp;FFF)
 * StrongED
 * Zap

OLE Specification
Unfortunately documentation for the OLE protocol is rather sketchy. The details are mostly defined ad-hoc, by the way existing applications behave. This gives a bit of a hurdle for programmers wanting to use OLE for their application.
 * See main page OLE Specification

External Edit Specification

 * See main page External Edit Specification

Documentation (both in flat text and Impression document format) can be found in extedit102.spk