This library fills the almost empty niche of user interface frameworks for text-based terminal applications. While graphical user interfaces have proliferated dramatically, their terminal equivalents have been largely left behind, creating a shift to graphical interfaces in pretty much all applications currently under development. This is rather unfortunate, as the graphical frameworks are considerably larger and slower. There is also the concern of being locked in to the continued use of X11, a large beast by itself, and whatever GUI framework has been chosen. Finally, most applications do not really need the advanced capabilities of graphical display and could just as easily be ran from the text console without launching X at all.

Back in the "good old days" of DOS, there were numerous text-based applications; word processors, spreadsheets, file managers, finance trackers, telnet clients, and even games. These applications demonstrated that usable and attractive interfaces are entirely possible to implement in text mode. In Linux, things have not gone quite so well. Due to a lack of a decent terminal output library (curses is not one of those), text mode applications look and act rather poorly under Linux. Some support only monochrome output, most accept only alphanumeric keys as input, and all keep a flashing cursor around even when nothing is focused.

In the UltraText library you will find the necessary tools for creating beautiful and usable text-mode application in the prevalent visual style of the last days of DOS. That style is typified by Borland's TurboVision toolkit, although only a few applications actually used that toolkit. It features a look similar to what we find in GUIs today; windows, menu bars, dialogs, interactive input fields and other UI elements.

From a programmer's point of view, I have tried to create an interface similar to that of Microsoft Foundation Classes, with the document-view architecture and an event-driven environment that takes care of the low-level details of output rendering, focus management, event routing, and error reporting.


To start with you'll need a decent compiler. gcc 3.4 or later is required to compile. Then you'll need to download UltraText and its prerequisites:

After installing uSTL and UTIO, unpack UltraText and run:

make install

configure is not autoconf, but rather a custom program with similar functionality. ./configure --help lists available options. You might want to specify a different installation prefix with --prefix=/usr; the default destination is /usr/local. Developers will want to build with --with-debug to get a lot of assert error checking, which I highly recommend. If you are the type to edit configuration manually, it's in and config.h.

Using it

Due to the complex nature of user interface specification, it is difficult to create a simple "hello world" application in a few lines. To get a UI up, you'll need to create a singleton application object and add at least one window to the root window. There will eventually be examples showing you exactly how to do this. For now, the library being still in development, there is little tutorial documentation. You can look at the doxygen-generated class reference and see if you can figure out how to use it yourself. I am sorry about that. I do have another project using this library though, a todo tracker, which may prove informative.

Bug reporting

Report bugs through the UltraText library project page with the standard bugtracker.

Hosted on Valid XHTML 1.0!