Welcome to libsx, the simple X library. Libsx is an attempt to simplify the vagaries of programming under X windows, making it simple to create user interfaces for programs. With libsx, 10 lines of code may be all you need to create a user-interface complete with many different types of widgets. Libsx is layered on top of the Athena widget set and basically acts as a front end to all the Athena and Xlib garbage so that programming reasonable interfaces isn't so painful. For example, libsx has a simple to use one-line string entry widget that you can create with a single function call (it's based on the Athena text widget but hides all the gory details). Libsx encapsulates the common operations people usually want to perform in a window system and makes them easy to accomplish (at the loss of some flexibility). If you've ever wanted to just open a window with a few buttons and draw some graphics, but were turned away by the complexity of trying to do that, then libsx may be your ticket. Libsx is capable of easily creating many types of user-interface components each with a single function call of a few arguments. The library supports the following Athena ``widgets'': -- Labels -- Buttons -- Toggle buttons and Radio buttons -- String Entry areas -- Scrolling Lists -- Menus -- Scrollbars -- Drawing Areas -- Text Edit boxes The goal of libsx was to make the creation and manipulation of each of these items as simple as possible. The standard simplicity litmus test is a "Hello World" program, which in libsx is: #include "libsx.h" main() { MakeLabel("Hello World"); MainLoop(); } More complicated interfaces use a similar style of creation and complete applications usually require less than 30 lines of code to create an entire user interface complete with menus, buttons, string entry widgets, etc. For example, to create an application that opens a window with a drawing area and a ``Quit'' button, all one must do is: #include "libsx.h" main() { Widget quit_button, draw_area; quit_button = MakeButton("Quit", quit, NULL); draw_area = MakeDrawArea(500, 500, draw_stuff, NULL); SetWidgetPos(draw_area, PLACE_UNDER, quit_button, NO_CARE, NULL); MainLoop(); } So in only a handful of lines of code, we created a simple X application that would have required inordinate amounts of code using traditional methods. All that is required now is for the user to write the routines ``quit'' and ``draw_stuff''.